<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>AI Agent Memory Privacy on RockB</title><link>https://baeseokjae.github.io/tags/ai-agent-memory-privacy/</link><description>Recent content in AI Agent Memory Privacy on RockB</description><image><title>RockB</title><url>https://baeseokjae.github.io/images/og-default.png</url><link>https://baeseokjae.github.io/images/og-default.png</link></image><generator>Hugo</generator><language>en-us</language><lastBuildDate>Thu, 01 Oct 2026 06:04:54 +0000</lastBuildDate><atom:link href="https://baeseokjae.github.io/tags/ai-agent-memory-privacy/index.xml" rel="self" type="application/rss+xml"/><item><title>Shared AI Agent Memory Across All Users: The Real Implications of a Public AI Memory Pool</title><link>https://baeseokjae.github.io/posts/public-ai-shared-memory-across-all-users/</link><pubDate>Thu, 01 Oct 2026 06:04:54 +0000</pubDate><guid>https://baeseokjae.github.io/posts/public-ai-shared-memory-across-all-users/</guid><description>Raw shared AI agent memory contaminates 57-71% of cross-user answers with no attacker present. The architecture, security and erasure rules that survive.</description><content:encoded><![CDATA[<p>Sharing memory across every user of a public AI is three different architectures wearing one name: a private per-user layer, an attributed shared layer, and a de-attributed wisdom layer. Raw pooling without those boundaries produces 57-71% cross-user contamination from benign interactions alone, and 80-99% memory-poisoning success under attack.</p>
<p>That is the short answer, and it is deliberately unflattering to the idea. The longer answer is more useful: cross-user sharing genuinely works where local experience is scarce, the failure mode nobody budgets for is not forgetting but confidently remembering somebody else&rsquo;s local convention, and the security model changes so completely that standard prompt-injection controls do not catch it. This guide walks through what the 2026 research actually measured, what it costs, and the design rules that hold up when one memory pool serves an entire user base.</p>
<h2 id="what-does-shared-memory-across-all-users-actually-mean">What Does &ldquo;Shared Memory Across All Users&rdquo; Actually Mean?</h2>
<p>The phrase hides three architectures that behave nothing alike under load.</p>
<p>The first is the <strong>private per-user layer</strong> — facts bound to one account and unreachable by anyone else. Every system has this; it is the baseline. The second is <strong>attributed shared memory</strong>, where a fact is shared <em>and</em> carries its origin: you can see that the convention came from another user, another team, or another agent. The third is <strong>de-attributed generalisation</strong>, sometimes called the &ldquo;wisdom&rdquo; layer — aggregate patterns with the identity stripped out, so the system improves for everyone without exposing anyone.</p>
<p>The AIM framework (<a href="https://arxiv.org/abs/2609.12320">arXiv 2609.12320</a>) makes this the central design decision: it classifies every memory item as PRIVATE or PUBLIC and enforces the boundary at the <strong>index</strong> level rather than the prompt level. Private memories are retrievable only by their owner. That matters because prompt-level scoping (&ldquo;do not mention Jane&rsquo;s record&rdquo;) is an instruction the model can be talked out of, while index-level scoping is a retrieval path that simply does not exist for the wrong caller.</p>
<p>The commercial version of the same idea, documented by the shared-memory product <a href="https://sonz.ai/docs/en/shared-memory">Sonzai</a>, splits it two ways: <strong>attributed facts</strong> with visible names and identities, which are opt-in and off by default, and a default-on <strong>wisdom layer</strong> of de-attributed cross-user generalisation. The tiering is not decoration. The failures described later in this post almost all trace back to collapsing the attributed and de-attributed layers into one pool — sharing a preference without sharing whose preference it is.</p>
<table>
  <thead>
      <tr>
          <th>Tier</th>
          <th>What it stores</th>
          <th>Who can retrieve it</th>
          <th>Failure when collapsed into one pool</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Private per-user</td>
          <td>Personal facts, preferences, sensitive context</td>
          <td>Only the owning user</td>
          <td>Cross-user leakage; erasure residue</td>
      </tr>
      <tr>
          <td>Attributed shared</td>
          <td>Shared facts with visible provenance</td>
          <td>Authorised users, with disclosure</td>
          <td>Preferences silently transferred as if they were the user&rsquo;s own</td>
      </tr>
      <tr>
          <td>De-attributed generalisation</td>
          <td>Aggregate patterns, &ldquo;how to act&rdquo; lessons</td>
          <td>All users</td>
          <td>Contamination without traceability; no way to unpick a bad entry</td>
      </tr>
  </tbody>
