After the agent finishes, prove the work actually happened.
Coding agents write code, run commands, and say they are done.
workproof is the one command that checks the claim.
If a cited claim cannot be reproduced, the process exits non-zero.
An agent claimed it edited src/fixed.js. The file is not on disk.
git clone https://github.com/kevin9327/workproof
cd workproof
node bin/workproof.js --workspace examples/caughtPASS tests 1 passed
FAIL diff claimed edit not on disk: src/fixed.js
SKIP screenshot no capture at shots/login.png
PASS receipt wrote .workproof/receipt.json
workproof: 2/4 checks passed
workproof: FAIL — a cited claim could not be reproduced
When the claims are true:
node bin/workproof.js --workspace examples/clean| Check | Question it answers |
|---|---|
| tests | Did the suite the agent cited actually run here, with the claimed result? If the runner cannot be invoked, this is FAIL. |
| diff | Do the files the agent said it changed exist on disk (and match optional contains / differ from before)? |
| screenshot | Is there a real image capture? Missing + required → FAIL. Missing + required: false → SKIP. |
| receipt | Was a replayable JSON record of the inputs and verdicts written and re-read? |
Chat green is not evidence. A receipt is.
No packages to install. Node 18+ and this repo:
git clone https://github.com/kevin9327/workproof
cd workproof
node bin/workproof.js --workspace examples/caughtFrom another project:
npx --yes github:kevin9327/workproof --workspace .node bin/workproof.js initThat writes .workproof/claim.json. Point it at the test command and the files the agent said it changed, then run workproof again.
Drop skills/workproof/SKILL.md into Claude Code, Codex, Cursor, or any agent that reads skills. The rule is simple: do not say the work is done until workproof exits 0.
{
"tests": {
"command": ["node", "--test", "demo.test.js"],
"expect": "pass"
},
"diff": {
"files": [
{ "path": "src/app.js", "op": "modify", "contains": "export function greet" }
]
},
"screenshot": {
"path": "shots/login.png",
"required": false
}
}node bin/workproof.js [workspace] [--claim <path>] [--receipt <path>]
node bin/workproof.js init [workspace]
node bin/workproof.js --json [workspace]| Exit | Meaning |
|---|---|
| 0 | Every cited claim reproduced (SKIP is allowed) |
| 1 | A cited claim could not be reproduced |
npm test runs the same check functions the CLI uses.
Agents are fast. They are also confident when they are wrong.
- Tests were “green” in the chat, not on disk
- A file was “updated” and the diff is empty
- A UI “works” and nobody opened a browser
- A bug is “fixed” and the failing case was never rerun
workproof turns those sentences into checks. If it cannot reproduce the result, it fails.
MIT




