Background agents are a different shape
Synchronous chat is forgiving. The user is staring at the screen, retries are free, an upstream Lambda with a five-minute timeout is fine. Background agents are a different shape. They run for hours. They survive deploys. They pause for a human approval that will not arrive until tomorrow morning, and they have to wake back up at the right step when the human finally shows up.| chat | background | |
|---|---|---|
| runtime | seconds | hours, days |
| user | staring at screen | offline |
| approval | immediate | tomorrow morning |
| crash | page refresh | lost work |
| deploy | reconnect | interrupted mid-task |
The layer that does not change
Every six months the right way to build an AI agent changes. Chains. ReAct. Tools. Plan-and-execute. Crews. Swarms. Background agents. Dynamic subagent fan-out, as of last week. If you coupled your infrastructure to any one of these, you have already rebuilt at least twice, and you will rebuild again. There are three layers, and they move at different speeds.- Model layer. Volatile, changes weekly. GPT, Claude, Gemini, Kimi.
- Topology layer. Fluid, changes quarterly. ReAct, crew, swarm, plan-execute, subagent swarm.
- Orchestration layer. Stable. Durable steps, retries, state, events, observability.
What Dynamic Workflows is, and the three things it is not
Dynamic Workflows is a real product and a good one. It is also three things Smithers deliberately is not. It is not open. It is a research preview on Max, Team, and eligible Enterprise plans. You cannot read the runtime, fork it, or run it where you like. It is not model-agnostic. It orchestrates Claude subagents. The whole point of an orchestration layer that outlives the model is that you should be able to let a frontier model plan, a fast model fan out, and a specialized harness do the edits, and switch any of them next week without touching the workflow. Smithers runs Claude Code, Codex, Pi, Antigravity, and any model the Vercel AI SDK supports. You can mix them in one workflow. It is not durable. The script orchestrates subagents and returns an answer. Kill the process halfway and you start over. In Smithers, every completed step is persisted the moment it finishes, and a crash resumes from the last frame.Durability you can watch
This three-task workflow runs research, then plan, then implement. Sequence enforces order, soplan waits for research with no wiring.
plan is running. Resume it:
research is skipped because its output is already in the database. plan re-runs as attempt 2 because it was interrupted mid-flight. implement runs for the first time. No work is lost, and you wrote no recovery code.


Human approvals are just suspension
A background agent that cannot stop and ask a human is dangerous to run unattended. So suspension is a primitive.<Approval> durably suspends the run. The process exits. It costs nothing while it waits. A reviewer answers tomorrow over CLI, web, or HTTP, and smithers supervise resumes any run whose heartbeat went stale after the machine died. The suspended run lives as a database row with nothing running.
Patterns are compositions on the substrate
The test of whether you abstracted the primitives well enough is whether the topologies you keep rebuilding can stop being snowflakes. If the primitives are good, named patterns fall out as compositions. We surveyed every agentic orchestration framework we could find (LangGraph, Crew, Inngest, Temporal, AutoGen, Mastra, the papers, the vendor posts), and anything we saw more than once that earned promotion became a component.ReviewLoop. Optimizer. ScanFixVerify. Panel. Debate. Supervisor. Saga. EscalationChain. None of them are baked into the runtime. <ReviewLoop> is about twenty lines:
Why JSX, when a model could write a script
In 2026 a lot of workflow code is written and re-tuned by other agents. Wrap a workflow in a self-improving outer loop, where one agent watches another’s traces and edits the source, and by next Thursday the workflow your agent runs is one no human author ever wrote. The authoring surface has to be legible to the agents that edit it and the humans auditing what those agents wrote. So we picked the densest domain in any model’s training corpus. TypeScript, because prompts are template strings that interpolate and refactor and type-check with no DSL. React, because agents write it fluently and humans review a declarative tree faster than they can simulate an imperative graph in their heads. A model can write a raw orchestration script, and Dynamic Workflows proves it writes a good one. The question is whether you can read it back, diff it, and hand it to another agent to extend six weeks later. A JSX tree you can. There is a lower-level Effect-ts API underneath for anyone who would rather think inEffect.gen.
We took Gstack, an existing high-token agentic workflow, and cut roughly eighty percent of its lines by composing Smithers components instead of hand-writing the orchestration.
Any model, any harness
This is the claim a skeptic should test first, so we will be specific. The same workflow runs Claude Code, Codex, Pi, and Antigravity through their own runtimes, and any model the Vercel AI SDK supports with tools, structured output, and MCP. Point a task at whichever agent is best for the job and switch freely. Agent fallback is an array:agent={[claude, codex]} runs Claude first and Codex on failure. The workflow does not change when the model does, which is the entire reason to have an orchestration layer in the first place.