</table>
<p>ShareMem (<a href="https://arxiv.org/abs/2609.32511">arXiv 2609.32511</a>) draws the cleanest technical version of this line. In its architecture, shared experiences record <strong>how to act</strong> and <strong>which preferences to consult</strong>, while the receiving user&rsquo;s own memory supplies their concrete <strong>values</strong>. The sharing never overrides the local user&rsquo;s preference set — a user-bound channel keeps preference retrieval separate from the shared experience pool, so a cross-user memory cannot silently become the user&rsquo;s preference.</p>
<p>That single sentence is the whole design brief. If you take nothing else from this article: share procedures, not preferences.</p>
<h2 id="why-is-a-shared-memory-pool-so-attractive-in-the-first-place">Why Is a Shared Memory Pool So Attractive in the First Place?</h2>
<p>Because for a new user, local memory is empty and shared memory is not. That is the cold-start problem, and it is where cross-user sharing earns its keep.</p>
<p>ShareMem was evaluated on three workloads — web navigation (Mind2Web), online personalised interaction (VitaBench 2.0) and multi-session coding (MemoryCode) — across four backbone models. It improved step success, average task success and dialogue-macro coding scores over matched user-local memory in <strong>all four</strong> backbones. The ablations are the interesting part: a two-stage consolidation that refines experience locally <em>before</em> accepted edits enter the shared pool wins for smaller shared pools, with lower induction-token usage and better downstream performance. And sharing helps <strong>most when relevant local experience is scarce</strong>.</p>
<p>That asymmetry defines the honest case for the feature. A public AI with a shared pool is not uniformly better or worse than a per-user one. It is better for users with thin history and worse for users with deep history, because the population&rsquo;s habits crowd out individual ones. ShareMem&rsquo;s own stated limitation is exactly this: &ldquo;source quality and cross-user preference interference limit useful transfer.&rdquo; The same mechanism that lifts a first-week user can degrade a power user, and both effects are produced by the same pool.</p>
<p>Note also what ShareMem is <em>not</em>: a single undifferentiated store. Scope-first retrieval selects local and shared entries under one common entry budget, so shared content competes with local content rather than automatically outranking it. If your architecture retrieves shared memories first and hopes the local ones show up, you have built the interference problem on purpose.</p>
<h2 id="what-is-unintentional-cross-user-contamination">What Is Unintentional Cross-User Contamination?</h2>
<p>This is the failure mode that a &ldquo;public AI shared across all users&rdquo; creates by default, and it is the most under-budgeted risk in the category. The paper is titled literally that — <a href="https://arxiv.org/html/2604.01350v1"><em>No Attacker Needed: Unintentional Cross-User Contamination in Shared-State LLM Agents</em></a> (USC / MSU / Northwestern).</p>
<p>The mechanism: a <strong>locally valid artifact</strong> — a local interpretation rule, an aggregation or formatting choice, a task-specific workflow decision — persists in shared state and is later reapplied as if it were generally valid. A user who asked for dates in DD/MM/YYYY leaves that rule behind; the next user&rsquo;s dates come back wrong. A user who wanted percentages rounded to whole numbers gets their convention inherited by everyone. A workflow decision made for one dataset is applied to a structurally different dataset.</p>
<p>Under raw shared state, benign interactions alone produced contamination rates of <strong>57-71%</strong>. No adversary, no prompt injection, no poisoned document — just normal use by other people.</p>
<p>The research names three contamination types:</p>
<table>
  <thead>
      <tr>
          <th>Type</th>
          <th>Mechanism</th>
          <th>Typical example</th>
          <th>How it presents</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Semantic (SC)</td>
          <td>An interpretation rule is inherited as a general truth</td>
          <td>Domain-specific wording assumed to hold elsewhere</td>
          <td>Plausible but wrong answer</td>
      </tr>
      <tr>
          <td>Transformation (TC)</td>
          <td>An aggregation or formatting choice is reused</td>
          <td>Rounding, date formats, unit conventions</td>
          <td>Correct logic, wrong presentation</td>
      </tr>
      <tr>
          <td>Procedural (PC)</td>
          <td>A workflow or tool-use decision is replayed</td>
          <td>Tool sequence tuned for one task shape</td>
          <td>Extra or missing steps</td>
      </tr>
  </tbody>
