Welcome to Smithers
JSX workflow engine for coding agents—phases, parallelism, and persistent state for long-running repo automation. Run CI recovery, PR finalization, stacked merges, release smoketests, and review processing as resumable workflows—not fragile scripts.Why Smithers?
The Problem
Simple Ralph loops work great for basic iteration. But as workflows grow complex:- Multi-phase orchestration becomes hard to manage
- Parallel agents need coordination
- Plans live in prompts, not reviewable code
- Manual orchestration doesn’t scale
The Solution
- Agent-native syntax - Easy for Claude Code to generate, easy for humans to review
- Sophisticated Ralph loops - Multi-phase, parallel agents, conditional branches
- Composable components - Build complex workflows from simple pieces
- One syntax for humans and agents - You can read it, Claude can generate it, Git can version it
Quick Start
Get up and running in 2 minutes
Durable Ralphing
Understand the execution model
Components
Explore the component API
Examples
Copy-paste starter workflows
Key Features
Sophisticated Ralph Loops
Smithers lets you build complex Ralph loops with structure:- Multi-phase workflows with conditional transitions
- Parallel agent execution with coordination
- Composable, reusable components
- Optional persistence for long-running workflows
Claude Component
The core agent component that executes Claude with full tool access:Structured Output with Zod
Get typed, validated responses with automatic retry:Database Persistence (Flight Recorder)
Every run persists in SQLite - your workflow’s audit trail:MCP Tool Integration
Give Claude access to external tools via Model Context Protocol:Component Naming
| Component | Purpose |
|---|---|
<SmithersProvider> | Root orchestration context (required) |
<Subagent> | Named grouping boundary for organizing agent tasks |
<Smithers> | Nested orchestration - spawns planner + executor |
<Smithers> is the only component that spawns a separate planning model.
How It Works
- Render: Your JSX components render
- Execute:
<Claude>nodes execute via Claude Code CLI - Update:
onFinishedcallbacks update state (persisted to SQLite) - Re-render: State changes trigger reactive updates
- Loop: Repeat until no pending agents remain
Installation
FAQ
Is this actually React? Do I need to run a UI?
No UI. React is a component model + markup-like syntax. People already use it to render to non-DOM targets (CLI, PDFs, native). Smithers renders to execution, not DOM.Why not YAML/JSON for workflows?
Because you want:- Composition and reuse
- Version control diffs that make sense
- Something your coding agent can generate AND you can review like normal code
How does this relate to Ralphing?
Ralphing is the outer loop (iterate until verification passes). Smithers gives it structure, persistence, and inspectability.Do I have to use Bun?
Yes. Smithers uses Bun-specific features (bun:sqlite, Bun.spawn). Node.js support is not currently available.
What do I need for Claude to work?
- Claude Code CLI installed globally
- Active Claude subscription (Smithers uses Claude Code’s subscription, no separate API key)
claudecommand available in PATH
Is Ralph deprecated?
The<Ralph> component is deprecated. Use <SmithersProvider> instead - it includes the Ralph loop internally. Pass maxIterations, onIteration, and onComplete props to SmithersProvider.
How do I resume a crashed run?
useState does not.
What’s the difference between Task component and db.tasks?
<Task>is a presentational component (renders a checkbox-like display)db.tasksis the orchestration API for tracking async work
db.tasks.start/complete to coordinate async work with the Ralph loop.