A configurable multi-agent code-review procedure that runs in any coding agent — Claude Code, Codex CLI, Gemini CLI, Cursor, or others — and orchestrates GitHub PR bots, Claude, Codex, and any CLI model you wire up (Gemini, DeepSeek, Kimi, …), then cross-references their findings to separate real bugs from hallucinations.
The set of reviewers isn't hardcoded. It comes from a JSON config you can edit per-repo, so adding a new model is one entry.
- Trigger any GitHub review bots on the PR (Cursor Bugbot, CodeRabbit, …) and wait for their findings.
- Run the local reviewers in parallel — Claude sub-agent + every enabled CLI reviewer — on the same review prompt.
- Cross-reference everything before judging. The orchestrator only investigates the code after all reviewers have returned — so it judges the reviewers instead of becoming a biased fourth one.
- Report with severity-ordered findings, a per-reviewer agreement table, and a merge recommendation.
| Reviewer | Type | Enabled by default | Notes |
|---|---|---|---|
| Bugbot (Cursor) | GitHub bot | ✅ | Needs the Cursor GitHub App on the repo |
| CodeRabbit | GitHub bot | — | Needs the CodeRabbit GitHub App |
| Claude | in-process sub-agent | ✅ | Claude Code only — uses its Agent tool; other hosts: substitute with a cli Claude entry |
| Codex | CLI | ✅ | Requires the codex CLI |
| Gemini | CLI | — | Requires the Gemini CLI |
| DeepSeek | CLI | — | Via llm + llm-deepseek |
| Kimi | CLI | — | Via llm + an OpenAI-compatible plugin |
Toggle any with "enabled": true | false. Add more with one entry. See CONFIG.md.
The skill is one markdown procedure (SKILL.md) plus a JSON config (reviewers.default.json) — any coding agent that can read markdown and run shell commands can follow it. Pick your host:
Clone into your skills directory:
# user-level (every project)
git clone https://github.com/OpenSWE/code-review-ensemble.git \
~/.claude/skills/code-review-ensemble
# or project-level
git clone https://github.com/OpenSWE/code-review-ensemble.git \
.claude/skills/code-review-ensembleInvoke:
/code-review-ensemble # detect PR from current branch
/code-review-ensemble 1234 # explicit PR number
Marked disable-model-invocation: true, so it only runs when you explicitly invoke it.
Codex doesn't have a slash-command skill system, but it reads AGENTS.md for context and accepts non-interactive prompts. Pick one:
Direct invocation — feed SKILL.md as the prompt:
git clone https://github.com/OpenSWE/code-review-ensemble.git
codex exec --full-auto < code-review-ensemble/SKILL.mdOr wire it through AGENTS.md — append to your ~/.codex/AGENTS.md or the repo's AGENTS.md:
## Code review
When asked for a thorough code review, follow the procedure at
https://github.com/OpenSWE/code-review-ensemble/blob/main/SKILL.mdThen prompt Codex with "code-review-ensemble on PR 1234".
Disable the claude-agent reviewer in reviewers.default.json (Codex has no in-process Claude sub-agent), or substitute a cli Claude entry.
Create ~/.gemini/commands/code-review-ensemble.toml:
description = "Multi-agent code review (https://github.com/OpenSWE/code-review-ensemble)"
prompt = """
Follow the procedure at https://github.com/OpenSWE/code-review-ensemble/blob/main/SKILL.md
on PR {{args}}; if no PR number is given, detect it from the current branch with `gh pr view`.
"""Invoke /code-review-ensemble 1234. Disable or substitute the claude-agent reviewer (Gemini CLI has no in-process Claude sub-agent).
Clone the repo and add a Cursor rule referencing it:
git clone https://github.com/OpenSWE/code-review-ensemble.git \
.cursor/skills/code-review-ensembleCreate .cursor/rules/code-review-ensemble.mdc:
---
description: code-review-ensemble trigger
alwaysApply: false
---
When the user asks for "code-review-ensemble" or "thorough code review",
follow the procedure in `.cursor/skills/code-review-ensemble/SKILL.md`.Then in chat: "code-review-ensemble on PR 1234". Disable or substitute the claude-agent reviewer.
Clone the repo and ask your agent to read and follow SKILL.md on the desired PR:
Read code-review-ensemble/SKILL.md and follow it on PR 1234.
Works with any agent that can read markdown and run shell commands.
ghCLI, authenticated (gh auth status).- For each enabled reviewer, its CLI or GitHub App installed:
github-bot: the bot's GitHub App on the repo (Cursor, CodeRabbit, …).claude-agent: Claude Code only — uses its in-process Agent tool. In other hosts, disable this reviewer or swap it for acliClaude entry.cli: the binary referenced in thecommandtemplate — e.g.codex,gemini,llm+ the relevant model plugin.
In Claude Code, allowed-tools in SKILL.md's frontmatter is the permission allowlist — add Bash(<binary>:*) for any new CLI reviewer or you'll be prompted on every run. Other hosts handle command permissions on their own terms (Codex sandbox, Gemini policy, Cursor settings).
Copy reviewers.default.json to your repo root as .code-review-ensemble.json and edit it. The skill resolves the config in this order, first match wins:
<repo-root>/.code-review-ensemble.json./.code-review-ensemble.json(current working dir)reviewers.default.json(this repo's shipped default)
Full schema, reviewer types, and examples — including how to add Gemini, DeepSeek, Kimi, GLM, or another GitHub bot — live in CONFIG.md.
Refactored from Nolan Lawson's original code-review-turbo gist, generalised from a fixed Bugbot + Claude + Codex trio into a config-driven set of reviewers.