Skip to content
UseAgent star-knot markUseAgent
Esc
navigateopen⌘Jpreview
On this page

Session view

The screen where a run comes alive. A structured timeline grammar plus a side rail of surfaces for the browser, terminal, files, diffs, agents, editors, and workpieces.

The session view at /session/:id is where you watch and steer a run. It renders the canonical event log through a consistent visual grammar, and hosts the panes that show the run’s environment.

The timeline grammar

Nothing in the timeline is raw JSON. Every step renders as a purpose-built card or row, so a run reads like a structured narrative:

Element What it shows
Work-entry row A tool call: icon, heading, a preview, a status, and an expandable body with the full output.
Reasoning disclosure A collapsible thinking segment, with a shimmer while it streams.
Context-recall fold The receipts for a turn: which skills, playbooks, memory, and knowledge were pulled in, folded behind a summary like “5 memory, 7 knowledge, 1 playbook”.
Plan and todo cards A proposed plan or checklist, rendered as a disclosure.
Approval cards A gateway or provider-native permission request, with Approve and Deny wired to the approval lane through an optimistic pending-to-resolved transition.
Question card A provider-native question that blocks the turn until answered. It is not a new user message or run.
Context-window meter A slim ring meter for the turn’s context usage, with a hover detail of percent and used versus maximum tokens.
Per-file diff A unified diff with a changed-files index and line stats, drawn only from patches recorded in the step payload.
Git chip A compact owner/name:branch badge for the run’s bound repositories.
Queue and status pills Pending input, background work, and sync state.
Provider status banner A slim notice when the selected engine is not in the ready set.
Failure banner A quiet, one-line thread-level error when a run fails to start or crashes.
Artifact card A published artifact, shown after the answer text.

Within a turn the order is deliberate: the work happens first, the answer comes after. Repeated tool calls fold together while preserving their identity, so a long run stays scannable.

The side rail

The right side of the session is one rail with seven surfaces. A surface chooser offers five of them (Browser, Terminal, Files, Diff, Agents); the rail also carries Editor and Workspace tabs:

Browser

The sandbox desktop over noVNC (Xvfb, XFCE, x11vnc, noVNC), bridged through the authenticated /api/desktop-proxy so the preview token never reaches the browser. For runs that drive a GUI.

Terminal

The run’s command steps stream as $ command lines with their captured output. While the thread is live, an interactive shell attaches to the thread’s sandbox PTY over WS /api/runs/:id/terminal, so you type into the same filesystem the agent works in.

Files

A streaming list of the files and artifacts the run produces, with file-kind badges.

Diff

Unified diffs drawn from real recorded patches. Available only when a real patch exists.

Agents

Status rows for nested subagent runs; clicking a row opens a per-agent slide-over pane. Child sessions queue as serial turns on the thread, never in parallel.

Editor

A tab strip of every file the run touched, over an honest detail view: the real body when the engine mirrored it, never fabricated source.

Workspace

Bounded workpiece editors for a document, spreadsheet, presentation, or PDF, read-only for a produced artifact or live with save and export.

Live updates and recovery

The session subscribes to a single thread-scoped SSE stream. On reconnect it receives a fresh durable snapshot rather than replaying from zero, so a flaky network resyncs cleanly. If the backend restarts under a live run, restart reconciliation re-probes the sandbox and streams the interim events back with a heartbeat. See Events and streaming and Sandboxes.

Was this page helpful?