Skip to content

Signed records for agents, APIs, and MCP tools.

Ed25519-signed. I-JSON validated. Verify offline, in the browser, or across runtime boundaries.

Ed25519 · I-JSON validatedoffline or browser-nativeMCP · API · gateway
36 npm packages61 record types290 conformance checksApache-2.0
[email protected]: ~/verifyzsh
$
run:
36
npm packages
61
record types
290
conformance checks
12,729
tests passing
start here

Pick a path. Each is copy-paste.

Three entry points based on how much time you have. All three end with a verified signed record.

quickstart

60 seconds to a local proof.

Generate real signed records and verify one offline. Requires Node 22.13.0+. No account.

1 · generate signed samples
$npx @peac/[email protected] samples generate -o ./samples
2 · verify one offline
$npx @peac/[email protected] verify ./samples/valid/basic-record.jws --public-key ./samples/bundles/sandbox-jwks.json

expected output — Signature valid (offline)

what a decoded record looks like
interaction-record.jwsdecoded
interaction record · wire 0.2✓ verified
jti
019ecfcc…bdd8
type
org.peacprotocol/access
kind
evidence
iss
sandbox.peacprotocol.org
iat
2026-06-16
alg
EdDSA · Ed25519
kid
sandbox-2026-06
signature
signing input
header.payload
public key
sandbox-2026-06
checked by
web crypto · offline
Ed25519 verification profile · I-JSON validated · tamper-evident

The same sandbox record used in the terminal above and the browser verifier. Each field is verifiable — type, issuer, timestamp, and the Ed25519 signature.

wire it in

Attach a record to an MCP tool call.

The carrier pattern is transport-neutral. Two keys in _meta — the JWS and its digest reference.

json — tool result _meta
{
  "_meta": {
    "org.peacprotocol/receipt_jws": "<compact-JWS>",
    "org.peacprotocol/receipt_ref": "sha256:<digest>"
  }
}

The consumer extracts the JWS, confirms receipt_ref == sha256(jws), and verifies the signature against the issuer JWKS. Tampering anywhere in the chain fails closed.

$peac verify <record.jws> --public-key <issuer-jwks.json>
verification depth

Deterministic verification at every layer.

PEAC v0.16 ships a complete verification stack. Tamper at any layer — raw bytes, signature, or replay — and the verifier rejects it.

v0.16.0 "Deterministic Verification for Portable Records" ↗E_IJSON_DUPLICATE_MEMBER_NAMEE_IJSON_NUMBER_OUT_OF_RANGEE_IJSON_INVALID_STRING
terminal reference

Every command in one screen.

Type any of these in the hero terminal above. The terminal is real — commands execute in your browser.

peac.dev >_ interactive terminaltype any command
$ verifyverify the signed sandbox record — real Ed25519 check, fully offline
$ tamperflip a byte in the record, then verify — watch the signature fail closed
$ decodebase64url-decode the JWS header and payload and print the fields
$ guiopen the full browser verifier at /verify
$ try / mcpjump to the CLI quickstart or MCP integration guide
$ helplist every available command
faq

Getting-started questions.

>how do I verify a signed record?

Run the terminal above (type verify), use the browser verifier at /verify, or run the CLI: npx @peac/cli verify <record.jws> --public-key <jwks.json>. Verification runs the PEAC Ed25519 profile (cofactorless, small-order denylist) and validates I-JSON compliance before any parse.

>does verification need a network connection?

No. Records verify offline with a local public key file. The in-browser verifier at /verify can also resolve the issuer key from the record iss field over HTTPS when you want convenience.

>what does v0.16 add?

A complete verification stack: cofactorless Ed25519 profile (TS + Go), raw-bytes I-JSON gate that rejects duplicate members, out-of-range numbers, and invalid strings before any parse, and an optional composable createReplayGuard. Wire format and record types are unchanged (wire 0.2, 61 types, 290 conformance checks).

>where are the full docs and specification?

The canonical PEAC Protocol specification, schemas, error codes, and documentation live at peacprotocol.org. peac.dev is the developer front door for getting started fast — every link here points back to the canonical source.

>_

Verify a real signed record now.

Apache-2.0 · 36 packages · wire 0.2 · 61 record types · 290 conformance checks