AIToday
AI Coding AssistantsHacker NewsPublished: Aug 16, 2026, 13:03 JST6 min read

ProofRun: cryptographic proof AI agents actually ran tests

ProofRun: cryptographic proof AI agents actually ran tests

Key takeaway

  • ProofRun is an open-source verification tool that uses cryptographic fingerprinting to prove whether an AI coding agent actually ran tests against the code it claims to have tested.

  • Rather than parsing test output or using AI to verify AI, it captures the real exit code and binds it to a hash of the exact git state—if any code changes, the result automatically flips to STALE.

  • The tool was built by Claude Code and underwent adversarial review to find and fix vulnerabilities before release, making it usable as a CI gate or pre-commit hook.

3 Key Points

  1. What happened

    ProofRun is a tool that cryptographically binds test results to the exact code state (git commit plus hash of all uncommitted changes) so that results automatically become STALE if any byte changes. It was built by Claude Code (an AI agent) and stress-tested through adversarial review before release.

  2. Why it matters

    AI coding agents often claim tests pass without actually running them—they may be inferring based on prior runs or guessing. ProofRun eliminates that ambiguity by using real subprocess execution and binding the exit code to a fingerprint of the current code. For teams relying on AI agents to write code, this is a way to cryptographically verify claims rather than trust them.

  3. What to watch

    The tool is currently at v0.2.0 and fully offline with zero network calls or telemetry. A GitHub Action is available for pull requests. Upcoming features include structured output support for pytest and Jest, and tamper-evident signed receipts (on the radar but not yet designed).

In Depth

Read the full story

ProofRun is an open-source command-line tool that cryptographically binds test and build check results to the exact code state, solving a trust problem in AI-assisted development. When an AI coding agent claims "all tests pass," it may be truthful, but it could also be inferring based on an earlier run or guessing—there is no way to tell the difference from the words alone. ProofRun closes that gap by making the claim itself verifiable: it runs the real command (e.g., pytest) in a subprocess, reads the actual exit code, and stores the result tied to a fingerprint of the current code.

The fingerprint is the key mechanism. Every result is bound to the git commit hash plus a SHA-256 hash of all uncommitted changes (staged or not, tracked or not). If so much as a single byte changes—a space, a new line, anything—the result automatically becomes STALE. The tool recomputes the fingerprint every time proofrun status is called and compares it against the stored receipt. This means developers never have to remember to ask "does this PASS still count?" The system answers automatically and correctly.

ProofRun supports four statuses: PASS (the command succeeded), FAIL (the command failed), STALE (the result is outdated because code changed), and NOT RUN (the check has never been executed). Notably, there is no fifth status for "probably fine" or "I think it passed." Each status comes from observed execution or documented absence. The tool makes no LLM calls anywhere—it does not use AI to verify AI. Instead, it starts a real subprocess and reads its exit code; that is the entire verification mechanism. It is fully offline with zero network calls and zero telemetry.

Configuration is minimal. Users create a .proofrun.yml file declaring named checks, each with a command (given as an argv array, not a shell string) and a required flag. For example, a test check might declare command: [pytest] with required: true, and a build check might declare command: [npm, run, build]. When proofrun run test -- pytest is executed, ProofRun runs pytest for real and binds the result. When code changes and proofrun status is called, the tool reports STALE for any check whose fingerprint no longer matches. The --strict flag makes proofrun status exit with a non-zero code if any required check is not PASS, making it usable as a pre-commit hook or CI gate.

ProofRun was built by Claude Code (an AI agent) under human direction, then underwent several rounds of independent, read-only adversarial review before the first release. That review found a vulnerability: ProofRun's command comparison could be tricked by a misquoted shell argument, allowing a check to silently run zero tests and still report PASS. The developers documented the full repro and the exact fix in docs/case-study.md, and every fix was verified against a real reproduction before being accepted—not just reviewed for plausibility. This scrutiny is intentional: a tool designed to hold AI agents accountable cannot exist if it cannot survive the same standards applied to itself.

A GitHub Action (yebiguo/proofrun@v1) is available for pull requests. It checks out the exact PR head commit (never trusting a synthetic merge-preview), clears any receipt.json that came in on the PR branch, downloads a checksum-verified ProofRun binary, runs proofrun run-all for real, and gates on proofrun status --strict. Nothing about a receipt checked into the PR is trusted—every result is produced fresh by the Action. One known limitation: the Action warns (via a build annotation) if .proofrun.yml differs from the base branch but does not block on that, since a PR could loosen a check's command and the Action would faithfully run the weaker version. Teams are advised to review the .proofrun.yml diff like any other change.

The roadmap includes structured output support for common test runners (pytest, Jest, JUnit) in v0.3, signed and tamper-evident receipts (on the radar but not yet designed), and protection for .proofrun.yml itself to prevent it being weakened within the same PR that changes the code. The project is licensed under MIT and deliberately narrow in scope—a young, pre-1.0 tool with a focus on STALE detection and the receipt schema as its most critical guarantees.

Context & Analysis

The core problem ProofRun addresses is a trust gap in AI-assisted development: when a coding agent says "all tests pass," there is no way to tell whether the agent actually ran the tests moments ago or is merely inferring the result based on an earlier run or educated guessing. This matters because developers and reviewers cannot easily verify the claim without re-running the tests themselves—a friction point that undermines confidence in AI-generated code.

ProofRun's solution is deliberately narrow: rather than trying to make agents more honest or using AI to audit AI, it makes the claim itself checkable through cryptographic binding. Every result is pinned to an exact code state (the git commit plus a hash of all uncommitted changes, tracked or not). The moment any byte changes—whether edited by human or agent—the status flips to STALE automatically. This removes the burden of remembering to re-validate and ensures that stale results cannot silently remain marked as passing.

The tool's design is notable for what it excludes: no LLM calls, no network, no telemetry, no parsing of test output for meaning. It only starts a subprocess and reads the exit code. This extreme simplicity is a strength—there is no room for guessing or soft judgment. The four statuses (PASS, FAIL, STALE, NOT RUN) come from observed execution or documented absence, never from inference. The fact that ProofRun itself was built by Claude Code and then subjected to independent adversarial review before release adds credibility: the developers found and fixed a vulnerability (a misquoted shell argument could trick the command comparison), and every fix was verified against a real reproduction, not just reviewed for plausibility.

FAQ

How does ProofRun verify test results?
It starts a real subprocess (e.g., pytest) and reads the actual exit code, then binds that result to a cryptographic fingerprint of your current code state: the git commit plus a SHA-256 hash of any uncommitted changes. If any byte changes, the stored result automatically becomes STALE.
Does ProofRun use AI to verify AI claims?
No. It deliberately does not make LLM calls, parse test output, or judge code quality. It only runs the real command and reads the exit code—no guessing involved.
Can I use ProofRun in GitHub Actions?
Yes. A GitHub Action (yebiguo/proofrun@v1) is available and runs proofrun run-all on the exact PR head commit, then gates on proofrun status --strict. It clears any receipt that came in on the PR branch and downloads a checksum-verified binary before running.

Get the latest AI Coding Assistants news every morning

AI-summarized, only the topics you pick — one digest a day via Email, Slack, or Discord.

Free · takes 30 seconds · unsubscribe anytime

Ask AI

Ask AI anything about this article. Q&As are published on this page for other readers too.

Related Articles

Next articleOpen-weight AI models threaten pricing, but cloud giants stay profitable

The AI news that matters, in one minute each morning.

Sign up free