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. Your agent writes the workflow as a JSX tree, and Smithers repeatedly renders it every “frame”. Each render answers: given what has already finished, what can run 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.
<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.
  • Tour for a working code-review example.
  • How It Works for the execution model.
  • Why React? for the rationale behind the JSX runtime.