# Review Panel

> Run multiple independent code reviewers (Codex + Gemini + a fresh Claude) on the current diff or a plan, merge their structured verdicts, and apply a consensus-gated challenge round — returning a pass/fail exit code. Use for "panel review this", "get a multi-model review before I ship", "second-opinion review this diff", or /review-panel. Complements single-reviewer /codex-review.

- Skill: `iamneilroberts/review-panel` (Agent Skill, multi-file: 22 files)
- Install (CLI): `npx skillmds@latest add iamneilroberts/review-panel`
- Raw SKILL.md: https://api.skillmd.com/api/skills/iamneilroberts/review-panel/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: iamneilroberts (https://skillmd.com/u/iamneilroberts)
- Updated: 2026-09-21
- Page: https://skillmd.com/skills/iamneilroberts/review-panel

---


# review-panel

Delegate entirely to `review-panel.sh` — do not hand-run the reviewers or re-judge their verdicts.

## When to use me (placement)

The panel is the **pre-merge gate for a complex or elevated-risk diff** (auth/privacy/cost/
data-loss/money/shared-contract) — three models are worth it when a mistake is asymmetric. It is
**not** a per-task or after-every-change tool; running it on routine diffs burns tokens and trains
you to skim findings. If the right timing/scope isn't obvious, run **`/review`** first — the
orchestrator decides whether a panel is warranted vs a single `/codex-review` vs no review, sets
the round budget, and dispatches here. Reserve the panel for **one** pass near merge,
`--focus`-flagged at the actual risk.

## Invocation
`/review-panel [--base <ref> | --staged | --plan <file>] [--reviewers codex,gemini,claude] [--block-at 0-3] [--focus "…" | --focus-file <f>] [--strict] [--out <path>]`

## Rules (non-negotiable)
- The scripts (`review-panel.sh`, `merge.py`) + `sev.schema.json` are committed and MUST NOT be edited during a review cycle. The implementer edits source, never the gate.
- Do NOT re-judge the panel's verdict. A CRITICAL/IMPORTANT that survives the challenge round is fixed or escalated to a human — never argued away by this session.
- Independence: the Claude reviewer runs as a fresh `claude -p` process; challenges are judged by other models. This session never reviews its own code.

## Gate
Exit `0` clean · `1` blocking findings (fix or escalate) · `2` infra (a transient/reviewer failure or fewer than 2 reviewers — NOT clean) · `3` usage.

## Cost
Default = 3 models × 1 diff; the challenge round fires only on cross-model disagreement and only re-asks the non-flagging models about specific findings. No loops.

## Testing
Hermetic, no live model calls (the ~$60 lesson):
- `python3 .claude/skills/review-panel/tests/test_merge.py` — unit tests for the pure `merge.py`. (Run the file directly; `python3 -m unittest <path>` fails because the path isn't a dotted module name.)
- `bash .claude/skills/review-panel/tests/run_integration.sh` — usage gate, adapter-contract presence, and an offline end-to-end (`buggy→1`, `clean→0`, `lone-refuted→0`) driven by stub reviewers via `REVIEW_PANEL_REVIEWER_DIR`.

Set `REVIEW_PANEL_LIVE=1` to additionally exercise the real reviewer CLIs (codex/gemini/claude) — the only path that spends model tokens. Absent CLIs are a clean SKIP.

