Recall is a commodity.
Truth isn't.

Most agent memory retrieves text. Maat preserves the evidence behind belief: what the agent knew, when it knew it, why it trusted it, and who was allowed to see it. Every belief is derived from an append-only, hash-chained event log.

two-axis history·authority-aware·proof that travels
maat.proof.v2checking…
Verifying…
recomputing the chain
live · SHA-256 in your browser · the engine uses BLAKE3
The problem

"Why did it say that?" shouldn't be a research project.

When an agent acts on a stale fact, leaks restricted context, or contradicts itself, retrieval can find the bad answer but not reconstruct the belief behind it. Maat preserves what the agent believed, when it believed it, why, and under whose authority. The evidence survives every update.

A different substrate

The properties retrieval alone cannot provide.

Two-axis history

Reconstruct what was valid in the world and what the system believed at the time. Valid time and audit time stay independent.

maat as-of handbook.pto --at 2025-06-01

Exact provenance

Trace every belief to its source and change events. If access is blocked, return a verdict without leaking the content.

maat why <belief>

Tamper-evident history

Commit the log with a BLAKE3 chain, Merkle root, and Ed25519 checkpoint. A changed or missing event breaks the proof.

maat verify

Authority that survives derivation

Principal, scope, and namespace travel with events. Reads, proofs, and derived beliefs preserve those boundaries.

maat recall --show-blocked

Governed conflicts

Contradictions stay visible and attributed until an eligible reviewer records a rationale-backed decision. No silent last-writer-wins.

maat conflicts

Proof that travels

Export a signed, permission-filtered bundle that another party can verify offline without the store or Maat runtime.

maat prove --out proof.json
How it works

Two time axes. One chain of evidence.

Append-only log

Facts are events, not mutable rows.

Every write adds an attributed event to a BLAKE3 hash-chained log. Updates preserve the prior state instead of replacing its evidence.

Bitemporal projection

Beliefs are projections over history.

Events produce beliefs with independent valid-time and audit-time intervals. The current answer can change without erasing what the system believed before.

Signed commitment

A checkpoint makes the history portable.

A Merkle root commits to every event in the prefix. An Ed25519 signature lets another party verify the same history independently.

The gap is structural

Not a better index. A different substrate.

You can bolt retrieval onto anything. You can't bolt on a history that was never recorded.

The question an operator actually asksRecall-only memoryMaat
What did it believe last Tuesday?~latest snapshot or ad hoc logsas-of across both time axes
Why does it believe this?~metadata or a source pointerexact event chain per belief
Has the record been changed?~trust the database and operatorindependent hash and signature proof
Is this agent allowed to see it?~filter at the application layerauthority preserved through provenance
Two agents disagree. Now what?~overwrite or merge heuristicsvisible conflict and governed decision
Can another party verify it?~export the system's own reportverify the proof offline

The distinction is architectural. Retrieval finds content. Maat's event-backed substrate preserves the history, authority, and cryptographic evidence needed to defend a belief after it changes.

Independent verification

The proof outlives the agent.

An integrity dashboard is still the system vouching for itself. A Maat proof carries the material needed to recompute the chain, rebuild the Merkle root, and check the signature offline.

01

Export a filtered proof

Visible events carry authenticated content. Withheld events keep their position in the proof without revealing restricted content.

02

Move it beyond the system

The bundle carries event hash inputs, the Merkle path, and the checkpoint's signed bytes. Verification does not require the live store.

03

Verify independently

Recompute the chain, rebuild the Merkle root, and check the signature. Changed content, missing events, and forged signatures fail distinct checks.

verify without the live store
python3 tools/verify_proof.py proof.json
✓ PROOF VERIFIED · signed · complete · untampered
9 events: 7 visible & content-authentic, 2 withheld but position-proven
chain linked · Merkle root matches signed checkpoint · Ed25519 valid
verified with BLAKE3 + Ed25519 · no live store
Product model

Five primitives. One chain of evidence.

The concept reduces agent memory to five understandable actions. Each one operates on the same history instead of hiding another memory store behind the interface.

remember

Write a durable fact. A new value supersedes the old one and preserves both in history.

memory-recall

Permission-filtered retrieval. Blocked beliefs return content-free existence stubs.

why

The provenance chain behind a belief, or the block verdict if you can't see it.

prove

Export a portable, independently-verifiable proof bundle.

verify-proof

Check bundle content, chain links, Merkle paths, signatures, and store identity when pinned.

In development

Give agents a memory
that can show its work.

Maat is an active product exploration into verifiable, governed agent memory. This site shares the product idea, architecture, and direction while the work continues.

Back to the idea ↑ product concept · in development