Skip to content

run-visualization Run graph and control room (design of 2026-10-24)

Owner request of 2026-10-24: see how runs work, also when a run starts several agents, visually. Design note: run-visualization.md. Tickets: M2-51, M4-39, M5-14.

No Date Ruling Reason
D-RV-1 2026-10-24 The run graph is an indented trace view on a shared time axis (one row per node in tree order, a bar per row), not a node-link diagram (01 D14, M12, R-PR-15). Tree and time stay readable together, the layout does not jump when nodes arrive, it scales with a virtualized list and works on a phone; a node-link layout moves on every new node and has no time axis.
D-RV-2 2026-10-24 The graph is derived from the run document alone by one pure function in packages/bothy_viz that every app uses; the server sends no graph (09 5.6, R-AG-27). All apps draw the same tree; a server view would be a second source for the same steps.
D-RV-3 2026-10-24 The Claude Code runner sets parent_step_id of a task step to the step of the tool call that started it (tool_use_id); a tool call with exactly one task child is drawn as that task's node (merge rule) (09 5.6, 18.4, R-AG-26). Only the runner knows which step belongs to a tool use ID; one node per started agent is what a person expects. Without tool_use_id the task stays at the root: less deep, never wrong.
D-RV-4 2026-10-24 A workflow task becomes kind workflow once a recording of the pinned Claude Code version names its task_type; phases appear only where the stream reports them as linked tasks (09 18.4). No guessed values in the mapping table.
D-RV-5 2026-10-24 The root shows the run cost with the live box rules; a child shows tokens only from detail.usage reported by the adapter and a cost from it only for organization, always as "Estimate"; the client never splits the run cost (09 5.6). Costs are booked per run; a split by tokens is wrong when subagents use different models.
D-RV-6 2026-10-24 The server keeps one summary step per parent, and a finished step whose only child is its summary step is removed with it into its parent's summary, so the bound stays reachable; the client collapses finished children above ui.livebox_visible_steps and never the running path (09 5.3, 5.6, R-DM-53). Merging old steps at the root would flatten the tree; the existing limits suffice, no new configuration value.
D-RV-7 2026-10-24 The control room is "Running now" (D10, M11) with cards as default and the list as second form, in its existing place (R-PR-16). One place and one permission for active runs; no new navigation item.
D-RV-8 2026-10-24 Live data of the cards comes through the optional focus member background_thread_ids for the cards visible on the screen, within sync.max_focused_threads: run document and run.updated, no typing, never "Active in the thread"; idle keeps following the window state; no overview op and no overview event (04 6.2, 11.3, 13 4.4, R-SY-27). idle is one flag per connection: true would end "Desktop active" while the person sits at the screen, false would mute notifications of every card thread; the focus already delivers the document and its patches under run.read; load stays bounded; a new event would need a new receive rule and fan-out path.
D-RV-9 2026-10-24 The stall notice is a server fact: runs.last_progress_at, marking by runs.stall_check after run.stall_after for running runs, stall_warned_at in Run and RunSummary; the runner turns tool_progress into a patch of /metrics/progress_events at most once per runner.progress_patch_interval (09 5.5, 18.4). "Stalled" must not come from a client clock; a run waiting for a person is not stalled; a long running tool must not look stalled.
D-RV-10 2026-10-24 No new action or permission rule: the graph needs run.read, the control room run.overview.read, Stop run.cancel (09 5.6). The graph shows the run document a person may already read in the live box.
D-RV-11 2026-10-24 Desktop D10 and D14, iPhone and Android M11 and M12; not in the web console and not in TV mode. The console has no chat and no run views (ADR 0028); its live view stays D12 with its own rules.
D-RV-12 2026-10-24 Each view has a list form with the same content and tree semantics; announcements only on node end and state change, rate-limited; the views are not level-a statistics views of chapter 25 (R-VZ-14). WCAG 2.2 AA as in 01 8; the statistics rules (no content, no names) stay unchanged for the statistics views.