Emit ZAP1 verifiable attestation receipts from Inspect AI evals (verify-without-trust eval verdicts).
Project description
inspect-receipts
Emit ZAP1 verifiable attestation receipts from Inspect AI evals. Install the package, run any eval, and a signed-evidence receipt for the run lands next to your logs with no fork and no code change to your tasks.
What this is: the missing signed-evidence layer for agent evals. Inspect (and the broader agentskills.io ecosystem) produce rich results but ship them as trust-on-read JSON.
inspect-receiptsturns each eval into a hash-commitment:input_hash(what was evaluated),output_hash(the verdict), andlocked_harness_hash(the frozen judge), so a third party can recompute without trusting the runner.What this is NOT: a proof that the eval, the scorer, or the system-under-test is correct. It is a tamper-evident commitment, not a correctness SNARK. No prompts, completions, transcripts, or secrets ever enter a receipt: only canonical SHA-256 hashes, numeric metrics, and coarse identifiers.
Install
pip install inspect-receipts # plus: pip install inspect_ai
Inspect auto-discovers the hook via its inspect_ai entry-point group. There is
nothing to import in your eval.
Use
inspect eval my_task.py --model anthropic/claude-opus
# -> ./zap1-receipts/receipt-<task_id>.json
Each completed task writes a receipt like:
{
"schema": "zap1.vwc.v0/attestation",
"receipt_family": "AGENT_EVAL_VERDICT",
"vwc_profile": "attestation",
"subject": { "kind": "inspect_eval", "task": "ipi_resistance", "model": "..." },
"hashes": {
"input_hash": "sha256:...",
"output_hash": "sha256:...",
"locked_harness_hash": "sha256:..."
},
"score": { "kind": "scalar", "direction": "maximize", "name": "match.accuracy", "value": 0.92 },
"metrics": ["match.accuracy=0.92"],
"status": "success",
"public_boundary": "hash-commitment, NOT a proof of correctness"
}
Configuration (env)
| Variable | Default | Effect |
|---|---|---|
INSPECT_RECEIPTS |
1 |
Set 0 to disable receipt emission. |
ZAP1_RECEIPT_DIR |
./zap1-receipts |
Where receipts are written. |
ZAP1_RECEIPT_ISSUER |
inspect-receipts |
Issuer label in the receipt. |
ZAP1_RECEIPTS_ANCHOR |
0 (off) |
Opt-in: POST the receipt to a ZAP1 endpoint. |
ZAP1_ENDPOINT / ZAP1_API_KEY |
unset | Required only if anchoring is enabled. |
Default is local-only / no network. Anchoring is opt-in and transmits only the bounded receipt (hashes + metrics), never eval content. Verify locally before you anchor.
Receipt format
Receipts use the ZAP1 attestation schema (zap1.vwc.v0/attestation): a locked,
hashed judge (the Inspect task, model, and config), a recomputable verdict, and
three bound hashes. The same envelope is reused for benchmark and gate receipts,
so one verification path covers all of them.
License
MIT.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file inspect_receipts-0.1.0.tar.gz.
File metadata
- Download URL: inspect_receipts-0.1.0.tar.gz
- Upload date:
- Size: 7.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
aa42c2b04ce9cfefaaa941e5a433c122c9b8cb59ae73669cfc8a83b7d1936d92
|
|
| MD5 |
ff3e8aae21d92051be4f055f8652262e
|
|
| BLAKE2b-256 |
d9a3653310e7707bb8d2cb219f82a6dfed1ed305b3e67bce68cc45ca3b7fbd16
|
File details
Details for the file inspect_receipts-0.1.0-py3-none-any.whl.
File metadata
- Download URL: inspect_receipts-0.1.0-py3-none-any.whl
- Upload date:
- Size: 9.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
eccb2ac0715730d62358b63de696ad187155b49dc2a35451ac0c33ae90fe97eb
|
|
| MD5 |
d3a1f6f0d667e9a0a4ed6c9b154595d3
|
|
| BLAKE2b-256 |
25dc8ba1dffe450f933fe74c9ba8704c01e7924320fe746c824cd61891130193
|