.smithers/ pack or UI code
required. Passing a built-in oneshot run id opens that run’s dedicated monitor
instead, including live transcripts, steering, restart, and a cheap narrator
that runs only while the monitor stays attached.
10-second quickstart
bunx smthrs ui does: explicit --gateway probe, then runtime-state discovery, then the legacy port probe on --port (default 7331). It autostarts bunx smthrs gateway when none is running (disable with --no-autostart; --no-daemon or SMITHERS_NO_DAEMON=1 disables daemonized autostart), opens /workflows/oneshot?runId= for a built-in oneshot or /monitor?runId= otherwise, and prints a { opened, url, gateway, runId, view } envelope.
When the resolved gateway requires a bearer token, the printed/opened URL
routes through the gateway’s browser session handoff
(/v1/auth/session), which swaps the token for an HttpOnly cookie and lands
on the clean URL; no more 401s from browser navigations. When nothing is
reachable, the error names the runtime state file checked, the port probed,
and the exact bunx smthrs gateway --host <host> --port <port>
command to start one.
Remote access (Tailscale / SSH / LAN)
A gateway bound to loopback is unreachable from another machine. Pass--host 0.0.0.0 (or SMITHERS_GATEWAY_HOST=0.0.0.0) and the autostarted
gateway binds every interface with an auto-minted bearer token (a
non-loopback bind is never served unauthenticated). The CLI then prints one
handoff URL per dialable interface (Tailscale 100.x first, then LAN), so
the --no-open output is copy-pasteable to another machine. See
Remote access.
See Watching and steering a oneshot
for the steering engine matrix, durable delivery states, restart semantics, and
narrator cost discipline.
What you see
The overview is organized around triage: what needs you first, what is running now, and the operational numbers last.- “Needs you” band: pending approvals, human-parked runs, and failures from the last 24 hours, first on the page. Each section is row-capped and the rest collapses to “+N more”. Approvals decide in place (arm, then confirm), both in the inbox rows and in the health strip’s inline gates.
- “Active now” band: one rich row per live run, sorted by triage priority.
- Ops footer and Debug fold: throughput and count stats sit in a demoted footer with a Metrics link, and frames plus the raw XML tree tuck behind a Debug chip until you ask for them.
- Keyboard kit:
/focuses search,j/kmove the cursor,Enteropens the cursor row,Escbacks out one level. - Run health and controls: always-on health diagnosis with one-click recovery where available, plus Pause, Resume, Cancel, approvals, and run-level Scores.
- Execution history: the live expandable tree or XML view with per-node durations, a chronological Timeline, and a frame scrubber for earlier committed states.
- Node investigation: a collapsible inspector where every section (Details, Prompt, Tool calls, Transcript, Output, Diff) unmounts when closed, so a closed Transcript stops polling in the background. The Prompt section shows the task’s initial prompt. Also live output, recorded output and tool calls, an AI “what happened” recap, scorer results, syntax-aware diffs, and an embedded PTY terminal to hijack or reopen supported agent sessions.
- Events and navigation: a filterable live event log with timestamps and follow mode, shareable
?runId=/&nodeId=deep links, and?embed=1for the embeddable run surface. - Connection truth: Live, Connecting, Offline, and Unauthorized states, each with recovery guidance.
- Launch attribution: run rows and headers show compact harness/session provenance and search it; explicit attribution prompts stay hidden from this shared dashboard and remain available only in
inspect/raw config.
How it relates to the other surfaces
The monitor replaced the retired
monitor workflow, which launched a durable agent run just to look at another run; this command observes directly through the gateway instead.