pr-status

command module
v0.0.0-...-27581e9 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 28, 2026 License: MIT Imports: 20 Imported by: 0

README

pr-status

A terminal UI that lists your open GitHub pull requests with the review status of each reviewer, and lets you re-ping reviewers who haven't reviewed yet with a single key press.

 My open PRs

  3 PRs

▌ acme/api#128  feat: add rate limiting middleware
▌ ● @alice  ✓ @bob  • @carol    ↻ pinged 2×, last 3h ago

  acme/web#342  fix: broken redirect after login
  ● @acme/frontend  ✗ @dave

  acme/api#120  chore: bump dependencies
  no reviewers

  updated 12:12:30  ·  ✓ Pinged @alice on acme/api#128

Reviewer colors

Marker Color Meaning
● red review requested, no review yet
✓ green approved
• gray commented
✗ gray changes requested

Team review requests are shown as @org/team and are always considered pending, but teams are never pinged: re-requesting a team with auto-assignment enabled could assign the review to a different member.

Pinging reviewers

Selecting a PR and pressing enter asks for confirmation (y to confirm, any other key cancels), then:

  1. removes the review request for every pending (red) reviewer, except teams,
  2. waits 10 seconds (--wait),
  3. requests their review again,
  4. posts a ping @alice @bob comment on the PR (disable with --no-comment).

The re-request sends a fresh "review requested" notification on GitHub, but integrations don't always relay it (Slack integrations, for instance, may stay silent on a re-request), so the comment's @mentions make sure people actually get pinged. Reviewers who already approved or commented are left untouched.

If you press ctrl+c during the wait, the reviewers are re-requested immediately before quitting (without the comment), so nobody is left removed.

Ping history

PRs you already pinged show ↻ pinged N×, last … next to their reviewers. Press h to see every ping on the selected PR, with its date and reviewers.

The history is read from the PR's GitHub timeline, not stored locally: a ping is a review request you removed and then re-requested for the same reviewer within 2 minutes. It therefore also includes pings made from another machine or by hand in the GitHub UI, but not --dry-run runs. Only the last 100 review-request events of each PR are scanned.

Requirements

  • GitHub CLI (gh), logged in with gh auth login. pr-status reuses its credentials, so no token setup is needed.
  • Go 1.26+ to build.

Install

go install github.com/stuff/pr-status@latest

Or from a clone: go install .

This builds pr-status into $(go env GOPATH)/bin. Make sure that directory is on your PATH.

Usage

pr-status                                  # all your open PRs
pr-status -R acme/api                      # only one repo
pr-status -R acme/api -R acme/web          # several repos (or -R acme/api,acme/web)
pr-status --dry-run                        # try it without touching reviewers
Options
Flag Default Description
-R, --repo OWNER/REPO all repos Only show PRs from these repos. Repeatable or comma-separated.
--wait DURATION 10s Delay between removing and re-requesting reviewers.
--refresh DURATION 5m Auto-refresh interval, 0 to disable. Skipped while a ping is in progress.
--no-comment off Only re-request reviews, don't post the ping @… comment.
--dry-run off Run the whole flow without calling the GitHub write APIs (no re-request, no comment).
Keys
Key Action
↑ / ↓ (or k / j) Move the selection
enter Ping pending reviewers of the selected PR (asks for confirmation)
h Show the ping history of the selected PR
r Refresh now
o Open the PR in your browser
/ Filter PRs by repo, number or title
? Show all key bindings
q Quit

Browser

o uses the same browser as gh --web: GH_BROWSER, then gh config get browser, then BROWSER. If none of them is set and you are running under WSL, the PR opens in your Windows default browser (via wslview, or rundll32.exe if wslu isn't installed) instead of a Linux browser running through WSLg.

API usage

Listing PRs is a single GraphQL query costing 2 points, out of the 5,000 points per hour GitHub allows. The default 5-minute auto-refresh therefore uses about 24 points per hour. A ping makes up to three REST calls: DELETE then POST on /repos/{owner}/{repo}/pulls/{number}/requested_reviewers, then POST /repos/{owner}/{repo}/issues/{number}/comments.

Only the 50 most recently updated open PRs are listed.

Project layout

File Contents
main.go Flag parsing and program startup
github.go GraphQL query, reviewer status mapping, remove/re-request calls
ui.go Bubble Tea model, list rendering and styles
browser.go Opening PRs in the browser (WSL-aware)

Built with Bubble Tea, Bubbles, Lip Gloss and go-gh.

License

MIT

Documentation

The Go Gopher

There is no documentation for this package.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL