brainstorming
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
Use when an agent is running inside Zentty or needs to discover panes, split or grid layouts, float, minimize or dock panes, open temporary command overlays, focus panes, type into or read other panes, watch agent and pane events, search earlier agent sessions in this project,
Claude Code
$ npx -y skills add dedene/zentty --skill zentty-cli --agent claude-code
Codex
$ npx skills add dedene/zentty --skill zentty-cli -a codex -y
Cursor
$ npx skills add dedene/zentty --skill zentty-cli -a cursor -y
Gemini CLI
$ npx skills add dedene/zentty --skill zentty-cli -a gemini-cli -y
GitHub Copilot
$ npx skills add dedene/zentty --skill zentty-cli -a github-copilot -y
OpenCode
$ npx skills add dedene/zentty --skill zentty-cli -a opencode -y
Windsurf
$ npx skills add dedene/zentty --skill zentty-cli -a windsurf -y
name: zentty-cli description: Use when an agent is running inside Zentty or needs to discover panes, split or grid layouts, float, minimize or dock panes, open temporary command overlays, focus panes, type into or read other panes, watch agent and pane events, search earlier agent sessions in this project, launch nested coding agents, or notify the user through the Zentty CLI.
Zentty injects a pane-aware CLI into sessions running inside the app. Use it to inspect the current terminal layout, control panes and worklanes, launch supported agents with Zentty status hooks, and notify the user when work needs attention.
Prefer the injected binary:
ZENTTY="${ZENTTY_CLI_BIN:-zentty}"You are inside a controllable Zentty pane when these are set:
test -n "${ZENTTY_INSTANCE_SOCKET:-}" &&
test -n "${ZENTTY_WORKLANE_ID:-}" &&
test -n "${ZENTTY_PANE_ID:-}" &&
test -n "${ZENTTY_PANE_TOKEN:-}"If they are missing, do not assume pane control works. Explain that the command must run from a Zentty pane, or use ordinary shell behavior.
"$ZENTTY" version "$ZENTTY" list --json "$ZENTTY" list panes --json "$ZENTTY" list panes --worklane-id "$ZENTTY_WORKLANE_ID" --json "$ZENTTY" select pane --pane-index 2 --shell
Use `--include-control-token` only when you need to control a pane from outside its own environment:
"$ZENTTY" list panes --worklane-id "$ZENTTY_WORKLANE_ID" --include-control-token --json
The token only authenticates. From outside the pane, pass the target too:
"$ZENTTY" pane focus --pane-id "$PANE_ID" --pane-token "$PANE_TOKEN"
Common pane actions:
"$ZENTTY" split right "$ZENTTY" split down --equal "$ZENTTY" hsplit --ratio 70 "$ZENTTY" vsplit --pane-index 2 "$ZENTTY" pane focus 2 "$ZENTTY" pane focus left "$ZENTTY" pane resize 60% "$ZENTTY" pane zoom "$ZENTTY" pane fork "$ZENTTY" pane fork 2 --down "$ZENTTY" layout thirds "$ZENTTY" layout reset
`pane fork` branches the agent conversation in a pane into a new pane that runs the agent's own fork command, leaving the original running. It opens to the right by default (`--down` or `--worklane` to change that), prints the new pane ID, and fails with a reason when the agent can't fork or hasn't reported a session ID yet.
Create grids carefully; large grids create many live panes:
"$ZENTTY" grid 2x2 "$ZENTTY" grid 2x2 --new-only -- codex "$ZENTTY" grid 2x3 --worklane-id new -- claude
Type into a pane, press keys, and read its screen. The destination of `send` and `send-key` must be named; to target your own pane, pass its ID. Both refuse while an agent in the target pane is mid-turn or showing an approval, decision, or sign-in prompt, because input could answer that prompt for the user. Wait for it, and pass `--force` only when the user asked you to. `send-key ... C-c` and `Escape` always go through. Empty text is an error; multi-line text is always sent as a paste.
"$ZENTTY" pane send 2 -- npm test "$ZENTTY" pane send 2 --no-enter -- "draft text" printf '%s\n' "$PROMPT" | "$ZENTTY" pane send 2 --paste "$ZENTTY" pane send-key 2 C-c "$ZENTTY" pane send-key 2 Escape "$ZENTTY" pane read 2 --lines 40 "$ZENTTY" pane read 2 --scrollback --json
Wait for something to happen instead of polling the screen:
"$ZENTTY" events --json --type agent.phase --type attention
Each line is `{"v":1,"type":...,"ts":...}` plus fields such as `pane`, `agent`, `phase` (`running`, `needs-input`, `idle`, `exited`, ...), `interaction`, and `attention`. The first line is `stream.ready`; every change after it is reported. An unknown `--type` fails. Stop reading (or kill the process) when you have what you need.
When the user refers to earlier work ("the fix we did last week", "what did we decide about the cache"), search Agent History instead of guessing:
"$ZENTTY" history search "cache invalidation" --json "$ZENTTY" history show "$SESSION_ID" --turns 40 --json
Search takes `agent:`, `repo:`, `branch:`, `before:YYYY-MM-DD` and `after:YYYY-MM-DD` along with plain words. Pass a result's `sessionId` to `show` to read its last turns, oldest first. Add `--agent` with the result's `agent` if two agents could share that ID.
A pane can leave the tiled layout and float above its work
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
Ask which skill or flow fits your situation. A router over the skills in this repo.