Eight phases. A gate between every one.
- P0TriageExit gateroutedAt this phaseadlc ticketPASS0
Triage the ticket: is this executable by an agent at all, and at what dial settings? essay ↗
- P1InterrogateExit gatehuman gateAt this phaseA personATTEST
Interrogate the spec until it is unambiguous. Human gate one. essay ↗
- P2DecomposeExit gatecold-startAt this phaseadlc coldstartPASS0
Decompose into cold-startable units that an agent with zero context can pick up. essay ↗
- P3RailExit gateRED gateAt this phaseadlc rails-guardPASS0
Rail the work: write and freeze the tests that define done. essay ↗
- P4BuildExit gategreen gateAt this phaseadlc build-gatePASS0
Build inside the rails. Supervision tooling watches for flailing and drift. essay ↗
- P5ProsecuteExit gatezero findingsAt this phaseadlc prosecutePASS0
Prosecute the change: prove the tests are load-bearing, not hollow. essay ↗
- P6IntegrateExit gatehuman gateAt this phaseA personATTEST
Review the evidence, not the diff. Human gate two. essay ↗
- P7DistillExit gatefeeds the next runAt this phaseadlc lesson-foundryPASS0
Distill what the review found into permanent, deterministic defenses. essay ↗
$ adlc rails-guard --base main --ticket T42 --tickets .adlc/tickets.json ✗ FAIL: a frozen rail changed
The command and exit code are real; the verdict line is this record's one-line summary of the result, not a verbatim transcript.
Three dials, set per ticket
Not every ticket deserves the same autonomy. You set three dials at triage, and the gates hold you to whatever you chose.
How long the agent runs unsupervised
How much of the output humans gate
How much surface one ticket may touch
Run it against your own repository
curl -fsSL https://www.agenticlifecycle.ai/install.sh | shmacOS and Linux, Node 18+. Then adlc init in your repository. Windows is not supported. Every install channel →