Gauntlet Kit: a loop that keeps building until it wins
An agent protocol for any coding agent: a concrete quality bar, an independent critic, blind A/B against a real reference, and a gate that fails without evid…
On this page
Gauntlet Kit: a loop that keeps building until it wins
TL;DR
- It turns "build me X" into a loop: build, get judged by an independent critic against a real quality bar, rebuild, until it wins.
- Four ideas do the work: a concrete bar you can open or measure, builder ≠ critic, blind A/B with labels stripped and order randomized, and no round limit.
- The article gives a prompt; this gives a runnable protocol where loop state lives on disk, survives compaction, and the
gatefails without a verdict plus evidence artifact. - Zero dependencies, Node 18+; Playwright only if you want automatic screenshots.
What it is and who it is for
gauntlet-kit packages the Gauntlet Loop for any coding agent — Claude Code, Codex, Cursor, Copilot, Gemini CLI, or anything that reads AGENTS.md. The method comes from Matt Shumer, who built a 55,000-line, AAA-looking first-person shooter from a single prompt by having agents compare their work against real Call of Duty screenshots and keep going until they won; Ben Tossell wrote up the method.
It is for the person whose agent produces something that works and looks finished in one round, and who has no way to tell whether it is actually good. The README states the whole interface in two lines: point your harness at the repo, say what you want built.
The four ideas
- A concrete bar. Not "make it great" — an artifact you can open, run or measure. Adjectives let an agent declare victory on round one.
- Builder is not the critic. A builder remembers why it made each choice and will defend it; verdicts come from a fresh context that never saw the reasoning.
- Blind A/B. Strip the labels and randomize the order, or the critic scores "ours" generously and the loop ends early.
- No round limit. The bar decides when you are done, not a schedule.
What this repository adds
The article gives a prompt; this gives a protocol.
| Prompt alone | gauntlet-kit | |
|---|---|---|
| Bar selection | you write it each time | auto-proposed from a domain library in bars/ |
| Loop state | in the agent's context | on disk, survives compaction and resume |
| Blind A/B | "do a blind comparison" | randomized pair on disk, mapping hidden from the judge |
| "Done" | the agent's say-so | gate fails without a verdict plus evidence artifact |
| Ties | judge's discretion | counted as a loss, by design |
| Progress | ask the agent | self-contained live HTML page |
| Harnesses | copy-paste per tool | entrypoints for Claude Code, Codex, Cursor, Copilot, Gemini |
How it runs
Phase 0 lock a bar → concrete, inspectable, external, above your level
Phase 1 decompose → 4–12 independently judgeable pieces
Phase 2 the gauntlet → per piece: builder → capture → blind A/B → fresh critic → gap → repeat
Phase 3 smoothing → make many agents' work feel like one product
Phase 4 stop → won, diminishing returns, or budget. Never "it looks good now"
Running it takes three commands and a way to watch:
node scripts/gauntlet.mjs status # every piece, round, current gap
node scripts/gauntlet.mjs progress # writes progress/live.html
node scripts/gauntlet.mjs gate # exits 1 unless every piece has evidence
The full protocol is gauntlet/LOOP.md and the hard constraints are gauntlet/RULES.md. Both are written for an agent to execute rather than for you to read, though they are short. The ledger — pieces, rounds, verdicts, evidence — lives in gauntlet/state/, and agents/ holds the prompt cards for decomposer, builder, critic, blind judge and smoother.
The README's advice on watching is one line: watch from a distance, because interrupting a builder mid-round costs you the round.
Honest limits
The README lists five, and they are the useful part:
- A bad bar produces a confident bad result. The bar is the one thing worth your attention.
- It is expensive. Many agents, many rounds, real tokens: compute traded for quality.
- Some things cannot be barred. If the output cannot be inspected, compared or measured, the method has nothing to grip.
- Critics can still be wrong. They are calibrated to be harsh and to default to the reference, which costs extra rounds — deliberately, because the opposite failure ends the loop early.
doneis notwon. A piece that stalls at diminishing returns is reported as stalled, with its residual gap.
When to use it, when not to
Use it when the hard part is taste rather than correctness — a landing page, a game feel, a CLI's ergonomics — and you have a real reference to compare against. The bar can be a competitor's page, a screenshot, a spec or a measurement, but it has to be something a critic can look at.
Do not use it when the output cannot be inspected or measured, and do not use it to skip Phase 0: a vague bar is the failure mode that makes a confident bad result. And read status before believing a win — done is not won.
Sources
- gauntlet-kit — repository — the four ideas, protocol phases, layout, honest limits quoted above.
- README.md — commands, layout, credit and licence (MIT).
Project page: Gauntlet Kit
It is an independent, unaffiliated packaging of the method.
FAQ
Does it need an API key or a service? No. The README says zero dependencies and Node 18+; Playwright is only needed for automatic screenshots.
What stops the loop? The bar, not a round limit — the README lists won, diminishing returns, or budget as the three stops, and never "it looks good now".
Why is a tie counted as a loss? By design, so a generous critic cannot end the loop early on a comparison that was actually even.
Where does the loop state live? On disk in gauntlet/state/, so it survives compaction and resume, and the gate command fails when a piece has no verdict plus evidence.