Bondsmith
A generic workflow engine in Rust - development workflow enforced in typed code.
MVP · 7 of 10 shippedRoadmap ↓
From the blog:Bondsmith: Hard Bonds for Soft Claims
Capabilities
Generic Flows, fitting your specialized needs
A Flow is plain data: the ordered Phases a Feature moves through, read from disk at run time. Bondsmith runs whichever Flow a Feature is bound to.

In the Flow editor, the feature Flow's Phases are opened one after another. The implement Phase lists its Steps in order, each marked as a Gate or a headless Worker, with its entry and exit checks beside them. Steered from the terminal
flowctl drives every run, one Phase at a time. Nothing advances until every Postcondition holds.

flowctl implement --step -v runs the test Gate for Task T2: 41 tests pass, the count is captured as the baseline, and the Beat advances. Observable from every angle
The Bondsmith UI shows each run live: the Phase a Feature is in, the Beat in flight, and the Task graph across every bound repo.

The checkout-discounts Feature in its implement Phase: the make_green Beat for the total-line Task finishes, a lint Gate runs and passes and adds its green mark to the Task graph, and the review Beat starts. Agent runs under control
Each Worker is a disposable Claude Code session spawned for one Step. Its Session transcript streams live: every file read, edit and test run.

The Beat overlay for the total-line Task's make_green Step: the Worker reads the failing test, edits CartTotals, sees a test run fail, fixes the guard and runs the tests again. No LLM grades its own homework
A Postcondition either passes or hard-blocks the Beat. There is no softer outcome and no assert-and-warn escape hatch.
Roadmap
- Shipped: Generic Flow engine: any Flow, each Phase a typed contract
- Shipped: Typed Postconditions, hard-blocked on failure
- Shipped: Flows read from disk at run time, editable without a rebuild
- Shipped: Bondsmith UI: a live, read-only Feature inspector and Flow editor
- Shipped: Session log and live Session transcript for every Worker Beat
- Shipped: Triage rules: decide a Review unit without the human
- Shipped: Multi-repo Checkouts, one clone per bound repo
- In progress: learn-from-reports: mining Findings into the Knowledge base
- Planned: Bondsmith host: Bondsmith in a dev container on a remote host
- Planned: Worker containers: each Worker sandboxed in its own container
MVP · 7 of 10 shipped
After MVP
- Planned: Bondsmith UI write actions: drive a run from the UI
- Planned: Task loop: run the Task graph to done, unattended
- Planned: Notifications: alert the human when a run is waiting on them, blocked or done
- Planned: Model routing: choose each Worker's model per Step
- Planned: Step cost statistics across runs
- Planned: Session log analysis: mining past Worker sessions
- Planned: Cloud Workers: Workers run on remote machines
- Planned: Pi target
Bondsmith is the workflow engine I run my own feature work through: a Rust CLI that drives a Feature through a Flow of Phases, from exploration to shipped code, and refuses to advance when the work doesn't hold up.
The premise is that an LLM is non-deterministic by construction, so the answer isn't to trust it harder. It's to make everything around it deterministic. A Feature moves through the Phases of the Flow it is bound to, each one a typed contract with Postconditions the engine evaluates itself, in Rust. No LLM grades its own homework: a failed Postcondition is a hard block.