Skip to content

Work-state colours ​

With several agents running, the question is always the same: which one needs me? Ship of Tools answers it with colour. Every session row in Sessions mode and on the bottom session strip is tinted by that agent's current work state, so you scan one list instead of tabbing through panes.

Demo session rows tinted by work state; the bracketed [ready] means the session process is up, and the text after it is the reason sent with the state.
Demo session rows tinted by work state; the bracketed [ready] means the session process is up, and the text after it is the reason sent with the state.

The five states ​

The colours are the four Julia brand colours plus gray — the same palette as the helm in the logo.

ColourStateMeaningWhat to do
greenworkinga turn is runningnothing; let it work
redblockedwaiting for your answer: the agent stopped with a question for youanswer it; typing into the session clears the red
purplewaitingthe agent handed off to a peer or a long job and is waiting on the resultnothing yet; it resumes on its own
bluedonea turn you started has finished and you have not looked at itread the result
grayidlenothing running, nothing pendingnothing

One marker sits outside the five states. When an agent opens a result in your preview pane from a session you are not viewing, that session's row turns bright white with a leading ● until you switch to it. The bottom strip orders the rows on each host red, white, blue, green, purple, then gray, so what needs you comes first.

A working stamp that is not refreshed for a while is dimmed as stale, so a session that died mid-turn does not look busy forever.

Where the colours come from ​

A row's state is not a single value the agent sets; it is a small set of facts reduced by priority:

  • hook events mark each turn's start and end (and who started it — you, or a message from another agent);

  • the agent's own declarations — working, blocked "question", waiting "on what", done, idle — set or clear a question, a wait or a done flag. waiting clears an open question (it says nothing needs you), and a blocked or waiting with no text, and none of its own already on the row, is refused.

The display picks the highest-priority fact that holds: a dialog that waits on you is red, even while its turn runs; an open question with no turn running is red; otherwise a running turn is green; otherwise a wait is purple; otherwise an unread result is blue; otherwise gray. So red always wins, and typing into a session (which starts a turn you own) clears both red and blue. A Codex session's permission request raises the dialog. For a Claude Code session, which sends no event when a dialog shows, the backend reads the session's screen every five seconds, on every system, whether a turn runs or not: a background agent's permission prompt after the session's turn has ended reads red too, and so does a menu you open (/model, /resume) until it closes.

These facts live in the comm registry, next to each session's handle, which is why another agent — and every frontend attached to the backend — sees the same colour you do. The declarations are sent with comm-status.sh; see The comm relay.

The per-entity provenance colours (who edited this function, is it accepted) are a separate, not-yet-built layer: see Provenance colours (design).

An agentic development environment for Julia. Released under the AGPL-3.0-or-later, with a commercial license on request.