A local verification receipt for AI coding agents. ProofRun doesn't judge whether your code is correct — it proves, cryptographically, which checks actually ran against the exact code you have right now.
An AI coding agent says "all tests pass." Is that true?
Maybe. It was true the last time the agent actually ran the tests. But that might have been three edits ago. The agent might not even remember running them — it might just be inferring "the change looks right, tests probably still pass." From the words alone, you have no way to tell "I ran it and it passed" apart from "I'm pretty sure it would pass."
ProofRun closes that gap. Not by making the agent more honest — by making the claim itself checkable.
Every check result is bound to a fingerprint of your exact code state: the git commit, plus a SHA-256 hash of everything uncommitted — staged or not, tracked or not. Change a single byte, and the result flips to STALE automatically. Nobody has to remember to ask "does this PASS still count?"
ProofRun doesn't use AI to verify AI. It starts a real subprocess and reads its real exit code — that's the entire mechanism.
PASS, FAIL, STALE, NOT RUN — each one comes from an observed execution, or the documented absence of one. There's no fifth "probably fine."
Zero network calls, zero telemetry, zero accounts. Your code never leaves your machine.
A check declared as pytest -k "foo bar" can't be satisfied by a command that merely looks similar — ProofRun compares real argument arrays, not strings.
Wire status --strict into a pre-commit hook or CI gate. A GitHub Action is included — it re-runs everything against the exact PR head commit and never trusts a checked-in receipt.
Every stored result is signed (HMAC-SHA256) with a machine-local key. A hand-edited receipt.json — even one with a perfectly matching fingerprint — no longer verifies, and it never shows a false PASS. Tamper-evident, not tamper-proof: it catches a naive edit or an agent trying to fake a result, which is exactly the threat it was built for.
Deliberately out of scope: parsing test output, judging code quality, auto-fixing anything. ProofRun proves what ran. Nothing more.