Write the process down as code.
When several agents hand work to each other — with review gates, retries, and human approval in the middle — you want the process written as code that can run again, and a durable record of what actually happened. WhippleScript is that language.
Pre-1.0 · Apache-2.0 · Rust runtime
@service workflow Ralph agent ralph { provider fixture profile "repo-writer" capacity 1 } rule begin when started when ralph is available => { tell ralph "Do one small useful thing, then update the todo list." } rule again when ralph completed turn when ralph is available => { tell ralph "Do one small useful thing, then update the todo list." }
Rules decide. Effects do.
The two concerns are kept separate — so policy stays deterministic and every side effect is a durable, replayable event.
Rules decide
Deterministic policy: what happens next, given the current facts.
No I/O, no model calls — the same facts always produce the same
decision, and check proves your workflow can always
reach complete or fail.
Effects do
Agent turns, typed model decisions, human-review requests, and child workflows are durable effects — executed by workers through providers, with every result recorded as an event you can inspect and replay.
A workflow you can trust and replay
Typed facts
Declare the facts your process reasons over. The compiler checks reads and writes before anything runs.
Agents & providers
Bind agents to providers and profiles with capacity limits. Swap a real model for the deterministic fixture provider to test.
Durable event store
Every event, fact, and provider run is recorded in an inspectable SQLite store — the process, written down.
Review gates
Human approval and typed decisions are first-class effects, not bolted-on glue between chat transcripts.
Replayable
Deterministic rules over a recorded log mean a run can be explained, resumed, and run again.
One CLI
whip check, dev, and doctor
— parse, type-check, run against fixtures, and inspect, in
minutes.