Skip to content

The viewer

The viewer is the bundled UI the CLI serves at http://127.0.0.1:4747. This page is the map: if you learn one thing from it, learn K.

K (or CtrlK) opens a palette over everything. It is the fastest route to any node, any run, and every action on this page — so you never have to hunt for a control.

TypeTo get
anythingFuzzy search across the run’s nodes and your recent runs
>Actions only (or press > to open straight into command mode)
/Opens the palette from anywhere

Arrow keys move, Enter runs, Esc closes. Selecting a node centres it on the canvas and opens the inspector on it.

Shortcuts are ignored while you are typing in a field — except K, which always works.

KeyAction
KToggle the command palette
/Open the palette (search)
>Open the palette (actions)
EscClose the palette, or deselect the current node
FFollow the active node with the camera
FFit the graph to the screen
ARe-arrange the layout (full ELK pass)
TToggle the timeline
EShow only the error path
CCollapse / expand all groups
LCopy a deep link to this view
BToggle the run list rail
DCycle the theme (system → dark → light)

When execution stops at a gate, focus moves to Continue so the keyboard is already where you need it, and four single-key shortcuts release the hold:

KeyAction
CContinue
SStep
RRetry
IInject — opens the editor; Enter sends it

Abort has no shortcut on purpose: it ends the run, and a single keystroke is the wrong amount of friction for that. Click it.

One node per logical node, lit up per execution — see nodes and instances. Nodes appear as the agent reaches them, glow while running, and turn red on failure.

  • Follow (F) keeps the camera on whatever is executing — the right default for watching a live run.
  • Fit (F) zooms out to the whole graph.
  • Re-arrange (A) runs a full layout pass. Live runs are laid out incrementally so nothing jumps under your cursor; after a long run this tidies the result.
  • Collapse (C) folds sub-agents and chains into summary cards — the first thing to reach for on a graph you cannot take in at once.

From the palette, to cut a large run down to what you care about:

FilterShows
Errored nodesOnly nodes that failed
Slow nodesp90 duration and above, for this run
Paused nodesOnly nodes currently held at a gate
Error path (E)Dims everything that is not an ancestor of a failure

Error path is the one to know: on a 200-node run it answers “what actually led here” in a keystroke, instead of you tracing edges by hand.

Filters also narrow by node kind, and Clear all filters puts the whole graph back.

T opens a waterfall under the graph. It answers the questions the graph cannot:

  • what overlapped — which tool calls actually ran in parallel;
  • where the wall clock went — the step that took eleven seconds is the widest bar;
  • how long a step waited before its first token;
  • when a gate held, and for how long.

Rows are virtualised, so a thousand bars cost the same as thirty. Zoom with -scroll, the +/−/fit buttons, or by dragging a range on the ruler. Labels stay pinned while you scroll horizontally. Timeline only hides the graph when you want the full height.

Click any node to open it: input, output, error with stack, duration, token usage, status, and every instance of that node newest-first. See inspecting a run.

Connection status, the run picker, the Run / Step toggle, Pause all, and a removable chip for every armed breakpoint — including the default pause-on-error one. See breakpoints & step mode.

The viewer’s routes are plain hash URLs:

http://127.0.0.1:4747/#/run/<runId>
http://127.0.0.1:4747/#/run/<runId>/node/<nodeId>

Both segments are URI-component encoded, so tool:issueRefund appears as tool%3AissueRefund.

L copies a link to the current view — paste it into an issue, a message, or your notes and it reopens exactly there. The MCP tools return these same links, so a coding agent can cite the precise node it is talking about.

The viewer can render three recorded runs with no server, no agent and no API key — useful for seeing what a shape looks like before you instrument anything, and for reporting a UI bug against something everyone has:

http://127.0.0.1:4747/?fixture=demo the planted-bug trip planner
http://127.0.0.1:4747/?fixture=mcp an MCP session (server / tool / resource / prompt)
http://127.0.0.1:4747/?stress=300 a generated 300-node graph, for layout and performance

?stress=<n> accepts 8–4000 nodes and takes optional &events=<n> and &pace=<ms>.

The empty state offers all three as buttons, so you do not have to remember the query parameter. A fixture is clearly badged as recorded — it is not a live run and nothing in it can be resumed.

A run brought in by graphmind import is rendered with the viewer’s “imported” treatment: history only. Nothing is executing, so there is nothing to pause, and the control affordances are not offered. graphmind demo replays a recording through the real pipeline, so it does pause for real.