v1.0 — open spec · open verifier

Cryptographic proof
of what your AI agent did.

Sign skills. Seal execution. Verify receipts.
A tamper-evident audit trail for every agent invocation — verifiable by anyone, no access to the operator required.

$ pip install traceseal-verify Copied
traceseal-verify
$ traceseal-verify receipt.json
[OK] receipt.json
skill: agentmail v1.2.0
operator: ed25519:f19bc125dcfdb2eb...
publisher: ed25519:a07c7eb5f20f6b99...
Checking receipt structure ........
Checking manifest consistency ....
Checking operator signature ......
The operator attests this execution
occurred as described.
$

Three roles. One verifiable proof.

Every execution receipt has three sections: what ran, who authorized the code, and who vouches for the execution. Any third party can verify all three — no access to the operator's machine, keys, or audit log.

01
🔑
Sign publisher → skill

The publisher signs the skill bundle with an ed25519 key. The signature covers every source file via a content-addressed manifest. The public key is recorded in the transparency log.

Algorithm: ed25519
Covers: manifest over all source files
Published: transparency log entry
02
🔒
Seal operator → execution

The operator runs the signed skill inside a kernel-namespace sandbox (bwrap). The runtime records inputs, outputs, timing, and sandbox configuration as SHA-256 hashes, then signs the entire record with the operator's ed25519 key.

Sandbox: bwrap isolation
Records: input/output content hashes
Signed: operator ed25519 signature
03
Verify anyone → receipt

Any third party installs traceseal-verify and runs one command. The verifier checks the operator's signature over the canonical JSON of execution + provenance. No operator connection. No trust assumptions.

Input: receipt.json only
Dependency: cryptography
Exit codes: 0 valid · 1 invalid

One file. Everything verifiable.

A Traceseal receipt is a self-contained JSON document with three sections. Every field is encoded as canonical JSON before signing, so any tampering breaks the signature.

receipt.json
{
  "receipt_version": "1.0",

  "execution": {                   // A
    "skill_name": "agentmail",
    "skill_version": "1.2.0",
    "skill_manifest_hash": "sha256:00741b31...",
    "timestamp": "2026-04-15T04:47:13Z",
    "entry_point_name": "check",
    "inputs_hash": "sha256:62622f40...",
    "outputs_hash": "sha256:86f2cb02...",
    "exit_code": 0,
    "wall_time_ms": 167,
    "ok": "true",
    "sandbox_profile_hash": "sha256:daa6f3c4...",
    "audit_entry_hash": "sha256:a4925b7f..."
  },

  "provenance": {                  // B
    "manifest_hash": "sha256:00741b31...",
    "publisher_fingerprint": "ed25519:a07c7eb5...",
    "publisher_public_key": "3a5e3b26...",
    "published_at": "2026-04-15T04:47:13Z",
    "transparency_log_seq": 1
  },

  "attestation": {                 // C
    "operator_fingerprint": "ed25519:f19bc125...",
    "operator_public_key": "810607ba...",
    "attested_at": "2026-04-15T04:47:40Z",
    "signature": "5ea122fa..."
  }
}
A

Execution — what ran

Skill identity and version. A manifest_hash covering every source file. The sandbox configuration hash. SHA-256 of the inputs and outputs — not the values themselves, just their hashes. Timing, exit status, and a link to the audit chain via audit_entry_hash.

B

Provenance — who authorized the code

The publisher's ed25519 fingerprint and public key. The transparency log sequence number where the manifest was recorded. The manifest_hash must match the one in execution — consistency is enforced by the verifier.

C

Attestation — who vouches for it

The operator's ed25519 signature over the canonical JSON of execution + provenance. The public key is embedded in the receipt so verification is self-contained — no lookup required. A tamper anywhere in the receipt invalidates this signature.

Four steps. Two independent signatures.

Publisher signs once at publication. Operator signs once at execution. Verifier checks both without trusting either side.

📦1

Publish skill

Publisher builds a content-addressed manifest over every source file, signs with ed25519, records manifest hash + public key in the transparency log.

2

Run in sandbox

Operator runs the signed skill inside a bubblewrap sandbox with declared capabilities. Inputs, outputs, and sandbox configuration are hashed and appended to the audit chain.

🔏3

Issue receipt

Operator signs the execution + provenance record with their ed25519 key. The receipt embeds the operator's public key so verification needs nothing else.

🔍4

Verify offline

Any party runs traceseal-verify receipt.json. Signatures checked locally. Operator never contacted. Machine never accessed.

Real receipts. Real hardware.

Traceseal runs on a production Debian 13 VPS. Every number below is reproducible. Every receipt is third-party verifiable.

217tests passing
on real hardware
27audit chain entries
across 7 versions
116msfull pipeline
sign → seal → verify
3production skills
signed and receipted
SkillWhat it provesResultReceipt
skill-bundle-demo Pure-stdlib bundle, 3 entry points, strict kernel-namespace isolation 116 ms · OK ✓ verified
agentmail SDK bundle, selective dependency mounting, honest failure sealed exit 1 · sealed ✓ verified
yoast-seo-audit Single-entry web scraper under strict isolation 47 ms · OK ✓ verified

No black boxes.

The receipt format, signing convention, and verification algorithm are fully specified. Anyone can build a compatible verifier from scratch in any language.

The spec and verifier are Apache 2.0. Use it commercially, fork it, audit it, implement it yourself.

Apache 2.0 ed25519 SHA-256 canonical JSON

Start verifying in
thirty seconds.

One package. Zero infrastructure. Works anywhere Python runs.