Skip to the content.

Home · Quick start · Editor · charter.yaml · Sources · Agent · Guides · Evals · Audit · Policies · CLI · MCP · Workspace · Desktop · About · FAQ

Governance without evidence is a promise. The flight recorder turns it into a record: every agent data access is logged, hash-chained, and verifiable — who asked, through which client, what SQL ran, which columns were masked, and a fingerprint of exactly what the agent saw. On by default; a black box you switch off (audit: off in charter.yaml), not on.

What gets recorded

Two entry types, appended to .datacharter/flight/*.jsonl:

The log stores metadata and hashes — never raw rows — so the audit trail can’t become a second copy of your sensitive data.

Tamper-evidence

Each entry carries the previous entry’s hash and its own SHA-256 over the canonicalized content. Edit any line, delete any line, reorder anything — the chain breaks, and verification names the exact entry:

$ datacharter audit verify
5412 entries verified (head 3f9c21ab04d1)$ datacharter audit verify        # after someone edits history
chain BROKEN at seq 214: entry content does not match its hash

Evidence packs

datacharter audit                          # recent sessions at a glance
datacharter audit export --since 2026-07-01 --until 2026-10-01

The export is a zip an auditor can hold: the window’s entries, a verification statement, the charter.yaml that was in force (the policy), and a summary — sessions, tools, relations touched, masked-column counts. Everything any agent saw about your data, provable.

In the browser

datacharter serve has an Audit panel: a session timeline (who connected, what they asked, every query with its masking) under a live chain verified ✓ badge, and an Export evidence button that downloads the same self-contained pack as datacharter audit export.

Canary tripwires

Auditing tells you what happened; canaries tell you the moment protection fails. Enable with one line:

canary: on              # block mode — withhold any response carrying a canary
canary: { mode: log }   # or: let it through, alarm loudly

DataCharter plants local.canaries — synthetic PII whose values embed unique tokens — and masks it with the same machinery that protects your real data. An agent that queries it sees •••, like everything else. Which means a canary token in agent output means masking or the query guard failed on that path — canaries are designed so that no governed query can legitimately return one, so alarms are near-zero false-positive by construction. Alarms land in the hash chain (tamper-evident), light up the Audit panel, and in block mode the response is withheld.

datacharter canary            # armed / disabled + how to enable
datacharter canary drill      # deliberately trip the alarm path, end to end

Notes

Next: Measure agent accuracy — evals →