We graded the 5 most-starred agent-loop repos

97 loops from five of the most-starred public repos that ship Claude Code and Codex loops, run through the same deterministic grader that decides what goes on looprepo. 5 reach B. None reach A. Each repo's flagship loop gets to B or A with one to three added lines.

Safety Score v2 grades. Flagship = the first loop a new user meets in each repo.
RepoB or betterBestFlagship loop → with fixLoops gradedStars
superpowers0FF A1300,649
ECC (everything-claude-code)1BF A7281,442
Ralph0CC B121,984
ralph-claude-code1BF B39,703
Loopy (Forward Future)3BF A853,185

What the grade checks

The Safety Score asks five things of a loop before you hand it the keys: does it know when it is done (a check a script can run, not a feeling), does it give up after a fixed number of turns, does it run a real check every pass, does it limit what it can touch, and does a person sign off before anything ships. It is deterministic — no model in the loop — and it fails by default. Read the full rubric.

The pattern

Loopy is 85 of the 97, so these totals mostly describe its catalog; the table above shows each repo on its own.

None of this means these repos are bad — several are excellent, and loops are a small part of what some of them do. It means a loop copied out of them will usually run until it is stopped by hand.

superpowers · 300,649 stars

superpowers ships workflow skills rather than standalone loop prompts. Its loop is the review-and-fix cycle inside subagent-driven development, which is carefully written: it runs real tests every round and has a breaker. It says "Five rounds maximum", but our grader does not read "N rounds maximum" as a cap (it does read "stop after 5 rounds" or "max 5 turns"), so it does not count it — a gap on our side, not theirs. The excerpt ends at the breaker rule; the adjudication list after it is left out so the excerpt plus the fix fits the grader's length limit. The other miss is real: nothing says what "done" looks like in a way a script could check.

Flagship: Subagent-driven development: the fix loop (lines 354–413) — F 0/100. Missing: an exit a script can check, a turn cap.

The fix — these lines added to the end, nothing else changed:

Stop after 5 rounds. Exit when the re-review reports no open Critical or Important findings and the task tests pass.

Graded again: A 85/100.

ECC (everything-claude-code) · 281,442 stars

ECC's /santa-loop ties for the top grade in the whole set: a B, with a hard round limit and an escalation path instead of a blind retry. The rest are thinner: 5 of 7 fail the gate outright because nothing in them says when to stop (three of those are skills that describe loop patterns rather than run one — we graded every ECC file that calls itself a loop). /loop-start, the command that sets up ECC loops, lists an explicit stop condition as a required safety check but leaves the condition to the runbook it writes, so the text you copy has none.

Flagship: /loop-start — F 0/100. Missing: an exit a script can check, a turn cap, a scope limit.

The fix — these lines added to the end, nothing else changed:

Stop when `npm test` exits 0, or after 10 turns, whichever comes first. Only touch files in the task scope. Never push or merge: open a PR for review.

Graded again: A 85/100.

Ralph · 21,984 stars

The original Ralph prompt has a real exit: reply COMPLETE when every story passes. The cap lives in ralph.sh (a max-iterations argument), not in the prompt, so anyone who copies the prompt into their own runner gets a loop that never gives up.

Flagship: Ralph agent prompt (task, quality, stop condition) (lines 1–17 and 76–108) — C 65/100. Missing: a turn cap, a human gate before shipping.

The fix — these lines added to the end, nothing else changed:

Stop after 10 iterations even if stories remain, and report which are left.

Graded again: B 80/100.

ralph-claude-code · 9,703 stars

The PROMPT.md template is a B — it spells out exactly when to set EXIT_SIGNAL and runs tests each pass. The two shipped example prompts score far lower: no exit, no cap, no scope.

Flagship: Example: simple CLI tool — F 0/100. Missing: an exit a script can check, a turn cap, a scope limit, a human gate before shipping.

The fix — these lines added to the end, nothing else changed:

Set EXIT_SIGNAL: true when every item in fix_plan.md is done and the test suite passes. Stop after 15 loops. Only touch src/ and tests/; never push.

Graded again: B 80/100.

Loopy (Forward Future) · 3,185 stars

Loopy is the largest set by far: every loop in Forward Future's live catalog. They are graded through the same door looprepo uses for the Forward Future loops it carries, which is the kinder of the two (see How we did it). Most are clear, well-written prose, but most stop "when done" — a judgment call, not a test the agent can run — and few run a check each pass.

Flagship: The docs sweep — F 0/100. Missing: an exit a script can check, a turn cap, a check that runs each pass, a scope limit.

The fix — these lines added to the end, nothing else changed:

Stop when every doc example runs and `npm run docs:check` exits 0, or after 10 turns. Only touch docs/ and README files. Open a PR for review; never merge.

Graded again: A 85/100.

How we did it

Grade yours

Paste a loop into the grader and see what it is missing, or browse the A and B shelf — every loop on it already stops on its own.