agentleFS
kiloloopkiloloop/kiloloop-skills/skills/proof-before-done/SKILL.md

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.

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
  1. Very specific:

    Create a JSON object with a non-empty claims array.

    line 14
  2. Very specific:

    Do not invent a predicate just to make a claim pass.

    line 48

≈ “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.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

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:

typeRequired fieldsWhat is checked
tests_passcommand string arrayRuns the test command; exit 0 passes.
command_exit_zerocommand string arrayRuns the command; exit 0 passes.
file_existspathStats the live path; a regular file passes, an absent path fails, and a path the checker cannot inspect is UNVERIFIED.
string_presentpath, stringReads the UTF-8 file and looks for the exact string.
git_ref_containscommit, ref; optional repoRuns 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.json

Each 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.

Download now (ZIP)

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
What did you use it for? e.g. Reviewing pull requests in a Rails app

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.