Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions docs/user/tui-and-sessions.md
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,18 @@ The dock above the composer holds everything alive outside the current turn: a `

Press `Ctrl+R` or enter the exact local command `/agents` while idle to toggle the agent roster. The roster keeps its own visibility and scroll position. The roster covers every subagent observable to the current top-level Kit process tree, whether its call is foreground or background and regardless of the focused transcript block or tool call. Direct children are tree roots, and nested Kit descendants appear immediately beneath their parent at arbitrary depth in an always-expanded tree. Siblings retain lifecycle/creation/ID ordering within each parent, so an active child remains grouped beneath an idle parent instead of moving across subtrees. A descendant whose parent event has not arrived temporarily appears as a root with `Name · via Parent` and automatically reparents when the parent arrives. Generic ACP has no portable child-session enumeration, so agents created privately inside a generic harness cannot appear unless the harness forwards compatible Kit runtime events.

Press `Ctrl+G` to move keyboard focus to or from the root agent roster. Use `Up` and `Down` to select an agent and `Enter` to inspect it, or click its row. The selected row is highlighted. On narrow terminals, keyboard roster focus exposes a compact, selectable roster.

The inspected child's view shows its name, handle, generation, and capability or lifecycle notice above its transcript. The root roster stays visible so you can select another child. Press `Esc` or click **Back to main** to return without interrupting either turn. Use `PageUp` / `PageDown`, `Home` / `End`, or the mouse wheel over the child transcript to scroll; the roster has independent scrolling.

The child composer accepts **text steering only**, and only for an active direct child that supports compatible steering. Descendants remain visible in the root roster, but their transcript route is currently unsupported and the inspection view says so; Kit does not substitute a parent's transcript. Steering is routed only to direct children. Idle, closed, unsupported, or unavailable children are also read-only; the notice explains availability and errors. There are no attachments or slash commands in the child composer. Root session commands, model changes, cancellation, and other root actions are not available from this view. Return to main to use them; your root draft is retained while you inspect children.

Kit loads **only the focused child's transcript**. Opening a child reads existing inspection history from the runtime that owns it, then continues from the same ordered cursor for live updates. Switching children or returning to main stops those reads and releases the previous child's transcript; it does not retain a collection of child transcript views. The root transcript, draft, and scroll position remain independent. Reopening a child reloads its available history rather than relying on updates previously seen by the TUI. There is no 2 MiB transcript freeze cutoff.

Inspection history is an ephemeral runtime-owned disk spool, not another in-memory transcript cache or a durable session archive. Reads use bounded pages and pause when you leave the child. Unavailable history, unsupported updates, or inspection failures are shown explicitly; return to main and reopen the child to retry a failed read. A failed history spool cannot recover omitted records merely by reopening it. Inspection failures do not stop child execution or disable root roster updates.

The spool retains observed turns across prompt generations while the owning runtime is alive. A reconnect can import the child's supplied replay, but that replay may be partial: supplied assistant text and bounded rich updates do not preserve every earlier user/thought message or their original ordering. Native forks do not supply inherited transcript replay. These cases are marked partial rather than presented as complete history. ACP does not reliably identify echoes of submitted prompts, so submitted input and harness-reported user messages are preserved separately with an explicit warning that they may repeat; Kit does not discard messages merely because their text matches. Individual inspection updates larger than 1 MiB are replaced by an omission notice; later updates continue loading. The writer queue is bounded, and queue overflow or storage failure makes the spool explicitly unavailable.

Each row uses three lines, with tree connectors and indentation continuing across all of them. The first line holds a status glyph, the vendor mark when harnesses differ, the display name, and, right-aligned, the harness, model, and generation (`claude · opus g2`), because the generation is the value the parent can `prompt` or `fork` again. The second line holds the live activity excerpt or bounded task summary; an idle reusable agent shows `idle · resumable` instead. The third line holds a six-cell context gauge, tokens used, the elapsed time of the current generation, and any reported cost. When starting or forking a subagent, the parent model preferably supplies a concise role-oriented name such as `Round 2 Implementer` or `Reviewer`; omitted or invalid names fall back to `Agent N`, and case-insensitive sibling collisions receive a numeric suffix. The glyph palette is yellow `Pulse::Child` for `starting`, cyan `Pulse::Tool` for `working`, and dim `○` for ordinary or successful `idle`. A failed reusable idle row shows a red `✗` for four seconds after its failure timestamp, then returns to dim `○`; a failed terminal or removed tombstone shows the red `✗` for four seconds, then its row is deleted. Active durations update on animation ticks, freeze when the generation becomes idle or fails, and restart for a later prompt.

A fixed footer remains visible while rows scroll, for example `3 agents · 2 working · 1 idle`; it includes the total and only nonzero `starting`, `working`, and `idle` buckets. Foreground and background are not separate buckets. Footer accounting remains lifecycle-based during the four-second grace: reusable failures count as idle immediately, while closed and terminally retired handles leave the live total immediately even while a tombstone remains visible. Idle rows remain until their handles are closed.
Expand Down
Loading
Loading