Textual TUI that lists GitHub PRs awaiting your review and hands them off to Claude Code.
Project description
cc-pr-reviewer
A small Textual TUI that lists every open GitHub PR where you are a
requested reviewer, and hands the selected PR off to a coding-agent CLI
of your choice — Claude Code, OpenAI Codex CLI, or Google
Gemini CLI — to perform the review. Claude Code uses the
PR Review Toolkit plugin;
Codex and Gemini load the same six review criteria as native Skills
that ship with this package (cc_pr_reviewer/skills/<name>/SKILL.md),
materialised into the checked-out PR workspace under .agents/skills/
for the duration of each review.
What it does
gh search prs --review-requested=@me --state=openfetches your review queue across every repo you have access to.- Displays them in a scrollable table (repo, number, title, author, age, draft flag).
- Keyboard-driven: pick a PR and press Enter to open a confirmation
modal; on Enter/y it clones the repo (if needed), checks out the PR
branch via
gh pr checkout, and launches the selected coding-agent CLI inside that working tree with a prompt that drives a six-dimension PR review (code-quality, silent-failure hunting, type design, test coverage, comment quality, simplification opportunities). See Keybindings for the full list. - Three CLI backends, switchable from the TUI. Press
cto cycle the global default (claude → codex → gemini → claude, persisted across sessions), orCtrl+Linside the confirm modal to override for a single launch. Default is Claude Code.
Prerequisites
All prerequisites are validated at startup via check_prereqs(); the TUI
refuses to launch until they're satisfied.
-
GitHub CLI — installed and logged in.
gh auth login
-
At least one coding-agent CLI on your
PATH:- Claude Code (
claude) — additionally needs the PR Review Toolkit plugin installed and enabled. Install viaclaude plugin install pr-review-toolkit; details at https://claude.com/plugins/pr-review-toolkit. The plugin check fires at launch time (not startup), so you can still start the TUI even if the plugin is missing — you'd just see a clear toast when you try to review with Claude. Codex/Gemini are unaffected. - OpenAI Codex CLI (
codex) — https://github.com/openai/codex - Google Gemini CLI (
gemini) — https://github.com/google-gemini/gemini-cli
Startup only requires one of the three to be installed. If the CLI you previously persisted (via
c) isn't on this machine's PATH, the TUI transparently falls back to the next available one for the session and shows a warning toast. Switch the global default any time withc. - Claude Code (
-
git — on your
PATH(used forgit fetchon repeat reviews).
Install
As a global CLI (recommended)
Install from PyPI with uv or pipx:
uv tool install cc-pr-reviewer
# or
pipx install cc-pr-reviewer
Then run it from anywhere:
cc-pr-reviewer
From source (for development)
uv sync
uv run cc-pr-reviewer
Configuration
| 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 of the same repo reuses the existing clone and just git fetches
before checking out the PR.
Keybindings
| Key | Action |
|---|---|
↑ / ↓ |
Move through PRs |
Enter |
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) |
r / F5 |
Refresh the list |
u |
Upgrade cc-pr-reviewer via uv tool upgrade |
q |
Quit |
The c key highlights green in the footer whenever the active CLI is
non-default (i.e. anything other than Claude Code).
Inside the confirmation modal: Enter / Ctrl+Y to proceed, Esc /
Ctrl+N to cancel, Ctrl+T to toggle post-inline (instruct the CLI to
publish the findings as inline PR review comments via gh api, grouped
under one review), Ctrl+L to cycle the CLI for this launch only
(without changing the global default). The post-inline toggle defaults
to on each time the modal opens; the CLI defaults to whatever the
global c setting currently is. The chosen values are printed before
the CLI launches.
Inside the filter modal: arrow keys to move, Enter to apply the
highlighted repo (or pick (any repo — clear filter) to remove the
filter), r to re-fetch the unfiltered PR list and pick up repos that
appeared after boot, Esc to cancel. The repo list comes from the most
recent unfiltered fetch — applying a filter doesn't shrink the picker.
The active filter is persisted in $GH_PR_WORKSPACE/.review_state.db
and restored on the next launch.
How the launch works
When you press Enter on a row, a confirmation modal shows the target
PR (repo#N + title) plus the current CLI selection. On Enter/y the
TUI suspends itself and runs, in order:
gh repo clone <owner>/<repo> # only if not already cloned
git fetch --all --prune # otherwise
gh pr checkout <N> --force
<selected-cli> <auto-approve flags> "<review prompt>"
The exact CLI invocation depends on which backend is active:
| CLI | Command |
|---|---|
| Claude | claude --permission-mode acceptEdits "<prompt>" |
| Codex | codex --ask-for-approval never --sandbox workspace-write -c sandbox_workspace_write.network_access=true "<prompt>" |
| Gemini | gemini --approval-mode auto_edit "<prompt>" |
All three are launched in modes that auto-accept file edits inside the
cloned PR workspace, mirroring Claude's acceptEdits posture as
closely as each CLI permits. For Codex, sandbox_workspace_write blocks
network by default; the -c sandbox_workspace_write.network_access=true
override restores it so the post-inline review path can reach GitHub
via gh api.
The review prompt drives the same six review dimensions across all three CLIs:
- Claude Code delegates to the PR Review Toolkit plugin's six sub-agents (Comment Analyzer, PR Test Analyzer, Silent Failure Hunter, Type Design Analyzer, Code Reviewer, Code Simplifier).
- Codex and Gemini load the same six review criteria as native
Skills. The bundled
SKILL.mdfiles (cc_pr_reviewer/skills/<name>/SKILL.md) are an adapted fork of the upstream toolkit's agent prompts with Codex/Gemini Skills frontmatter prepended. At launch they're copied into<workspace>/.agents/skills/<name>/SKILL.md(the cross-tool interop path both CLIs are documented to scan at session start — refs: Codex Skills, Gemini Skills) and removed on exit. Per those docs, only metadata is loaded eagerly — full instructions are pulled in on activation.
If the modal's post-inline toggle (Ctrl+T) is on, the prompt is
extended to ask the CLI to publish each finding as an inline review
comment via a single POST /repos/{owner}/{repo}/pulls/{n}/reviews call
through gh api, so they land grouped under one review. On a re-review
of someone else's PR where only NIT-level findings remain, the CLI is
also asked to resolve any of its own previously-posted threads that the
new code has addressed before submitting the APPROVE.
When you exit the CLI, press Enter and the TUI returns.
Keeping the bundled review prompts in sync with upstream
The bundled cc_pr_reviewer/skills/<name>/SKILL.md files are a static
fork of the PR Review Toolkit
plugin's agent prompts (with Codex/Gemini Skills frontmatter prepended).
To check for upstream changes:
uv run python scripts/sync_pr_review_agents.py --update-plugin
This runs claude plugin update pr-review-toolkit@claude-plugins-official
first, then diffs the current upstream against a committed baseline
snapshot in scripts/upstream_baseline/. Exit code is 0 if nothing
changed upstream, 1 if action is needed. After triaging upstream
changes into the bundled files, run --save-baseline to lock in the new
upstream state. See the script's --help for additional flags (--diff,
--write).
Changelog
See CHANGELOG.md for the release history.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file cc_pr_reviewer-0.13.0.tar.gz.
File metadata
- Download URL: cc_pr_reviewer-0.13.0.tar.gz
- Upload date:
- Size: 166.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.16 {"installer":{"name":"uv","version":"0.11.16","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d053a10d5857bcf0310fe4a5066e146add6a0e8c69c04e8f704e55dc24c597b7
|
|
| MD5 |
89e5df3e1be4a252d5fa9da2f99d21a5
|
|
| BLAKE2b-256 |
27831d7f31af0bb8681973b45fbac2d072bdeac7094f6803170bdc23b7c0d996
|
File details
Details for the file cc_pr_reviewer-0.13.0-py3-none-any.whl.
File metadata
- Download URL: cc_pr_reviewer-0.13.0-py3-none-any.whl
- Upload date:
- Size: 65.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.16 {"installer":{"name":"uv","version":"0.11.16","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c44b682a8a1b64f5ebfbd8ef153d347dc9257b7d72c926ab9373b2e57d51679b
|
|
| MD5 |
eb8882251681a6e63104ed7b4c1f3a76
|
|
| BLAKE2b-256 |
f46271bf7b6c479853a1aa5a37a6e9fb31fa77140f5a170e573afe8497c5a672
|