Five reviewers. One honest verdict.
Crazy 8 is a skill you give your AI coding agent. Before something risky ships, the same change goes to four independent AI model families plus your agent’s own read. The findings are compared, and the run proves every reviewer actually answered.
Free · MIT licence · 41 KB · Python 3.8+ and your own OpenRouter key
A 90-second explainer with a synthetic voice-over (ElevenLabs). The captions are part of the picture, so it also works with the sound off.
Six steps, no trust required.
- Scope it. Point it at a diff, some files or a folder. A dry run bundles the code and prints the worst-case cost. Nothing is sent.
- Check the coverage. A file counted as bundled can still arrive cut short. The run records truncation and stops until you accept it.
- Send it out. Four model families, in parallel, each returning findings in the same JSON format. Your own agent and any specialist sub-reviewers add theirs.
- Prove they ran. A reviewer that crashes can leave an empty list, which looks exactly like “found nothing”. The summary file lists who answered, the tokens used and the cost, and the run fails loudly if any reviewer did not.
- Count the agreement. “4 of 5 agree” is strong. A lone reviewer is a FLAG: check it against a real source before you act.
- Decide. The review is read-only. It reports; you or your agent fix, as a separate step.
What it refuses to pretend.
- Empty is not clean. An error stub and a real “nothing found” are told apart by the summary, never by the file.
- Starved is not broken. A reviewer cut off at its output limit gets a retry with a bigger cap, not a place on the bench.
- Counted is not covered. Bundled files are checked for cut-off content, and you can require that the symbol you changed is in the bundle.
- Lone voices get verified. Models hallucinate from partial context. Single-reviewer findings are flags until checked.
- Read-only. It never edits the reviewed code, and it never writes its output inside your repository.
- Spend is capped first. A positive budget is required, and the run refuses to start if the worst case would exceed it.
- Free means free. A seat you believed was free but that was billed is flagged.
- Once, aimed, at the gate. A cheap pass on every change; the full panel once, on the final change, before money, logins, tenant data, migrations or deploys ship.
Copy a folder. Set a key.
Unzip it into your agent’s skills folder (for Claude Code, ~/.claude/skills/). Edit models.json so each seat has a current model and current prices, then run a dry run.
# 1. unzip into the skills folder
unzip crazy8-skill.zip -d ~/.claude/skills/
# 2. give it your own OpenRouter key (never put it in a file)
export OPENROUTER_API_KEY=...
# 3. dry run: bundles the change, prints the worst-case cost, sends nothing
python ~/.claude/skills/crazy8/scripts/crazy8.py --repo . \
--diff main..HEAD --budget-usd 2.00 --out ../review-1 --dry-run
# 4. the real run, then verify it from the summary alone
python ~/.claude/skills/crazy8/scripts/crazy8.py --repo . \
--diff main..HEAD --budget-usd 2.00 --out ../review-1
python ~/.claude/skills/crazy8/scripts/crazy8.py verify ../review-1
What it sends, what it costs.
Your code leaves your machine
The change you review is sent to the model vendors in your models.json, through OpenRouter. Only review code you are allowed to share with them. The runner refuses to send a bundle that looks like it contains secrets.
Cost is yours, and capped
A full panel on a small change is typically tens of US cents to a couple of dollars. Your numbers will differ with the models and the size of the change. The budget flag is required and enforced before anything is sent.
How far it has been tested
The runner has 38 tests against a local mock server: failed seats, starved seats, truncation, a missing key, a too-small budget. It has not yet been run against every live model service or on every platform. Tell us what you find.
crazy8-skill.zip
A SKILL.md your agent reads, a standard-library-only Python runner, its tests, an example models.json, and the MIT licence.
eeeccf9639b67f50142e1abe6b359d5a1c36a02974b2bd00a32b46cb3486baab
Check it: sha256sum crazy8-skill.zip (Windows: certutil -hashfile crazy8-skill.zip SHA256).
Tried it on a real project?
Tell me what it caught, or what got in your way. That is how the skill gets better.
Tell me how it went