Skip to main content
Smithers orchestrates AI coding agents at scale with composable, model- and harness-agnostic workflows. Most workflow systems fail quietly. A crash mid-run means lost work and a manual restart from scratch. Smithers solves this with a render-loop execution model: every completed step is persisted immediately, so the runtime always knows exactly what has finished and what to run next.
This page is in the For Agents track. It is for AI harnesses and workflow authors who need the runtime model. Human-facing docs live in the For Humans Guide, starting at What Smithers Is.
Smithers runs your workflow on a render loop: each frame it asks “what has finished, and what can start now?” Tasks produce outputs validated by Zod schemas; the runtime persists them to SQLite. Crashes, restarts, and approvals are first-class, and the runtime resumes from the last persisted state without re-running completed work. Default authoring path - MDX prompts. For most workflows you edit a plain Markdown file in .smithers/prompts/ and the seeded TypeScript skeleton picks it up automatically. No build step, no TypeScript required. See MDX Workflow Authoring. Advanced authoring - TypeScript SDK. When you need branching, schemas, parallel fan-out, or loops, write the workflow as a JSX tree. Smithers renders the tree and drives execution:
<Workflow name="review">
  <Sequence>
    <Task id="analyze" output={outputs.analysis} agent={analyst}>
      {`Review ${ctx.input.repo}`}
    </Task>
    {analysis ? (
      <Task id="fix" output={outputs.fix} agent={fixer}>
        {`Fix these issues:\n${analysis.issues.map(i => `- [${i.severity}] ${i.file}:${i.line} - ${i.description}`).join("\n")}`}
      </Task>
    ) : null}
  </Sequence>
</Workflow>
Use Smithers when:
  • order matters across multiple AI or compute steps
  • you need crash recovery
  • humans must approve or answer questions mid-run
  • different tasks need different models, tools, or policies
  • operators need the Gateway API to launch, stream, and approve runs programmatically
Don’t use it for a single prompt → single response. Use your model provider’s SDK directly; Smithers adds no value there.