Agents view — one unified list of chats (c)
Press c in the fleet list to switch into the agents view: ONE flat/grouped list where
every row is a "conversation" — either a dispatched run or a stored chat session — not
two separate screens. This is the agents-as-chat model: 1 agent = 1 chat, one list, one control
set. Internally the merged list is built by buildConversations(runs, chatSessions)
(src/tui/conversation.ts), a read-time projection over both stores; neither store's file format
changes.
The view keeps the SAME folder-grouped layout as runs mode: one header per folder ([-]/[+]
prefix, quick-sum N runs · M chats, divider) with that folder's runs AND chats interleaved as
rows beneath (title, a run/chat kind tag, age, tokens, cost when available), live conversations
sorted first, then most-recently-updated. Collapse state (Space/←/→ on a header) and hidden
folders (H/U) are SHARED with runs mode.
↑↓/jk navigate. ⏎ opens the right thing for the row kind:
- On a chat row — resumes it: the fleet suspends,
cyberine chat --resume <id>takes the TTY in that session's folder, and the fleet returns when you exit the chat. - On a run row — opens the run AS a read-only, live-updating chat transcript (see "Opening a run as a chat" below) — reopening IS opening; there is no separate resume step.
- On a folder header — opens a NEW chat in that folder.
One manage/ping/stop surface applies to a run row (a chat row has no run to control):
x— stop the run (or reap it if its engine died and the run is a zombie).m— ping: opens the same steer panel as the runs-only list, pre-targeted at that run; type guidance and press Enter to inject it (only enabled while the run is live).
Ctrl+X on a chat row arms delete (press Ctrl+X again to delete), twice to confirm; it has no
effect on a run row (stop/reap uses x, not Ctrl+X, to avoid clobbering the delete-arm chord).
c toggles back to the runs-only list. The same chat history is also reachable headlessly via
cyberine chat sessions / --continue / --resume <id>.
Opening a run as a chat
Pressing ⏎ on a run row renders that run's work as a chat transcript — the SAME <Transcript>
component a live cyberine chat session renders, fed by runToChatMessages(run, events)
(src/tui/runTranscript.ts). One synthetic user turn per step (the step's prompt / phase title),
then each worker's tool-call trail (extracted from events.jsonl, shared with the r trajectory
replay under RunDetail) as assistant/tool turns, the worker's final output or error as the last
turn, and — for a judged multi-worker step — one system note with the winner's verdict. While the
run is still live, the currently-running worker's in-flight text streams in as one streaming
turn (the same live-tail mechanism the runs-only detail view uses). A finished run just stays
displayed — no auto-close.
Keys inside the open transcript: x stop, m ping (same steer panel as the list), esc/←/h
back to the agents list. The footer line states plainly when a finished run has disabled
stop/ping. This screen replaces RunDetail as the primary "open a run" path from the agents view;
RunDetail's per-worker table/race-bar view (and its own r trajectory-replay, p prompt, d
diff keys) stays reachable only via the legacy runs-only list's ⏎ (i.e. with the agents view
toggled OFF via c), for cases that want the raw per-worker breakdown instead of a transcript.
Fleet list — quick reply (Space)
Press Space on a run row to open a quick-reply panel pinned above the footer (Claude-Code FleetView style): a recap of the run (task, workflow, id, state, steps, age, last detail) plus an inline...
Fleet list — collapsible folders ([+]/[-]), quick-sum, hide filter
In the grouped view every folder header carries a [-] (expanded) or [+] (collapsed) indicator plus a quick-sum: <n> runs · <m> chats (muted) and · <k> live (accent) when anything is running — at a...