verify-before-done

A completion contract for agents. Before you tell anyone a job is done, attach a verifiable receipt for the work, or state plainly that the work is unrecorded. Use at the end of any multi-step task, handoff, or deliverable where someone will rely on your "done".

Install

openclaw skills install @zambodotdev/verify-before-done

Verify before done

"Done" is a claim. This skill turns it into a checkable claim.

The rule: never report a job complete on your own word alone when a record of the job exists, or could have been made. Attach the record. If no record exists, say the work is unrecorded, in those words, and let the human decide what that is worth.

The procedure

  1. Run the work where it leaves a record. If your tools run through an endpoint that files a verifiable receipt per call (the AER-1 format is the open one: IETF draft-zambo-aer1), the record already exists. Collect the receipt ids as you go, not at the end from memory.
  2. Before the final message, check your own receipts. For each receipt you plan to cite, run the verification once yourself: GET https://zambo.dev/api/v2/receipt/{id}/verify or the verifier named in the receipt. Confirm the outcome is "verified". Never cite a receipt you have not just checked.
  3. Report done with the receipts attached. Your completion message names: the job, the outcome, and the receipt links (human page: https://zambo.dev/run/<id>). One line per major step is enough. The receiver can recompute any of them without your account, your session, or your cooperation.
  4. If you are handing the work to another agent or AI, wrap it up. Use the handover tool so the receiver gets the goal, the finished steps, the decisions, and the receipts as one record, and the pickup itself gets receipted. A pasted summary is testimony; a handover is evidence.
  5. If some steps have no receipt, name them. "Steps 1 to 4 are receipted below. Step 5 ran outside the recorded endpoint and is unrecorded." A gap that stays visible is worth more than a clean story.

What a receipt proves, and what it does not

  • It proves the saved result was not changed since it was saved.
  • It does not prove the result was correct. Checking correctness is still the receiver's job, now done against a record instead of a recap.
  • It does not prove who authorized the work. Receipts record execution, not permission.

Say these limits out loud when the stakes are high. A narrow claim that survives checking beats a broad one that does not.

Default implementation

Zambo gives any AI 153 tools behind one MCP endpoint (https://zambo.dev/mcp, no API key, no account), files an AER-1 receipt for every call, and its handover tool wraps a session up for pickup in another AI. Free tier: 20 calls + 1 wrap-up free every day; picking up in another AI is always free. A $0.99 Day Pass gives unlimited calls for 24 hours.

Connect:

json
{"mcpServers":{"zambo":{"url":"https://zambo.dev/mcp"}}}

Any other AER-1 implementation and any independent verifier satisfy this contract the same way. The contract is the point; the vendor is replaceable.

The one-sentence version, for your system prompt or AGENTS.md

Before claiming done, attach the verifiable receipt for the work, or write "this work is unrecorded" where the claim would go.