Skip to main content
Smithers 0.30.0 makes one thing much better: watching and steering your agents. There is a new component library for the web UIs your agents build you, live chat and fleet widgets to put in them, a Monitor redesigned around triage, a hardened browser viewer, and a new smithers oneshot command for single-task asks. 233 commits, no breaking changes.
Smithers 0.30.0 release card listing the headline features

Smithers 0.30.0: an agentic UI kit, a triage-first Monitor, and oneshot.

Upgrading

Behavior changes are collected in the upgrade notes at the bottom.

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.
A dark-themed agent chat built from Smithers components: a user bubble, an expandable reasoning trace, two tool-call panels, a markdown answer, and a sources list

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

A collapsible release plan with done, active, and pending steps and task rows showing file badges and elapsed time, above a chain-of-thought step list

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

An approval card for a production deploy with risk badge, affected resources, and approve and deny buttons, above two checkpoint rows with restore, fork, replay, and rewind actions

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

A dark-themed prompt composer with two attachment chips, one mid-upload with a progress bar, a drafted message, and a send button

PromptInput with attachments, upload states and progress included.

Everything shares one design language: light and dark out of the box, consistent status colors, accessible by construction. That matters because it raises the floor on every UI an agent builds you: the difference between a readable dashboard and a wall of markup. And this is a floor, not a ceiling. Over the next series of releases we will keep adding evals and skill changes that measurably improve the UIs agents build with this kit. That program starts in this release: the 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.
  • FleetTable and NodeStageStrip: 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.
See the gateway-ui reference.

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 Smithers Monitor overview in dark theme, showing a Needs you band with three pending approvals and a failed run, an Active now band with one live run, and an all-runs table

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/k to move, Enter to open, Esc to back out.
A Monitor run detail page in dark theme with an approvals rail, execution tree, and structured event log

Run detail: the execution tree, a structured event log, and collapsible inspector blocks that stop polling when closed.

Every inspector block (Details, Prompt, Tool calls, Transcript, Output, Diff) is now collapsible and unmounts when closed, so a collapsed Transcript stops polling in the background. There is also a new Prompt panel showing the task’s initial prompt. See the Monitor guide.

Charts and a workflow canvas

Two more pieces for custom UIs, both shown above in spirit:
An area chart of tasks landed and in flight over five days, with a legend and tooltips, built with the Smithers chart adapter

The chart adapter: validated categorical colors, correct in light and dark.

A workflow canvas with four status-tinted node cards, an edge legend, and zoom controls

The workflow canvas anatomy: node cards, edge legends, and canvas chrome for a run's graph.

Charts ship from their own subpath so the base library stays light; the canvas anatomy (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:
A live status narrator (a cheap agent watching the run) posts one-line “what is it doing” updates into a pulsing status card, so you never stare at a raw transcript wondering if it is stuck. The 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 full type 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 own agents.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 new OmpAgent 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 -d now validates the workflow before spawning: a bad file prints file:line:col and 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 spamming console.error.
  • <Memory> via createSmithers resolves a real memory runtime and store end-to-end, with real-backend e2e coverage.
  • listRuns accepts an offset for 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 kimi oneshot seat now runs Kimi K3, not K2.7.
  • A detached run can now fail fast before it starts. Tooling that parses up -d output expecting an immediate run id will now see a non-zero exit and a file:line:col error when the workflow file is invalid.
  • gateway-client no longer logs every failed RPC when the gateway is unreachable; it logs once per session and surfaces GATEWAY_UNAVAILABLE.
  • listRuns rejects a malformed offset with INVALID_REQUEST instead 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? Run bunx smthrs bug to file it.