Per-file progress.
A ring fills next to every file as you scroll past it. Filled = read. Empty = waiting on you.
Read PR gates pull request approval until a human has read every file. A CI check that turns green only when the diff has actually been read.
read-pr / reviewed
5 of 7 files read · 3m 48s
Status check posted to PR #482 by Read PR.
Why Read PR exists
Code review was the last human-in-the-loop step before merge. It held because writing code was slow. Now writing code is cheap and reading is the only part still done by hand.
Reviewers feel the squeeze. Approvals get faster. The two-character comment LGTM still works on every codebase, every team, every Friday at five.
Read PR puts reading back in the loop.
Time on file
Approval at 14:02:11
Read for 4m 12s, approval at 14:06:23
Coverage
0 of 7 files opened
7 of 7 files read
On the record
“LGTM”
“Read by @ian — 4m 12s across 7 files”
A progress ring beside every file. The check stays pending until each reviewer has met their reading threshold.
Two installs and a single CI check. Setup in under two minutes.
Add Read PR to your GitHub organization. Pick the repos it watches. The required status check is registered automatically.
github.com/apps/read-pr
Chrome, Edge, or Firefox. It injects a progress ring beside each file in the diff view and tracks dwell time as you scroll.
Chrome Web Store · Firefox Add-ons
Open the files view. Read. The check turns green when each file has met its threshold. Branch protection does the rest.
git push origin feature/auth
Read PR does not change the way you review. It changes what approval means after you do.
For reviewers
A progress ring next to every file. The status check goes green when you have read each one. No surprises, no second-guessing whether you missed a file.
Setup guide →For tech leads
Set a per-repo threshold once. Every approval after that has a verifiable reading record attached. The team self-corrects without you having to nag.
For engineering leaders →For compliance
Per-file dwell time, per reviewer, per PR. Exportable as JSON or CSV. Auditors get a real artifact instead of a screenshot of an approval.
For security & compliance →Six things, each one earning its keep.
A ring fills next to every file as you scroll past it. Filled = read. Empty = waiting on you.
Files you've already read stay read. A later push only resets the files it actually changed.
package-lock, pnpm-lock, generated, dist — all skipped by default. Override with a glob.
We use GitHub's tokens, spacing, and dark mode. The extension blends in instead of painting over.
Dwell time only. No keystrokes, no mouse paths, no screenshots. The extension is open source.
Required status check on every PR. Green when reading thresholds are met. Branch protection does the rest.
Thresholds are per repo. Scale with file size. Exclude lockfiles and generated code by default. Require every assigned reviewer — or any one.
rules: minSecondsPerFile: 15Even a one-line change earns 15 seconds. secondsPer100Lines: 5Scales with file size, not arbitrary. maxSecondsPerFile: 180Caps the dwell-time accumulator at 3 minutes. excludeGlobs: - "**/*.lock" - "pnpm-lock.yaml" - "**/*.generated.*"Lockfiles, generated, vendored — skipped. - "**/dist/**" requireAllReviewers: falseOr true. Your branch protection, your call.Reading time, per reviewer, per file. Visible on the PR, auditable in the dashboard, exportable for compliance.
| Reviewer | Files read | Time | State |
|---|---|---|---|
| @ian | 7 / 7 | 4m 12s | Read |
| @kai | 7 / 7 | 5m 03s | Read |
| @renee | 4 / 7 | 2m 41s | In progress |
Other tools sit before review (AI assistants) or after (audit tooling). Read PR sits inside it — the moment that matters.
| Read PR | Honor system | AI review tools | Audit tooling | |
|---|---|---|---|---|
| Verifies a human read the code | Yes | — | — | — |
| Blocks merge until met | Yes | — | Optional | — |
| Per-file granularity | Per file, per reviewer | PR-level approval | PR-level summary | Snapshot at merge |
| Reads the diff for you | No — that's the point | — | Yes | — |
| Audit trail | Per-reviewer dwell time, exportable | Approval timestamp | Comment thread | Full |
| Setup | GitHub App + extension, 2 min | Free | GitHub App | Procurement cycle |
Read PR is built to live alongside the others. AI for the first read, a human for the one that counts, audit tooling for the after-the-fact paper trail.
Adding teammates is always free — pay only for the private repos Read PR watches. Public repos are on us.
public repos
per private repo / month
Charged via Stripe. Pro-rated to the day. Disable a repo and the meter stops on the next reconcile.
The ten things engineers and security leads actually ask before installing.
Read PR is a GitHub App and browser extension. The app posts a required status check on every pull request. The extension tracks reading time per file as a reviewer scrolls through GitHub's diff view. The check turns green when each reviewer has met the per-file reading threshold for the repo. It does nothing else — it doesn't read the diff, summarise the change, or post comments.
We track reading, not readers. Read PR records dwell time per file, focus events, and which file is on screen. It does not record keystrokes, mouse paths, screen contents, scroll positions inside files, the contents of the code, or anything outside github.com pull-request pages. The extension is open source. Per-PR records expire 90 days after the PR closes unless your retention policy is longer.
No. Reading time only accumulates while the file is on screen, the tab is focused, and there are signs of life — scroll movement or focus events. Open the tab and walk away and the timer pauses immediately.
The CI check stays pending. The PR page shows a one-line nudge to install the extension. Optional manual attestation can be enabled per repo for one-off reviewers — audited the same way as a normal reading record, with the attestation flagged.
No. The reading thresholds are configurable per repo and scale with file size. The defaults — 15 seconds minimum, 5 seconds per 100 lines, 3 minutes max per file — match how senior engineers actually read code. Lockfiles and generated files are excluded by default.
Yes. Read PR sits as a separate required status check alongside your normal review requirements. Branch protection treats it the same as a passing test suite. CODEOWNERS still controls who is asked to review; Read PR controls whether their approval counts.
It posts a single status check. No comments by default. The extension shows the progress ring inline next to each file in the GitHub UI — no PR comment thread spam.
Public repositories are free, forever. Private repositories are $8 per repo per month, with the first private repo included. Adding teammates is free — there are no per-seat charges. Billed via Stripe, prorated to the day.
Chrome, Edge, and Firefox today. Safari is on the roadmap. GitHub.com and GitHub Enterprise Cloud are supported. GitHub Enterprise Server is available on the Enterprise plan.
Per-file reading state clears when the PR closes or merges. Aggregate reviewer history is kept for 90 days, then deleted. Workspaces with audit retention requirements can extend retention indefinitely.
Two minutes to install. Free for public repos. The first private repo is on us.