review-panel
Skill12 starsChanged 44 days agoApache-2.0View on GitHub
Blind multi-agent correctness sweep of a file set. Many readers each take one bounded area and see nothing of each other's work; every finding is then checked by an agent that did not raise it, and a claim that can be run is run. Writes a report for a person (every defect, each place it must be fixed, and what nobody read) and a fix brief an agent can fix from; never edits the tree it reads. Distinct from diff-review (anchored to a change set), cyw (the author checking itself) and security-review-codebase (one lens, no verification step). Use when the user invokes /review-panel, or says "sweep these files for defects", "review the codebase with a panel", "blind review", "have several agents read this independently". Argument: the problem statement (inline text or a file path), or a job file; with neither, the skill interviews for one.
12 other projects use a version of this.
Adopted by
Most recently taken up by
- JeffreyFerreiras/ai-skillstheir own version, first seen Nov 1, 2026
- gigio1023/agent-skillstheir own version, first seen Oct 13, 2026
- gigio1023/gigio-skillstheir own version, first seen Oct 13, 2026
- raine/consult-llm-mcptheir own version, first seen Oct 8, 2026
- HACK-WU/skillstheir own version, first seen Sep 25, 2026
- kbichave/skillstheir own version, first seen Sep 1, 2026
Other versions12 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 12
- raine/consult-llm-mcp★ 148same name
- 9thLevelSoftware/legion★ 76same name
- iamneilroberts/claude-skills★ 26same name
- josherau/claude-operating-core★ 3same name
- gigio1023/agent-skills★ 2same name
- gigio1023/gigio-skills★ 2same name
- HACK-WU/skills★ 2same name
- kbichave/skills★ 2same name
- JeffreyFerreiras/ai-skills★ 1same name
- patmagee/skills★ 1same name
2 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository19 other files it gives its agents.
- AGENTS.mdAGENTS.md
- clarifySkill
- commitSkill
- cywSkill
- demo-videoSkill
- diff-reviewSkill
- extract-hooksSkill
- handoffSkill
- plan-duelSkill
- plan-initSkill
- plan-init-v1Skill
- plan-phaseSkill
- plan-phase-v1Skill
- plan-runSkill
- plan-run-v1Skill
- security-review-codebaseSkill
- tddSkill
- web-verifySkill
- xcSkill
The file
We split this skill into the rules it gives an agent
3 rules. 0 are common, 1 is distinctive, and 2 are very specific to this project.
0
Common
Most of the 11 edited versions we read keep these.
1
Distinctive
This author's own choices. Worth a look.
2
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 93
No worker is handed the source path, and none is handed a path that spells whose claim it holds: planning copies the files under review, …
- Very specific: line 122
Run it: Write the adapter config first — one JSON file naming, per lane, the runtime, the model, how many workers run at once (slots, two …
- Distinctive: line 170
Every worker is a fresh process that was supplied no peer's answer, and nothing it is handed names the unit that raised what it is checking.
“Common” is measured: kept by at least 6 in 10 of the 11 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Review Panel — Blind Multi-Agent Correctness Sweep
Classification: Runtime-limited — this skill needs a host that can run two workers at
once and refuses one that cannot; on such a host it works the same under either runtime.
The requirement is the product, not a speed-up: every finding is judged by a unit that did
not raise it, so one worker doing both jobs is not a weaker review but a different and
misleading one, and there is nothing underneath to degrade to. Within that requirement
there are four rungs, levels of how independent the checking is. Strongest is two runtimes: two models read every area blind,
and each finding is verified by the other model, so the report may claim model divergence.
Next is one runtime running two models: the same claim, from two models that ran under one
CLI, sharing its tools, system prompt and permission checks, which the report says. Weakest are
two runtimes running one model and one runtime: two fresh contexts of the same model,
in two tools or one, and the report says context divergence and nothing stronger. Models are
compared by name as written, so one model reached under two names counts as two. Coverage is
the same at all four; only what the report may claim varies,
and the rung follows the configuration, which is pinned for the run. A lane that lands no
unit ends the run with a refusal naming it — not a fifth rung. The
run is two bundled stdlib-only Python 3.10+ programs — the stage engine
review_panel.py and the driver review_panel_run.py that owns the loop — a prerequisite
the skill checks before it dispatches anything. git is the other one, wherever the tree
under audit is a repository: the inventory asks git what is tracked, and planning refuses
without it. And the diff-review skill, installed beside this one: its review_runner.py
supervises every worker. If that skill is unavailable the run stops before dispatching and
names it; there is no equivalent to substitute, so install it beside this one.
Progress: observable — the driver appends one line to dispatch/progress.log in the run
directory for every spawn, every adjudication and every landing, beside whatever each
worker's supervisor streams to its own display log. Nothing on the correctness path reads
either: the engine's stages read result.json, error.txt and dispatch.json, never the
log. Tail it while the run goes, or ask review_panel_run.py status <rundir>, which takes
no lock and writes nothing.
Overview
Take a problem statement and a set of files, divide the files into bounded areas, and have
many agents read them — none seeing another's work — for what is wrong. Then send every
finding to an agent that did not raise it, which reproduces the claim where it can be run
and otherwise judges it by reading. A run writes two outputs from one set of records. The
report (report.md, and report.html, the same content as a web page) is for a person:
every defect — one mistake, with every site where it has to be fixed — with a location, a
plain-language consequence, a severity, what the checker decided and the source it cites
quoted from the pinned tree, plus every path nobody read. The fix brief is for an agent
that will fix the code: fix-brief.md for every defect, fix-brief/D<n>.md for one defect
alone, and fix-brief.json with the same records for a script. It leaves out refuted sites
and everything the fix does not need.
Which unit raised what is kept to an appendix, out of the material somebody reads while
fixing. This skill reports; it never edits, stages or commits in the tree it reads.
A clean sweep is not evidence a tree is sound, and a long report is not a thorough one —
yield is not recall, and the report says so itself under Report description, where the
person who has to act on it will read it.
Your part is three steps: the job, one command, the summary. The driver plans the run,
launches every unit, lands every reply, calls the engine's stages in order and writes the
report; a killed run resumes from the files on disk with no work redone and none lost.
Nothing below asks you to dispatch a unit by hand. references/dispatch.md holds the
adapter config in full, the reasoning behind each flag, and what to do when a run stops.
The interpreter is the prerequisite, and its absence is a message, not a crash. Before
anything is dispatched, locate a Python 3.10+ interpreter — on Windows the launcher py -3
first, then python3; elsewhere python3 — counting a candidate only if it prints a
version. If none does, report Python 3.10+ required and stop, dispatching no reader:
without the engine there is no partition to read against, no routing of findings, and no
report to write, so the sweep has nothing to hand a reader. Both programs re-check the
version at startup and exit with the same Python 3.10+ required message.
The four rules
- Bounded area. One agent gets one chunk it can read closely, not skim.
- Blind. A payload file contains no other unit's output. It is a property of the file, so a test asserts it rather than a prompt requesting it.
- Verified by a stranger. A finding never goes back to its finder — and where the lanes run two models, it goes to the other model.
- Run it if it can be run.
references/verifier.mdholds the rule in full — what counts as evidence, when a verdict must beunresolved, and why a search of the source isdocumentaryrather thanexecuted— and it is the file the verifier is handed.
No worker is handed the source path, and none is handed a path that spells whose claim it
holds: planning copies the files under review, the lockfiles and any support files to a
snapshot under the run directory, and each attempt gets an opaque token naming its input
directory and its working directory both.
Most files under references/ are those briefs, not instructions to you. The engine
loads one per unit kind at plan time and copies it into that unit's payload — which is what
rule 4 means by verifier.md being the file the verifier is handed. You never dispatch one
yourself; open one to see what a worker was actually asked. job.md, dispatch.md and
report-format.md are the three written for whoever runs the skill.
references/architecture.md is for none of them — it is a guide to the two programs for
somebody changing them, and no step of a run sends you there.
Steps
- The job. The argument is the problem statement — inline text, or a path to a file
holding it — or a path to an existing job file, loaded as it stands: a file whose content
is a JSON object is a job, any other file is the statement. Text becomes a job by the
interview in
references/job.md, which holds that interview, the defaults for a run with no user to answer, the restatement the owner confirms, and thejob.jsonformat you write the job in. Two refusals are yours to get right, because both are about where files sit rather than about what the job says.rootis absolute: the job file is copied into the run directory and the tree does not move with it, so a relative root is refused, as is a root inside a git directory. And the run directory lies outsiderootand outside every git repository. Writejob.jsonbeside your own work and name the run directory on the command line; the driver creates it, and a directory already sitting there that holds no committed run is refused by name rather than deleted. Run it. Write the adapter config first — one JSON file naming, per lane, the runtime, the model, how many workers run at once (
slots, two unless the owner picks another number when you ask), and the command line to launch a worker with in each of the two permission modes.references/dispatch.mdgives its shape and a worked example. Lanes A and B are what makes rule 3 true, so give them two runtimes where the host has two. Two models on one runtime run as well, when every command carries⟪model⟫, the one proof the named model reached the worker; without it they are refused before anything is planned. A lane may name a backend — an entry in the user's backends file that sets its model and credentials. Then:<python> <this skill's dir>/review_panel_run.py run --job <job.json> \ --rundir <dir> --adapter <adapter.json> --goWithout
--goit plans, prints the preview and exits 0 having spawned nothing; it never reads stdin. The preview counts one capability probe beside the readers — the single unit per run that establishes whether the tree builds and whether its tests run, which every verification payload then carries (references/probe.md). With--go, the run goes to a report through its rounds: reading, verification, clustering into sites, a merge that groups the sites of one mistake into one defect, a check of that grouping by the other lane, and synthesis. Watchdispatch/progress.logas it goes. To stop it, create the drain file it names on its first line: claiming stops, what is running finishes, and the run exits resumable — on every platform and at any point.A finished run wrote
report.md, and the driver's last line names it. Exit 0 alone does not say so: a drained run and a--go-less preview exit 0 too, having written no report. The other two exits are not the same thing either. A stop is resumable — an attempt whose outcome cannot be proven, a storage fault, a host refusal, a spent time budget — so put right what the message names and run the same command again; where it names a unit,resolve-attemptandresolve-unitare the two ways to answer it, inreferences/dispatch.md. A refusal is not resumable: the snapshot changing under the readers is the one to expect, and nothing read against it can be trusted, so that run ends there and a new one is planned.- Hand both outputs to the owner, as
references/report-format.mdcloses: the report for a person, the fix brief for an agent. Answers to the owner's questions, whether in the job or asked since, corrections to findings you can show are wrong, and caveats about the run go inreport-notes.json, not in the conversation;report --rerenderputs them in the report. Then point the owner atreport.mdandfix-brief.mdby path; never inline a snapshot file, an evidence block or a payload. To fix, give an agentfix-brief.md, or onefix-brief/D<n>.mdper agent, and the tree the review read — the commit the brief names, plus any uncommitted changes the review saw; its line numbers refer to that tree. The brief does not carry the notes: leave out, or tell the agent about, any defect a note corrects.
What the run claims
Every worker is a fresh process that was supplied no peer's answer, and nothing it is
handed names the unit that raised what it is checking. Workers are not prevented from
reading the run directory: blindness is a property of what each one is given, not of what it
could reach. Reproductions are serialized, one at a time across both lanes, because separate
directories are not separate ports, caches or credentials — and a failure that is the
environment's stays unresolved rather than becoming a verdict.
The rung the report names follows the configuration, which is pinned for the life of the run: a resume naming a different runtime, model or backend is refused by name, so no lane quietly becomes a second context of the other's runtime and no rung drops below the one configured. What a run can do instead is end without one. A lane that lands no unit answered nothing it was given, so no finding in the run was checked by a unit that did not raise it — rule 3, which every status on the page rests on. The driver stops at the first round boundary where that is settled, names the lane, and writes no report. Otherwise the report states the rung, both lanes' adapters and both permission modes, so what the run was allowed to claim is readable months later from the report alone.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

