Today
Review a PR from the CLI. Post one comment. Watch locally if you opt in.
Local-first. Open source. Evidence-backed.
brew install pr-heroIn development. Install ships at launch.
We never see your code.
Local-first / Privacy by design
The review runs locally. There is no PR Hero server in the path — we cannot see, store, or train on your code.
Checkout, diff, and reviewers stay where you work.
Nothing uploads to PR Hero. There is no backend of ours to receive it.
We do not store it, train on it, or look at it. We cannot.
In scope
Out of scope
Findings / Evidence you can open
Not a style nit. Every claim points to a file and line in your tree — plus a severity tier decided by code.
Every claim points to code you visited — not a generic paragraph.
The finding lives in a file and line you can open in your editor.
Blocking or advisory is decided by code. The model does not vote severity.
feat(auth): validate session timeout on refresh · #458
Using <= allows treating the session as valid when expiresAt === now, extending access beyond the intended TTL.
OWASP Session Management Cheat Sheet §2.2 — Expiration
“Sessions should expire at the intended time. Implementations must ensure that expiration checks do not allow a session to remain valid past expiry.”
Illustrative finding. Same shape as a real report: evidence, location, severity.
Measured / Lab
15 live pull requests. Two reviewers. Real findings — not a demo.
Same 15 live PRs · identical diffs
PR Hero
Catches what others miss.
41
findings caught
Live diff · sampled
13% false positive rate on triaged blocking findings.
Greptile
Same diffs. Fewer flags.
24
findings caught
Live diff · sampled
28 bugs Greptile missed — caught by PR Hero alone
15 live PRs, blocking findings triaged by hand. Overlap comparison — not a ranking. PR Hero and Greptile optimise for different things.
How it works / One pipeline
Four specialists read the same diff in parallel. Duplicates merge mechanically. A second pass challenges every serious finding. Severity is decided by code — not the model.
Pipeline schematic
Pull request
Your diff
opt-in
scout
parallel
same diff · four lenses
Correctness bugs: stuck loading, broken invariants, the defect that looks fine.
Failure paths: recovery, retries, stalls that never resolve.
Same behavior across surfaces. Runs only when the diff hits its paths.
Effects, latches, missing cleanups, re-entrancy, timers that never die.
Merge & verify
dedupe
Mechanical merge — no duplicate noise
refuter
Second pass challenges every serious claim
severity
Severity decided by code, not the model
comment
Structured output on the pull request
Review comment
Evidence-backed findings on your PR
CLI / How you run it
Three commands on your machine. Nothing uploads to a server of ours. Automatic watch exists — and spends only if you turn it on.
$ pr-hero init
wrote .prhero/gotchas.md # required — empty fails loud
$ pr-hero review --dry-run
plan · cost band · $0 · nothing spawned
$ pr-hero review --pr --post
worktree · hunters · one marked comment
$ pr-hero watch install
opt-in automatic spend
Roadmap / What's next
Today you can review a PR from the CLI. Launch adds npm, a TUI, a GitHub Action, and re-review on push. The rest is visible — not sold as shipping.
Today
Review a PR from the CLI. Post one comment. Watch locally if you opt in.
Launch
SoonInstall on any machine: npm, a TUI, a GitHub Action, and a second push that re-reviews.
After
Named recipes, more hunters, a dashboard, other models. Visible, not sold as shipping.
Trigger
CLI or watch
Soon · Action
Review
The pipeline
Surface
One PR comment
Soon · TUI
Next push
You push again
Soon · Re-review
FAQ / Questions