Agent wall
The agent wall shows every pane in the window as a card. Open it with Ctrl+Shift+A, or by clicking the agent counter in the top right. Click a card and you're in that pane.
Each card names the agent, the directory it's in, the model it's running and what it's doing right now. Cards are grouped the way your tabs are, and the chips across the top narrow them by group, by program and by state, so twelve agents can come down to the two that are blocked.
A Claude agent's card also carries three bars, read from its own transcript: how full its context is, how worn it is, and how much of what it's holding is still about the task. When those add up to STOP or HAND OFF, the card turns up a red CALL chip and a ⚠, because those two need a person to decide.
Story explains the three bars. Technical has how each is computed.
Three bars
An agent works like someone at a desk. Everything it reads stays in front of it: the files it opened, the command output, your messages. CTX WINDOW is how much of the desk is covered. When it's nearly full, Claude Code clears it and keeps a summary. That's called compacting, and it throws detail away.
A clear desk doesn't make a fresh worker. Someone eight hours into a shift, whose desk has been cleared twice, who keeps rerunning the command that failed and reopening files they read an hour ago, is tired. FATIGUE looks for exactly those signs in the transcript: how long the agent has been going, how many times it was compacted, whether its errors are climbing, whether it repeats itself, whether its answers are getting slower.
The desk can also be full of the wrong things. An agent that spent the morning on the database and the afternoon on the login page is still carrying the database files, and it rereads them every turn. RELEVANCE is the share of the desk that's about what it has been doing since you last spoke to it.
Read together, the bars say what to do next. A worn-out agent should stop, since a new session starts cleaner than this one continues. One whose desk is full of work it's still using should hand off, because compacting would throw that work away. One whose desk is full of old papers can simply compact. Only stopping and handing off are your call, so only those two light up the card.
Cards, bars and the call
Opening it#
- Ctrl+Shift+A from any pane.
- The agent counter in the top right of the window. It counts
▶working,‖blocked,✕error,✓finished,○idle and?unknown, and fills a cell only when that state needs you. AGENTS · MCP, first in the…menu.
Click outside the panel to close it. Clicking a card focuses that pane, switches to its tab and closes the wall.
The header#
AGENT WALL, then Δ (tokens this turn) and Σ (tokens this session) for the whole fleet, and two buttons: </> savings for lean-ctx's token savings and Σ usage for the usage card. Below them, the MCP server's switches (on or off, which panes to expose, tool-call events, writes) and the card-size slider, which scales every card from 0.7 to 1.6 and applies to the graveyard too.
Filters#
| Row | Chips |
|---|---|
| Group | ALL, one per tab group, Ungrouped |
| Program | ANY PROGRAM, then one per program present: CLAUDE, CODEX, SHELL, REMOTE, or the program's name |
| State | ANY STATE, then ▶ WORKING, ⏸ BLOCKED, ✕ ERROR, ✓ DONE, · IDLE, ? UNKNOWN; a state with no agents gets no chip |
State comes from the agent's own status line on screen. Blocked and error need you. Unknown means the screen matched no rule, and it's counted apart from idle rather than guessed into it.
A card#
- title
◈if the pane is exposed to MCP,◇if not; a red⚠when it needs you; the pane's name, else its terminal title; the program.- directory
- The last part of its working directory, as
project/. - picture
- The directory's logo, or a small scene of the tool the agent is using right now, with a caption. With neither, the name's initials over the group colour. The picture is warped like a tiny CRT.
- agent chip
- Model family and effort, e.g.
OPUS · MAX, from the transcript; else the--modelit was started with. A shell showsSERVICE. - middle
- The three bars, when there are any. Otherwise the agent's latest lines, or a shell's directory.
- corner
ΔandΣtokens, read from the agent's status line, and the state. When the status line shows no count,Δcurrently readsΔ0rather than unknown (issue 800).
The bars#
Each bar's length is its number; its colour only says which end is bad. Every one is read from the whole transcript, not the tail.
| Bar | Measures | Turns red |
|---|---|---|
CTX WINDOW | Tokens in the context on the latest turn (input plus cache writes plus cache reads) over the model's limit: 1,000,000 for a [1m] model, otherwise 200,000. | from 60%, fully at 98% |
FATIGUE | A weighted sum: compactions and what they dropped (0.28), tool errors climbing (0.18), repeated calls (0.18), slowing turns (0.14), rereading what it already had (0.12), hours on the clock (0.10). The heaviest part is the reason given. | from 55%, fully at 78%; healthy agents read 14 to 25% |
RELEVANCE | Of the tool results still in the context, the share about files touched since you last typed. Off-topic results count at 0.35; results superseded by a later read or that errored count at nothing. | at 45% and below; green at 65% and above |
Relevance is a proxy, and it's labelled as one. A transcript with no answer from the agent yet draws no bars at all, rather than three empty ones.
The call#
Checked in order; the first that matches wins.
| When | Call |
|---|---|
| fatigue ≥ 70% | STOP |
| window ≥ 85% and relevance ≥ 65% | HAND OFF |
| window ≥ 85% | COMPACT |
| window ≥ 60% and relevance < 45% | COMPACT |
| off-task context ≥ 120k tokens, or a quarter of the limit if that's more | COMPACT |
| ten turns or fewer before 92% full, at its recent rate | WATCH |
| window ≥ 60% or fatigue ≥ 45% | WATCH |
| otherwise | RUN |
Only STOP and HAND OFF show on the card, as a red CALL. 92% is where Claude Code starts compacting on its own. terminal-delight agent-vitals <transcript.jsonl> prints all of it as JSON, with the one-line reason for the call.
When bars don't draw#
- The bars refresh every ten seconds, and only while the wall is open.
- A pane draws bars only when Terminal Delight is sure which conversation it's in: the agent said so, or its process started with it, or it's the only one in that directory. A pane matched by a weaker guess shows its latest lines instead.
- Codex panes have no bars yet.
What would prove this wrong#
If a card ever draws bars from a conversation other than the one in its pane, the binding rule above has failed. The wall watches panes and never writes to a terminal, as its own footer says.
Sources
- The wall and its cards: main.rs; the bars and the call: vitals.rs, ported from td-agent-vitals.mjs; agent states: hud.rs.