When Claude calls `ExitPlanMode`, a `PreToolUse` hook fires, sends the plan to the reviewer, and returns `{ permissionDecision: "deny", permissionDecisionReason: "<feedback>" }`. Claude receives the denial with the feedback, revises the plan, and tries again. After a configurable number of rounds (default: 2), it passes through. At the end you get a diff of the original vs. final plan.
Different models have different blind spots. The value is in the second perspective, not in one model being "better."
``` npm install -g claude-plan-reviewer claude-plan-reviewer setup ```
Requires Node.js 18+ and Codex CLI or Gemini CLI. ~400 lines of JS, zero dependencies. MIT licensed.