Skip to content

Worker Views (v1)

Starting in v0.16.0, the Ink REPL renders a chip strip along the bottom of the screen showing the coordinator plus every spawned worker. You can switch between transcripts without leaving the REPL.

Worker views are read-only in v1. Typing in a worker view and pressing Enter surfaces a quiet hint and is never sent anywhere. Steering (sending prompts to a specific worker) is planned for v2.

What you see

  • A horizontal strip of chips, one per view, anchored above the input area
  • The active view is highlighted; chips reflect each worker's live status
  • The coordinator is always the leftmost chip
  • Ghost chips appear for workers that ran in a prior session (after --resume); their transcript is lazily loaded the first time you switch to them

When no workers are spawned, the strip is hidden entirely so the coordinator-only flow is unchanged.

Per-worker transcripts

Each worker has its own append-only NDJSON transcript file (one .ndjson per worker), aggregated from the worker's SDK events by WorkerTranscriptStore and persisted via NDJSONTranscriptPersistence. Switching views just re-reads the corresponding transcript — there is no live tail-following yet.

On --resume, ghost chips are re-hydrated from session metadata for any workers that previously persisted a transcript. The transcript itself is lazy-loaded the first time you switch to that view (via a reverse-byte-scan loadTail), so resume stays fast even when historical workers accumulate.

Switching views

ActionBindingNotes
Cycle next viewCtrl+] (canonical)reliable across terminals
Cycle previous viewCtrl+[ (canonical)reliable across terminals
Cycle next / prev (opportunistic)Ctrl+Tab / Ctrl+Shift+Tabterminal-dependent — many terminals swallow these
Return to CoordinatorEsconly fires when the input buffer is empty
Focus the chip stripCtrl+Gnavigate with / , Enter to switch
Dismiss the cursor chip (strip-focus)d or Deleteonly for completed / failed / killed workers
Dismiss all terminal chips at onceShift+Dskips the active view; toast pinned to coordinator
Switch to a named view/view <name>accepts agent id, display name, or prefix
List available views/viewalso marks the active one
Enter strip-focus from input/view focusequivalent to Ctrl+G

Ctrl+] and Ctrl+[ are the canonical bindings — they map to ASCII 0x1D / 0x1B and are reliably emitted by virtually every terminal. The Ctrl+Tab family is documented as opportunistic because many terminals (and some multiplexers) intercept it before it reaches the application.

Strip-focus mode

Ctrl+G (or /view focus) enters strip-focus mode: the chip strip becomes the keyboard-focus target and the input is gated.

KeyEffect
/ Move the cursor between chips (wraps)
EnterApply the cursor as the active view and exit focus
EscExit focus without applying
d / DeleteDismiss the cursored chip (subject to the rules below)
Shift+DDismiss all terminal (completed / failed / killed) chips at once; the active view is preserved

Dismiss rules

Dismissing a chip removes it from the strip. Dismissal is refused — with a dim transcript hint — in the following cases:

  • Coordinator chip — the coordinator can never be dismissed
  • Currently active chip — switch away first (Ctrl+] or /view <name>), re-enter strip-focus, then dismiss
  • Worker still running — stop it first with /stop <agent-id> or wait for it to reach a terminal state (completed / failed / killed)

After a successful dismissal the cursor moves to the next surviving chip (falling back to the coordinator if none remain).

Dismiss-all (Shift+D)

Shift+D from strip-focus dismisses every chip in a terminal state in one shot, skipping the chip that is currently the active view. It is a convenience wrapper around the per-chip d rule — no chip is dismissed that could not also be dismissed individually.

A short toast confirms the result (⊘ Dismissed N chip(s) or ⊘ No chips to dismiss). The toast is pinned to the coordinator transcript, so if you trigger Shift+D while viewing a worker transcript, switch back to the coordinator (Ctrl+]) to see the confirmation.

Caps Lock note. Pressing D triggers dismiss-all regardless of how the uppercase character was produced (Shift+d or CapsLock + d). This is a documented limitation of Ink's useInput: it cannot distinguish Shift from Caps Lock for letter keys. If you keep Caps Lock on and want to single-dismiss the cursor chip, use Delete instead of d.

Read-only behaviour

  • The input prompt prefix changes to indicate the active worker view (e.g. 👁 worker-3 ❯)
  • Pressing Enter on a non-empty buffer in a worker view shows a transcript hint and does not call messageBus.send or session.send
  • Slash commands (e.g. /help, /view) still work in worker views
  • The hint is recorded as a quiet entry — it does not trigger transcript saves

When at least one worker chip is present, a single dim line appears just above the identity bar:

  Ctrl+] views • /view <name> • read-only in v1

When no workers are spawned, the hint is hidden so the coordinator-only flow remains uncluttered.

See also

  • /help — full keybinding reference
  • commands-manual.md — slash command reference