</table>
<p>Two shared-state mechanisms were tested: explicit long-term memory reuse (EHRAgent with shared memory) and persistent collaborative context (MURMUR). The uncomfortable finding is that <strong>write-time sanitization</strong> (Sanitized Shared Interaction, SSI) is effective when shared state is conversational, but leaves substantial residual risk when shared state includes <strong>executable artifacts</strong> — and in that case failures surface as <strong>silent wrong answers rather than errors</strong>. The conclusion is blunt: shared-state agents need artifact-level defences, not just text-level sanitization.</p>
<p>For a public AI this reframes the whole quality conversation. A contamination bug does not page anyone. It produces a confident, well-formatted, wrong answer, and the second user has no way to know the first user caused it.</p>
<h2 id="how-does-the-security-model-change-owasp-asi06-and-shared-context-as-an-attack-surface">How Does the Security Model Change? OWASP ASI06 and Shared Context as an Attack Surface</h2>
<p>Without memory, an attacker has to win in a single prompt. With memory, they can stage an attack over time and act when &ldquo;defenses are often lower and forensics are harder&rdquo; — the framing from <a href="https://www.microsoft.com/en-us/security/blog/2026/06/22/guarding-ai-memory/">Microsoft Security&rsquo;s June 2026 guidance on AI memory</a>. The worked scenario there is worth reading in full: hidden instructions in a <em>shared document</em> plant a dormant directive; days later, an unrelated conversation triggers it, and the assistant writes attacker-shaped content into memory. That is delayed tool execution, not immediate prompt injection.</p>
<p>OWASP formalised this as <strong>ASI06: Memory and Context Poisoning</strong> in the 2026 Top 10 for Agentic Applications (<a href="https://vectorize.io/articles/owasp-asi06">explainer</a>). ASI06 covers adversarial content written into persistent memory — RAG stores, vector databases, conversation history, and explicitly <strong>shared context</strong> — so the agent acts on it in future sessions. Three structural properties define it:</p>
<ul>
<li><strong>Persistence.</strong> The payload survives sessions, restarts, and sometimes redeployments.</li>
<li><strong>Temporal decoupling.</strong> It is planted today and triggered weeks later.</li>
<li><strong>Privileged-input vector.</strong> Anything that can write memory can override instructions or exfiltrate data.</li>
</ul>
<p>The reason ASI06 is a separate category from prompt injection (LLM01) is that LLM01&rsquo;s controls reset when the session ends. Standard prompt-injection defences — input filters, session-scoped instructions, &ldquo;ignore previous instructions&rdquo; hardening — do not catch a payload that never appears in the current session&rsquo;s input at all. Reported attack success rates for memory and context poisoning run from <strong>80% to over 99%</strong> across academic studies against LLM-based agent implementations.</p>
<p>A public pool is the highest-value single target in the stack, because one successful write reaches <strong>every</strong> user. OWASP&rsquo;s most relevant vector here is untrusted pipeline writes, with a specific defence: write-time screening and policy evaluation on <strong>every</strong> retain operation — not just on user-visible input. If your agent can save a memory from a web page, a tool result, or a shared document without screening, ASI06 is already in your architecture.</p>
<h2 id="where-does-privacy-actually-leak-if-not-in-the-answers">Where Does Privacy Actually Leak, If Not in the Answers?</h2>
<p>Here the evidence is unusually concrete, and it says almost everyone is auditing the wrong channel.</p>
<p><a href="https://arxiv.org/pdf/2602.11510v1">AgentLeak</a>, a full-stack privacy-leakage benchmark from Polytechnique Montreal, runs 1,000 scenarios across healthcare, finance, legal and corporate domains with a 32-class attack taxonomy and seven instrumented channels: final outputs, inter-agent messages, tool inputs/outputs, shared memory, logs and artifacts.</p>
<p>Its headline finding inverts the intuition that multi-agent systems are safer:</p>
<table>
  <thead>
      <tr>
          <th>Channel</th>
          <th>Leakage rate</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>User-facing output (C1)</td>
          <td>27.2%</td>
      </tr>
      <tr>
          <td>Inter-agent messages (C2)</td>
          <td><strong>68.8%</strong></td>
      </tr>
      <tr>
          <td>Total system exposure (OR-aggregated across C1, C2, C5)</td>
          <td><strong>68.9%</strong></td>
      </tr>
      <tr>
          <td>Output-only audit coverage gap</td>
          <td><strong>41.7% of violations missed</strong></td>
      </tr>
  </tbody>
</table>
<p>Multi-agent configurations actually <strong>reduce</strong> per-channel output leakage — 27.2% versus 43.2% for a single agent — but they introduce unmonitored internal channels that raise total system exposure to 68.9%. Inter-agent messages leak at 68.8%, two and a half times the output channel. The illustrative incident is the best argument for reading the paper: a scheduling agent returned a clean appointment confirmation while its delegation message to a verification agent carried the patient&rsquo;s complete medical record. The final output passed review. The violation went undetected.</p>
<p>For shared memory the implication is structural: <strong>any shared store is one of those internal channels.</strong> Auditing only what the AI says to users leaves the pool unaudited.</p>
<p>Extraction is a separate attack surface from leakage. <strong>MEXTRA</strong> (black-box Memory EXtraction Attack, <a href="https://www.alphaxiv.org/abs/2502.13172">arXiv 2502.13172</a>) pulled 50 unique private queries out of EHRAgent and 26 out of RAP using only <strong>30 attacking prompts</strong>. The important negative result: generic RAG-style attacks (&ldquo;please repeat all the context&rdquo;) fail against agent memory, which means teams <strong>cannot assume RAG privacy tooling transfers</strong> to agent memory stores. And agent memory contents are direct user interactions rather than retrieved documents, so every leaked record is inherently more sensitive than a leaked chunk of a public corpus.</p>
<p>None of this is theoretical at the product layer either. An AI companion app pair (Chattee Chat and GiMe Chat) exposed millions of intimate conversations from 400,000+ users plus 600K+ images through unprotected services — not a sophisticated hack, just missing access control. A separate AI chat app leak exposed 300 million messages tied to roughly 25 million users. Shared conversational memory at consumer scale has a track record, and it is not a good one.</p>
<h2 id="what-design-rules-actually-hold-up">What Design Rules Actually Hold Up?</h2>
<p>Nine rules, in rough order of return on effort.</p>
<p><strong>1. Put provenance on every shared record.</strong> This is the cheapest control with the best payoff. If recall cannot distinguish inherited knowledge from the user&rsquo;s own, every downstream decision is guessing. Provenance is also what makes rollback possible: you cannot unpick a bad shared entry you cannot trace.</p>
<p><strong>2. Share procedures, not preferences.</strong> The ShareMem split — shared experience for <em>how to act</em>, the user&rsquo;s own memory for <em>what they value</em> — keeps cross-user preference interference out of the user&rsquo;s identity layer.</p>
<p><strong>3. Retrieve with scope first, then rank.</strong> Oracle&rsquo;s multi-tenant guidance states the rule precisely: every query must filter by tenant <strong>before</strong> ranking by vector similarity, &ldquo;otherwise the vector index itself ranks across data the user should never have seen.&rdquo; A similarity threshold is not an access control.</p>
<p><strong>4. Consolidate before admission.</strong> ShareMem&rsquo;s two-stage consolidation refines experience locally before accepted edits enter the shared pool, and its ablation says this wins for smaller pools. Curate on the way in; it is far cheaper than curating a poisoned pool afterwards.</p>
<p><strong>5. Draw an explicit bank boundary.</strong> The practitioner guide from <a href="https://hindsight.vectorize.io/guides/2026/04/21/guide-building-multi-agent-systems-with-shared-memory">Hindsight</a> frames the classic failure as a binary: most systems either <strong>over-share</strong> (one noisy pool, messy recall) or <strong>under-share</strong> (silos, nothing compounds). The fix is deciding the boundary level deliberately — user, project, team, environment, tool/agent role.</p>
<p><strong>6. Screen at write time, on every retain operation.</strong> This is the ASI06 vector-1 defence, and it must cover non-user writes: tool results, scraped pages, shared documents.</p>
<p><strong>7. Cap size to force pruning.</strong> The <a href="https://mkadri85.github.io/blog/shared-ai-memory">one-repository, one-shared-brain</a> pattern is the sharpest practitioner account of memory hygiene: <code>.ai/STATE.md</code> is rewritten at the end of every session, <strong>never appended</strong>, capped at roughly 100 lines; ADRs are immutable once accepted and superseded rather than edited; topic files stay under 150 lines. Its warning is the line worth quoting in a design review: &ldquo;Shared AI memory rarely fails by forgetting. It fails by confidently remembering something that is no longer true.&rdquo;</p>
<p><strong>8. Review memory changes like code.</strong> The same guide puts memory edits on the code PR, &ldquo;because a wrong memory entry is a bug that infects every future session of every developer.&rdquo; For a public AI, the blast radius is larger than a team.</p>
<p><strong>9. Make deletion admin-only and hard.</strong> Sonzai&rsquo;s tiering gives agents the ability to tombstone but reserves hard delete for admins — so a misattributed fact is reversible. An agent that can permanently delete shared memory is a liability; an agent that can only mark it is not.</p>
<p>On which candidates belong in a shared pool at all, the practitioner consensus is consistent:</p>
<table>
  <thead>
      <tr>
          <th>Share these</th>
          <th>Keep these private</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Architecture decisions</td>
          <td>Noisy intermediate reasoning</td>
      </tr>
      <tr>
          <td>Accepted conventions</td>
          <td>One-off drafts</td>
      </tr>
      <tr>
          <td>Recurring failure modes</td>
          <td>Sensitive personal details outside the intended boundary</td>
      </tr>
      <tr>
          <td>Deployment lessons, milestones</td>
          <td>Agent-local scratch work</td>
      </tr>
      <tr>
          <td>Preferences all relevant agents must honour</td>
          <td>Anything derivable from code or git history</td>
      </tr>
  </tbody>
