cyberine
UsageRun recipes

Hub — opening runs and chats

⏎ opens the right thing for the row kind:

  • On a chat row — resumes it: the hub suspends, cyberine chat --resume <id> takes the TTY in that session's folder, and the hub returns when you exit the chat (← on an empty prompt goes back with the selection kept).
  • On a run row — opens the run AS a read-only, live-updating chat transcript (see "Opening a run as a chat" below).
  • On a folder header (folder grouping) — opens a NEW chat in that folder.

On a run row m steers a live run (type guidance, ⏎ injects it) and Ctrl+X stops it (a second press within 3 s deletes it). On a chat row Ctrl+X twice deletes the session and Ctrl+F forks it. 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. A finished run just stays displayed — no auto-close.

Keys inside the open transcript: ↑↓ scroll a line, PgUp/PgDn a page, g the top, G back to the latest line, x stop, m steer, esc/←/h back to the hub. The footer states plainly when a finished run has disabled stop/steer. RunDetail's per-worker table (with its r trajectory replay, p prompt and d diff keys) is i on a run row in the hub.