smithers oneshot command for
single-task asks. 233 commits, no breaking changes.
Smithers 0.30.0: an agentic UI kit, a triage-first Monitor, and oneshot.
Upgrading
A UI kit for the interfaces your agents build you
Every Smithers workflow can mount its own web UI, and in practice your agent builds that UI for you. What it can build just took a big step up:smthrs/ui now ships a full component library for agent runs:
chat, reasoning, tool calls, plans, approvals, checkpoints, attachments,
sources, a workflow canvas, and more.

Message, Reasoning, ToolCall (with an approval slot), MessageResponse, and Sources, composed rather than hand-rolled.

Plan with live TaskItem rows, and ChainOfThought. The agent's work reads as progress, not a log.

ApprovalCard and durable Checkpoints. Decide, or rewind, without leaving the UI.

PromptInput with attachments, upload states and progress included.
create-ui
workflow’s compliance loop is now hard-gated behind a deterministic scorer,
and a new 44-case eval suite checks that agents pick the right deliverable
shape (a report, a shipped component, or custom markup) instead of guessing.
Full catalog: UI component library reference, starting at
UI Docs by Type. Building a custom UI:
Custom workflow UIs.
Live widgets for custom run UIs
smthrs/gateway-ui adds the widgets a run dashboard needs,
each wired to the live gateway for you:
NodeChatStream: one agent’s live chat, streaming as it works.FleetTableandNodeStageStrip: a dashboard for fan-out runs (many nodes, same task shape) instead of a flat event list.RunEventLog: now structured, severity-tinted rows, coalesced heartbeats, and no raw JSON.MonitorButton: one-click deep link from your UI into the Monitor.
A triage-first Monitor
The Monitor used to answer one question, is it done yet? It now answers the question you actually have: what needs me right now?
The overview: pending approvals and recent failures in 'Needs you', live runs in 'Active now', everything else below the fold.
- Needs you: pending approvals, human-parked runs, and failures from the last 24h, with approve/deny inline.
- Active now: what is running this second.
- Operational stats move to a quiet footer; frames and the raw XML tree tuck into a Debug fold.
- A keyboard kit for mouse-free triage:
/to search,j/kto move,Enterto open,Escto back out.

Run detail: the execution tree, a structured event log, and collapsible inspector blocks that stop polling when closed.
Charts and a workflow canvas
Two more pieces for custom UIs, both shown above in spirit:
The chart adapter: validated categorical colors, correct in light and dark.

The workflow canvas anatomy: node cards, edge legends, and canvas chrome for a run's graph.
WorkflowCanvas, WorkflowNode, edge legends, controls) is
what gateway-ui’s ReactFlow renderer composes. Details:
Chart.
smithers oneshot
Not every ask needs a workflow. oneshot routes one clear task through an
implement (and optional review) pipeline with its own live dashboard:
kimi seat now runs Kimi
K3 (1M-token context). See the oneshot guide.
A hardened browser viewer
Workflows can now drive a real browser while you watch over a live screencast. Because a browser session touches arbitrary pages and keystrokes, it shipped with a hardening pass: session creation is transactional, the pinned proxy is tested against DNS rebinding, and single-keypress actions at sensitive fields are now redacted. Previously only fulltype actions were,
so a password typed one key at a time leaked into the journal. (One of this
release’s three security fixes.)
Model registry: Claude orchestrates, Kimi K3 joins
The default registry moves orchestration and gating decisions onto Claude (Opus 4.8 at medium effort), keeps Fable 5 on planning and Codex Sol on review, and moves substantial implementation work from Luna to Terra. Kimi K3 (1M-token context) is newly registered for the Kimi CLI, OpenCode, and the Cloudflare AI Gateway. If you pin agents in your ownagents.ts, nothing changes; if you use the
shipped defaults, orchestration and gating now route to Claude. Details:
SOTA model registry.
Community thanks
Thank you to Leonardo Cascianelli (@H3xept), who contributed the newOmpAgent adapter and omp engine, which lets Smithers
drive the OMP harness with the full RPC lifecycle handled, and
followed up with contract and preflight fixes. First external engine
contribution, and a great one.
Running into something? bunx smthrs bug files a report
straight from your terminal.
Other improvements
- Detached runs fail fast instead of fake-succeeding.
up -dnow validates the workflow before spawning: a bad file printsfile:line:coland exits non-zero with no run created, instead of printing a success run id for a run that never started. - Runs carry launch attribution. Who or what started a run (a CLI call, a
plugin session, a gateway client) is persisted and surfaced by
getRun/listRuns. - A friendlier gateway-client offline mode. An unreachable gateway is
classified as
GATEWAY_UNAVAILABLE, keeps last-known rows, and logs once per session instead of spammingconsole.error. <Memory>viacreateSmithersresolves a real memory runtime and store end-to-end, with real-backend e2e coverage.listRunsaccepts anoffsetfor server-side pagination.- 106 fix commits landed overall, three of them security fixes; 257 documentation pages were rewritten for concision with mechanical checks that nothing was lost.
Upgrade notes
There are no breaking changes in 0.30.0.- Default orchestration and gating now route to Claude if you use the
shipped registry defaults rather than a custom
agents.ts. - The
kimioneshot seat now runs Kimi K3, not K2.7. - A detached run can now fail fast before it starts. Tooling that parses
up -doutput expecting an immediate run id will now see a non-zero exit and afile:line:colerror when the workflow file is invalid. gateway-clientno longer logs every failed RPC when the gateway is unreachable; it logs once per session and surfacesGATEWAY_UNAVAILABLE.listRunsrejects a malformedoffsetwithINVALID_REQUESTinstead of ignoring it. Callers that omit it are unaffected.
The full changelog
The complete commit-level history for this release is in CHANGELOG.md on GitHub. Found a bug? Runbunx smthrs bug to file it.