The problem
Coding agents open pull requests faster than anyone can read them. In a study of 33,596 pull requests written by coding agents, 61 percent had no recorded human review at all ("These Aren't the Reviews You're Looking For", arXiv 2605.02273, 2026).
Common review tools were built for a handful of pull requests a week: one browser tab per PR, scattered across dozens of repositories. Shepherd is built for the flood.
One inbox, every action from the keyboard
Shepherd is a native macOS app that gathers every pull request from every repository you care about in one place. It keeps a local copy of what GitHub knows and lets you act on it fast.
- Review without a browser tab. Real diffs in the app — side by side or inline, syntax highlighted, using the diff engine from VS Code. Files are ordered by what deserves attention first. Inline comments, pending reviews, approve, request changes, merge, squash and rebase: full GitHub parity.
- A focus session. One keystroke walks you through every pull request waiting on you, over a queue frozen when you start.
- Get through the pile. Shepherd detects whether a PR came from Claude Code, Copilot, Codex, Devin, Cursor or a colleague, and puts what the description claims next to what the diff and CI actually show. Green PRs can be approved or merged in bulk, behind one confirmation that lists what it will skip, and why.
- Send work back. Hand a pull request or a single finding to Claude Code in an isolated worktree, with turn and budget caps. Auto-merge rules merge agent PRs that are green and approved — narrowed by repository and label, with every decision in a local audit log.
- Drafts, never submissions. Heuristics always, Apple's on-device models where available, and your own key if you want one: Claude, any OpenAI-compatible endpoint, konduit or Ollama. A drafted summary or comment lands in the field as editable text — nothing is ever sent on your behalf.
On top of that: signed webhooks into n8n, shepherd:// links, Shortcuts, Spotlight and a CLI that drives the app from a terminal.
Local by design
Pull requests, review drafts, the search index and the audit log live in a SQLite database on your Mac. Tokens and keys live in the Keychain. There is no Shepherd account and no Shepherd server.
The landing page lists every host the app talks to — GitHub, optional and off-by-default anonymous usage counts, the update check, an AI endpoint you choose, and an optional bucket you own, into which settings and secrets only travel encrypted with AES-256-GCM.
Installation
brew install --cask schnaq/tap/shepherd
Or download the DMG from the releases on GitHub. The app is notarized by Apple and keeps itself current through Sparkle. It needs macOS 27 Golden Gate on Apple Silicon; on macOS 26, version 1.3 keeps working. Sign in through GitHub's device flow or with a fine-grained personal access token. Shepherd speaks English and German.
Stack
- Swift 6 and SwiftUI for the native app, SQLite as the local source of truth.
- Monaco, the diff editor from VS Code, embedded for the review view.
- GitHub GraphQL for reads, REST for writes.
- A companion CLI (
shepherd) that drives the app through its URL scheme.
The source code is MIT-licensed at github.com/schnaq/shepherd.
Why we're building this
We work with coding agents every day ourselves — and noticed that the bottleneck is no longer writing code, it's reading it. Shepherd is the tool we needed for that: fast, keyboard-driven, and our code never leaves the machine unless we want it to.