A fast terminal dashboard for triaging GitHub pull requests, built on Bubble Tea. It lists a repo's open PRs, surfaces the one thing each needs (merge conflict, failing checks, missing reviewers, ready-to-merge), and turns the focused PR into a worktree with one key.
- Dense board of open PRs with CI, review, and conflict/behind glyphs, drafts demoted, grouped by author outside the "mine" view.
- Triage preview — the focused PR's recommended next action, check rollup, requested reviewers, and a folded comment timeline (rendered markdown).
- Fuzzy find (
/) narrows either board to the rows you type. - Actions run against the focused PR or a multi-selected set — merge, rerun failed checks, update branch, mark ready, copy URL/branch, open in browser, and open a git worktree.
- Stale-while-revalidate caching — the PR list, per-PR detail, and the
assignable-members list are cached to disk (
$XDG_STATE_HOME/prdash) and painted instantly on launch, then refreshed in the background. Each board's section halves are pre-warmed at startup, too.
Run in any GitHub repo checkout (requires the gh CLI,
authenticated):
nix run github:noamsto/prdash
# or
go build -o prdash . && ./prdash| Key | Action |
|---|---|
↑↓ / j k |
move the cursor |
→ / l |
open the expanded PR view (PR mode only) |
⇥ (Tab) |
toggle PRs ⟷ Issues |
p |
unfold all comments in the preview's timeline (PR only) |
z |
maximize the preview; ctrl+j / ctrl+k scroll it |
s |
cycle state (open · merged · closed · …) |
F |
filter by author (PR only) |
R |
assign reviewers (PR only) |
D |
toggle drafts (PR only) |
g |
group the default board by author instead of Review requested / Mine / Others (PR only) |
/ |
fuzzy find · space select · V select cluster → category → all → none |
a |
actions menu · ? legend · q quit · ctrl+c quits from anywhere, prompts and overlays included |
Actions on the focused PR (or the whole selection):
| Key | Action |
|---|---|
enter |
open a git worktree |
W |
open a worktree per selected item (prompts first past four) |
m merge (squash) · S merge stack up to here · r rerun checks · u update branch · M mark ready |
PR only |
y copy # · Y copy URL · b copy branch · o open in browser |
| Key | Action |
|---|---|
⇥ / → / l |
next tab · shift+⇥ / ← / h previous tab |
1 2 3 4 |
jump to Conversation / Reviews / Checks / Diff |
j k / ↑↓ |
scroll (moves the check cursor on the Checks tab) |
< > (or , .) |
scroll the diff horizontally |
J / K |
next / previous PR |
r / R |
rerun the hovered / all failed checks (Checks tab) |
enter |
open a worktree · esc (or ← on the first tab) back to list · q quit |
The copy actions (y Y b) grab the whole selection at once when multiple
items are selected with space.
The footer is a compact one-line status bar. ctrl+e unfolds it into a docked
panel listing every action available for the focused row (or, with a selection,
the batch-capable ones); ? shows the full keymap. On a wide terminal the
preview shows beside the list, with the footer under it.
Scroll the preview with alt+j / alt+k, or with the mouse wheel while the
pointer is over the visible preview pane.
enter and W (bulk) open git worktrees, which must run in the parent shell so
the tmux window can switch. prdash supports two modes:
- Standalone — with no orchestrator, prdash exits the alt-screen and runs the
command itself (
wt switch <branch>, orwt switch pr:Nwhen the branch isn't fetched locally or the PR comes from a fork), so the worktree opens directly. - Orchestrated — when
PRDASH_ACTION_FILEis set, prdash appends the chosen command to that file and quits; a wrapper (e.g. the lazytmux popup binding) reads and runs it. This is how theprefix + ppopup integration works.
o opens the PR, issue, or check in your browser. When $BROWSER is set,
prdash runs $BROWSER <url> instead of open/xdg-open. Inside a lazytmux
mirrored session, BROWSER=og-open routes the open to the controlling host.
