Security

The standards the receipts are built on, the boundary that keeps verification independent, and the honest limits of what a chain proves.

Standards

The receipt shape aligns with draft-sharif-agent-audit-trail, an individual draft with no IETF standing, and departs from it where documented: notably Ed25519 where the draft specifies ECDSA P-256. We claim alignment with that draft, nothing more.

The open-core boundary

The code is split into three packages. Core (MIT) records, chains and verifies receipts locally. The verifier (MIT) checks evidence bundles offline. The Cloud package (commercial) holds the anchoring and bundle export. Core never imports Cloud. The verifier imports neither Core nor Cloud, and no network module, so checking the paid tier’s output never requires the paid tier, and it runs on an air-gapped machine. These rules are a source scan that runs as the first CI step, not a convention.

What a self-hosted chain does and does not prove

A self-hosted chain is self-attested. It proves internal consistency: every receipt is intact, correctly signed and linked to the one before it. It does not prove the operator left history alone. An operator with database access and the agents’ signing keys can rebuild the whole chain, and local verification will pass. A test in the codebase does exactly that, then confirms the anchored bundle still fails, because the one thing the operator cannot forge is the timestamp authority’s signature. The local append-only database triggers stop application bugs and accidents, not a determined operator.

PropertyLocal chainAnchored chain
Detects casual tamperingyesyes
Detects a full rebuild of anchored history by the operatornoyes
Detects a rebuild made before that history was anchorednono
Detects backdating after the anchornoyes
Detects truncation of the un-anchored tailnono

The last row is why Cloud (early access, not available yet) is planned to anchor continuously: new receipts would be batched and the chain head anchored at most every 15 minutes, which bounds the window in which a truncation goes undetected. Receipts also describe only what an agent chose to record; they make recorded behavior tamper-evident, not unrecorded behavior visible.

Verify a bundle yourself

Keys and identity

A receipt’s signature says which key signed it, not who holds that key. This is how agent keys are handled today.

Report a vulnerability

Report security issues privately through GitHub private vulnerability reporting: report a vulnerability on GitHub. The report stays private between you and the maintainers until an advisory is published. Please do not open a public issue for a vulnerability.

In scope: the code in the source repository, which is Core, the verifier, the Cloud package and this site. Anything that lets an altered or forged receipt, chain or bundle verify matters most. The same contact is published in /.well-known/security.txt.