DEV Community

Cover image for A claim of success must carry its evidence, or it must not be made
Kasper
Kasper

Posted on

A claim of success must carry its evidence, or it must not be made

When your coding agent ends a turn with "tests pass" or "fixed it," you act on it. You ship, you close the tab, you stop watching. And a confident-sounding guess looks exactly like a checked fact — same words, same tone. The difference only shows up later, when it's expensive to trace back.

Most "hook packs" hand you a prompt that asks the model to behave. A prompt is copyable and easy to ignore. I wanted enforcement, not a request.

ProofKit is a Claude Code Stop hook. It reads the agent's final message, and if that message asserts success without evidence a reader could check, it blocks the turn — the agent can't end until it substantiates the claim or retracts it.

ProofKit

What's honestly tested, and what isn't. ProofKit holds itself to its own rule, so here's the ledger: the detector and hook are covered by a runnable suite (88/88 on my machine, node --test), asserting both directions — it fires on claims and stays silent on honest/negated prose. It runs identically on bash and PowerShell. A real captured Claude Code Stop payload is replayed through it. What's not auto-tested: that Claude Code honors the block in a live session — that was observed during development, and it's the one gate you should watch once after installing.

Install is one command (node install.mjs) — it merges into your settings.json, backs it up, and never touches your other hooks. Zero dependencies, MIT.

It's a tripwire, not an oracle. It makes the reflex — assert success, end turn — cost something. That's the whole point.

ProofKit on Github

Top comments (0)