Changelog¶
All notable changes to agentveto are documented here. The format follows Keep a Changelog and the project adheres to Semantic Versioning as soon as we hit 1.0.
[Unreleased]¶
Added¶
- V2 "Prove": tamper-evident, signed evidence. New
agentveto/prove.pyturns recorded runs into evidence an auditor can verify offline. - Canonical (sorted-key, compact) SHA-256 digest of every run: the run row
plus all its spans, ordered by
seq, hashed exactly as stored. - Runs are linked into a hash chain anchored at a genesis value, so each block transitively covers the whole history.
- Optional Ed25519 signing of the chain head via
cryptography. Because the head covers every earlier block, one signature authenticates everything. Install withpip install 'agentveto[sign]'. - Portable
.evdevidence files: embed the target run's full data plus the digest chain, so a third party verifies with the file alone — no database, no network, no account. - Tamper detection that names its target: editing one byte in one span makes verification fail and report which run is wrong.
agentveto prove {keygen,sign,export}andagentveto verifyCLI commands.verifytakes an.evdfile, a.dbfile, or a directory; exits0/1so it drops into CI.- Python API:
keygen,sign_db,export_evidence,verify_db,verify_evidence,verify_evidence_file, and aVerificationdataclass exposingokplus per-check(name, ok, detail). - New
evidencetable in the SQLite schema (pos, run_id, prev_hash, run_digest, hash, signature, public_key, signed_at). Written only byprove sign— never by the tracing hot path.
Notes¶
- Prove is integrity for what was recorded, not proof that the record is true.
Anyone with write access before you sign can sign an edited record, so sign
at the moment you want to freeze it. Documented in
docs/prove.md. - The chain is linear rather than a Merkle tree, deliberately: for one process's run history that is the right size.
- Formatting normalized to current
ruff format, which the CI lint job enforces. - V1 preview:
@guard(policy, action="...")runtime policy gate. Deny, ask-with-fail-closed, plain-dict policy withwhenclauses over dot paths. Every decision is written into the trace as a span attribute and surfaces in the HTML view as avetotag. policy_iomodule +agentveto policy {show,validate,explain}CLI for inspecting a JSON policy without running code.- MCP server (
agentveto-mcp) exposingevaluate_policy,explain_policy,validate_policy,load_policy_file. Install withpip install 'agentveto[mcp]'. - String and length operators:
endswith,startswith,contains,len_eq,len_gt,len_lt. Cross-type comparisons fail closed (string > 0->false, not an exception). reasonaccepts a{lang: text}dict for bilingual errors. Locale picked fromAGENTVETO_LANG>LANG>en.- MkDocs documentation site (
docs/).
[0.1.0] - 2026-09-04¶
Added¶
- V0 release: deterministic replay, cost attribution, step-level audit.
@agentveto.trace(kind="tool")decorator for explicit spans.- Auto-instrumentation of installed
openaiandanthropicSDKs. - Single-file HTML report (no CDN, no login, opens offline).
- SQLite-backed
Storewith WAL mode;init(replay=True)for free replays. agentveto demo,agentveto list,agentveto report --run <id>,agentveto serveCLI.- 86 passing tests covering record/replay, the policy engine, the MCP server, and bilingual reasons.