Home / Product / Memory Governor
Memory with change control.
Every memory change is proposed, validated, versioned, and audited, never silently overwritten.
The risk
More memory needs control.
Generic memory absorbs facts as they arrive, leaving agents exposed to stale data, poisoned instructions, and updates nobody can explain later. In serious environments, memory is a decision surface, not a cache.
The Lians approach
Review every update.
conversation / document / tool output → candidate memories → governor decisions → policy gates → audit commit → explainable recall
Governed by design
Control the memory loop.
Learned facts start as proposals: pull requests for memory, not silent mutations.
Ask what an agent knew at a point in time, not only what it knows now.
Close stale validity windows so revised facts don't pollute current context.
Commit every change through an append-only, tamper-evident event trail.
Rules run before changes commit; suspicious facts stay out of recall until reviewed.
See why a fact was returned, what it superseded, and what was suppressed.
Not generic memory
Remembering is not governing.
| Generic memory | Lians Memory Governor |
|---|---|
| add / search / update / delete | propose / commit / audit / recall_at |
| silent updates | memory PRs |
| current memory only | point-in-time recall |
| stale facts can leak | supersession suppression |
| hard to explain | explainable recall |
| little governance | policy gates and quarantine |
The review API
Approve every change.
# What is waiting for a human decision? GET /v1/supersessions/review # → flagged events: relation (SUPERSEDES | REFINES | …), confidence, rationale # The engine got it right: accept the supersession. PATCH /v1/supersessions/{memory_id} {"action": "confirm", "reviewer_note": "guidance revision verified"} # The engine got it wrong: restore the old fact as currently valid. PATCH /v1/supersessions/{memory_id} {"action": "reject"} # Writes held by admission control (PII / PHI / MNPI / injection / vagueness): GET /v1/admissions?status=pending POST /v1/admissions/{id}/resolve {"action": "approve" | "reject"}