Skip to main content
Smithers is a durable workflow runtime. You write a workflow as a JSX tree, and Smithers repeatedly renders it. 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 — 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: ${analysis.issues}`}
      </Task>
    ) : null}
  </Workflow>
</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
Don’t use it for a single prompt → single response. That’s just an Agent.generate(...) call.