Skip to main content

Textual TUI that lists GitHub PRs awaiting your review and hands them off to Claude Code.

Project description

cc-pr-reviewer

PyPI Downloads uv Ruff

A small Textual TUI that lists every open GitHub PR where you are a requested reviewer, and hands the selected PR off to Claude Code with the PR Review Toolkit plugin driving the review.

cc-pr-reviewer screenshot

What it does

  • gh search prs --review-requested=@me --state=open fetches 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 claude inside that working tree with a prompt that invokes the PR Review Toolkit agents. See Keybindings for the full list.

Prerequisites

All prerequisites are validated at startup via check_prereqs(); the TUI refuses to launch until they're satisfied.

  1. GitHub CLI — installed and logged in.
    gh auth login
    
  2. Claude Code — the claude CLI must be on your PATH.
  3. PR Review Toolkit plugin — installed and enabled inside Claude Code (detected via claude plugin list --json):
    claude plugin install pr-review-toolkit
    
    Details: https://claude.com/plugins/pr-review-toolkit
  4. git — on your PATH (used for git fetch on 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
# or
uv run python cc_pr_reviewer.py

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 Claude Code review
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
r / F5 Refresh the list
u Upgrade cc-pr-reviewer via uv tool upgrade
q Quit

Inside the confirmation modal: Enter / y to proceed, Esc / n / q to cancel, p to toggle post-inline (instruct Claude to publish the findings as inline PR review comments via gh api, grouped under one review). The toggle defaults to on each time the modal opens; the chosen value is printed before Claude 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 Claude launch works

When you press Enter on a row, a confirmation modal shows the target PR (repo#N + title). 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
claude --permission-mode acceptEdits "<review prompt>"

The review prompt asks the PR Review Toolkit to run its six sub-agents (Comment Analyzer, PR Test Analyzer, Silent Failure Hunter, Type Design Analyzer, Code Reviewer, Code Simplifier). Because Claude Code starts in the PR's working tree, it has full file-level context.

--permission-mode acceptEdits is always passed so file-edit prompts don't interrupt the review — the same mode you get with shift+tab inside a Claude session.

If the modal's post-inline checkbox (p) is on, the prompt is extended to ask Claude 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, Claude 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 Claude, press Enter and the TUI returns.

Changelog

See CHANGELOG.md for the release history.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cc_pr_reviewer-0.10.1.tar.gz (97.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

cc_pr_reviewer-0.10.1-py3-none-any.whl (28.8 kB view details)

Uploaded Python 3

File details

Details for the file cc_pr_reviewer-0.10.1.tar.gz.

File metadata

  • Download URL: cc_pr_reviewer-0.10.1.tar.gz
  • Upload date:
  • Size: 97.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.8 {"installer":{"name":"uv","version":"0.11.8","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

Hashes for cc_pr_reviewer-0.10.1.tar.gz
Algorithm Hash digest
SHA256 2d1d3ed031efe0beb4654ba2bc668fb62af3f77028ba274e75c29d1261216161
MD5 669dfb656d70cbd8dd926098ee6e3c2d
BLAKE2b-256 3c3bb84ffbc5b92804aa17732339c873d2ebafac7f4859c66768219053ef138a

See more details on using hashes here.

File details

Details for the file cc_pr_reviewer-0.10.1-py3-none-any.whl.

File metadata

  • Download URL: cc_pr_reviewer-0.10.1-py3-none-any.whl
  • Upload date:
  • Size: 28.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.8 {"installer":{"name":"uv","version":"0.11.8","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

Hashes for cc_pr_reviewer-0.10.1-py3-none-any.whl
Algorithm Hash digest
SHA256 20b338a2dbe9a3142702c22465dba4f23c3543e0d2147d7b89ffceade3012a84
MD5 828b739c972b9d643d08425f16274ad1
BLAKE2b-256 4907ff6bc41fea6bd9fdf8abf935476959b9699194ad55635973fb7e45a62572

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page