Seeing what your coding agent is actually doing
The workflow that arrived with coding agents is several of them at once: one refactoring, one writing tests, one reading a codebase you have never seen. The failure mode arrives with it. Four panes are open, three are thinking, one has been waiting twenty minutes for you to answer a yes/no question, and there is no way to tell which without clicking through them.
A terminal cannot help you by default, because it does not know what is in the pane. It has a PTY with bytes coming out of it. Whether those bytes are a compiler, a REPL or an agent waiting on approval is not something it models.
What people do about it now
- Notification hooks. Claude Code and most agent CLIs can run a command on events, so you can fire a desktop notification when one stops. This works, and it is the best free option — it needs configuring per agent, per machine, and it tells you something finished without telling you which pane.
- Terminal bell plus a visual flash. Coarse: everything rings the same bell.
- A tmux status line hack that greps the pane's output. Fragile, and it breaks whenever the agent's output format changes.
- Clicking through the panes. What almost everyone actually does.
Why detection is harder than it looks
The obvious approach — look at the process name in the pane — fails immediately in practice. Agents are launched through wrappers: npx, uv, a node shim, a virtualenv's bin directory. The process you find is node, or python, and the interesting name is somewhere up or down the tree, or in argv.
Then there is state. “Busy” is not one bit. An agent that is working, an agent that is waiting for you to approve a tool call, and an agent that failed are three completely different things to a person glancing at a screen, and only one of them wants their attention right now.
What per-pane agent status looks like
Cross Platform Terminal reads the process tree and argv, so an agent is found even behind npx, uv, node or a virtualenv shim. A pane running one gets a badge naming the tool and echoing its status line.
- Recognised: Claude Code, GitHub Copilot, Codex CLI, Gemini CLI, Aider, Cursor Agent, opencode and Amp.
- Five states rather than one busy bit: idle, working, waiting for input, finished, failed.
- Tabs spin while any foreground command runs — not only agents — with a short debounce so quick commands do not flash them.
- Shift+Enter inserts a newline instead of submitting, which is the small thing that stops being small after the fiftieth prompt.
- An AI Inventory panel lists the skills, agents, commands, hooks, MCP servers and instruction files available in the repository the focused terminal is sitting in, each tagged project, user or plugin.
This is deliberately not an agent of its own. CPT does not want to be the thing writing your code — it runs the CLI you already chose and tells you what it is doing. If you want the terminal itself to be the AI product, Warp is further down that road and has a free tier.
If you are not going to change terminals
Set up notification hooks in each agent CLI and give each pane a distinct title. It is not as good, it costs nothing, and it removes most of the twenty-minute stalls.