Skip to content
omgovichPublic

About

🧢 Your code-review inbox, in the macOS menu bar

Topics

Resources

Stars

21 stars

Watchers

0 watching

Forks

Repository files navigation

Pullover icon

Pullover

Your code-review inbox, in the macOS menu bar.
Only the pull requests that need you β€” everything you're waiting on stays hidden.

Download Pullover for macOS Watch the Pullover demo on YouTube

latest release CI MIT license

Pullover's menu-bar window in the light theme: an inbox of pull requests grouped into 'Needs your review', 'Take another look' and 'Your PRs', each with the reason it needs you The same inbox in the dark theme and the compact layout, which fits every section on screen at once


GitHub notifications bury the one thing that matters β€” whose move is it? Pullover answers exactly that. It watches the repos you review in and keeps a short, honest inbox: if a PR shows up, it's waiting on you; if it doesn't, you're free.

✨ Features

  • 🎯 Only what needs you. Review requests, re-reviews, replies you owe, mentions β€” each PR sits under the reason it's there, longest wait first. The ones waiting on somebody else collapse into their own section.
  • πŸ§‘β€πŸ’» Your own PRs, too. They surface only when there's something for you to do: changes requested, a comment you haven't answered, red CI, merge conflicts, or approved and ready to merge.
  • πŸ”’ Private repos and team requests. Both land in the inbox like anything else β€” nothing to configure.
  • 🧬 Stacks stay together. A stacked PR shows its place in the chain (4/8), and the stack is drawn as one connected run.
  • πŸ’€ Snooze until new activity. Park a PR and it comes back on its own β€” a new push, or a reply in a thread you're in.
  • πŸ“Œ Lives in the menu bar. A quiet count of PRs waiting on you; no Dock icon, no window to manage.
  • ⚑ Open it from anywhere. One keystroke β€” βŒƒβŒ₯P β€” and the inbox is in front of you, whatever app you're in.
  • ⌨️ Drive it from the keyboard. Get through the list without reaching for the mouse.
  • πŸŒ— Light, dark, roomy or dense. Follows your macOS appearance out of the box, and can pack down to one row per PR when your list gets long.
  • ⬇️ Updates itself quietly. New versions download in the background; Pullover then offers a restart and waits for you to take it.
  • πŸ‘€ Read-only by design. Pullover never comments, approves, or merges. Clicking a PR opens it on github.com β€” you act where you always did.
  • πŸ€– Talks to your agents. An optional MCP server, local to your Mac, lets Claude Code and other agents ask which PRs are waiting on you and why β€” and park the ones that can wait β€” from the same inbox you see, with no extra GitHub token.

πŸ“¦ Install

Tip

⬇️ Download the latest release β€” one universal build for Apple Silicon and Intel. Signed and notarized, so it just opens.

Drag Pullover into Applications and launch it.

Sign in with GitHub and you're done β€” out of the box Pullover watches every repo you're involved in. If that's too much, narrow it down to specific repos in Settings.

πŸ› οΈ Running from source

1. Register a GitHub OAuth App

Release builds ship with a built-in OAuth client ID, but a from-source build needs its own. Pullover signs you in with GitHub's Device Flow, so it needs an OAuth App. You only do this once, and it takes about two minutes.

  1. Go to https://github.com/settings/developers and pick the OAuth Apps tab β€” not GitHub Apps, they're a different thing and won't work here.
  2. Click New OAuth App and fill in:
    • Application name β€” Pullover

    • Homepage URL β€” anything valid; Device Flow never opens it.

    • Application description β€” optional, and it's what shows on the authorization screen. Suggested:

      A menu-bar inbox that shows only the pull requests waiting on you, and hides the ones where you're waiting on someone else. Reads only β€” it never comments, reviews, or merges anything.

    • Redirect URI β€” unused by Device Flow. http://localhost if you want one at all. Leave Allow wildcard matching off.

  3. Tick Enable Device Flow. Easy to miss, and without it sign-in fails with unauthorized_client.
  4. Leave Expire user access tokens OFF. It hands out an 8-hour token plus a refresh_token, and Pullover doesn't implement refresh β€” you'd be silently signed out every few hours, and because the app doesn't tell a 401 apart from a network blip it would sit there showing a stale list and an error instead of sending you back to sign in.
  5. Click Register application, then copy the Client ID. You don't need the client secret β€” Pullover is a public client and never asks for one.

2. Point Pullover at it

cp .env.example .env

Paste the Client ID into MAIN_VITE_GITHUB_CLIENT_ID. It's read at build time, so restart npm run dev after changing it.

3. Run it

npm install
npm run dev

Click the menu-bar item, hit Sign in with GitHub. Pullover shows you a short code, copies it to your clipboard and opens the browser β€” paste it, approve, and the window fills in.

Development

  • npm test β€” unit tests (all the classification logic lives in src/core/) and screenshot tests
  • npm run test:visual β€” screenshot tests alone. They render components in a real Chromium and compare against committed PNGs, so they need npx playwright install chromium once. Re-record with npm run test:visual -- -u.
  • npm run typecheck β€” type checking
  • npm run lint β€” lint + formatting check (Biome, config in biome.json)
  • npm run lint:fix β€” apply every safe lint fix and reformat
  • npm run dist β€” local build into dist/. It signs with whatever Developer ID sits in your keychain, or not at all if there is none; either way it is not notarized, so a local build moved out of dist/ may need xattr -dr com.apple.quarantine before it will launch. Released builds are notarized in CI.

πŸ€– Agent-friendly

Let your agents check the inbox for you:

"Hey Claude, check Pullover to see what's on my plate right now."

They get the same classified inbox the window shows β€” what is waiting on you and why β€” with no extra GitHub token and no rules to re-implement. They can also park a pull request until tomorrow, which is the one thing your GitHub tooling cannot do.

A terminal: the claude mcp add line is run and the server is added, then Claude is asked what is on your plate and answers with the classified inbox β€” nine pull requests under Needs your review, Replies to you, Take another look, Your PRs and Mentions, each with its repository and number, its title, why it needs you and how long it has waited. Asked to snooze the Checkout stack until tomorrow, it parks all three and reports that GitHub was not touched.

Turn on MCP server in Settings, then hand your client the address it shows:

claude mcp add --transport http pullover http://127.0.0.1:7855/mcp

Nothing an agent does through Pullover reaches GitHub: it reads, and a snooze is a note on this Mac. To reply or approve, it uses its own GitHub tooling at the link Pullover gives it.

Set up any client β†’ MCP.md

πŸ” Privacy

Pullover has no backend. There's no server in the middle, no account to create, no analytics, no telemetry, no crash reporting β€” the app talks to exactly one place, GitHub's API, straight from your Mac. The optional MCP server is off until you turn it on, and listens to this Mac alone. Your OAuth token never leaves the machine: it's encrypted via the macOS Keychain (Electron's safeStorage) and stored locally. And you don't have to take anyone's word for any of this β€” the entire app is open source, right here in this repo.

Pullover only ever reads from GitHub β€” never a comment, a review, or any other write there. The one thing it writes is its own snooze list, in a file on this Mac. Sign-in asks for repo and read:org, the narrowest scopes GitHub offers that can still see pull requests in private repositories and review requests that arrived through a team; if your organisation restricts third-party OAuth Apps, an owner has to approve Pullover under Settings β†’ Third-party Actions Access before those repos show up.

About

🧢 Your code-review inbox, in the macOS menu bar

Topics

Resources

Stars

21 stars

Watchers

0 watching

Forks

Releases

Sponsor this project

Contributors

Languages