An extremely fast GitHub for pull request review. PRs open in 20 ms instead of 1.4 s (benchmark).
PR Cockpit is a desktop app for GitHub pull requests on macOS and Linux. A local mirror, kept current by webhooks, holds every PR you care about, so the queue, the diff, the failed check logs and the review threads paint from disk. Keyboard for everything; GitHub stays the source of truth.
Install · See the workflow · CLI for humans and agents · Website

The queue separates ready to merge, your move, and waiting. Checks, conflicts, unresolved threads, and review state give you the context to decide what to open next. Stacked pull requests stay together.
Install
Run this in your terminal as your normal user, not with sudo:
curl -fsSL https://raw.githubusercontent.com/theolundqvist/pr-cockpit/main/scripts/bootstrap | bash
Read the installer first. It checks prerequisites, installs the desktop app and pr-cockpit CLI, and opens setup. On macOS it offers to install missing tools where supported; on Linux it checks system prerequisites and installs missing Bun and GitHub CLI tools into the managed installation.
Supported platforms: macOS and Linux. Linux requires systemd and the desktop libraries listed by the installer; x64 and arm64 are supported. X11 is supported directly; Wayland uses XWayland, and global shortcuts depend on compositor policy. Windows is not supported.
Try it on a PR you already know
- Connect GitHub in the app. Cockpit reuses your GitHub CLI (
gh) login. If you need to sign in or grant additional access, setup opens the GitHub authorization flow in your browser. - Choose a repository you work in. Start with an open PR you've authored or participated in. Open follows PRs involving you; All PRs shows every open PR in your selected repositories. You can enter
owner/repoif it is not in the suggested list. - Enable live updates, or continue with polling. Live updates use a GitHub App installation with access to your selected repositories. An organization may require an owner's approval; that need not block your first review.
- Open the queue and pick that PR. Read the conversation, press d to switch to Files, and inspect a change. Press ? whenever you want the shortcut guide.
The first sync fetches PRs involving you. All PRs loads on demand without expanding background polling. Press Tab to cycle Open, All PRs, and Recently merged. Repository and live-update configuration live in Settings.
Press r to filter repositories. Use arrows to highlight one, Enter to toggle it, or Shift+Enter to select only that repository.
From finding the PR to finishing the review
Bring up a PR without leaving your editor
Press ⌥⌘K on macOS or Super+Alt+K on Linux X11 to search from another app. Open the result in Cockpit, with the cached PR ready to read.

Read the change, then follow the details
Diffs, threads, checks, and file history live in the same review workspace. Press x to fold test files when you want to see the implementation first; press it again to bring the tests back.

When the review needs a change, stay in context: e edits the open file and commits the patch to the PR; p opens the PR in your configured coding agent with review context. You can also revert a focused hunk or press h to inspect file history.
Everyday shortcuts
| Key | Action |
|---|---|
| j / k | Move |
| enter / esc | Open / back |
| d | Conversation / Files |
| c / r | Comment / reply |
| p | Open in the configured agent |
| e | Edit the open file |
| x | Hide / show test files |
| h | File history |
| m | Merge |
| ? | Full shortcut guide |
The same PR context in your terminal
The included pr-cockpit CLI reads the same local cache as the app. Use it yourself, or give your coding agent a way to inspect a PR without repeatedly fetching it from GitHub. Set up the app first; the CLI needs the local Cockpit server.
Replace owner/repo#123 with your pull request:
pr-cockpit owner/repo#123 # state, checks, and review threads
pr-cockpit owner/repo#123 --diff # cached unified diff
pr-cockpit owner/repo#123 --file src/app.ts # file contents at the PR head
pr-cockpit owner/repo#123 --jobs # queued, running, and completed jobs
pr-cockpit owner/repo#123 --logs # cached failed and cancelled job logs
Waiting on CI or a review? Listen instead of polling.
pr-cockpit listen owner/repo#123
listen waits for substantive cached state changes—a push, check result, review, or comment—then prints what changed and exits. --ci-only and --comments-only narrow the wake signal.
The CLI also supports comments, reviews, thread resolution, edits, and merges through Cockpit's mutation queue. Run pr-cockpit --help for commands and options, including --body-file for exact multiline text and --json for machine-readable status. The installer separately asks before adding Cockpit instructions to supported coding assistants.
Local reads. GitHub authority.
Cockpit is a client for your existing GitHub workflow, not a second place to maintain pull requests.
- On your machine: a Bun server maintains a SQLite cache of PR state and serves the desktop UI and CLI. Diffs, threads, checks, and images are cached locally.
- Back to GitHub: comments, reviews, file edits, thread resolution, and merges use your GitHub CLI authentication. GitHub remains authoritative.
- Keeping it current: the hosted relay is enabled by default. It receives GitHub webhooks and delivers compact change markers and Actions run/job state, including runner assignment—not full PR contents or job logs—to Cockpit. Targeted refreshes update the cache; a direct GitHub poller repairs missed events.
- Your relay, if you prefer: you can configure a different relay URL. See Self-hosting for deployment and connection instructions.
Local caching does not mean the app makes no external connections. Besides GitHub and the relay, the backend has Sentry error reporting enabled by default.
Updates, diagnostics, and configuration
pr-cockpit update # update and reconcile the installed app
pr-cockpit status # identify the process supervising the local server
The installer manages the background server and desktop integration. On Linux, $HOME/.pr-cockpit/scripts/uninstall removes a default installation; adding --purge also removes its local data.
Use Settings for day-to-day configuration. Optional shell overrides live in ~/.config/pr-cockpit/config (Linux respects XDG_CONFIG_HOME).
| Variable | Purpose |
|---|---|
COCKPIT_REPOS |
Comma-separated owner/repo list |
COCKPIT_PORT |
Local HTTP port; defaults to 4820 |
COCKPIT_DEFAULT_REPO |
Repository assumed when a PR number is passed alone |
COCKPIT_REPO_ROOTS |
Paths containing local checkouts |
COCKPIT_RELAY_URL |
Custom webhook relay URL |
COCKPIT_TAILSCALE_SERVE |
Set to 1 to publish Cockpit privately through Tailscale Serve |
COCKPIT_TAILSCALE_HTTPS_PORT |
Tailscale HTTPS port; defaults to 443 |
Contribute
Found friction in a real review? Open an issue with what you were trying to do and what got in the way. Keep reports and screenshots free of private repository data.
Fixes, functionality, themes, and UI polish are welcome. Read the contributor and agent guide for development setup and repository conventions. New functionality must default off; styling must be opt-in unless it is minor polish that preserves the default appearance. Pull requests must include before-and-after screenshots showing their effect in the app.
Comments