proof-before-done
Skill0 starsChanged 3 months agoApache-2.0View on GitHub
Execute completion claims and produce paste-ready evidence before any done, verified, or tested report. Use when an agent is about to claim that tests pass, a file or string exists, a command succeeds, or a Git ref contains a reviewed commit.
In this repository5 other files it gives its agents.
- dispatch-briefSkill
- memory-lintSkill
- render-checkSkill
- usage-costSkill
- verify-numbersSkill
The file
We split this skill into the rules it gives an agent
2 rules. About 0 are common, 0 are distinctive, and 2 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈0
Distinctive · estimate
This author's own choices. Worth a look.
2
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 14
Create a JSON object with a non-empty claims array.
- Very specific: line 48
Do not invent a predicate just to make a claim pass.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Proof Before Done
Turn each completion claim into a live check immediately before reporting it. Static inspection is not evidence that a command ran, and an earlier successful run is stale after a relevant file or head changes.
Build the claims file
Create a JSON object with a non-empty claims array. Give every claim a
predicate and its exact inputs:
type | Required fields | What is checked |
tests_pass | command string array | Runs the test command; exit 0 passes. |
command_exit_zero | command string array | Runs the command; exit 0 passes. |
file_exists | path | Stats the live path; a regular file passes, an absent path fails, and a path the checker cannot inspect is UNVERIFIED. |
string_present | path, string | Reads the UTF-8 file and looks for the exact string. |
git_ref_contains | commit, ref; optional repo | Runs git merge-base --is-ancestor; exit 0 passes. |
Paths and command working directories are relative to the claims file. Commands are argument arrays, not shell strings, and run without a shell. Inspect every command before executing a claims file you did not write.
{
"claims": [
{
"claim": "tests pass",
"type": "tests_pass",
"command": ["python", "-m", "pytest", "-q"]
},
{
"claim": "reviewed head is reachable from main",
"type": "git_ref_contains",
"repo": ".",
"commit": "<full-reviewed-commit>",
"ref": "main"
}
]
}Do not invent a predicate just to make a claim pass. Omit the predicate when no
decisive check exists; the checker will make that gap UNVERIFIED.
Execute and decide
From this skill directory, run:
python scripts/proof_before_done.py path/to/claims.jsonEach receipt records the claim, the exact executed command or static predicate,
its exit code when applicable, the observed value, an execution-time UTC
timestamp, and PASS, FAIL, or UNVERIFIED. Command output that is not
valid UTF-8 starts with <non-UTF-8 bytes shown as \xNN>, and each
undecodable byte appears as a \xNN escape.
FAIL means a predicate executed and observed a false result, a nonzero exit,
or a timeout. UNVERIFIED means the predicate was missing or unsupported, its
required inputs were malformed, the command could not start, or the static
input could not be inspected or read. In both cases the checker exits nonzero.
- Exit
0: every claim passed. - Exit
1: at least one claim failed or was not verified. Do not report done. - Exit
2: the claims document or CLI input is invalid. Fix it and rerun.
Rerun after any change that could invalidate a receipt, including edits, commits, rebases, check reruns, or moved refs. A receipt proves only the live state observed by that run.
Report to the person
Paste the complete receipt lines into the final reply; terminal output alone is
not the deliverable. Lead with the truthful outcome, then name skipped checks or
limits. Preserve FAIL and UNVERIFIED exactly—never translate either into
"done," "verified," or "tests pass."
EXEC marks an attempted subprocess predicate and preserves its argv.
STATIC marks an attempted filesystem inspection. Either method can be
UNVERIFIED when the process could not start or the state could not be read;
the status and observed field carry that outcome. Keep the method distinction
visible in the reply.
Inspect receipts for local paths before a public reply. git_ref_contains
preserves the resolved repository path so its argv stays exact. Prefer running
from a disclosure-safe checkout; if a path must be redacted, label the receipt
as redacted rather than claiming it was pasted verbatim.
Limits
The checker executes only the predicates declared in one JSON file. It does not discover the right project checks, prove that the claims list is complete, isolate commands, preserve receipts after state changes, or establish that a passing commit is the exact reviewed head unless the claims express that relationship.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

