goaly GitHub ↗

Loop a coding agent until the goal is verifiably met.

goaly freezes what “done” means, then loops your agent against that bar until it is actually done — a bar the agent cannot weaken to pass.

Install

$ npm i -g goaly  # Node ≥ 20

Run

Give it a goal. Everything else has a default.

goaly
$ goaly "add a /health endpoint returning 200"
 
✔ COMPILE contract frozen ┌ sha 9f3c…a2
● SEAL auto-accepted (logged loudly)
↻ iter 1 agent → verify npm test: 2 failing
↻ iter 2 agent → verify SIGN-OFF veto: returns 500
↻ iter 3 agent → verify SIGN-OFF no veto
✔ DONE two keys turned · 3 iterations
Claude Code Codex Droid pi your own harness

Why it holds

1The bar is frozen.The success check is hashed before the loop starts, so the agent cannot rewrite its own test to finish.
2DONE needs two keys.The frozen check passes and an independent, veto-only reviewer does not object.
3Everything fails closed.An error or a garbage answer is a fail, never a false green. The optional System One gate (--systemone-model) scores each rubric criterion before the LLM judge and can only fail a green. The control loop makes zero LLM calls.

Docs