Aarmos Verifiable Action Record · AVAR 1.0 (Normative) · avar/1
Receipts that survive the vendor.
AVAR is the receipt format Aarmos emits for every agent turn. It is open, unencumbered, and portable. Every AVAR bundle verifies against nothing but the Ed25519 public keys included with it — no Aarmos service required, no proprietary parser, no license lookup.
avar/1.1, avar/1.2) that stay readable by earlier avar/1 verifiers. x-access-v2 block (action, resource, tenant, policy_hash, obligation ledger) inside each entry. The extension is additive — older avar/1 verifiers ignore it per §2.3. Vocabulary at /docs/actions.Bundle layout
An AVAR bundle is a ZIP archive with a fixed member set. See spec §5 for the normative definition.
bundle.avar.zip
├── SPEC-VERSION # exact bytes: "avar/1"
├── manifest.json # bundle metadata, entry count, chain tips
├── entries.ndjson # one signed AvarEntry per line, chain-ordered
└── pubkeys.json # { kid → raw Ed25519 public key (base64url) }Verification algorithm
Every conforming verifier — the browser drop-zone, the CLI, and @avar-standard/verify — runs the same steps against the bundle. See spec §6 for the normative sequence.
- Read
SPEC-VERSION; reject unknown majors. - Parse
manifest.jsonandpubkeys.json. Load each entry fromentries.ndjson. - For each entry, canonically re-serialize the signed body (entry minus
signatureanddevicePubKey) and verify Ed25519 against thedevicePubKeyinpubkeys.jsonfor the matchingkid. - Recompute each entry hash from its canonical bytes; recompute per-step hashes; check that
prevHashchains correctly from genesis. - Emit a
VerificationReport: overall verdict plus per-entry status (valid, unsigned, tampered, unchained).
What AVAR does not carry
- Full prompts, chats, or tool-call arguments in the clear — only content hashes.
- User credentials or vault contents.
- Any pointer to Aarmos-hosted services. AVAR is a self-contained evidence file.
Verifier
Verification ships in three parity-tested runtimes: the browser drop-zone at /trust/verify, the aarmos verify command in @aarmos/cli, and the open @avar-standard/verify library. All three call the same verifyBundle() — divergence is guarded by golden fixtures in the spec repo.
aarmos verify path/to/bundle.avar.zip
✓ verdict: valid
entries: N
signed: N
unsigned: 0
unchained: 0
verified locally — no Aarmos service was contacted.