Terminal · Python · MIT

Your review queue, one keystroke from your coding agent.

A small Textual TUI that lists every open GitHub PR where you're a requested reviewer, then hands the one you pick off to claude, codex, or gemini — driven by the PR Review Toolkit plugin on Claude, or the same six review criteria loaded as native Skills on Codex and Gemini.

$ uv tool install cc-pr-reviewer
v0.19.0 latest · June 2026 Python 100% 28 releases
— What it does

Skip the dashboard. Stay in the terminal.

Every open PR where you're a requested reviewer, fetched across every repo gh can see, in one keyboard-driven table — then handed off to Claude Code, Codex, or Gemini.

One queue across every repo

Wraps gh search prs --review-requested=@me --state=open and presents repo, number, title, author, age, and a draft flag in a scrollable table.

Enter to hand off

Pick a PR, confirm the modal, and the TUI clones (or fetches), checks out the PR branch via gh pr checkout, and launches your selected CLI inside the working tree.

Six reviewers in lockstep

Same six review dimensions everywhere — Comment Analyzer, Test Analyzer, Silent Failure Hunter, Type Design Analyzer, Code Reviewer, Code Simplifier. Claude runs them as PR Review Toolkit sub-agents; Codex and Gemini load them as native Skills.

c

Three CLIs, one keystroke

Press c to cycle the global default claude → codex → gemini → claude (persisted across sessions), or ^L inside the confirm modal to override for a single launch.

Inline review publishing

Toggle ^T in the modal to ask the CLI to publish findings as inline review comments via a single gh api POST, grouped under one review.

Cached clones, cheap restarts

Repos are stored as $GH_PR_WORKSPACE/<owner>/<repo>. Second review of the same repo reuses the clone — just a git fetch before checkout.

CodeGraph, four tiers deep

Optional codegraph MCP integration cuts review token usage: a prompt nudge toward six core graph tools, affected-tests injection for the test analyzer, and an index that's now auto-seeded into each PR worktree — no per-launch init prompt. Setup state is verified at startup — wired, binary-only, or not installed.

Pick your reviewers per launch

Six checkboxes in the confirm modal let you disable review agents that don't fit this PR — ^A flips them all at once. Launch is refused with zero selected, so you never fire an empty review.

Per-launch telemetry

Every CLI launch — on success and on abort or crash — writes one row to a local review_telemetry table: CLI, affected paths, post-inline, approx prompt tokens, duration, and exit code. Cost-and-outcome trends, never leaving your machine.

a

Auto-refresh with a bell

Press a to cycle the refresh interval off → 15m → 30m → 1h (persisted). The queue reloads on the timer — skipping while a CLI is running or a modal is open — and toasts plus rings the terminal bell the moment a new review-requested PR lands.

Slack on a finished review

Set slack_webhook_url and a clean CLI exit posts the completed review to your channel. It reads the latest verdict straight from GitHub and only fires when a genuinely new review appears — no duplicate pings on no-op exits.

Isolated parallel reviews

Each PR is checked out into its own ephemeral git worktree, so two PRs in the same repo never clobber each other's checkout. The cached clone stays a fetch-only primary; the worktree is torn down on exit and self-heals after a crash.

Auto-approve clean first reviews

On a first review of a PR you didn't author, if nothing is blocking — only low/NIT findings — the agent submits an APPROVE (with the nit comments still attached) instead of a bare comment. Anything blocking falls through to a plain review.

🎨

Selectable color themes

A branded claude-dark coral theme ships as the default, alongside 15 built-ins. Pick one in the Settings modal — it's applied live and persisted across sessions, falling back gracefully on an unknown value.

,

One Settings modal

Press , for a single place to set the persisted prefs — CLI, CodeGraph, auto-refresh interval, theme — and the Slack webhook. The footer stays minimal; the per-launch keys still work directly.

— How the launch works

Press . The TUI suspends and runs four commands.

The confirmation modal shows the target PR plus the active CLI. On /^Y, the TUI hands the shell over and, in order:

01

Clone or fetch the primary

If the repo isn't in $GH_PR_WORKSPACE, it's cloned. The cached clone is kept as a fetch-only primary object store — never checked out itself — and refreshed on every review.

# first time you review this repo $ gh repo clone <owner>/<repo> # every time after that $ git fetch --all --prune
02

Check out into a per-PR worktree

Each PR is checked out into its own ephemeral git worktree, so parallel reviews of the same repo never clobber each other. When CodeGraph is wired up, the primary's index is seeded into the worktree, then codegraph sync re-indexes just the diff.

