Evolve Loop puts your AI coder in a structured pipeline that repairs itself. The pipeline plans the work, and an independent reviewer challenges it. Only safe changes merge, and each run makes the next run better. A code change ships only after a test failed first, unless the change is trivial.
$curl -fsSL https://mickeyyaya.github.io/evolve-loop/install.sh | sh
The bottleneck moved
AI can write a feature, fix a bug or refactor a module without help. The code is not the bottleneck now. The bottleneck is trust: can you merge the code without a read of every line?
Most tools stop at "an AI wrote it." The hard part comes after: is it the right change, is it correct, and will it break something downstream?
The idea
AI is strong at three decisions: what to build, how to build it and what looks wrong. The pipeline lets AI make these decisions freely.
A structured, repeatable process decides what is safe to ship. Its guardrails are code, and the AI cannot argue with code. Freedom where it helps, structure where it counts.
AI-composed pipeline
Give it a goal. The advisor runs the mandated phases, picks from the common phases and writes new phases when the goal needs them. Then one routing table gives each phase that uses a model its CLI and model. agy runs first, on Gemini 3.8 Flash High. At the deep and top tiers, Claude Opus runs through agy first and through Claude Code second. Nothing here is pre-scripted.
Per-phase LLM routing
One routing table gives each phase that uses a model its CLI and model. Below the deep tier, agy runs first, on Gemini 3.8 Flash High. The auditor, the tdd engineer and the code reviewer run on Claude Code only. Thus by default, the build and the review use different model families. Ship is host code, and it uses no model.
Advisor ▸ reasoning
The integrity floor
Bypass mode means “do not ask the operator”. It never means “skip the checks”. A floor compiled into the binary evaluates every cycle before anything ships. Change the evidence and see the verdict change.
ship ⇒ build ∧ audit ∧ ( tdd ∨ trivial ) ∧ gates
try a cycle
These are compiled Go defaults, not config that you can forget to set. The floor holds even when a model writes every prompt in the pipeline. The new code-review phase runs in shadow, so it does not gate a ship yet.
When things fail
A failure adapter classifies and routes every abnormal exit. It can retry, move the phase to the next CLI in the routing table, re-pin or reconcile. The queue survives, the evidence stays honest and the loop continues.
Caught in production: This is not hypothetical. An experiment with a new model once put several regressions into one run. None of them reached a human: the pipeline's own reviews caught each one and recovered. Within two days, the pipeline turned each one into a permanent safeguard. Runs can fail, and failures become fixes that stay.
Continuous development
The queue is how you steer. While the loop runs, you file a JSON item with evolve inbox add. Every cycle, triage takes the top of a computed rank: weight, priority class, the items that it unblocks, recurrence, age and goal. The other items age forward, with no restart and no lost work. When an audit goes red, the retro files a lesson as a new item, and the failed item returns with its worktree. In the demo below, every third cycle fails, and the rank shows only the weight.
compose a todo → .evolve/inbox/<ts>-<id>.json
Real schema, in short: id, weight, title, kind and fix. A real item also has acceptance[] criteria, which the auditor enforces, and a priority_class.
the queue — triage takes the top of the rank, every cycle
Built for parallelism
Give each feature its own loop, and the loops run side by side. Each loop has its own git worktree and branch, and it composes the pipeline that its goal needs. The routing table picks the CLI for each phase. The loops never collide, and only green changes merge to main, one at a time.
Point a loop at each goal. The loops advance in parallel, not in a queue.
Each loop owns a worktree and a branch: no crossed wires, no half merges.
Only green work reaches main, one merge at a time.
All you need is an LLM CLI subscription. Each lane runs on the CLIs that you already use, for example agy and Claude Code.
Usage
Start with a goal. Add a flag only when you want more. Each note tells what the command does behind the scenes.
/evo:loop "add dark mode"
Just a goal. The advisor composes the whole pipeline: which phases run, which CLI and model run each phase, and how many cycles. It stops when the work is done.
/evo:loop harden
Steer the approach. A strategy (harden · repair · innovate · balanced) changes the scope and the strictness. The phase spine stays the same, and the posture changes.
/evo:loop --cycles 3 "add dark mode"
Bound the cycles. --cycles N is a hard contract: exactly N cycles, with no early stop.
/evo:loop --cycles 3 harden "tighten input validation"
Stack the levers. Compose them: a strategy, a hard cycle bound and a goal in one command. This is the full-control end of the range.
/evo:loop --resume
Resume. It continues a run from its last checkpoint, with the worktree and the state intact. No work is lost.
evolve checkpoint save --all
Save work in progress. It saves the uncommitted work of each dev worktree as a ref under refs/checkpoints. It does not change the branch, the index or the working tree. evolve checkpoint restore puts the work into a new or clean worktree.
evolve inbox add --file fix-flaky-auth-test.json
Queue a backlog. evolve inbox add is the one way to file an item. The loop takes items in the order of a computed rank: weight, priority class, the items that it unblocks, recurrence, age and goal. The verbs show, list, edit, verify and withdraw curate an item, and each verb validates its change.
evolve inbox route-console <id> <reason> <cycle>
Route the work. It marks an item as operator-owned (route: console-manual). After that, every lane's claim refuses the item. evolve inbox route-lane reverses a false positive. Routing is plumbing, not a prompt.
evolve cli-routing explain builder
Explain the routing. It prints the CLI chain of an agent from the one routing table. The verbs init, set, unset and migrate of evolve cli-routing are the only writers of the table.
policy.json → "fleet": {"count": 3}
Go wide. Parallel lanes, each in its own git worktree. Quota pressure shrinks the width, but never below one isolated lane and never onto your main tree.
evolve release 22.27.0
Publish. A release pipeline that repairs itself: preflight gates, the changelog, an atomic version bump and a CI-verified publish. If the remote suite fails, the release demotes itself, so "latest" never points at a broken build.
/evo:setup
Run it once. It finds your installed LLM CLIs and offers three presets, and one choice writes per-phase routing to .evolve/policy.json. If the project declares a cli_routing table, setup refuses, and evolve cli-routing edits the table. If you skip setup, each phase uses the defaults of its profile.
What makes it work
How it compares
| A single-LLM loop | Evolve Loop | |
|---|---|---|
| Decides what to build | You write out every step | It plans and scopes the work |
| Quality gate | An AI says "looks good" | An independent review must pass |
| When something breaks | Start again | It recovers, repairs and learns |
| Repeated rounds | Retry until the budget is gone | Converge or escalate, never a fourth round (in shadow) |
| Memory | Forgets between runs | Compounds: each run teaches the next |
| Models | One vendor, one model | One routing table: the best model for each phase |
| Best for | Quick throwaway edits | Work that you must merge |
Think of the agent as the developer. Evolve Loop is the team and the process around it: the plan, the review and the discipline that make the output safe to ship.
Try it in 90 seconds
No account. No telemetry. One static binary. The installer verifies its checksum, sets up your PATH and connects the skills to each AI CLI that you already use.
Install Evolve Loop v22.27.0macOS & Linux · Apple Silicon + x64 · Windows through WSL2
curl -fsSL https://mickeyyaya.github.io/evolve-loop/install.sh | sh✓verified end-to-end on macOS, Debian, and Alpine
then, in your AI CLI
evolve doctor/evo:loop --cycles 3 "add dark mode"Pin a version: EVO_VERSION=v22.27.0 … | sh · opt out of PATH edits: EVO_NO_MODIFY_PATH=1
$ curl -fsSL https://mickeyyaya.github.io/evolve-loop/install.sh | sh evolve-install: trying prebuilt: …/evolve_darwin_arm64.tar.gz evolve-install: checksum verified evolve-install: detected AI CLI(s): claude agy Installation complete! evolve-install: installed: evolve 22.27.0 → ~/.local/bin/evolve evolve-install: installed binary fingerprint (SHA256): <the 64-character SHA256 of your binary> evolve-install: done. Next: evolve doctor then /evo:loop --cycles 3 "your goal"
Open source. Apache-2.0. Works with Antigravity, Claude Code, Codex and Ollama.
$curl -fsSL https://mickeyyaya.github.io/evolve-loop/install.sh | sh