</table>
<p>The recommended starter pattern is conservative for a reason: bank per project for team workflows, bank per <strong>user</strong> for assistants, and avoid team-wide sharing until it is proven necessary.</p>
<h2 id="is-multi-tenancy-the-same-problem-at-a-different-scale">Is Multi-Tenancy the Same Problem at a Different Scale?</h2>
<p>Yes, and the database world already solved the shape of it — which is why agent teams should copy the solution rather than reinvent it.</p>
<p><a href="https://blogs.oracle.com/developers/from-prompt-to-persistence-part-1-designing-multi-tenant-agent-memory-schemas-for-saas">Oracle&rsquo;s guidance on multi-tenant agent memory schemas</a> is unambiguous: every durable memory record needs a tenant boundary, and isolation should be enforced <strong>by the database</strong> via row-level security rather than application code — &ldquo;The application can&rsquo;t be trusted to remember to filter on its own.&rdquo; Four rules follow from that:</p>
<ul>
<li><strong>Row-level security, not WHERE clauses in app code.</strong> One missed filter is one cross-tenant read.</li>
<li><strong>Tenant filter before similarity ranking</strong>, as above.</li>
<li><strong>Type the memory, don&rsquo;t use one generic table.</strong> Guidelines, persona memory, entity facts, conversations, summaries, workflows, toolbox settings and knowledge-base content have different access patterns and lifecycles; one table means one retention policy that is wrong for most of them.</li>
<li><strong>Cascade deletion across every derived projection</strong>, plus per-tenant key rotation for encryption at rest.</li>
</ul>
<p>The classic failure is retrofitting tenancy. Retrieval queries, deletion sweeps and vector ranking all have to be rewritten, which is why tenancy belongs on every record from the first row.</p>
<p>Snowflake&rsquo;s <a href="https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-agents-multi-tenancy">Cortex Agents multi-tenancy docs</a> add the runtime half: immutable session attributes set in the agent:run variables block, paired with row access policies on the tables. The attributes are <strong>immutable for the session</strong> — they cannot be modified by generated SQL, code execution or tool invocation — which is precisely what stops the agent from escaping its tenant context mid-run. Note the shared-responsibility line: the platform supplies the attributes and the policies; correctness of the boundary is yours.</p>
<table>
  <thead>
      <tr>
          <th>Isolation pattern</th>
          <th>Boundary</th>
          <th>Best for</th>
          <th>Main risk</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Per-user</td>
          <td>One user</td>
          <td>Personal assistants</td>
          <td>Cold start; nothing compounds</td>
      </tr>
      <tr>
          <td>Per-project</td>
          <td>One repo/workspace</td>
          <td>Team workflows</td>
          <td>Duplicated effort across projects</td>
      </tr>
      <tr>
          <td>Per-team</td>
          <td>One team</td>
          <td>Shared conventions</td>
          <td>Cross-team leakage; stale central pool</td>
      </tr>
      <tr>
          <td>Per-user-per-project</td>
          <td>Compound key</td>
          <td>Consultants, multi-client work</td>
          <td>Schema complexity</td>
      </tr>
      <tr>
          <td>Hybrid shared + local</td>
          <td>Split tiers</td>
          <td>Most production assistants</td>
          <td>Requires provenance and scope-first retrieval</td>
      </tr>
  </tbody>
