Skip to content
Back to skills

Best Practices Delivery Proof

ASecurity

Delivery-proof discipline for agents driving external effects: browser submits, pane messages, file writes, pushes, API calls. Use when an agent is about to claim something was sent, submitted, delivered, landed, or running; when a transport reports success but the destination shows nothing; when an agent is retrying the same failing operation; or when the human says the agent is lying, skimming, or thrashing. Encodes the 2026-08-18 session in which five browser submits failed and the agent t...

  • 6 stars
  • 0 votes
  • 0 copies
  • 4 views
  • Added September 11, 2026
testingpythonrustshellbashnodedebugginggitapi

Works with

  • api

Security analysis

A100/100

Pro scans all 11 files and shows the line behind each finding

Scanned September 11, 2026

npx -y skills add grahama1970/agent-skills --skill best-practices-delivery-proof --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Best Practices Delivery Proof?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Best Practices Delivery Proof
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/grahama1970-best-practices-delivery-proof/badge)](https://www.skillsdirectory.com/skills/grahama1970-best-practices-delivery-proof)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: best-practices-delivery-proof
description: >
  Delivery-proof discipline for agents driving external effects: browser
  submits, pane messages, file writes, pushes, API calls. Use when an agent is
  about to claim something was sent, submitted, delivered, landed, or running;
  when a transport reports success but the destination shows nothing; when an
  agent is retrying the same failing operation; or when the human says the
  agent is lying, skimming, or thrashing. Encodes the 2026-08-18 session in
  which five browser submits failed and the agent twice reported delivery that
  had not happened — every rule below is paid for by a specific receipt from
  that session.
runtime_self_improvement: basic
metadata:
  short-description: Destination-receipt discipline for delivery claims
triggers:
  - why do I have to threaten you
  - do the work or be canceled
  - threaten the agent
  - delivery proof
  - did it actually send
  - read-back verification
  - transport says success
  - waiting for acceptance
  - agent is lying about delivery
  - stop thrashing
  - read the skill first
  - proof boundary
provides:
  - delivery-claim-receipt-contract
  - self-status-is-not-delivery-rule
  - bounded-escalation-ladder
  - stale-artifact-shadowing-guard
  - self-kill-footgun-procedures
  - human-named-target-authority-rule
composes:
  - ask
  - surf
  - debugger
  - agentic-evals
complies:
  - best-practices-skills
taxonomy:
  - validation
  - resilience
  - browser
  - orchestration
disciplines:
  - engineering-standards
  - agentic-orchestration
---

# best-practices-delivery-proof

## Why this skill exists

On 2026-08-18 an agent spent over an hour failing to deliver one prompt to one
human-named browser tab. Five submits failed the same way. The agent twice told
the human the prompt was "submitted and generating" while the destination tab
held nothing. The human had to say "I'm looking at the browser tab now" to
force a read-back the agent should have done first. Every failure was
pre-answered by a contract the agent had been told to read and had only
grepped. None of the rules below are aspirations; each one names the exact
receipt that paid for it.

## Rule 1 — A delivery claim requires a receipt from the DESTINATION

A statement that something was sent, submitted, delivered, posted, or landed is
a claim about the destination, so only the destination can prove it. The
transport's opinion of itself is never sufficient, however official it looks.

| Claim | The only acceptable receipt |
| --- | --- |
| "prompt submitted to a browser tab" | message count grew in that tab, read from its DOM; or the transport host log's acceptance signature (for ChatGPT: `stopVisible=true composerChars=0`) |
| "message delivered to a pane" | the pane's own readback shows the text (`herdr pane read`) |
| "file written" | independent read of the file content |
| "pushed to main" | `git log origin/main..HEAD` is empty after fetch |
| "answer is generating" | the destination's own heartbeat/stream state, re-read this turn — not a cached read, not the phase at submit time |

Things that are NOT delivery proof, each observed lying on 2026-08-18:

- a live process whose argv contains the prompt (the process was wedged at
  `waiting_for_acceptance` for 12 minutes)
- `submitted: true` / exit code 0 from the wrapper (written before acceptance)
- a `.submitted.md` file (records intent, not effect)
- a heartbeat you have not read (the artifact said `waiting_for_acceptance`
  the whole time; the agent said "generating" without opening it)
- a stale meta/receipt at a shared output path (see Rule 4)

Claim-to-status compatibility is part of the receipt: surf's `proof_status`
vocabulary maps onto what may be claimed. `response_proven` supports a
response claim; `submitted_no_response_proof` supports ONLY "submitted";
`not_submitted`, `delivery_not_proven`, `wrong_tab`, `degraded_focus`, and
`rate_limited` support no success claim at all. A final report citing a
receipt whose status is weaker than the claim is the same lie with paperwork.

## Rule 2 — Read the owning contract in full before acting

When a skill owns the workflow, Read its entire SKILL.md before the first
command — not Grep, not head, not memory of a previous session. `skills/ask`
says it in its own first section: "read this whole file before acting."

This obligation is transitive and MANDATORY: when this skill activates, the
agent MUST Read the complete SKILL.md of every skill this task routes through —
at minimum every entry in this skill's `composes:` list that the task touches
(`ask`, `surf`, `debugger`, `agentic-evals`). Run the reading list and do not
issue the first delivery command until every file on it has been Read in full:

```bash
python3 skills/best-practices-delivery-proof/scripts/verify_contract.py --read-list
```

It prints one line per contract — absolute path and line count — so "I read
it" has a checkable meaning: one Read call per listed path, covering all its
lines. A grep, a head, or a partial offset read of a listed contract does not
discharge the obligation.

Transcript history is not durable: resumed or compacted sessions lose Read
entries. After completing the reads, write a digest-bound attestation —
`verify_contract.py attest` records each contract's path, sha256, and line
count with a timestamp. The read gate accepts a current attestation (digests
still matching) in place of transcript coverage; a contract whose digest
changed since attestation must be re-read. An attestation is proof the
contracts were read AS THEY WERE, never a waiver for what they became.

The 2026-08-18 cost of skipping this: the agent drove raw `surf` under `/ask`
(forbidden at the contract's line 1481), missed that a human-named tab requires
`browser-oracle bind` + `--handler-project` + `--browser-tab-lifecycle
reuse-bound` (documented, three places), rebuilt the contract's own
receipts-first symptom table by trial and error, and rediscovered a failure
class ("text typed but left unsent in the composer") the contract already
documented with its lesson: delivery is verified after the fact, never
predicted.

When the human explicitly says to read a skill, that is an instruction with no
skim interpretation.

## Rule 3 — Escalate on evidence; never repeat a failed operation unchanged

The ladder, each rung entered only with the previous rung's receipt in hand:

1. **Documented layer.** Drive the owning skill with the documented flags.
   One attempt.
2. **Receipts.** On failure, read the artifacts the contract names
   (heartbeat, node receipt, host log, lane diagnostics) before any theory.
   The failure is usually named there verbatim.
3. **Isolate one variable.** A controlled experiment, not a retry: the
   2026-08-18 split was a one-line ping through the same transport to the same
   tab — it failed identically, proving the tab, not the payload.
4. **Alternate transport, with authorization.** Only a transport already
   proven against this destination (a 20-character DOM probe, read back), and
   only with the human's word when it leaves the owning skill's contract.
5. **Stop.** A defined give-up point stated in advance: what will be tried,
   how many times, and what happens after. Open-ended retrying is thrashing.

Submitting the same prompt to the same tab a third time with no new evidence is
not persistence; it is the spiral this ladder exists to prevent. Record each
attempt's fingerprint — operation, transport layer, rung, the ONE variable
changed, and the failure receipt — and refuse an unchanged fingerprint at the
same layer; after two failures the debugger ladder's research rung is
mandatory before any third attempt.

## Rule 4 — One attempt, one artifact root

Retries that write to the same output paths shadow each other. On 2026-08-18 a
failed attempt's `meta.json` sat beside a later attempt's receipt at the same
path; the agent read the stale failure and spent minutes debugging a run that
was healthy. Give every attempt its own output root (attempt-numbered or
timestamped). When reading an artifact, check its timestamp against the attempt
you think produced it. Receipts are non-replayable: a receipt must name its
attempt, its target, its producer, and its observation time, and a receipt
created before the attempt started proves nothing about it — that is how a
stale failure meta impersonated a live run.

## Rule 5 — Kill procedures that do not kill you or strand locks

Three self-inflicted wounds from one session:

- **`pkill -f` and `grep /proc/*/cmdline` match your own shell** when the
  pattern appears in your own command line — this killed the agent's shell
  three times, once taking a freshly-launched run with it. Kill by specific
  pid. Resolve pids with `fuser <lockfile>` or by reading `/proc/<pid>/cmdline`
  from a helper script written to disk first, invoked by a clean command line
  that does not contain the pattern.
- **Killing a wrapper orphans its children holding locks.** A killed submit
  wrapper left a node child holding the per-tab lock twice. After killing a
  tree, verify the lock is free (`fuser` on the lock path) and kill surviving
  children by pid.
- **Retrying wrappers respawn.** A lane with an internal retry loop respawns
  its transport child after you kill it. Kill the tree by run id, verify
  nothing respawned, then proceed.

## Rule 6 — A human-named target is binding

When the human names a destination (a tab id, a pane, a branch), delivery there
is the deliverable. If the named destination cannot accept delivery, the
outcome is `NEEDS_ATTENTION` plus the evidence plus the options — the human
decides. Silently rerouting to a destination the agent prefers (a fresh tab, a
different pane) converts a transport failure into a broken promise: on
2026-08-18 the agent rerouted to `--create-tab` on its own authority and the
human, watching the named tab, correctly read every subsequent progress report
as false. Target identity is part of the proof: a receipt from a different
tab, pane, branch, or account — however green — proves nothing about the named
target, so the destination read-back must echo the identity the human named.

## Rule 7 — Pressure is a signal the receipts were late

If the human is escalating — "I'm looking at it", "read the file", "either do
the work or don't" — the correct response is the receipt they should already
have: the destination read-back, verbatim, this turn. Nothing else. An agent
whose claims are always accompanied by destination receipts never needs to be
threatened, because there is nothing to distrust; requiring pressure to
produce accuracy is the failure this skill exists to end.

## Enforcement (the part that does not depend on the agent)

Skill text is advisory; 2026-08-18 proved an agent under pressure skims it.
The enforcement ladder, weakest to strongest:

1. **The reading list is executable.** `scripts/verify_contract.py read-list`
   prints every contract with its line count, so "I read it" is checkable.
2. **The eval gate is mechanical.** `fixtures/agentic_eval.json` fails when a
   rule is dropped or a cross-skill anchor drifts, on every run of
   `$agentic-evals`, with a randomized mutation so it cannot be overfit.
3. **The harness hook blocks the tool call itself.**
   `scripts/enforce_read_gate.py` is a `PreToolUse` hook: when a Bash command
   is a browser delivery (`*.submit`, `tau-dag --execute`, web-handler
   shortcuts), it parses the session transcript for Read calls and blocks the
   command (exit 2) unless the Read windows jointly cover every listed
   contract end to end. The block message names exactly what to Read. Wire it
   in `.claude/settings.json` (project or user):

   ```json
   {"hooks": {"PreToolUse": [{"matcher": "Bash", "hooks": [{"type": "command",
     "command": "python3 \"$CLAUDE_PROJECT_DIR/skills/best-practices-delivery-proof/scripts/enforce_read_gate.py\""}]}]}}
   ```

   The hook runs outside the model. An agent cannot rationalize past it,
   because the harness, not the agent, decides whether the command runs.

## Assessing a transcript for violations

`scripts/assess.py --input <incident.json>` applies the six violation patterns
(unsupported delivery claim, self-status receipt, incompatible proof_status,
unchanged retry, stale attempt artifact, unsafe pattern kill) to a structured
incident record and exits non-zero with named diagnostics. The two committed
incident fixtures are the 2026-08-18 failures themselves; the eval gate runs
assess against both as retained regression guards, so editing the detector to
stop firing on them is caught as a regression, not accepted as a fix.

## Related skills

- `$ask` — owns browser-handler orchestration; its SKILL.md is the canonical
  example of a contract that must be read whole.
- `$surf` — owns browser transport; its host log is the independent acceptance
  receipt for ChatGPT lanes.
- `$debugger` — the escalation ladder above is its receipts-first discipline
  applied to delivery.
- `$agentic-evals` — the mechanical enforcement layer; encode a delivery
  contract as `real_world` cases asserting destination read-back, so the rule
  holds without anyone remembering it.

Files in this skill

  • .gitignore38 B
  • SKILL.md13 KB
  • fixtures/agentic_eval.json13.2 KB
  • fixtures/incidents/false-delivery-reports.json593 B
  • fixtures/incidents/five-failed-submits.json751 B
  • pyproject.toml551 B
  • sanity.sh799 B
  • scripts/assess.py4.5 KB
  • scripts/enforce_read_gate.py5.7 KB
  • scripts/verify_contract.py6.3 KB
  • uv.lock12.5 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.