v0.29.0..HEAD range that is 168
commits, 759 files changed, 96,014 insertions and 17,320 deletions, including
57 feature commits, 73 fix commits (3 of them security fixes), 2 refactors,
10 test commits, and 18 docs commits. The headline is a
large new agentic UI component library and the gateway-ui widgets built on
top of it (live per-node chat, a fleet dashboard), alongside a hardened
browser viewer, a Monitor overview redesigned around triage, the new
smithers oneshot command for single-agent asks, and a model registry
update that moves orchestration and gating onto Claude and adds Kimi K3.
Upgrading
An agentic UI component library
Building a UI for an agent run used to mean hand-rolling message bubbles, tool-call panels, and diff viewers for every workflow.packages/ui now
ships a component library built for exactly that surface:
- Conversation:
Message,MessageBranch,Bubble,MessageScroller. - Input: prompt and attachment components.
- Agent internals: reasoning traces, tool-call panels, code blocks.
- Work tracking: plans, tasks, queues, approvals, checkpoints.
- Grounding: sources and citations.
- Identity: agent identity and context components.
- Coding artifacts: stack traces, test results, commits, secrets.
- Sandbox previews:
AgentSandbox,WebPreview,JSXPreview. - A workflow canvas built on
@xyflow/react, for rendering a run’s graph directly in a workflow UI.
Live chat and a fleet dashboard in gateway-ui
gateway-ui gains the widgets a Monitor or custom workflow UI needs to watch
more than one thing at a time:
NodeChatStreamstreams an agent’s live chat for a single node.FleetTableandNodeStageStripgive a fan-out run (many nodes running the same task shape) a dashboard instead of a flat event list.RunMetaand aMonitorButtonadd a one-click deep link from a workflow UI into the run’s Monitor page.RunEventLogis now structured instead of a raw JSON dump: rows are severity-tinted, and repeated heartbeats coalesce instead of scrolling the feed.
A hardened browser viewer
Smithers can now drive a real browser from a workflow and let you watch it happen. The gateway adds a Playwright-driven browser session service:createBrowserSession, browserAct, browserContext, browserPick,
closeBrowserSession, and listBrowserSessions, backed by a live screencast
in the viewer.
Because a browser session can touch arbitrary pages and arbitrary keystrokes,
this shipped alongside a hardening pass:
- Session creation is transactional, so a failed setup step cannot leave a half-registered session behind.
- The pinned browser proxy is tested against DNS rebinding.
- Single-keypress actions aimed at sensitive fields are now redacted.
Only full
typeactions were redacted before; typing a password one key at a time through the viewer leaked each character into the journal and activity broadcast. Both action shapes are redacted now.
A triage-first Monitor
The Monitor overview used to answer one question: is it done yet? It is now organized around triage:- A “Needs you” band surfaces pending approvals, human-parked runs, and recent failures (under 24h) first.
- An “Active now” band lists what is currently running.
- Operational stats (throughput, counts) move to a demoted footer instead of competing for attention at the top.
- A Debug fold tucks frames and the raw XML tree away until you ask for them.
- A keyboard kit makes triage fast without a mouse:
/to search,j/kto move,Enterto open,Escto back out.
smithers oneshot
Not every ask needs a full workflow. smithers oneshot routes a single
clear task through an implement (and optional review) pipeline, with its own
live-status dashboard:
- The oneshot UI shows a live status narrator: a cheap agent watches the implement and review agents’ recorded output and posts one-line “what is it doing” updates into a pulsing status card, so you are not staring at a raw transcript to tell whether it is stuck.
- The
kimiseat now runs on Kimi K3 (1M-token context) instead of K2.7.
Model registry: Claude orchestrates, Kimi K3 joins
The default SOTA model registry moves orchestration and gating decisions onto Claude: Opus 4.8 is the default orchestrator at medium reasoning effort, Fable 5 holds planning, Codex Sol keeps review, and substantial implementation work moves from Luna to Terra. Kimi K3 (1M-token context) is newly registered, with usable ids for the Kimi CLI, OpenCode, and the Cloudflare AI Gateway. If you pin agents by name in your ownagents.ts, this changes nothing;
if you rely on the shipped defaults, your orchestration and gating calls now
route to Claude.
Other improvements
- Detached runs no longer report success before they exist.
up -d,workflow run -d, and detached resume now preflight-render the workflow graph before spawning: a parse, import, or graph error printsfile:line:coland exits non-zero with no run created. Once the graph is valid, the CLI waits up to 10s for proof the run was admitted before printing a success run id. - The gateway
listRunsRPC gains anoffsetfilter for server-side pagination over its newest-first run ordering. Zero is a valid offset; a negative or non-integer value is rejected asINVALID_REQUEST. - A new
OmpAgentadapter andompengine let Smithers drive the OMP harness, with the full RPC lifecycle handled. gateway-clientnow classifies an unreachable or non-envelope gateway response asGATEWAY_UNAVAILABLE. Query collections keep their last-known rows and surface one notice per session instead of spammingconsole.erroron every query.- A new Recharts-based chart adapter (
ChartContainer,ChartTooltip,ChartLegend) ships atsmithers-orchestrator/ui/adapters/chartwith a CVD-validated categorical color palette, for any workflow UI that needs to plot numbers instead of just listing them. - The
create-uiworkflow’s compliance loop is now hard-gated behind a deterministic scorer (design-system usage, plus mandatory live agent chat for agent workflows), closing prior export bypasses in the structural UI verifier.
Hardening
73 fix commits, 3 of them security fixes, landed alongside the features above, most visibly the browser-viewer redaction fix described earlier. A new 44-case deliverable-behavior eval suite now checks whether a doc-grounded agent picks the right deliverable shape (a self-contained HTML report versus a shipped UI component versus hand-rolled markup), and a release-notes-visual eval gates the auto-generated release report on containing real charts with honest practice: no dual axis, a visible legend, shipped chart components instead of hand-rolled canvas. 257 documentation pages and the Smithers skill were rewritten for concision, with mechanical checks (frozen frontmatter, headings, and code fences) and an idea-preservation audit pass, so none of the trims should have dropped a fact.Upgrade notes
There are no breaking changes in 0.30.0.- Default orchestration and gating now route to Claude if you use the
shipped SOTA registry defaults rather than a custom
agents.ts. See the model registry section above. - The
kimioneshot seat now runs Kimi K3, not K2.7. listRunsaccepts a newoffsetparameter. Existing callers that omit it are unaffected; a caller that already passes an invalid offset-shaped value will now getINVALID_REQUESTinstead of it being ignored.gateway-clientno longer logs every failed RPC toconsole.errorwhen the gateway is unreachable; it logs once per session and classifies the failure asGATEWAY_UNAVAILABLEinstead.- A detached run can now fail fast before it starts. If your tooling
parses
up -doutput expecting an immediate run id on the happy path, a bad workflow file now exits non-zero with afile:line:colerror instead of silently succeeding with no run behind it.
The full changelog
The complete commit-level history for this release is in CHANGELOG.md on GitHub. Found a bug? Runbunx smithers-orchestrator bug to file it.