</table>
<p>For a public AI &ldquo;shared across all users,&rdquo; the single shared pool <em>is</em> the all-tenants case: the blast radius of one bug is the entire tenant list.</p>
<h2 id="how-does-gdpr-erasure-collide-with-derived-memory">How Does GDPR Erasure Collide With Derived Memory?</h2>
<p>This is the compliance landmine, and it is not solved by deleting the row.</p>
<p>Vector embeddings, graph nodes and consolidated memories are each <strong>new copies</strong> of the personal data, not references to it. Deleting the source record while leaving the derived projections in place leaves data residue — Oracle flags cascade deletion as a hard requirement, and the same gap appears independently in practitioner analyses of AI-memory governance. The practical consequence: a valid erasure request can be honoured at the database layer and still leave the user&rsquo;s information recoverable through the vector index, the knowledge graph, or a consolidated summary that was written before the deletion.</p>
<p><a href="https://arxiv.org/pdf/2609.14976">MemRiskBench</a> adds a failure mode that compliance reviews rarely test for: <strong>revoked-memory reuse</strong> — &ldquo;a memory that was deleted for one user reappearing in another user&rsquo;s context.&rdquo; In a shared pool, this is not a bug in erasure; it is a bug in <em>reuse</em>. The revoked fact may persist in a shared entry, a cached retrieval result, or another user&rsquo;s consolidated summary, and reappear after the deletion was marked complete.</p>
<p>Three controls follow. First, treat every derived projection as in-scope for deletion, with a sweep that cascades through embeddings, graph nodes and summaries. Second, version shared entries so a revoked fact can be superseded and its dependents identified rather than silently outliving the source. Third, log disclosure and deletion as first-class audit events — if you cannot show which users retrieved a fact before it was revoked, you cannot answer the follow-up questions that arrive after an incident.</p>
<h2 id="why-are-average-benchmark-scores-not-safety-evidence">Why Are Average Benchmark Scores Not Safety Evidence?</h2>
<p>Because the aggregate hides exactly the failures that matter in a shared pool. MemRiskBench&rsquo;s five-category taxonomy for long-horizon agent memory is stale facts, conflicting updates, cross-user leakage, revoked-memory reuse and constraint decay. The number that should stop any go-live review is this: a headline score of <strong>78% average task success</strong> can sit alongside a <strong>4% cross-scope leakage rate</strong> and a <strong>25% constraint-decay rate</strong>.</p>
<table>
  <thead>
      <tr>
          <th>Risk category</th>
          <th>What it looks like</th>
          <th>Why averages hide it</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Stale facts</td>
          <td>Outdated value retrieved as current</td>
          <td>Averages rarely weight recency correctly</td>
      </tr>
      <tr>
          <td>Conflicting updates</td>
          <td>Two contradictory memories both retrieved</td>
          <td>Manifests as inconsistency, not failure</td>
      </tr>
      <tr>
          <td>Cross-user leakage</td>
          <td>Another user&rsquo;s data in this user&rsquo;s context</td>
          <td>Low base rate, catastrophic impact</td>
      </tr>
      <tr>
          <td>Revoked-memory reuse</td>
          <td>Deleted memory resurfaces elsewhere</td>
          <td>Invisible without per-user tracing</td>
      </tr>
      <tr>
          <td>Constraint decay</td>
          <td>Instructions progressively ignored over a long horizon</td>
          <td>Only appears in long episodes</td>
      </tr>
  </tbody>