# isolated worktree per PR $ git worktree add --detach .worktrees/<owner>/<repo>/<N> $ gh pr checkout <N> --detach # when CodeGraph is set up: seed + sync $ codegraph sync
03

Launch the selected CLI in the worktree

The CLI starts inside the PR's checkout, so it has full file-level context. Claude runs in --permission-mode auto, which auto-approves edits and bash commands while still gating risky operations — so the review never stalls on a mid-run prompt. Codex and Gemini are launched in the closest equivalent auto-edit modes, and the same six review criteria are copied into .agents/skills/ as native Skills and removed on exit.

# Claude Code (default) $ claude --permission-mode auto "<prompt>" # OpenAI Codex CLI $ codex --ask-for-approval never --sandbox workspace-write -c sandbox_workspace_write.network_access=true "<prompt>" # Google Gemini CLI $ gemini --approval-mode auto_edit "<prompt>"
04

/exit and you're back

When you exit the CLI, press Enter once and the TUI resumes — your queue is still there, ready for the next PR. The ephemeral worktree is torn down before the in-progress reservation is released.

> /exit # press ↵ to resume cc-pr-reviewer
— Keybindings

Hands stay on home row.

Two contexts: the main queue and the confirmation modal. The filter modal has its own arrow-key affordances on top. The footer stays minimal — the m/g/s view toggles highlight when active, and persisted prefs live in the Settings modal.

Main queuecc_pr_reviewer.py
Move through PRs
Confirm, then clone + checkout + launch the selected CLI
d
View full diff
o
Open PR in browser
m
Toggle inclusion of PRs you authored
f
Filter the list by repo (picker)
g
Cycle grouping: none → repo → author → none
s
Toggle sort by most recently updated
,
Open the Settings modal — CLI, CodeGraph, auto-refresh, theme, and Slack webhook in one place.
c
Cycle CLI: claude → codex → gemini → claude (persisted; also editable in Settings)
x
Toggle CodeGraph assist for the review (persisted; also in Settings)
rF5
Refresh the list (cursor lands on the first PR row)
a
Cycle auto-refresh: off → 15m → 30m → 1h (persisted; bell + toast on new review requests)
u
Upgrade via uv tool upgrade
q
Quit
Confirmation modalon ↵ from queue
^Y
Proceed — clone/fetch, checkout, launch the selected CLI
esc^N
Cancel and return to the queue
^T
Toggle post-inline — publish findings as inline review comments via gh api. Defaults to on each time the modal opens.
^L
Cycle the CLI for this launch only, without changing the global default.
space
Toggle a review agent — six checkboxes let you drop the ones that don't fit this PR.
^A
Flip every agent checkbox at once. Launch is refused with zero agents selected.
Filter modalon f from queue
Move through the repo list
Apply highlighted repo, or pick (any repo) to clear. Persisted in .review_state.db.
r
Re-fetch unfiltered PRs to pick up new repos
esc
Cancel
Env var
Default
Meaning
GH_PR_WORKSPACE
~/gh-pr-workspace
Where repos are cloned for local checkout. Clones are organised as $GH_PR_WORKSPACE/<owner>/<repo> so a second review reuses the clone.
— Install

A four-step prereq check, then a single $ away.

Every prerequisite is validated at startup via check_prereqs(); the TUI refuses to launch until they're satisfied.

# Install globally via uv
$ uv tool install cc-pr-reviewer

# Run it from anywhere
$ cc-pr-reviewer
cc_pr_reviewer.py
# 1 — gh CLI must be installed and logged in
$ gh auth login

# 2 — at least one coding-agent CLI on PATH
$ which claude  # or: codex / gemini

# 3 — for Claude: PR Review Toolkit plugin (checked at launch)
$ claude plugin install pr-review-toolkit

# 4 — git on PATH (for git fetch on repeats)
$ git --version
01
GitHub CLI

Installed and logged in via gh auth login.

02
At least one coding-agent CLI

One of claude, codex, or gemini must be on your PATH. If the persisted default isn't on this machine, the TUI transparently falls back to the next available one.

03
PR Review Toolkit (Claude only)

For Claude Code: install with claude plugin install pr-review-toolkit. Checked at launch time — Codex and Gemini load the same review criteria as native Skills instead and don't need it.

04
git

On your PATH. Used for git fetch on repeat reviews.

Get back to reviewing.

Twenty-eight releases in, one keystroke between you and a thorough PR review. Install once and live in the queue.