Workflows
Two callables, four routing lanes, and workflows that improve themselves. Control flow is the calling workflow's own prose — there is no engine beneath it.
Two callables
Produces each unit and, in planning mode, freezes the root. Its minting command mints, seals, pins the standard, opens the isolated worktree, and launches.
Challenges Goal and evidence — the read-only twin that stands between an executor's claim and "done".
A ticket's done predicate decides Goal at land. Control flow is not a callable: loops, branches, and retries are the calling workflow's own prose, and a frame ticket is the durable stack frame under them.
Routing lanes
Routing projects four lanes, smallest need first:
| Lane | When |
|---|---|
direct | Evidence already decides, and a change this session can make, check narrowly, and record. |
worker | One do or judge, wanting isolation or a checked landing. |
team | Parallel children, resume, or an audit trail. |
plan | The goal itself is unresolved, so a planning orch-do seals the root before team drives it. |
Tripwires promote on evidence, never prediction. Small, medium, and large are explanatory mappings — never ticket fields.
Self-improvement
Every run auto-logs its friction — retries, missing inputs, workarounds — under an always-on law. trace.py extracts each session's requests, narration, and tool calls into one event record. The improvement workflow groups bounded records, finds which share a cause, and writes proposals scoped to where the change lands:
- environment — a missing interpreter, a broken tool.
- project — code or docs that keep causing friction.
- workflows — the workflows themselves.
Tournaments
Builds a qualified benchmark for any target with an observable outcome — a prompt, a skill, a script.
Runs a tournament: bounded generations planned deterministically, blind judges, promotion only when a frozen rule and margin are beaten.
Together they turn "make this better" into a measured campaign instead of vibes. skill-tournament applies the same loop to the library's own skills.
Build your own
Name the callables yourself when you want a specific shape:
> loop the build until `pytest -q` exits 0 > orch-judge this cache design — rank what it gets wrong > evolve the summarizer prompt against the frozen benchmark
Or describe a workflow in plain English and it gets admitted as a named workflow — a skill whose prose calls the callables in order, with one end-to-end done check at the end. Project-local and callable by name from then on, under <repo>/.orchflows. Authoring law: docs/custom-workflow-authoring.md.
The gallery
Named workflows shipped in example-workflows/:
benchmaker— build a qualified benchmark for any observable target.evolve— run a tournament against a frozen benchmark.skill-tournament— the same loop applied to the library's own skills.self-improve— mine friction into fixes.super-research— a read-only research lane.orch-build-workflow— build a workflow from a description.browser-game,drift-canary,renovate— more named workflows.