PR Babysitter is a native macOS menu-bar app for keeping a personal GitHub pull-request queue under control. It provides a quiet menu-bar summary for quick checks and a three-column dashboard for reading PR descriptions, activity, review threads, checks, and comments.
The app talks to GitHub exclusively through your existing GitHub CLI login. It never requests, prints, copies, or stores a GitHub token.
- Separates authored PRs from direct and team review requests.
- Highlights conflicts, failing checks, requested changes, and unseen updates.
- Refreshes every three minutes and after the Mac wakes.
- Prioritizes comments, resolved threads, and merges in the Activity feed.
- Collapses CI activity into a summary instead of listing every individual job.
- Renders GitHub-flavored Markdown, tables, code, links, and GitHub-hosted visual evidence.
- Shows review comments with Git-style diff hunks and old/new line-number gutters.
- Supports replying to code-review threads and resolving or reopening them.
- Keeps acknowledgement fingerprints locally without persisting PR titles, descriptions, comments, or activity.
Each PR row uses a familiar pull-request glyph:
- Branching arrow: open pull request.
- Branch/Y glyph: draft pull request.
- Red dot: merge conflict, failed checks, or requested changes.
- Green dot: checks passed with no known blocker.
- No dot: draft, pending or missing checks, or an unknown status.
The text beneath the PR gives the specific state, such as Merge conflict, Checks passing, or Approved.
- PR Babysitter finds
ghat/opt/homebrew/bin/ghor/usr/local/bin/gh. - It launches that exact executable with
Process; it never invokes a shell and never readsgh auth token. - GraphQL requests are passed to
gh api graphqlover standard input. - A shared
@MainActorobservable model prepares the authored, requested, attention, activity, and detail views. - Optional external CI links are decoded lossily. A malformed check URL is ignored and falls back to the PR URL rather than dropping the dashboard.
- Only acknowledgement fingerprints are written to
UserDefaults. Activity and GitHub content remain in memory.
PR Babysitter is read-only except for explicit actions on code-review threads:
- Post reply
- Reply & Resolve
- Resolve
- Reopen
General PR comments, reviews, merges, and code changes are not writable from the app.
- macOS 15 or newer
- Xcode 16 or newer
- XcodeGen
- GitHub CLI authenticated to
github.com - GitHub access to the organization queried by the app
Install the command-line dependencies with Homebrew:
brew install gh xcodegen
gh auth login
gh auth status --activeGenerate the Xcode project:
xcodegen generateBuild the Debug app into isolated DerivedData:
xcodebuild build \
-project PRBabysitter.xcodeproj \
-scheme PRBabysitter \
-configuration Debug \
-destination 'platform=macOS' \
-derivedDataPath .build/AppDerivedDataLaunch the exact bundle:
open ".build/AppDerivedData/Build/Products/Debug/PR Babysitter.app"xcodebuild test \
-project PRBabysitter.xcodeproj \
-scheme PRBabysitter \
-destination 'platform=macOS' \
-derivedDataPath .build/DerivedData \
CODE_SIGNING_ALLOWED=NOThe P0 build currently scopes its GitHub searches to the ppl-ai
organization. To use another organization, update the search qualifiers in
PRBabysitter/Services/GitHubCLIClient.swift.
The app bundle identifier is com.gunnargray.PRBabysitter.
PRBabysitter/
├── App/ App and scene setup
├── Models/ GitHub and Activity models
├── Services/ Direct gh process runner and GraphQL client
├── State/ Shared app model and local acknowledgements
└── Views/ Menu, dashboard, detail, Markdown, and shared components
The Xcode project is generated from project.yml.
PR Babysitter is intentionally an unsandboxed personal development build
because it launches the locally installed gh executable. It is not currently
configured for App Store distribution.