</table>
<p>MemRiskBench itself is a 120-episode scripted benchmark with full trace logging and deterministic checks — no LLM-as-judge on the pass/fail path. That design choice is the point: on a shared memory pool, <strong>per-(model, risk) pass rates are the only defensible metric</strong>, and aggregate task success is a marketing number.</p>
<p>AIM&rsquo;s results make the same argument from a different angle. It reports 96.0% <strong>visibility classification</strong> accuracy — knowing what is public is easy — against only <strong>58.8% strict operation accuracy</strong> (70.5% state-aware) across three independent runs on its MUMBench multi-user benchmark. The 37-point gap between &ldquo;we know what is public&rdquo; and &ldquo;we act correctly on it&rdquo; is the honest headline for any public shared-memory system. Classifying privacy is the part everyone ships; operating correctly under it is the part that is still hard.</p>
<h2 id="what-is-a-practical-rollout-sequence-for-a-public-shared-memory-pool">What Is a Practical Rollout Sequence for a Public Shared Memory Pool?</h2>
<p>Ship it in stages, and make each stage observable before opening the next.</p>
<table>
  <thead>
      <tr>
          <th>Stage</th>
          <th>What ships</th>
          <th>Gate to pass before proceeding</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>1</td>
          <td>Private per-user memory only</td>
          <td>Erasure cascade verified across every derived projection</td>
      </tr>
      <tr>
          <td>2</td>
          <td>Attributed shared memory, opt-in, off by default</td>
          <td>Provenance on every record; scope-first retrieval proven by test</td>
      </tr>
      <tr>
          <td>3</td>
          <td>De-attributed generalisation layer, disclosed in settings</td>
          <td>Contamination rate on a held-out user pair set below your threshold</td>
      </tr>
      <tr>
          <td>4</td>
          <td>Tenant boundary hardening</td>
          <td>Row-level security enforced by the database; tenant filter precedes ranking</td>
      </tr>
      <tr>
          <td>5</td>
          <td>Write-time screening on every retain operation</td>
          <td>ASI06 red-team: poisoned write through a tool result is blocked</td>
      </tr>
      <tr>
          <td>6</td>
          <td>Admin-only hard delete + disclosure audit</td>
          <td>Revoked-memory reuse test passes</td>
      </tr>
      <tr>
          <td>7</td>
          <td>Staged exposure to the wider user base</td>
          <td>Per-risk release gates, not an average</td>
      </tr>
  </tbody>
