Memory

Four tiers, and a rule about which wins.

The customer who called last week shouldn’t have to explain it again. Neither should the agent have to be told your refund policy in every system prompt. Both are memory, and they are not the same kind: one belongs to a person, the other to the business.

enterprise Free in your cluster while you build. An agreement when it carries real traffic. See exactly where the line falls →

“It remembers” is four different claims.

Most systems have one pool. One pool means an agent can’t know a company policy unless every user tells it, and a support agent and a coding agent in the same workspace share whatever either of them learned.

Three users down the side, three agents across the top. One cell is what a single agent remembers about a single person. That cell’s row is everything remembered about that person, whichever agent they talked to. Its column is everything one agent has learned, across everyone. The frame around all of it is what the workspace knows.

Institutional

Knowledge shared across every agent in the workspace: policies, product facts, brand voice.

written by an admin, read by everything
Agent

What this agent has learned from its own conversations, across all users.

scoped to one agent
User

What is remembered about one person across every agent they talk to: preferences, identity, history.

scoped to one person
User-for-agent

What one agent remembers about one person, and no other agent sees.

per-agent personalisationpersonalization

When two tiers disagree, one of them has to win.

The institution says refunds stop at thirty days. The customer said last month that they always want a refund. Both are memory, both are true, and an agent holding both has to pick one.

Precedence depends on what the memory is for. A preference defers to the person: user, then agent, then institutional. A policy does the opposite: institutional wins, and no amount of user history overrides it. Each row carries which of the two it is, so the question is answered by the data.

a preference
user → agent → institutional

The person’s own choice wins. It is theirs.

a policy
institutional → agent → user

Compliance wins. Nobody talks their way past it.

What happens to a memory over time.

Left alone, a memory store becomes a junk drawer. Near-duplicates pile up, stale facts outrank current ones, and something learned about one customer sits where nothing else can reach it. A memory here has a life. It fades out of recall long before it’s deleted, and gets tidied while it’s still in use.

A memory’s pull on recall falls away steadily from the day it’s written. For the first stretch it outranks older matches. After that it stays in the store but stops being the default answer, found only when it’s the best match. Later again it is pruned, soft-deleted first and removed for good only after a grace window. The two boundaries are set separately, per tier.

recalled first fresh, and it outranks older matches
still there, ranked lower found when it’s the best match
pruned soft-deleted first, gone only after a grace window
and all the while
  • a near-duplicate arrives and collapses into the one already there
  • several stale notes about the same thing become one summary
  • something one agent learned moves up to where the workspace can use it

None of that is the model’s decision. The tidying is off until an operator turns it on, and when it runs it proposes rather than decides: an agent reads the stale rows and suggests what to merge or move, and the platform checks every suggestion against its own rules before anything changes.

the tier worth attacking

One bad row in institutional memory reaches every conversation.

Institutional memory is visible to every agent and every user in the workspace, and the model treats it as high-trust because an operator approved it. A single planted row changes what every agent believes, no single user is positioned to notice, and deleting it afterwards doesn’t undo the decisions already taken on its basis.

The write path is gated: what may write to which tier is enforced, rows carry their lineage, and retrieval can refuse a row outright through a rule that fails closed when it can’t evaluate. DefencesDefenses scale with blast radius. The tier everything reads gets the full stack.

write path
gated by tier, with lineage on every row
retrieval
a deny rule that fails closed
on the way in
PII is stripped before a row is ever stored
on request
consent revocation reaches what is already there

What are they all asking about?

Memories are placed by meaning, so the clusters are themes: the question that keeps coming back, the confusion that repeats, the thing customers assume that isn’t true. Zoom into a cluster and read what’s in it. The same embeddings that make recall work put it there; nobody had to tag it.

Every memory in the workspace, placed by meaning and colouredcolored by tier. Recorded from the console on sample data.
and it can’t be used to read about a person

Memories classified as identity, location or health are stripped on the server before the projection is sent. They still contribute a dot, so the shape of the clusters stays honest, but the dot carries no id and there’s nothing to open. That happens on every request, cached or not, and it doesn’t change with who is looking, so an operator can’t widen their scope until the mask comes off.

What it kept, and what it refused.

How much is remembered, at which tier, for how many people, and how much was refused by the privacy filter on the way in. A memory store you can’t inspect is a liability that grows quietly; this one has a page.

Memory analytics in Omnia: totals by tier, active users, and a count of PII rejected by the privacy filter

totals by tier · and what the privacy filter turned away