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.17.0 latest · June 2026 Python 100% 27 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, auto-codegraph sync after checkout, an opt-in init helper on x, and affected-tests injection for the test analyzer. 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.

— 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

If the repo isn't in $GH_PR_WORKSPACE, it's cloned. Otherwise the existing clone is updated.

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

Check out the PR branch

--force so a stale local branch never blocks the checkout. If CodeGraph is wired up, the index is synced here so the review can lean on it.

$ gh pr checkout <N> --force # when CodeGraph is set up for the repo $ 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.

> /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.

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
c
Cycle CLI: claude → codex → gemini → claude (persisted; footer goes green when non-default)
x
Init CodeGraph for the checked-out repo (opt-in helper; persisted)
rF5
Refresh the list
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-seven releases in, one keystroke between you and a thorough PR review. Install once and live in the queue.