You didn’t set out to build a database of customers.
An agent writes down everything it’s told. The transcript, the tool call that carried a policy number, the answer that came back, and a memory that outlives the session: six places the same person lands, and none of them was a decision. A subject access request reaches every one.
enterprise Free in your cluster while you build. An agreement when it carries real traffic. See exactly where the line falls →
Three people are in every conversation.
Nobody in Omnia is a name. The person on the line becomes a pseudonym before anything is written, and the key back to them stays in your identity provider. A session, a memory and an audit row all carry the pseudonym.
A pseudonym covers the handler, and says nothing about the customer they’re asking after. Her policy number and card number land in the transcript, so they’re stripped as the record is written. A field in a tool response goes further and is replaced before the model reads it.
The same check runs before anything is committed to long-term memory, which outlives the session that was supposed to govern it. A summary that would carry an identifier into next month is refused outright.
Replace, hash, or mask. Pick per field.
Replace gives you a marker. Hash keeps a value joinable but unreadable, so analytics still work. Mask keeps the last four, for the person who has to check it against something. Encryption is independent of all three, and keys rotate.
The patterns are structural: national insurance and social security numbers, cards, phone numbers, email addresses, IP addresses, and any regex you add. A name in free text isn’t a pattern and won’t be caught. What you get is that no identifier comes to rest, and what’s left is a set you can list.
When someone asks to be forgotten.
Erasure is keyed by the pseudonym and reaches every service group in the workspace: the sessions, their media, and the memories. Each one is recorded, so a target that failed is named and a reviewer can read what happened. Consent is per person and per category, and withdrawing it reaches what was already stored.
Memory is the hard one.
A transcript has a session around it. A memory doesn’t: it carries into next month and the month after, and a consolidation pass writes summaries that no longer point at where they came from. Memory is stripped on the way in, classified by what it reveals, and gated by the person’s consent for that category. Revoking it reaches back.