start · one receipt · three doors
Prove it yourself.
One real signed receipt, published at a fixed URL. Check it in this tab, in your terminal, or from your agent — same verifier, same bytes, and none of them asks us for the answer.
the receipt everything below checks
receipt_idrcp_pom_synthetic_119_0001
- /example/receipt.jsonthe signed envelope, and its inclusion proof
- /example/keys.jsonthe two public test keys it should check against
- /example/proof.jsonthe proof alone, for the CLI’s --proof
Signed by a test key over synthetic material, and sealed for real into day 2, whose package this site publishes. No production key has signed an inference receipt yet — the gateway that will issue them is still in build.
in this tab
No install. The page fetches those two files and runs the verifier your browser already downloaded with it.
Nothing has been checked in this browser yet.
Have a receipt of your own? Paste it on /verify — same verifier, same refusal to phone home.
in your terminal
Offline by default, and the keyset is yours to supply — a verifier that fetched its own trust would just be asking you to trust the fetch.
Fetch the two files.
curl -sO https://pcrzero.com/example/receipt.json \ -sO https://pcrzero.com/example/keys.jsonRun the check.
npx --package pcrzero pcr0 verify --receipt receipt.json --keys keys.jsonwhat that printed on a real run
{ "valid": true, "conformance": "full", "receipt_id": "rcp_pom_synthetic_119_0001", "inclusion": "not-requested", "trust_base": { "keyset": "caller-supplied" } }Exit code 0 for a valid receipt, 2 for an invalid one, 1 for an error — so this drops into CI without parsing anything.
And the sealed half, still with no network
Add the day’s published package and the anchor document as local files, and the same command also recomputes the receipt’s ledger leaf and walks it to the sealed root.
npx --package pcrzero pcr0 verify --receipt receipt.json --keys keys.json \
--proof proof.json --checkpoint 2.json --anchors anchors.jsonwhat that printed on a real run
{
"valid": true,
"inclusion": "ok",
"trust_base": { "anchors": "caller-supplied", "checkpoint": "caller-supplied" }
}The two extra files are the seal package and the anchor document, both already public.
npx --package pcrzero, not npx pcr0: the package is pcrzero and pcr0 is the command it installs. npm i -g pcrzero if you would rather have it on your path.
in your agent
An MCP server, so an agent can check a receipt mid-task without you writing any glue.
Add the server to your MCP configuration.
{ "mcpServers": { "pcrzero": { "command": "npx", "args": ["-y", "@scytalex-llc/pcrzero-mcp"] } } }Ask for
verify_receipt, and hand it the envelope from the file above.Same verdict, same reasons as the other two doors. Free, and it needs no key — pass a keyset with the receipt and it uses no network at all. Only
issue_receipt, which mints receipts, is metered.
The server, its tools and its threat model are written out on the MCP page.
what this page witnessed
All three doors check rcp_pom_synthetic_119_0001 against the same keys, and agree or one of them is broken. Only the first ran here, so it is the only one this page draws a verdict for — the other two blocks are transcripts of real runs. A page that lit three green ticks while watching one would be committing the exact substitution this product exists to catch.
Checking is arithmetic over files you can fetch yourself, so it needs no account, no key and no permission from us, permanently. Issuing is the metered half, and why that split is the product is argued at length elsewhere.