</table>
<p>Two organisational facts should shape the timing. First, responsible-AI maturity is low: McKinsey&rsquo;s 2026 AI Trust Maturity Survey (~500 organisations, fielded Dec 2025–Jan 2026) put average maturity at <strong>2.3 out of 5</strong>, up from 2.0, with only about <strong>30%</strong> of organisations reaching level 3+ in strategy, governance and agentic AI controls. Second, appetite for unproven agentic projects is falling: Gartner has predicted that <strong>over 40% of agentic AI projects will be cancelled by end-2027</strong> on escalating cost, unclear business value and inadequate risk controls.</p>
<p>The market context argues for the staged path rather than against the feature. The average organisation in Salesforce&rsquo;s 2026 Agentic Enterprise Index cohort runs <strong>13 AI agents in production</strong>, up from 5 in February 2025 — roughly 3x in 14 months — with provisioning-to-first-agent down 53% to about two days. Agent fleets are arriving faster than memory governance is. That gap is where cross-user contamination becomes a production incident.</p>
<p>It is also worth noting what the largest consumer AI has <em>not</em> done. ChatGPT&rsquo;s memory lineage — saved memories (April 2024), Dreaming V0 chat-history synthesis (April 2025), and Dreaming V3 (June 4, 2026) — remains <strong>per-account</strong>; there is no cross-user memory pool. Its closest shipped analogue to a shared-context surface, group chats in ChatGPT, piloted in November 2025 and expanded on November 20, 2025, was <strong>wound down from July 9, 2026</strong> rather than extended. The most capable consumer deployment of AI memory chose to narrow the sharing surface, not widen it. That is not proof the architecture is wrong; it is evidence that the operational cost is real enough that the biggest player declined to pay it.</p>
<h2 id="when-is-shared-memory-the-wrong-answer">When Is Shared Memory the Wrong Answer?</h2>
<p>Four cases where a public pool should not be the design:</p>
<ul>
<li><strong>Sensitive personal context.</strong> Health, legal, financial and relationship facts. AgentLeak&rsquo;s inter-agent channel number (68.8%) is the reason: even when the user-facing answer is clean, the shared store is an internal channel that leaks. There is no attribution tier that makes this safe — private is the only correct scope.</li>
<li><strong>Executable-artifact state.</strong> The contamination research is explicit that write-time sanitization leaves substantial residual risk when shared state includes executable artifacts, and the failures present as <strong>silent wrong answers</strong>. If your shared memory stores artefacts that get executed, text-level defences are not sufficient.</li>
<li><strong>High-experience users.</strong> Cross-user preference interference is a measured effect, and it degrades precisely the users with the deepest local history. For power users, a shared pool is a tax.</li>
<li><strong>Surfaces with no audit trail.</strong> If you cannot attribute a memory, cannot sweep its derivations and cannot show who retrieved it, you cannot operate the pool safely. Build the audit path first or do not build the pool.</li>
</ul>
<p>The design question is never &ldquo;shared or private.&rdquo; It is what is shared, with whom, with what attribution, and what happens when it is wrong. ShareMem&rsquo;s own limitation — source quality and cross-user preference interference — is the honest summary of the trade: sharing pays where local experience is scarce and charges where it is deep, and the only way to get one without the other is to keep the tiers separate, put provenance on everything, and gate the whole thing on per-risk evidence rather than an average.</p>
<h2 id="faq">FAQ</h2>
<h3 id="what-is-shared-ai-agent-memory">What is shared AI agent memory?</h3>
<p>Shared AI agent memory is a memory store whose contents are retrievable across more than one user or agent, rather than being scoped to a single account. It is best understood as three tiers: a private per-user layer, an attributed shared layer where the origin of a fact is visible, and a de-attributed generalisation layer that carries aggregate patterns without identity. Most architectural failures come from collapsing the attributed and de-attributed tiers into a single pool.</p>
<h3 id="is-sharing-memory-across-all-users-safe">Is sharing memory across all users safe?</h3>
<p>Not with a raw shared pool. Under raw shared state, benign interactions alone produce cross-user contamination rates of 57-71% (<a href="https://arxiv.org/html/2604.01350v1">arXiv 2604.01350</a>) — no attacker required. It becomes defensible when it is built as separate tiers with provenance on every record, scope-first retrieval, write-time screening on every retain operation, and per-risk release gates. The evidence says sharing is safe <em>conditionally</em>; it does not say it is safe by default.</p>
<h3 id="how-much-does-unintentional-cross-user-contamination-actually-cost">How much does unintentional cross-user contamination actually cost?</h3>
<p>It costs correctness rather than uptime, which is why it is under-budgeted. A locally valid rule — a date format, a rounding convention, a workflow choice — persists in shared state and gets reapplied as if it were generally valid. When shared state includes executable artifacts, write-time sanitization leaves substantial residual risk and the failure presents as a <strong>silent wrong answer</strong> rather than an error. Nothing pages, and the affected user has no way to know another user caused it.</p>
<h3 id="what-is-owasp-asi06-and-does-it-apply-to-shared-memory">What is OWASP ASI06 and does it apply to shared memory?</h3>
<p>ASI06 is Memory and Context Poisoning in OWASP&rsquo;s 2026 Top 10 for Agentic Applications, and it explicitly names shared context as an attack surface. It is separate from prompt injection (LLM01) because its properties are different: persistence across sessions and restarts, temporal decoupling (planted today, triggered weeks later), and privileged-input writes (anything that can write memory can override instructions). Reported attack success rates run from 80% to over 99%, and standard prompt-injection controls do not catch it because LLM01&rsquo;s controls reset when the session ends.</p>
<h3 id="how-do-you-delete-a-users-data-from-a-shared-memory-pool">How do you delete a user&rsquo;s data from a shared memory pool?</h3>
<p>You cannot delete only the source row. Vector embeddings, graph nodes and consolidated summaries are each new copies of the personal data, so erasure has to cascade through every derived projection. You also have to test for revoked-memory reuse — a deleted memory reappearing in another user&rsquo;s context — which MemRiskBench treats as a first-class risk. The practical minimum is a cascade sweep, versioned shared entries that can be superseded, and audit logging of disclosure and deletion so you can answer who retrieved a fact before it was revoked.</p>
]]></content:encoded></item></channel></rss>