A from-scratch workflow-automation engine

Describe a job in plain English.

It builds the workflow, runs it, and hands you the result — staged for a human.

Live demo — the engine builds a workflow to triage a real GitHub issue (sort · prioritize · route · reply), then runs it running…

See our examples

The Composer

Plain-English jobs turned into workflows.

Browse →

A full run

Real recipes run on real input, staged.

Browse →

Do it yourself

Compose your own

Build a workflow from your own words.

Get the steps →

Run your own

Point a recipe at your repo or topic.

Get the steps →

The Composer

Describe a job → it builds the workflow

Give it a plain-English task; it composes a workflow from the shared library — reusing what fits, and spinning up (flagged) new specialists for what it lacks. Pick a real one — watch it compose:

A full run — three distinct workflows, each the live explorer: open full ↗

Compose your own

Describe a job → get a workflow

1 · set up (once)

Pure Python standard library — nothing else to install.

git clone …/workflow-engine.git
cd workflow-engine
pip install -e .

The engine uses Claude for the steps that need judgment. Free with the Claude CLI if you have a Max plan — or plug in an Anthropic API key (~cents/run).

2 · describe the job

One plain-English sentence is the whole interface — no config, no wiring.

$ engine compose
    "read GitHub issues, prioritize them, draft replies"
The quotes are your job — swap in anything judgment-heavy and multi-step.

Fresh jobs to try:

  • "review dependency PRs, flag risky ones"
  • "sort feedback into bugs / ideas / praise"
  • "triage security reports, draft an ack"
  • "screen applicants for must-have skills"

Want to see real ones? 18 worked compositions →

3 · what it prints: the workflow

It wires specialists into a workflow and prints the plan — exactly this, nothing has run yet:

Composed recipe: reuse classify reuse rank reuse respond reuse verify reuse act [GATE] runnable: True

reuse = from the library · NEW! = a flagged gap · [GATE] = human pause. To make it runRun your own.

Run your own

Point a recipe at real input → get a staged result

1 · set up (once)

Pure Python standard library — nothing else to install.

git clone …/workflow-engine.git
cd workflow-engine
pip install -e .

The engine uses Claude for the steps that need judgment. Free with the Claude CLI if you have a Max plan — or plug in an Anthropic API key (~cents/run).

2 · run a recipe

Point a recipe at real input — it runs the whole workflow on every item.

$ engine run triage
    --repo vercel/next.js --limit 5
triage — the recipe. Also content, refine.
vercel/next.js — any public GitHub repo. Swap freely.
5 — how many open issues to pull.

More to try:

  • run triage --repo psf/requests
  • run content --topic "why flaky tests erode trust"
  • run refine --topic "on-call burnout"

3 · what you get

It runs, then stages a result for each item — nothing is sent. It prints:

=== board · triage === staged 5 #95698, #95685 … staged, awaiting approval: #95698 labels [bug, build] reply: "Thanks for the thorough repro — the Viem chains case…" saved state/<run_id>.json

act is gated — it only stages; you review, edit & approve. See one step-by-step in A full run →

The third pillar · alongside the Composer & the Dispatcher

A shared library of specialists

Every recipe is built from the same pool of single-purpose specialists — each does exactly one job, with one input→output contract. The Composer doesn't write new code per task; it reuses what's already here. So the library is the part that compounds: the same specialist does real work across completely different jobs.

Reuse across the four example recipes

triagecontentrefinereview
verifyevery recipe
actevery recipe
classify3 recipes
rank3 recipes
write2 recipes
route1 recipe
respond1 recipe
fetch1 recipe
review1 recipe

verify and act run in all four — the same judge, the same gate, pointed at a triaged issue, a drafted post, a self-graded rewrite. Build it once, reuse it everywhere.

The pool — nine specialists, each one job

classify
Sort an item into one of a fixed set of categories.
item → label
rank
Score an item for urgency or quality.
item → score
verify
Judge whether an output meets a stated standard.
subject → verdict
route
Assign an item to the right component or owner.
item → component
respond
Draft a reply in a given tone.
item → reply
review
Critique a draft against criteria.
draft → critique
write
Produce a piece of writing to a brief.
brief → draft
fetch
Pull source material for a topic.
query → sources
act
Stage the final action behind a human gate.
payload → staged
shared capabilitydomain stephuman gate
When a job needs something the library lacks, the Composer doesn't fake it — it flags the gap and drafts a provisional stub (untrusted until it's trained on real examples). That's how the library grows without ever pretending to a capability it doesn't have.