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:
- removes the review request for every pending (red) reviewer, except teams,
- waits 10 seconds (
--wait), - requests their review again,
- posts a
ping @alice @bobcomment 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 withgh auth login.pr-statusreuses 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
Documentation
¶
There is no documentation for this package.