| name | review |
| description | The top-level review verb โ decide WHETHER, WHEN, WHICH, and HOW HARD to review a change
before reaching for a review tool. Assesses the situation (a plan vs a diff, the risk surface,
what changed since the last review, rounds already spent), picks the lightest review shape the
risk justifies (in-session self-review โ cross-model โ multi-model panel), sets an initial
round budget it will extend only on convergence, and dispatches. Exists to stop review spirals:
reviewing before the plan is formed, reviewing after every trivial edit, or looping a reviewer
past the point of convergence. Triggers on `/review`, "should I review this", "what review does
this need", "is this worth a codex-review / panel".
|
| user_invocable | true |
/review โ the review orchestrator (whether / when / which / how hard)
/review does not blindly review โ it assesses the situation, picks the right review shape, sets
a round budget, and then runs it (either an in-session self-review, or by dispatching to a
cross-model gate). Reviewing badly is worse than not reviewing: reviewing before the plan is formed
wastes a pass, reviewing after every trivial edit trains you to ignore findings, and looping a
reviewer past convergence degrades the change.
The ladder (lightest โ heaviest)
Escalate for independence and thoroughness, not out of habit. Start at the lightest tier the
risk justifies:
- light โ in-session self-review (Phase 3B). I review the diff. Fastest and cheapest (no
external model, no process spawn). Its weakness is exactly its cost: it's the author grading its
own work โ least independent โ so it's for low-risk diffs and as a first pass before
escalating.
- cross-model โ
/codex-review (if present). One independent external model (different
vendor), mechanically gated. Reach here when the diff is non-trivial or self-review's
independence isn't enough.
- panel โ
/review-panel (if present). Multiple independent reviewers, pre-merge. For complex
or elevated-risk (privacy/cost/data-loss/money) diffs where a mistake is asymmetric.
Phase 1 โ Assess (read, don't guess)
- Artifact state: a plan/spec with little/no code, a diff (
git diff --stat <base> โ size,
file count), or both?
- Risk surface (the multiplier): elevated when the change touches auth/tokens, permissions/
access control, private data, per-user cost / metered spend, data deletion/migration,
persistent-store writes, money, or a shared wire contract. Low when it's docs, tests, copy, a
mechanical rename, or a localized pure-function tweak with tests.
- Blast radius: flag-gated & dark vs live-to-users vs shipped-on-merge.
- Review history this lane: rounds run, and is the trend converging (fewer/less severe) or
DEEPENING (new lower-severity findings each round)?
Phase 2 โ Choose a shape and set a round budget
| Situation | Shape |
|---|
| Plan/spec exists, little/no code | Defer the diff review. Review the plan now. Catching an architecture gap here is ~free; after N tasks it's a rebuild. |
| Trivial / docs-only / tests-only / mechanical rename | No review. Say why in one line. |
| Normal feature diff, low risk | light (Phase 3B) or a single cross-model pass โ one gate, not both. |
| Complex OR elevated-risk diff, pre-merge | panel, --focus-flagged at the exact risk. |
| Multi-task lane | Budget the lane: plan review now โ one review per substantive task โ one panel pre-merge. Don't panel every task. |
| Already reviewed, only trivial edits since | Don't re-review. |
Round budget โ set from risk, extend only on convergence:
- Skip 0 (trivial) ยท Standard 1 ยท Elevated/multi-file 2 ยท High-risk (auth/privacy/cost/data-loss) 2โ3.
- Converging โ may extend +1 with a one-line justification in the lane summary.
- DEEPENING (round 2+ surfaces new, lower-severity findings instead of confirming the round-1
fixes) โ stop. Escalate the residual to the human. It's a scope call, not a convergence
problem โ do not open another round.
- Hard backstop 6, absolute. Reaching it means escalate, never a 7th.
Conditional dispatch: use /codex-review for the cross-model shape and /review-panel for the
panel shape if they exist in this project; otherwise fall back to the light self-review at the
chosen budget, and say so.
Phase 3A โ Dispatch (cross-model / panel)
Invoke /codex-review (single) or /review-panel (panel) for the target (--plan <file> before
build; --base/--staged after). Carry the anti-spiral rules (below). Those skills own their exit
codes โ don't re-run the deterministic gates by hand.
Phase 3B โ Light in-session self-review
The cheap mode: I review the diff for real problems and grade every finding by evidence.
Evidence ladder โ each finding gets one tag; nothing is a confirmed bug unless provable:
- CONFIRMED โ traced the full path (file:line โ file:line, 3+ steps) or a concrete triggering
input. Only CONFIRMED is blocking.
- LIKELY โ strong reasoning, one inferred link. POSSIBLE โ an untraced smell, informational.
UNFOUNDED โ considered and ruled out.
Rule: if I can't trace it to lines or produce a triggering input, it's at most POSSIBLE. Keeps the
blocking list short and trustworthy.
Assumption-verification (run first). For each changed file: "what must be true elsewhere for
this to actually run?" โ then verify instead of trusting. Generic categories:
- Wiring โ a new/edited unit is actually registered/imported where the system loads it
(coded-but-not-wired ships silently).
- Config/env โ new settings/secrets are declared where the code reads them, gated, and
documented; deploy/CI config agrees (no sibling-file drift).
- Contract stability โ public names, response keys, routes, and stored-data keys are unchanged
unless changing them is the point.
- Every mutation site โ a new field on a stored shape is set at all write paths, not just the
new one.
Domain checks: schema/API consistency across consumers; concurrency correctness (unguarded
read-modify-write on eventually-consistent stores); auth on every new entrypoint; security
(secrets, input validation, injection, output encoding); common bugs (null/undefined, swallowed
errors, off-by-one, missing await); quality (dead code, needless complexity).
Output: per finding [TAG] file:line โ what it is, why it bites, the fix; trace or
triggering input for CONFIRMED. Lead with CONFIRMED/LIKELY, then POSSIBLE as a short list.
Anti-spiral rules (apply in every mode)
- Pre-commit the fix bar BEFORE reading findings. Fix CRITICAL/IMPORTANT (core journey, data
loss, security, privacy/cost leak). MINOR/NIT โ file as issues, don't fix in-loop.
- DEEPENING = terminal (Phase 2). Stop and escalate; don't open another round.
- Don't re-review after a trivial/mechanical fix โ only after substantive change.
- The author never overrules a cross-model CRITICAL/IMPORTANT by re-arguing โ that forfeits the
independence. Genuine disagreement is a human escalation, not a silent override.