PR Queue — see what code reviews need your attention.
Four categories. What needs re-review, what's requested, what's stale, what's waiting on others. Mark PRs as in progress. Nudge stale PRs without double-pinging. prq is the queue. You bring the workflow.
npm install -g prq-cliRequires GitHub CLI (gh) to be authenticated.
# See your review queue (interactive by default)
prq
# Non-interactive / plain text
prq --no-interactive
# Act on a PR
prq review 482
prq open 482
prq nudge 482Shows PRs needing your attention in four categories:
- ◆ Needs Re-review — new commits pushed after your review
- ● Requested — you're a requested reviewer
- ○ Stale — no activity for N days
- ◇ Your PRs Waiting — waiting on someone else
PRs you mark as started appear in a separate ▸ In Progress group at the top.
prq # interactive mode (default)
prq status --repos org/repo1 org/repo2 # specific repos
prq status --stale-days 7 # custom threshold
prq status --filter type:pr # only PRs
prq status --filter label:priority # only items with label
prq status --filter '!draft:true' # exclude drafts
prq status --json # machine-readable
prq --no-interactive # plain text outputInteractive mode is the default when running in a terminal. Navigate your queue with keyboard shortcuts:
| Key | Action |
|---|---|
| ↑↓ | Navigate between PRs |
| ←→ | Page up / page down |
| o | Open — open PR in browser |
| n | Nudge — post a comment (won't double-ping) |
| s | Start/Stop — mark as in progress |
| c | Copy URL to clipboard |
| f | Filter — filter by label, author, type, category, repo |
| a | Actions — open menu with all actions |
| / | Search by number, title, or author |
| q | Quit |
Press f to open the filter menu. Pick a dimension (label, author, type, etc.), then toggle values. Active filters show a * indicator in the footer. Press 0 to clear filters.
Press a to open the actions menu, which lists all actions (built-in and custom from your config). Press 1-9 to run an action, or q to dismiss.
Act on PRs by number, org/repo#number, or full URL:
prq open 482 # open in browser
prq review 482 # open files changed
prq nudge 482 # post a comment (warns if already nudged)
prq nudge 482 --yes --message "Update?" # skip confirmationRun any custom action you've defined:
prq run checkout 482
prq run ai-review 482Install the /prq skill for Claude Code:
prq skill # install in current project
prq skill --global # install globallyFilter your queue from the CLI or set defaults in config. The syntax mirrors GitHub's search qualifiers.
# Include by label
prq status --filter label:priority
# Exclude (prefix with !)
prq status --filter '!label:wontfix'
# OR within a filter (comma-separated)
prq status --filter label:priority,urgent
# AND across filters (repeat --filter)
prq status --filter type:pr --filter author:alice
# Combine freely
prq status --filter type:pr --filter '!draft:true' --filter label:priority| Key | Matches | Example |
|---|---|---|
label |
GitHub labels | label:bug |
author |
PR/issue author | author:alice |
type |
pr or issue |
type:pr |
category |
prq category | category:stale |
repo |
Repository | repo:org/my-repo |
draft |
Draft status | draft:true |
Set default filters in your config so you don't repeat them every time:
{
"filters": ["!draft:true", "!label:wontfix"]
}CLI --filter flags override config defaults entirely (not merge). The interactive TUI starts with config filters active — clear them with f → 0.
prq doesn't force a workflow. Every action is a configurable shell command template — inline commands or scripts. Override the defaults or add your own in .prqrc.json.
Actions run with full terminal control. When you trigger an action, prq suspends its TUI, the command takes over the screen (interactive tools like Claude Code work as normal), and prq resumes when the command exits.
{
"actions": {
"review": "claude '/review {url}'"
}
}Now prq review 482 opens an interactive Claude Code session.
{
"actions": {
"review": "codex exec --full-auto 'review the PR at {url}'"
}
}{
"actions": {
"review": "./scripts/review.sh {number} {url}"
}
}The script handles its own logic — session management, resuming, branching, whatever you need.
{
"actions": {
"checkout": "gh pr checkout {number} --repo {owner}/{repo}"
}
}Then prq run checkout 482.
With no config, prq review opens the files changed tab and prq open opens the PR page. Zero setup needed.
| Variable | Example |
|---|---|
{url} |
https://github.com/org/repo/pull/482 |
{number} |
482 |
{owner} |
org |
{repo} |
repo |
{fullRepo} |
org/repo |
{title} |
fix: handle edge case |
{author} |
alice |
{days} |
5 |
{category} |
needs-re-review |
{target} |
@bob, @charlie (reviewers for your PRs, author otherwise) |
prq is fully scriptable with --json output and --yes flags:
# Agent reads the queue
prq status --json
# Agent nudges all stale PRs
prq status --json | jq -r '.prs[] | select(.category == "stale") | .number' \
| xargs -I{} prq nudge {} --yes
# Claude Code cron
prq status --json | claude -p "Review needs-re-review PRs older than 7 days"Install the /prq skill to use prq inside Claude Code sessions:
prq skill --globalThen in Claude Code:
/prq → show queue, ask what to do
"review 2439" → dispatches to your configured review action
"nudge all stale PRs" → batch nudge
The skill reads your .prqrc.json actions — if you have /review configured, it uses that. If not, it falls back to opening the browser.
Config is loaded in this order (later overrides earlier):
~/.config/prq/config.json— global defaults.prqrc.json— per-project config- CLI flags
Full example:
{
"repos": ["org/repo1", "org/repo2"],
"staleDays": 5,
"filters": ["!draft:true", "!label:wontfix"],
"actions": {
"review": "claude '/review {url}'",
"checkout": "gh pr checkout {number} --repo {owner}/{repo}",
"approve": "gh pr review {number} --repo {owner}/{repo} --approve"
}
}| Field | Type | Default | Description |
|---|---|---|---|
repos |
string[] |
[] |
Repos to watch (owner/repo). Empty = all. |
staleDays |
number |
3 |
Days of inactivity to mark as stale |
showAllOpen |
boolean |
false |
Include all open PRs in results |
user |
string |
(auto) | GitHub username (defaults to authenticated user) |
filters |
string[] |
[] |
Default filters (same syntax as --filter) |
actions |
object |
{} |
Custom action templates |
prq/
├── apps/
│ ├── cli/ # CLI tool (published to npm as prq-cli)
│ └── web/ # Landing page
└── brand.md # Brand strategy
bun install # install all workspace deps
bun run dev:cli # run the CLI
bun run dev:web # run the landing page on :3005
bun test # run tests
bun run lint # lint + formatting
bun run typecheck # type check all appsMIT