Multi Review
Runs the code-review skill with 2 different models in parallel, then synthesizes with active validation.
Process
Phase 1: Gather Reviews
Create a unique temp dir + get the PR diff (same as code-review)
# Unique temp dir for this run
TMP_DIR="$(mktemp -d -t multi-review.XXXXXX)"
PR_DIFF="$TMP_DIR/pr-diff.txt"
# If PR number provided, use it. Otherwise current branch.
gh pr diff [PR_NUMBER] > "$PR_DIFF"
Run 2 parallel reviews via bash
# Claude review MUST use the `claude` CLI (not `pi -p --model ...`) so it uses Claude auth.
claude -p --model opus --permission-mode bypassPermissions \
"Read and follow /Users/pat/Work/pi-skills/skills/code-review/SKILL.md to review the PR. Diff is at $PR_DIFF" \
> "$TMP_DIR/review-opus.md" &
# Codex review continues to use pi.
pi -p --model gpt-5.5 --provider openai-codex \
"Read and follow /Users/pat/Work/pi-skills/skills/code-review/SKILL.md to review the PR. Diff is at $PR_DIFF" \
> "$TMP_DIR/review-codex.md" &
wait
If Claude fails because of auth or local lock contention, rerun only the Claude command after fixing auth (claude auth) or retrying.
Phase 2: Active Validation (IMPORTANT)
Do not blindly trust the reviewers. Validate each finding yourself.
Read PR context first
Before looking at sub-agent reviews, get the full picture:
# What the PR claims to do
gh pr view [PR_NUMBER] --json title,body
# What it actually does
cat "$PR_DIFF"
# What others have already said
gh pr view [PR_NUMBER] --json comments,reviews --jq '.comments[].body, .reviews[].body'
Form your own impressions. Note any issues already flagged in PR feedback.
Collect all findings
Build a deduplicated list of every issue from both reviews.
Note which model(s) found each issue.
Validate EACH finding
For every finding, actually look at the code and verify:
- Is this a real bug/issue? (check the code, don't just trust the claim)
- Is it a false positive? (model hallucinated or misunderstood)
- What file/line is affected? (verify it exists and matches)
Score by IMPACT, not consensus
Rate each validated issue by actual severity:
- 🔴 Critical: Breaks functionality, security issue, data loss
- 🟠 High: Real bugs, incorrect behavior, major guideline violations
- 🟡 Medium: Performance, maintainability, edge cases
- 🟢 Low: Style, minor improvements, nitpicks
Consensus count (both models) ≠ importance.
- Consensus often means "obvious issue any reviewer would catch"
- Unique findings may be subtle insights worth MORE attention, not less
Flag unique findings for extra scrutiny
When only one model found something:
- WHY did only one catch it? (deeper insight vs hallucination?)
- Validate more carefully - could be the most important find
- Could also be a false positive - verify against actual code
Check for gaps
What might BOTH models have missed?
- Complex state/timing issues (e.g., async race conditions)
- Claimed features that don't actually work (check PR description)
- Subtle logic errors in control flow
- Look at the PR description - are all claims implemented?
Phase 3: Synthesized Output
- Output format
# 🔍 Multi-Model PR Review: [PR title]
## Validated Issues
### 🔴 Critical
[Issues that must be fixed - functionality broken, security, etc.]
### 🟠 High Priority
[Real bugs, incorrect behavior - should fix before merge]
### 🟡 Medium Priority
[Performance, maintainability, edge cases - should discuss]
### 🟢 Low Priority
[Style, minor improvements - nice to have]
Each issue should include:
- **File**: path/to/file.ext#L10-L15
- **Status**: ✅ Confirmed | ⚠️ Needs verification | ❌ False positive
- **Found by**: Opus / Codex / PR feedback
- **Description**: What's wrong and why it matters
- **Suggestion**: How to fix (if applicable)
## ❌ False Positives Filtered
[List any findings that were wrong, with brief explanation]
## ⚠️ Potential Gaps
[Things all models may have missed - especially check PR description claims]
## 📊 Model Coverage
| Issue | Opus | Codex | PR | Status |
|-------|:----:|:-----:|:--:|--------|
| Issue 1 | ✅ | ✅ | - | ✅ Confirmed |
| Issue 2 | ❌ | ✅ | - | ✅ Confirmed |
| Issue 3 | ✅ | ❌ | - | ❌ False positive |
| Issue 4 | ❌ | ❌ | ✅ | ⚠️ Models missed! |
## Final Verdict
**[MERGE / FIX FIRST / NEEDS DISCUSSION]**
[Brief explanation of verdict]
Key Principles
- Validate, don't just synthesize - You are the senior reviewer, not a secretary
- Unique findings deserve MORE attention - They might be the deepest insights
- Consensus ≠ importance - Obvious issues get caught by all; critical bugs may be subtle
- Check what's missing - The worst bugs are the ones no one found
- Compare against PR description - Do claimed features actually work?
1---2name: multi-review3description: Multi-model code review. Runs code-review skill with 2 models in parallel, then synthesizes findings.4---56# Multi Review78Runs the `code-review` skill with 2 different models in parallel, then synthesizes with **active validation**.910## Process1112### Phase 1: Gather Reviews13141. **Create a unique temp dir + get the PR diff** (same as code-review)15 ```bash16 # Unique temp dir for this run17 TMP_DIR="$(mktemp -d -t multi-review.XXXXXX)"18 PR_DIFF="$TMP_DIR/pr-diff.txt"1920 # If PR number provided, use it. Otherwise current branch.21 gh pr diff [PR_NUMBER] > "$PR_DIFF"22 ```23242. **Run 2 parallel reviews via bash**25 ```bash26 # Claude review MUST use the `claude` CLI (not `pi -p --model ...`) so it uses Claude auth.27 claude -p --model opus --permission-mode bypassPermissions \28 "Read and follow /Users/pat/Work/pi-skills/skills/code-review/SKILL.md to review the PR. Diff is at $PR_DIFF" \29 > "$TMP_DIR/review-opus.md" &3031 # Codex review continues to use pi.32 pi -p --model gpt-5.5 --provider openai-codex \33 "Read and follow /Users/pat/Work/pi-skills/skills/code-review/SKILL.md to review the PR. Diff is at $PR_DIFF" \34 > "$TMP_DIR/review-codex.md" &3536 wait37 ```3839 If Claude fails because of auth or local lock contention, rerun only the Claude command after fixing auth (`claude auth`) or retrying.4041### Phase 2: Active Validation (IMPORTANT)4243**Do not blindly trust the reviewers. Validate each finding yourself.**44453. **Read PR context first**46 Before looking at sub-agent reviews, get the full picture:47 ```bash48 # What the PR claims to do49 gh pr view [PR_NUMBER] --json title,body50 51 # What it actually does52 cat "$PR_DIFF"53 54 # What others have already said55 gh pr view [PR_NUMBER] --json comments,reviews --jq '.comments[].body, .reviews[].body'56 ```57 Form your own impressions. Note any issues already flagged in PR feedback.58594. **Collect all findings**60 Build a deduplicated list of every issue from both reviews.61 Note which model(s) found each issue.62635. **Validate EACH finding**64 For every finding, actually look at the code and verify:65 - Is this a real bug/issue? (check the code, don't just trust the claim)66 - Is it a false positive? (model hallucinated or misunderstood)67 - What file/line is affected? (verify it exists and matches)68696. **Score by IMPACT, not consensus**70 Rate each validated issue by actual severity:71 - 🔴 **Critical**: Breaks functionality, security issue, data loss72 - 🟠 **High**: Real bugs, incorrect behavior, major guideline violations 73 - 🟡 **Medium**: Performance, maintainability, edge cases74 - 🟢 **Low**: Style, minor improvements, nitpicks7576 **Consensus count (both models) ≠ importance.**77 - Consensus often means "obvious issue any reviewer would catch"78 - Unique findings may be subtle insights worth MORE attention, not less79807. **Flag unique findings for extra scrutiny**81 When only one model found something:82 - WHY did only one catch it? (deeper insight vs hallucination?)83 - Validate more carefully - could be the most important find84 - Could also be a false positive - verify against actual code85868. **Check for gaps**87 What might BOTH models have missed?88 - Complex state/timing issues (e.g., async race conditions)89 - Claimed features that don't actually work (check PR description)90 - Subtle logic errors in control flow91 - Look at the PR description - are all claims implemented?9293### Phase 3: Synthesized Output94959. **Output format**9697```markdown98# 🔍 Multi-Model PR Review: [PR title]99100## Validated Issues101102### 🔴 Critical103[Issues that must be fixed - functionality broken, security, etc.]104105### 🟠 High Priority 106[Real bugs, incorrect behavior - should fix before merge]107108### 🟡 Medium Priority109[Performance, maintainability, edge cases - should discuss]110111### 🟢 Low Priority112[Style, minor improvements - nice to have]113114Each issue should include:115- **File**: path/to/file.ext#L10-L15116- **Status**: ✅ Confirmed | ⚠️ Needs verification | ❌ False positive117- **Found by**: Opus / Codex / PR feedback118- **Description**: What's wrong and why it matters119- **Suggestion**: How to fix (if applicable)120121## ❌ False Positives Filtered122[List any findings that were wrong, with brief explanation]123124## ⚠️ Potential Gaps125[Things all models may have missed - especially check PR description claims]126127## 📊 Model Coverage128| Issue | Opus | Codex | PR | Status |129|-------|:----:|:-----:|:--:|--------|130| Issue 1 | ✅ | ✅ | - | ✅ Confirmed |131| Issue 2 | ❌ | ✅ | - | ✅ Confirmed |132| Issue 3 | ✅ | ❌ | - | ❌ False positive |133| Issue 4 | ❌ | ❌ | ✅ | ⚠️ Models missed! |134135## Final Verdict136**[MERGE / FIX FIRST / NEEDS DISCUSSION]**137138[Brief explanation of verdict]139```140141## Key Principles1421431. **Validate, don't just synthesize** - You are the senior reviewer, not a secretary1442. **Unique findings deserve MORE attention** - They might be the deepest insights1453. **Consensus ≠ importance** - Obvious issues get caught by all; critical bugs may be subtle1464. **Check what's missing** - The worst bugs are the ones no one found1475. **Compare against PR description** - Do claimed features actually work?