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

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.

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.

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.

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.