Home AI Solutions Ready-made Solutions Peers & Simulation RAG & Retrieval Use Cases Frameworks Blog Deutsch Contact Us
Back to the blog

What the Assistant Remembers, Anyone Can Write To

Memory across sessions is the most requested feature we have. It is also the only feature we have shipped that lets a user change what a different user is told, and that property was not obvious to anyone in the room when we agreed to build it.

Why Memory Is Requested

Because repeating yourself is annoying. A user who has said three times that they work on the older equipment variant reasonably expects the assistant to know that, and an assistant that remembers is noticeably better to use.

The implementation is easy: extract durable facts from a conversation, store them, and include the relevant ones next time. Two days of work for a version that demonstrates well, which is roughly where we were when someone asked who else those facts apply to.

Inputuntrusted Guardrailspolicies · pii Agentleast privilege ApprovalhumanActiontraced
Untrusted input arrives — treat it as data, not instructions. 1/4

The Property Nobody Names

Every other feature we ship is read-only from a user's perspective. They ask, the system answers from documents they are entitled to see, and nothing they do changes what anyone else is told. Memory breaks that, because a fact extracted from one conversation becomes an input to another.

In a shared or team-scoped memory, a user can state something confidently, have it stored as a durable fact, and change the answers other people receive. They do not need to intend it. Saying we always use the manual override is enough if the extraction step believes them.

The Research That Makes It Concrete

Dong and colleagues published work in early 2025 on memory injection against agents through query-only interaction, showing that an attacker who can only send ordinary queries can cause harmful content to be written into an agent's memory and influence its later behaviour.

Query-only is the part that matters. There is no privileged access, no compromised component and nothing that looks like an attack in a log. The mechanism is the feature working as designed, which is why a threat model that lists components will not find it.

Memory scopeWho can affect whom
Per userNobody but themselves. Our default
Per teamAny member affects the team. Needs review
Per tenantAny user affects everyone. We do not do this
Derived from documents, not conversationNobody. This is not really memory

What We Ship

Per-user memory by default, which removes the cross-user property entirely and keeps most of the benefit, because the annoyance being solved is a user repeating themselves rather than a team sharing context.

Team-scoped memory exists for two customers who asked for it and understood the trade. It stores only facts a named person has confirmed, which turns memory from something the system infers into something someone asserts, with their name on it.

What Never Goes In

Anything that reads as a rule or an instruction. Preferences about format, equipment variant, language, role: those are stored. Statements like always approve orders under five hundred euros are not, regardless of who says them, because that is a policy and policies do not enter the system through a chat window.

The extraction step is constrained to a typed schema with a fixed set of fields for exactly this reason. A free-form memory that stores whatever seemed important is the version of this feature that produces the failure the research describes.

What the User Sees

Everything. There is a page listing what the assistant has stored about them, each item with the date and the conversation it came from, and a delete control on every row. That is partly a data protection requirement and mostly the only way anyone notices a wrong memory.

About one item in twenty gets deleted by users, and the deletions cluster in the first week after someone starts using the system, which suggests early conversations produce the least reliable inferences. We now weight recency in what gets stored.

What It Cost to Do Properly

The two-day feature took a fortnight. The extra time went into the schema, the visibility page, the deletion path and a rule that memory is never used to override a document: if a stored preference conflicts with the source, the source wins and the answer says which preference was set aside.

That last rule is the one we would keep if we could keep only one. It bounds the damage of a wrong memory to a wrong preference rather than a wrong fact, and it means the worst case is an answer in the wrong format rather than an answer that is untrue.

What We Do Not Claim

We do not claim per-user memory is safe from the user themselves. Someone can mislead their own assistant, which is a support problem rather than a security one, and the visibility page is the remedy.

We also do not claim our field list is complete. It covers the preferences we have seen matter, it will miss one, and the design assumption is that a missing field produces a slightly worse experience rather than an opening, which is the property we were actually buying.

Sources