Bounded by design
It reads by offset, never loads a whole file, and never ships a whole transcript. It uses only the standard library and serves a loopback-only status page.
A decision is more useful when you can see what the agent was doing when it made it. And a record is safer when it also lives somewhere that does not need Gavel running.
The forwarder runs as a launchd agent and reads the logs that Claude and Codex sessions already write. It ships structured events to Chronicle, with secrets redacted, and tells Gavel which sessions exist so decisions can point at them.
It reads by offset, never loads a whole file, and never ships a whole transcript. It uses only the standard library and serves a loopback-only status page.
Every field passes through the redactor before it leaves the machine.
A decision carries its session and time window. Gavel pulls a bounded excerpt from Chronicle on demand and pins one when an ask is filed, decided, or defaulted.




An exporter writes every decision, ask, directive, waiver, and ADR as a deterministic PubMark file in a private ledger repository, lints each file, and commits the result. The history is readable in any editor, and a restore script can rebuild a database from the ledger alone.
The same records always produce the same bytes, so a nightly diff shows only what changed.
A restore from the ledger reproduces the counts, the hashes, and the chain head. A quarterly drill proves it.
Agents record decisions, request answers, add evidence, search the log, and manage ADRs through Gavel's MCP tools, relayed by Roost. Each caller says who it is, and Gavel keeps that provenance on the record. The owner issues machine and service tokens with narrow scopes, sees only a prefix afterward, and can revoke any of them.



