A Claude Code plugin that adds an automated code review loop to your workflow.
When you use /review-loop, the plugin creates a two-phase lifecycle:
- Task phase: You describe a task, Claude implements it
- Review phase: When Claude finishes, the stop hook automatically runs Codex for an independent code review, then asks Claude to address the feedback
The result: every task gets an independent second opinion before you accept the changes.
The plugin spawns up to 4 parallel Codex sub-agents, depending on project type:
| Agent | Always runs? | Focus |
|---|---|---|
| Diff Review | Yes | git diff — code quality, test coverage, security (OWASP top 10) |
| Holistic Review | Yes | Project structure, documentation, AGENTS.md, agent harness, architecture |
| Next.js Review | If next.config.* or "next" in package.json |
App Router, Server Components, caching, Server Actions, React performance |
| UX Review | If app/, pages/, public/, or index.html exists |
Browser E2E via agent-browser, accessibility, responsive design |
After all agents finish, Codex deduplicates findings and writes a single consolidated review to reviews/review-<id>.md.
- Claude Code (CLI)
jq—brew install jq(macOS) /apt install jq(Linux)- Codex CLI —
npm install -g @openai/codex
This plugin uses Codex multi-agent to run parallel review agents. The /review-loop command automatically enables it in ~/.codex/config.toml on first use.
To set it up manually instead:
# ~/.codex/config.toml
[features]
multi_agent = trueFrom the CLI:
claude plugin marketplace add hamelsmu/claude-review-loop
claude plugin install review-loop@hamel-reviewOr from within a Claude Code session:
/plugin marketplace add hamelsmu/claude-review-loop
/plugin install review-loop@hamel-review
claude plugin marketplace update hamel-review
claude plugin update review-loop@hamel-review/review-loop Add user authentication with JWT tokens and test coverage
Claude will implement the task. When it finishes, the stop hook:
- Runs
codex execfor an independent review - Writes findings to
reviews/review-<id>.md - Blocks Claude's exit and asks it to address the feedback
- Claude addresses items it agrees with, then stops
/cancel-review
The plugin uses a Stop hook — Claude Code's mechanism for intercepting agent exit. When Claude tries to stop:
- The hook reads the state file (
.claude/review-loop.local.md) - If in
taskphase: runs Codex, transitions toaddressing, blocks exit - If in
addressingphase: allows exit and cleans up
State is tracked in .claude/review-loop.local.md (add to .gitignore). Reviews are written to reviews/review-<id>.md.
claude-review-loop/
├── .claude-plugin/
│ └── plugin.json # Plugin manifest
├── commands/
│ ├── review-loop.md # /review-loop slash command
│ └── cancel-review.md # /cancel-review slash command
├── hooks/
│ ├── hooks.json # Stop hook registration (900s timeout)
│ └── stop-hook.sh # Core lifecycle engine
├── scripts/
│ └── setup-review-loop.sh # Argument parsing, state file creation
├── AGENTS.md # Agent operating guidelines
├── CLAUDE.md # Symlink to AGENTS.md
└── README.md
The stop hook timeout is set to 900 seconds (15 minutes) in hooks/hooks.json. Adjust if your Codex reviews take longer.
| Variable | Default | Description |
|---|---|---|
REVIEW_LOOP_CODEX_FLAGS |
--dangerously-bypass-approvals-and-sandbox |
Flags passed to codex. Set to --sandbox workspace-write for safer sandboxed reviews. |
Execution logs are written to .claude/review-loop.log with timestamps, codex exit codes, and elapsed times. This file is gitignored.
Inspired by the Ralph Wiggum plugin and Ryan Carson's compound engineering loop.