aat-verify
Standalone reference verifier for the Agent Audit Trail Internet-Draft (draft-sharif-agent-audit-trail).
It checks a JSONL audit trail offline, from the records and public keys alone, with no access to the producing agent. That is the point: an auditor, regulator, or court can verify what an agent did without trusting or contacting the agent.
Install
pip install "aat-verify[pqc]"
The [pqc] extra adds post-quantum (ML-DSA-65 / FIPS 204) verification.
Plain pip install aat-verify verifies classical (ES256) records only.
Use
aat-verify trail.jsonl --keys keystore.json
Machine-readable output:
aat-verify trail.jsonl --keys keystore.json --json
Exit code is 0 if every check passes, 1 if any check fails.
What it checks (draft -04)
- Hash-chain integrity (SHA-256 over each record,
batchexcluded) - Signatures: ES256 (ECDSA P-256), ML-DSA-65 (FIPS 204), and hybrid, with the
signing key resolved by
signer_kid(RFC 7638 thumbprint) - Independent recording on consequential actions (recorder key differs from the agent key)
- Attributable trust downgrades (
trust_assignment) - Monotonic timestamps
- Merkle batch inclusion (RFC 6962 construction, detached anchor)
Keystore format
A JSON object mapping each signer_kid to a public key:
{
"<ec-thumbprint>": { "alg": "ES256", "jwk_x_y": { "x": "...", "y": "..." } },
"<mldsa-kid>": { "alg": "ML-DSA-65", "pk": "<base64url public key>" }
}
Public keys only. The verifier never needs, accepts, or stores private keys.
License
Business Source License 1.1 (converts to Apache-2.0 on the Change Date). See
LICENSE. (c) 2026 CyberSecAI Ltd, Raza Sharif.
Release files for aat-verify 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| aat_verify-0.1.0.tar.gz | 21.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| aat_verify-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 31.8 kB
Release files / aat_verify-0.1.0.tar.gz
| Download URL | aat_verify-0.1.0.tar.gz |
|---|---|
| Size | 21.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d9fa29eeefb4df2d2a6568dd21321477882e89375aed206f9b11a8db900f950c
|
|
BLAKE2b-256 checksum How to use checksums |
52968629dc42608fe317cb7950d93144a461aba9e4476b1f2c741ac6dbe6a2b4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.5
|
Release files / aat_verify-0.1.0-py3-none-any.whl
| Download URL | aat_verify-0.1.0-py3-none-any.whl |
|---|---|
| Size | 10.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
1275fbb735dba0431a47a3b119dbaaa8a81db8ffabeb14676b279cbc52f78737
|
|
BLAKE2b-256 checksum How to use checksums |
3a05f8dd333157db3964ad244f0b38735ca8fa27a99e9f96bfc222dd0a7a4422
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.5
|