verified-handoff
Skill7 starsChanged 22 days agoMITView on GitHub
Record test, build and check runs as evidence receipts bound to an exact commit (or an explicitly described source archive), and verify a predeclared manifest of checks before claiming work is verified or handing it off. Use when reporting that checks passed, preparing a handoff or review request, or auditing someone else's claimed results. Receipts capture argv, cwd, times, exit status, signals, log hashes and input fingerprints; they are necessary evidence, not proof of review, semantic coverage, CI or deployment.
In this repository31 other files it gives its agents.
- AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- api-contract-testingSkill
- browser-testingSkill
- ci-cd-templatesSkill
- code-review-checklistSkill
- context-escalationSkill
- deep-analysisSkill
- deep-readSkill
- deliverySkill
- deployment-runbookSkill
- divergeSkill
- docker-deploymentSkill
- executeSkill
- experiment-loopSkill
- git-workflowSkill
- handoffSkill
- infrastructure-as-codeSkill
- investigateSkill
- kubernetes-opsSkill
- library-docsSkill
- multi-agent-orchestrationSkill
- observability-stackSkill
- remote-triggersSkill
- repo-contextSkill
- scheduled-tasksSkill
- security-scanSkill
- skill-creatorSkill
- sre-runbooksSkill
- ui-guidelinesSkill
- worktree-workflowSkill
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 13
Write evidence/manifest.json outside the repository before running anything:
- Very specific: line 66
Read-only. Each check is verified, pending (no receipt yet) or rejected with fixed reason codes.
≈ “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
Verified Handoff
A claim that a check passed needs a receipt for that exact input. Declare the checks first, run each one through the recorder, then verify the whole manifest.
1. Declare the checks
Write evidence/manifest.json outside the repository before running anything:
{
"checks": [
{
"label": "unit-tests",
"cwd": "../project",
"command": {"executable": "python3", "args": ["-m", "unittest", "-v"]},
"expectedSha": "<full 40- or 64-hex commit>",
"resultFile": "unit-tests/result.json"
}
]
}cwd resolves against the manifest's directory. resultFile must be a relative path
inside a subdirectory of the manifest's directory, with no . or .. parts. Each
check has exactly one of expectedSha or sourceOnly (a description of an archive
or unversioned tree).
2. Run each check
python3 scripts/evidence.py run --cwd ../project --out-dir evidence/unit-tests \
--label unit-tests --expected-sha <full sha> [--timeout 900] -- python3 -m unittest -v- The command is a literal argv; no shell is involved. Wrap in
sh -conly when the manifest declares that. --out-dirmust not exist; it is created for this run and must be outside the input.- Committed runs are refused before launch when HEAD differs, when the index or any
tracked file's content differs from HEAD, or when untracked files exist. Entries
hidden by skip-worktree/assume-unchanged flags (
index-flags-unsupported), submodules (submodules-unsupported) and tracked paths routed through a configured content filter driver (content-filters-unsupported, because inspecting them would run the driver's command) are refused rather than trusted. Use--source-onlyfor such trees. HEAD content is read with replace refs ignored, so agit replacesubstitution cannot make other bytes match the expected commit. - A HEAD, index-flag or tracked-content change during the run fails the gate even if the child exited 0; the child status is kept separately.
- The child runs in its own process group. If the leader exits while group members remain, the recorder waits up to the timeout, then terminates only that group and fails the gate. On timeout the group receives SIGTERM, then SIGKILL.
Exit codes: 0 pass, 1 ran and failed, 2 usage error, 3 refused or not launched.
3. Verify before claiming
python3 scripts/evidence.py verify --manifest evidence/manifest.jsonRead-only. Each check is verified, pending (no receipt yet) or rejected with
fixed reason codes. Every receipt is first validated against the closed v1 schema:
every field the recorder emits is required with its exact JSON type (booleans are not
integers, hashes are lowercase 64-character hex strings, numbers are never parsed
from strings, huge or non-finite numbers are rejected) and unknown fields are refused.
Schema violations are reported as receipt-schema-missing:<path>,
receipt-schema-invalid:<path> or receipt-schema-unknown-field:<path>, where
<path> is a schema path, never receipt content. Only a schema-valid receipt is then
compared: wrong-command, wrong-commit, input-mutated, child-nonzero-exit,
invalid-timestamps, stdout-log-altered, receipt-path-symlink, ...
A receipt verifies only with ordered timestamps, a duration within the timeout,
integer exit code 0, an explicit null signal, no signals sent, an empty process
group, a positive PID, a resolved executable path with its SHA-256, and unchanged
input. Schema validity is structural: the recorded executable digest is not
re-checked against the current file.
The manifest file must be a regular file, not a symlink (manifest-symlink). Its
canonical directory is the evidence root: no component below it may be a symlink,
while the directories above it are your choice of location (some systems' temporary
roots are themselves symlinks). Exit 0 only when every check is verified. Report
pending and rejected checks as such; never summarize them as passing.
What a receipt does not prove
- Who produced it, or that the manifest was honestly declared before the run.
- That the command exercises the changed behaviour (semantic coverage).
- Review, CI or deployment status; cite those separately.
- Authenticity: hashes are not signatures, and editing the receipt and logs together is not detectable.
- Transient input changes reverted during the run, or descendants that leave the process group (for example by starting a new session).
The child inherits the environment; it is not recorded. Input-identity Git queries do
not: they drop inherited GIT_* repository selectors and injected configuration (only
the GIT_CONFIG_GLOBAL/GIT_CONFIG_SYSTEM/GIT_CONFIG_NOSYSTEM file selectors are
kept), and a checkout whose top level does not contain --cwd is refused, so ambient
Git context cannot bind a receipt to another repository. Keep receipts and logs outside
public source when they may contain private output.
Optional: evaluating agent guidance
Comparing two instruction files on a synthetic corpus is a separate, opt-in activity with its own outcome verdicts; see references/agent-evaluation.md. Ordinary delivery and handoff never run it, and it does not change the v1 receipt schema.
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.

