start · one receipt · four doors

The payout will not clear without a receipt.

One published receipt, four doors: this tab, your terminal, your agent, or the payout desk.

in this tab

No install. The page fetches those two files and runs the verifier your browser already downloaded with it.

verdictnot run

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.

the receipt everything below checks

receipt_idrcp_pom_synthetic_119_0001

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 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.

  1. Fetch the two files.

    curl -sO https://pcrzero.com/example/receipt.json \
      -sO https://pcrzero.com/example/keys.json
  2. Run the check.

    npx --package pcrzero pcr0 verify --receipt receipt.json --keys keys.json

    what 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.json

what 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.

  1. Add the server to your MCP configuration.

    {
      "mcpServers": {
        "pcrzero": {
          "command": "npx",
          "args": ["-y", "@scytalex-llc/pcrzero-mcp"]
        }
      }
    }
  2. 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.

at the payout desk

The payout will not clear without a receipt. This is assertPayoutLock, in this tab, on the published attestation specimens /receipts already re-verifies. Missing refuses. A fail verdict refuses. Pass clears.

  1. missing

    payoutnot run
  2. fail

    payoutnot run
  3. pass

    payoutnot run

Nothing has been bounced in this browser yet.

A bounce, not a camera. Pass is rcp_happy_pass. Fail is rcp_happy_fail_verdict — a recorded fail that still verifies, and still does not clear. The other doors check a different envelope family (inference).

what this page witnessed

The first three doors check rcp_pom_synthetic_119_0001 against the published inference keyset. The desk runs assertPayoutLock on the published attestation specimens (rcp_happy_pass, rcp_happy_fail_verdict) — missing refuses, a fail verdict refuses, pass clears. Only the first door and the desk ran here. The terminal and agent blocks are transcripts of real runs.

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.