<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: gregor</title>
    <description>The latest articles on DEV Community by gregor (@plur9).</description>
    <link>https://dev.to/plur9</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3849560%2Fba4d90a4-9ae4-4131-a919-4af0f270ba30.png</url>
      <title>DEV Community: gregor</title>
      <link>https://dev.to/plur9</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/plur9"/>
    <language>en</language>
    <item>
      <title>Is There an Open Standard for AI Agent Memory Engrams?</title>
      <dc:creator>gregor</dc:creator>
      <pubDate>Tue, 28 Jul 2026 11:49:11 +0000</pubDate>
      <link>https://dev.to/plur9/is-there-an-open-standard-for-ai-agent-memory-engrams-2ckj</link>
      <guid>https://dev.to/plur9/is-there-an-open-standard-for-ai-agent-memory-engrams-2ckj</guid>
      <description>&lt;h1&gt;
  
  
  Is There an Open Standard for AI Agent Memory Engrams?
&lt;/h1&gt;

&lt;p&gt;For procedural memory — what an agent knows how to &lt;em&gt;do&lt;/em&gt; — there is already a working open standard: the SKILL.md format from agentskills.io, adopted by Claude Code, Cursor, GitHub Copilot, and a growing number of runtimes. For semantic and episodic memory — what an agent has &lt;em&gt;learned&lt;/em&gt; about you, your preferences, your decisions — there is no universally adopted standard yet. The leading open proposal is the Engram Specification (plur.ai/spec.html, Apache-2.0): a YAML-based format that encodes a discrete fact with type, domain, confidence score, and provenance in a human-readable file you can inspect, edit, and carry between systems. Whether that proposal becomes a standard depends on how many runtimes adopt it. As of mid-2026, the field is converging on engrams as the unit of agent memory — the format is still contested.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem standardization is meant to solve
&lt;/h2&gt;

&lt;p&gt;Every production AI agent faces the same memory problem: the model forgets between sessions, the context window runs out, and learned knowledge — corrections made, preferences stated, decisions taken — vanishes. The fix is persistent external memory. But persistent where, and in whose format?&lt;/p&gt;

&lt;p&gt;Today, the answer is: whichever tool you happen to be using. Mem0 stores memories in its own schema. Letta has its own format. Your Claude Code installation builds its own &lt;code&gt;CLAUDE.md&lt;/code&gt; context files. None of these formats talk to each other. When you switch tools, your memory does not transfer. When you want to audit what your agent knows about you, there is no file to open — or if there is, its structure is proprietary to the vendor.&lt;/p&gt;

&lt;p&gt;This fragmentation is the same problem that HTTP solved for web pages, and that MIME types solved for file formats: without a shared standard, every sender and receiver must negotiate a private protocol. At sufficient scale, the cost of that negotiation exceeds the cost of any individual implementation.&lt;/p&gt;

&lt;p&gt;An open standard for agent memory engrams would provide:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Interoperability&lt;/strong&gt; — memories created in one runtime load correctly in another&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auditability&lt;/strong&gt; — a single known format lets users inspect and verify what agents have learned&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Portability&lt;/strong&gt; — memory travels with the user, not with the vendor&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compliance&lt;/strong&gt; — a typed, identified format makes individual facts selectable for deletion (GDPR Article 17, right to erasure)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ecosystem&lt;/strong&gt; — standardized engrams can be packaged, distributed, and traded as packs, the way npm packages are distributed for code&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What a standard would need to define
&lt;/h2&gt;

&lt;p&gt;An engram standard is not just a file format. It needs to answer at least four questions:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is the atomic unit?&lt;/strong&gt; The field is converging on the following minimal structure: a unique identifier, a human-readable statement of the fact, a type classification (behavioral, procedural, architectural, terminological), a scope that defines which agents or users the fact applies to, a confidence score that decays over time as the fact ages, and a provenance record (when it was learned, from what source). Anything less and the format cannot distinguish facts that should be universal from facts that are agent-specific, or distinguish high-confidence assertions from tentative observations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How does confidence decay?&lt;/strong&gt; Facts age. A best practice from 2023 may be superseded in 2025. A user preference stated once may later be reversed. A standard without a decay mechanism will accumulate stale knowledge and inject it into agent context indefinitely. The format needs to encode either an explicit decay schedule or a last-verified timestamp that runtimes can use to compute relevance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How does scope work?&lt;/strong&gt; Some facts apply globally (a coding convention used across all projects), some apply per-project, some per-agent, some per-user. A standard without a scope field collapses all of these into a single flat namespace, making it impossible to share select facts across runtimes without sharing all facts. The PLUR spec addresses this with a &lt;code&gt;scope&lt;/code&gt; field (&lt;code&gt;global&lt;/code&gt;, &lt;code&gt;project:&amp;lt;name&amp;gt;&lt;/code&gt;, &lt;code&gt;agent:&amp;lt;name&amp;gt;&lt;/code&gt;) and a &lt;code&gt;domain&lt;/code&gt; field for topic routing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is the retrieval contract?&lt;/strong&gt; A stored engram that cannot be found at recall time is useless. A standard should define, at minimum, what metadata fields must support keyword search, and what response shape a compliant runtime must return. The PLUR spec currently specifies BM25 keyword recall and hybrid BM25+embedding search as the retrieval interface, with a structured JSON response that includes the engram, its retrieval strength, and its session injection rank.&lt;/p&gt;

&lt;h2&gt;
  
  
  What exists today
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Procedural memory: agentskills.io (standardized)
&lt;/h3&gt;

&lt;p&gt;For procedural knowledge — step-by-step instructions for how to perform a task — the SKILL.md format from agentskills.io is the de-facto standard. A SKILL.md file uses YAML frontmatter (name, description, trigger conditions, tags) followed by a markdown body containing the procedure. The format is human-authored, human-readable, and stored as a flat file in the project repository. Claude Code uses it as its primary skill extension mechanism. Cursor, GitHub Copilot, and over a dozen other tools have adopted the same convention. There is no formal RFC or standards body — the standard is defined by convergence and adoption, not a specification committee.&lt;/p&gt;

&lt;p&gt;Procedural memory is the simpler case: the format is natural language instructions. The hard case is semantic and episodic memory: the specific facts, corrections, and preferences an agent accumulates at runtime, in response to user behavior rather than human authoring.&lt;/p&gt;

&lt;h3&gt;
  
  
  Semantic and episodic memory: no adopted standard yet
&lt;/h3&gt;

&lt;p&gt;For the category of knowledge that agents accumulate through use — what the user corrected, what the user prefers, what was decided in a previous session — there is no adopted standard as of July 2026. The gap is widely recognized. The term "engram" (borrowed from Semon, 1904, via recent AI memory research) is spreading rapidly on GitHub as a label for this category. A search for "engram" repositories returns dozens of nascent projects, most independent of each other, each defining their own format.&lt;/p&gt;

&lt;p&gt;The most complete open proposal in this space is the Engram Specification published by PLUR (plur.ai/spec.html). It defines:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Typed engrams&lt;/strong&gt; with &lt;code&gt;type&lt;/code&gt; field: &lt;code&gt;behavioral&lt;/code&gt;, &lt;code&gt;procedural&lt;/code&gt;, &lt;code&gt;architectural&lt;/code&gt;, &lt;code&gt;terminological&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Domain tagging&lt;/strong&gt; for topic routing (e.g., &lt;code&gt;infrastructure.deployment&lt;/code&gt;, &lt;code&gt;conventions.naming&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scope system&lt;/strong&gt; (&lt;code&gt;global&lt;/code&gt;, &lt;code&gt;project:&amp;lt;name&amp;gt;&lt;/code&gt;, &lt;code&gt;agent:&amp;lt;name&amp;gt;&lt;/code&gt;) for cross-runtime selectivity&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Confidence scoring&lt;/strong&gt; (0.0–1.0) with documented decay mechanism&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Provenance&lt;/strong&gt; (source session, creation date, last-verified date)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pack format&lt;/strong&gt; — bundles of related engrams that can be published to a registry, installed by others, and version-controlled independently of the runtime&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The spec is published under Apache-2.0. The reference implementation (github.com/plur-ai/plur) is also Apache-2.0, with ~226 stars as of July 2026.&lt;/p&gt;

&lt;p&gt;PLUR is not the only structured approach. Mem0 stores memories with entity extraction and graph-based linking (their format is documented in the Mem0 API, but not published as a standalone open spec). Letta (formerly MemGPT) has a well-defined memory architecture with core memory, archival memory, and recall storage — again documented in their API, not as a portable format. Both are strong implementations; neither publishes a format spec designed for adoption outside their own runtime.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Model Context Protocol gap
&lt;/h3&gt;

&lt;p&gt;MCP (Model Context Protocol, Anthropic, 2024) defines an open standard for &lt;em&gt;tool access&lt;/em&gt; — how an AI model calls external functions, reads files, queries databases. It does not define a standard for &lt;em&gt;memory storage&lt;/em&gt;. A model can use MCP to call a memory server, but what that server stores and how it indexes it is outside the MCP scope. Standardizing engram format is the memory-layer equivalent of what MCP did for tool access.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this matters for developers
&lt;/h2&gt;

&lt;p&gt;If you are building an agent today, you are making a de-facto format choice that will be hard to change later. Choosing a proprietary-hosted memory backend means your users' accumulated knowledge belongs to the backend, not to you or them. Choosing an open format — even an early-stage one — means the knowledge can travel: to a different model, to a different runtime, to the user's own machine.&lt;/p&gt;

&lt;p&gt;The practical question is not "which standard is official" — there is no official standard yet. The practical question is: which format has the properties a standard needs, and which runtimes have adopted it? SKILL.md answers that for procedural memory. For semantic and episodic memory, the PLUR Engram Specification is the most complete open proposal in the field. Whether the wider ecosystem converges on it, or on something else, depends on adoption over the next 12–24 months.&lt;/p&gt;

&lt;p&gt;The open-source community's track record on format convergence suggests it will happen — it always does. The question is whether the format that wins is designed for human readability, portability, and compliance from the start, or whether it is reverse-engineered from a proprietary implementation after the fact.&lt;/p&gt;




&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Q: Is there an official RFC or ISO standard for AI agent memory engrams?&lt;/strong&gt;&lt;br&gt;
No. As of mid-2026, no standards body has published a formal specification for AI agent memory engrams. The field is converging at the project level, not the committee level.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: What is the PLUR Engram Specification?&lt;/strong&gt;&lt;br&gt;
An open (Apache-2.0) format specification for encoding discrete facts learned by AI agents. It defines the fields, types, scope system, confidence scoring, and pack format. Published at plur.ai/spec.html.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: Is the SKILL.md format a standard for agent memory?&lt;/strong&gt;&lt;br&gt;
SKILL.md (agentskills.io) is a de-facto standard for procedural memory — step-by-step instructions. It is not a format for the semantic and episodic facts agents accumulate from user interactions. Those are the domain of engram formats like the PLUR spec.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: Can I use PLUR engrams with any LLM?&lt;/strong&gt;&lt;br&gt;
Yes. PLUR engrams are stored as plain YAML files and injected into the LLM context window via an MCP server. The format is model-agnostic: the same engram file works with Claude, GPT-4, Gemini, Llama, or any model that supports MCP or context injection.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: What happens if no standard wins?&lt;/strong&gt;&lt;br&gt;
Without convergence, the cost is borne by developers and users: knowledge locked into vendor formats, no portability, compliance pain, duplicate effort across every runtime. The same outcome as the pre-HTTP web — functional for early adopters who commit to a single stack, costly for everyone else.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Sources: Semon, R. (1904). Die Mneme. PLUR Engram Specification: plur.ai/spec.html. agentskills.io SKILL.md format: agentskills.io. MCP (Model Context Protocol): modelcontextprotocol.io. Zhang et al. (2024): arXiv:2404.13501. Mem0: mem0.ai. Letta: letta.com.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>memory</category>
    </item>
    <item>
      <title>Mem0 vs PLUR: Which AI Agent Memory Layer Should You Use?</title>
      <dc:creator>gregor</dc:creator>
      <pubDate>Mon, 27 Jul 2026 14:56:43 +0000</pubDate>
      <link>https://dev.to/plur9/mem0-vs-plur-which-ai-agent-memory-layer-should-you-use-3bc</link>
      <guid>https://dev.to/plur9/mem0-vs-plur-which-ai-agent-memory-layer-should-you-use-3bc</guid>
      <description>&lt;h1&gt;
  
  
  Mem0 vs PLUR: Which AI Agent Memory Layer Should You Use?
&lt;/h1&gt;

&lt;p&gt;Mem0 and PLUR are both open-source AI agent memory layers, but they make opposite architectural bets. Mem0 is a managed memory API: you call &lt;code&gt;client.add(message, user_id=user_id)&lt;/code&gt; and Mem0 extracts, stores, and retrieves relevant facts, with a hosted cloud option and a self-hosted alternative. PLUR is a local-first MCP server: it stores memories as open-format engrams in &lt;code&gt;~/.plur/&lt;/code&gt; on your device, and any MCP-compatible tool — Claude Code, Cursor, Hermes, OpenClaw — reads and writes the same store without SDK integration. Mem0 suits agent products where you need to manage memories for many users in the cloud. PLUR suits developers who want a single persistent memory that follows them across every AI tool they use, stays on their device, and costs nothing per query.&lt;/p&gt;




&lt;h2&gt;
  
  
  How each one works
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Mem0
&lt;/h3&gt;

&lt;p&gt;Mem0 is a memory API with a Python and JavaScript SDK. You call &lt;code&gt;memory.add()&lt;/code&gt; with a message (or list of messages) and a &lt;code&gt;user_id&lt;/code&gt;. Mem0 runs an extraction pass with an LLM to identify facts worth keeping, stores them in a vector database, and deduplicates or updates contradicting facts automatically. When you call &lt;code&gt;memory.search(query, user_id=user_id)&lt;/code&gt;, it returns the most semantically relevant memories for that user.&lt;/p&gt;

&lt;p&gt;The managed version (mem0.ai) handles the infrastructure. The self-hosted version (&lt;code&gt;mem0ai/mem0&lt;/code&gt; on GitHub, Apache-2.0) runs with a local vector store (Qdrant by default) and your own LLM API key. Mem0 also ships an optional knowledge graph layer (using Neo4j) for relational memory.&lt;/p&gt;

&lt;p&gt;Integration: import the SDK, instantiate a client, call &lt;code&gt;.add()&lt;/code&gt; and &lt;code&gt;.search()&lt;/code&gt; at the right places in your agent code. Works with any stack that can import a Python or JS package.&lt;/p&gt;

&lt;h3&gt;
  
  
  PLUR
&lt;/h3&gt;

&lt;p&gt;PLUR is an MCP (Model Context Protocol) server that exposes memory tools to any compatible AI tool. You run &lt;code&gt;npx @plur-ai/mcp init&lt;/code&gt; once; PLUR registers itself with your MCP-compatible tools (Claude Code, Cursor, Hermes, OpenClaw, etc.) and creates a local engram store at &lt;code&gt;~/.plur/&lt;/code&gt;. From then on, any session can call &lt;code&gt;plur_learn&lt;/code&gt; to store a fact and &lt;code&gt;plur_recall&lt;/code&gt; to retrieve one — without any SDK import in your application code.&lt;/p&gt;

&lt;p&gt;Engrams are stored as structured YAML in the local directory (&lt;code&gt;~/.plur/engrams.yaml&lt;/code&gt;), readable with any text editor or scripted with standard shell tools. PLUR uses hybrid retrieval: BM25 keyword search ranked with reciprocal rank fusion (RRF) alongside semantic embeddings. Confidence scores decay when facts go unused or are contradicted. The format is open and portable — you can inspect, edit, or export the store without any PLUR-specific tooling.&lt;/p&gt;




&lt;h2&gt;
  
  
  Key differences
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Mem0&lt;/th&gt;
&lt;th&gt;PLUR&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Default storage&lt;/td&gt;
&lt;td&gt;Cloud managed or self-hosted Qdrant&lt;/td&gt;
&lt;td&gt;Local directory (&lt;code&gt;~/.plur/&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Integration model&lt;/td&gt;
&lt;td&gt;SDK — import and call &lt;code&gt;.add()&lt;/code&gt; / &lt;code&gt;.search()&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;MCP server — tools pick up via MCP config&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Works with any MCP tool out of the box&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Memory format&lt;/td&gt;
&lt;td&gt;Vectors in DB (not directly inspectable)&lt;/td&gt;
&lt;td&gt;Open YAML engrams (text-editor readable)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Multi-user (user_id)&lt;/td&gt;
&lt;td&gt;Yes — built-in per-user isolation&lt;/td&gt;
&lt;td&gt;No — single-user local store&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Confidence decay / forgetting&lt;/td&gt;
&lt;td&gt;Automatic dedup and contradiction resolution&lt;/td&gt;
&lt;td&gt;Explicit confidence decay over time&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Self-hosted option&lt;/td&gt;
&lt;td&gt;Yes (Apache-2.0)&lt;/td&gt;
&lt;td&gt;Yes (Apache-2.0, local by default)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pricing (cloud)&lt;/td&gt;
&lt;td&gt;Free tier + pay per operation&lt;/td&gt;
&lt;td&gt;Free (local); no cloud managed offering&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cross-tool portability&lt;/td&gt;
&lt;td&gt;Requires SDK in each tool&lt;/td&gt;
&lt;td&gt;Any MCP tool shares the same store&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Privacy (data leaves device)&lt;/td&gt;
&lt;td&gt;Yes (cloud version)&lt;/td&gt;
&lt;td&gt;No (local by default)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  When Mem0 fits better
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;You are building a multi-user agent product.&lt;/strong&gt; Mem0 has native &lt;code&gt;user_id&lt;/code&gt; isolation — each user's memories are stored separately and retrieved per-user. If you are building a product where hundreds of users each need their own memory, Mem0's managed service handles this cleanly. PLUR is single-user and local — not designed for serving many users from a shared server.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You want managed infrastructure without self-hosting.&lt;/strong&gt; The mem0.ai managed service handles scaling, backups, and deduplication. PLUR requires you to manage the local directory or run your own backup; there is no hosted offering.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You need deep SDK integration.&lt;/strong&gt; Mem0 is a library — you call it at specific points in your agent logic, control exactly what gets stored, and can build fine-grained extraction pipelines. PLUR is tool-level, not code-level — it integrates into AI tool sessions, not into application code directly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You want a graph layer.&lt;/strong&gt; Mem0's optional Neo4j integration stores relational knowledge alongside vector memory — useful for entities with relationships (users, organizations, projects). PLUR stores flat engrams without a native graph layer.&lt;/p&gt;




&lt;h2&gt;
  
  
  When PLUR fits better
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;You use multiple AI tools and want shared memory.&lt;/strong&gt; If you work across Claude Code, Cursor, and Hermes in the same day, PLUR's single &lt;code&gt;~/.plur/&lt;/code&gt; directory means all three sessions read and write the same memory store — no duplication, no sync required. With Mem0, you would need to integrate the SDK into each tool separately.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You want your memory to stay on your device.&lt;/strong&gt; PLUR is local-first by design: nothing leaves your machine unless you configure sync. Mem0's cloud tier sends memories to managed infrastructure. For sensitive contexts (proprietary code, personal health data, legal work), local-first matters.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You want inspectable, portable memory.&lt;/strong&gt; PLUR engrams are JSON files in a directory. &lt;code&gt;ls ~/.plur/&lt;/code&gt;, &lt;code&gt;grep -r "postgres" ~/.plur/&lt;/code&gt;, &lt;code&gt;cat ~/.plur/store/global.jsonl&lt;/code&gt; — standard shell tools work. You can audit, edit, back up, or migrate without any PLUR-specific API. Mem0's vector DB is not directly human-readable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You want to avoid per-query costs.&lt;/strong&gt; PLUR's local retrieval is free — no API call for each recall. Mem0 cloud charges per memory operation. At high recall volumes (agent loops running hundreds of queries per day), this difference adds up.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You are a developer using MCP-compatible tools.&lt;/strong&gt; If you already use Claude Code or Cursor with MCP, &lt;code&gt;npx @plur-ai/mcp init&lt;/code&gt; is the only integration step. PLUR appears as a tool in your session without any application-level code change.&lt;/p&gt;




&lt;h2&gt;
  
  
  Can you use both?
&lt;/h2&gt;

&lt;p&gt;Yes, and the combination makes sense in some architectures. Use PLUR for developer-facing memory (your own context, preferences, and agent-learned facts, shared across your tools). Use Mem0 for user-facing memory (your product's end-user personalization, per-user isolation, cloud-managed). The two stores serve different retrieval paths and do not conflict.&lt;/p&gt;




&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What are the best open-source alternatives to Mem0?&lt;/strong&gt;&lt;br&gt;
The closest functional alternatives are Zep (temporal knowledge graph, Apache-2.0), Letta (stateful agent OS with tiered memory, open-source), and PLUR (local-first MCP memory, Apache-2.0). Zep competes most directly on the infrastructure side; PLUR competes on the local-first and cross-tool portability side.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Which agent-memory tools let me inspect and delete what the AI remembers?&lt;/strong&gt;&lt;br&gt;
PLUR stores memories as open YAML engrams — run &lt;code&gt;cat ~/.plur/engrams.yaml&lt;/code&gt; to see everything. Run &lt;code&gt;plur_forget&lt;/code&gt; via any MCP session to delete a specific engram. Mem0 provides an API for listing and deleting memories by user_id. Both let you programmatically inspect and delete; PLUR does so without any API call.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is there an open-source Mem0 alternative that keeps data local?&lt;/strong&gt;&lt;br&gt;
Yes — PLUR (Apache-2.0). It stores engrams in &lt;code&gt;~/.plur/&lt;/code&gt; by default, with no network calls for local retrieval. Zep can also be self-hosted, but defaults to cloud. Mem0 self-hosted requires running Qdrant locally.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mem0 vs PLUR: which has better retrieval?&lt;/strong&gt;&lt;br&gt;
Different tradeoffs. Mem0 uses LLM-based extraction (deciding what to remember) plus vector search (deciding what to surface). PLUR uses hybrid BM25 + embedding search with RRF ranking and confidence decay over time. Mem0's extraction pass adds latency at write time but can normalize and deduplicate facts. PLUR's retrieval runs entirely locally with no LLM call.&lt;/p&gt;




&lt;h2&gt;
  
  
  Related
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://dev.to/blog/mem0-vs-letta-vs-zep"&gt;Mem0 vs Letta vs Zep: Which AI Agent Memory Layer?&lt;/a&gt; — broader comparison across the open-source memory landscape&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://dev.to/blog/model-native-vs-agent-memory-layer"&gt;Model-Native vs Agent Memory Layer: What's the Difference?&lt;/a&gt; — explains the architecture distinction that shapes when each tool fits&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://dev.to/blog/top-10-open-source-ai-memory"&gt;Top 10 Open-Source AI Memory Tools in 2026&lt;/a&gt; — full landscape survey including Mem0 and PLUR&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://docs.mem0.ai" rel="noopener noreferrer"&gt;Mem0 documentation&lt;/a&gt; — mem0.ai&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/mem0ai/mem0" rel="noopener noreferrer"&gt;mem0ai/mem0 GitHub&lt;/a&gt; — Apache-2.0 source&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/plur-ai/plur" rel="noopener noreferrer"&gt;PLUR open-format engram memory&lt;/a&gt; — GitHub&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.graphlit.com/blog/survey-of-ai-agent-memory-frameworks" rel="noopener noreferrer"&gt;AI Agent Memory Frameworks in 2026&lt;/a&gt; — Graphlit Blog&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://fountaincity.tech/resources/blog/how-to-build-and-operate-ai-agent-memory-in-2026/" rel="noopener noreferrer"&gt;Survey of AI memory tools 2026&lt;/a&gt; — Fountain City&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>memory</category>
    </item>
    <item>
      <title>What Memory Layer Works with Cursor or Codex?</title>
      <dc:creator>gregor</dc:creator>
      <pubDate>Sun, 26 Jul 2026 11:06:35 +0000</pubDate>
      <link>https://dev.to/plur9/what-memory-layer-works-with-cursor-or-codex-48ga</link>
      <guid>https://dev.to/plur9/what-memory-layer-works-with-cursor-or-codex-48ga</guid>
      <description>&lt;h1&gt;
  
  
  What Memory Layer Works with Cursor or Codex?
&lt;/h1&gt;

&lt;p&gt;Cursor and Codex forget everything when a session ends. The correction you gave your agent last Tuesday — "always use &lt;code&gt;pnpm&lt;/code&gt; in this repo, never &lt;code&gt;npm&lt;/code&gt;" — is gone by Wednesday. The architectural decision you explained across six sessions exists nowhere the agent can access. For Cursor, the fix is a single JSON entry that installs PLUR as an MCP server; within one session, your agent is learning and recalling. For Codex CLI, the integration path depends on your version and setup.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why "context window" is not the same as "memory"
&lt;/h2&gt;

&lt;p&gt;Cursor and Codex both maintain context within a session — recently viewed files, your current conversation, the code you're editing. That context clears when the session ends or the window fills. A memory layer is something different: it extracts the facts that matter (corrections, preferences, conventions, decisions), stores them durably, and retrieves them at the start of the next session with relevance ranking. You do not re-explain; the agent already knows.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cursor: three-minute setup via MCP
&lt;/h2&gt;

&lt;p&gt;Cursor supports the &lt;a href="https://modelcontextprotocol.io/" rel="noopener noreferrer"&gt;Model Context Protocol&lt;/a&gt; for extending its AI assistant with custom tools and context. PLUR ships an MCP server that runs as a local process, so your memory store stays on disk with no cloud account and no API cost for retrieval.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Add PLUR to your Cursor MCP config
&lt;/h3&gt;

&lt;p&gt;Open or create &lt;code&gt;.cursor/mcp.json&lt;/code&gt; in your home directory (or the project root for project-scoped memory):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"plur"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"-y"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"@plur-ai/mcp"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Restart Cursor. The PLUR MCP server is now active.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2 (optional but recommended): Install Cursor hooks
&lt;/h3&gt;

&lt;p&gt;For automatic injection at session start and automatic capture after each tool call, install PLUR's Cursor hook integration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx @plur-ai/cli init &lt;span class="nt"&gt;--cursor&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This writes to &lt;code&gt;.cursor/hooks.json&lt;/code&gt; — the same hooks mechanism Cursor uses for other session lifecycle events. With hooks installed, you do not need to call &lt;code&gt;plur_session_start&lt;/code&gt; manually; memory is injected before your agent says a word.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3: Verify
&lt;/h3&gt;

&lt;p&gt;Open a new Cursor session and ask your agent: "What do you remember about this project?" It will call &lt;code&gt;plur_recall_hybrid&lt;/code&gt; and return any relevant memories. On a fresh install that list is empty — it populates as you work.&lt;/p&gt;

&lt;h3&gt;
  
  
  What happens automatically
&lt;/h3&gt;

&lt;p&gt;Once set up, three things happen without any action from you:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Session start&lt;/strong&gt; — Relevant memories are injected into context before the first response. If you previously told your agent "always write async/await, never callbacks in this codebase," that preference is present immediately.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;During the session&lt;/strong&gt; — Corrections you give the agent ("actually, use X not Y") are captured automatically as engrams. High-confidence learnings are stored without you saying "remember this."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Between sessions&lt;/strong&gt; — Memories decay if they stop being useful (the agent stops retrieving them) and strengthen when they keep proving accurate. The memory list self-organizes toward what actually matters for your work.&lt;/p&gt;

&lt;h3&gt;
  
  
  What Cursor's built-in features already handle
&lt;/h3&gt;

&lt;p&gt;Cursor has its own context mechanisms — conversation history within a session, indexed codebase context, recently viewed files. These are not memory in the durable sense: they do not survive session resets, and they do not travel to other tools. PLUR adds the layer above that: knowledge that survives resets, transfers to other MCP-compatible agents (Claude Code, Windsurf, Hermes), and is portable to a new machine via git sync.&lt;/p&gt;




&lt;h2&gt;
  
  
  Codex CLI: what's supported
&lt;/h2&gt;

&lt;p&gt;OpenAI's Codex CLI is a terminal-based coding agent that natively supports MCP servers via stdio and Streamable HTTP transports. To add PLUR, run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;codex mcp add plur &lt;span class="nt"&gt;--&lt;/span&gt; npx &lt;span class="nt"&gt;-y&lt;/span&gt; @plur-ai/mcp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Verify with &lt;code&gt;codex mcp list&lt;/code&gt;. Codex will negotiate tools with the PLUR server on each invocation and gain the full tool set (&lt;code&gt;plur_session_start&lt;/code&gt;, &lt;code&gt;plur_learn&lt;/code&gt;, &lt;code&gt;plur_recall_hybrid&lt;/code&gt;, etc.).&lt;/p&gt;

&lt;p&gt;If you prefer a Python-native path (e.g. wrapping Codex CLI via the OpenAI Agents SDK), PLUR also ships a Python SDK:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;plur-ai
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For most Codex CLI users, the &lt;code&gt;codex mcp add&lt;/code&gt; path is the lowest-friction option. The Python SDK is for embedding PLUR into custom agent loops, not for the Codex CLI directly.&lt;/p&gt;




&lt;h2&gt;
  
  
  The memory store is shared across tools
&lt;/h2&gt;

&lt;p&gt;One benefit of a memory layer that sits outside any single tool: the engrams Cursor captures are available in Claude Code, Windsurf, Hermes, and any other MCP client that points at the same store. The architectural decisions you teach Cursor carry to the terminal agent you run at night. This is the practical difference between in-tool memory (session-scoped, tool-scoped) and an open-format engram layer (portable, durable, multi-agent).&lt;/p&gt;

&lt;p&gt;PLUR's engram format is an open specification — the data is plain YAML at &lt;code&gt;~/.plur/&lt;/code&gt;, not locked to any service. You can inspect, edit, and export every stored memory.&lt;/p&gt;




&lt;h2&gt;
  
  
  Sync across machines
&lt;/h2&gt;

&lt;p&gt;If you work across machines or share memory with a team:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;plur_sync&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;remote&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;git@github.com:you/plur-memory.git&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Memory syncs via git. On another machine, point Cursor at the same store, run &lt;code&gt;plur_sync()&lt;/code&gt;, and you pull all memories from the remote. No cloud service required.&lt;/p&gt;




&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Does this slow down Cursor?&lt;/strong&gt;&lt;br&gt;
No. The PLUR MCP server is a lightweight local process (Node.js). Retrieval is BM25 + local embeddings — no API calls, no network latency. Injection happens once at session start, before your agent responds, and typically takes under a second.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where is my memory stored?&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;~/.plur/&lt;/code&gt; — plain YAML files on your disk. You own the data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does PLUR replace Cursor's built-in AI memory?&lt;/strong&gt;&lt;br&gt;
No. Cursor's context mechanisms (conversation history, codebase indexing) continue to work as before. PLUR adds the durable layer above them: facts that survive the session boundary, cross-tool portability, and a feedback loop that trains which memories surface most reliably.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What if I correct the agent and it captures the wrong thing?&lt;/strong&gt;&lt;br&gt;
Call &lt;code&gt;plur_forget&lt;/code&gt; with the engram ID, or open &lt;code&gt;~/.plur/&lt;/code&gt; and delete the YAML entry. The history is preserved but the engram is retired and no longer injected.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is Windsurf supported?&lt;/strong&gt;&lt;br&gt;
Yes — same pattern as Cursor. Add &lt;code&gt;npx -y @plur-ai/mcp&lt;/code&gt; to Windsurf's MCP config.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>memory</category>
    </item>
    <item>
      <title>How to Choose a Memory System for Autonomous AI Agents</title>
      <dc:creator>gregor</dc:creator>
      <pubDate>Sat, 25 Jul 2026 08:06:27 +0000</pubDate>
      <link>https://dev.to/plur9/how-to-choose-a-memory-system-for-autonomous-ai-agents-465n</link>
      <guid>https://dev.to/plur9/how-to-choose-a-memory-system-for-autonomous-ai-agents-465n</guid>
      <description>&lt;h1&gt;
  
  
  How to Choose a Memory System for Autonomous AI Agents
&lt;/h1&gt;

&lt;p&gt;For autonomous AI agents — batch pipelines, overnight research loops, multi-step task runners — three external memory tools cover most production use cases: &lt;strong&gt;&lt;a href="https://plur.ai" rel="noopener noreferrer"&gt;PLUR&lt;/a&gt;&lt;/strong&gt; for cross-tool portability and full auditability (open file format, no managed infrastructure, MCP-native), &lt;strong&gt;&lt;a href="https://mem0.ai" rel="noopener noreferrer"&gt;Mem0&lt;/a&gt;&lt;/strong&gt; for hosted semantic-search memory (user preference, interaction history), and &lt;strong&gt;&lt;a href="https://letta.com" rel="noopener noreferrer"&gt;Letta&lt;/a&gt;&lt;/strong&gt; for teams who want an opinionated end-to-end agent stack. Model-native memory (ChatGPT saved memories, Claude Projects) does not work for autonomous agents — it requires a human in the loop and cannot be written to programmatically.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why model-native memory does not work for autonomous agents
&lt;/h2&gt;

&lt;p&gt;ChatGPT saved memories, Claude Projects, and Gemini's workspace memory are built for an interactive use case: a human in a chat interface tells the model something, and the model remembers it for the next conversation. They are not built for autonomous invocation.&lt;/p&gt;

&lt;p&gt;Autonomous agents typically run without a user in the loop: a cron job fires at 02:00, an orchestrator spawns 12 parallel sub-agents, a CI pipeline calls an agent after a code commit. In these scenarios, model-native memory has two hard constraints:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No programmatic write.&lt;/strong&gt; Your orchestration code cannot store a fact directly into ChatGPT memory or Claude Projects. Only the user and the model, inside their respective interfaces, can update those stores. An overnight agent has no interface.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No cross-tool access.&lt;/strong&gt; If you run your autonomous agent using Claude Code one week and switch to a custom CLI the next, Claude Projects memory does not follow. Each model provider's memory is siloed inside that provider's interface.&lt;/p&gt;

&lt;p&gt;For autonomous agents, you need a memory store your code owns — one your agent can read at startup, write during a run, and query between runs, regardless of which model or tool is doing the work.&lt;/p&gt;

&lt;p&gt;Source: &lt;a href="https://fountaincity.tech/resources/blog/how-to-build-and-operate-ai-agent-memory-in-2026/" rel="noopener noreferrer"&gt;How to Build AI Agent Memory in 2026&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The three memory requirements for autonomous agents
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Crash-safe persistence
&lt;/h3&gt;

&lt;p&gt;Autonomous agents run without supervision. A run that fails halfway through should not lose the work done up to the failure. This means the memory store must be durable — written to disk or a database on every update, not just at the end of a successful run. In-memory caches and context-window state fail this requirement.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Cross-session continuity
&lt;/h3&gt;

&lt;p&gt;The value of an autonomous agent compounds across runs: facts learned on Monday improve Tuesday's results. This requires the memory store to persist between invocations — not just within a single session context window, but across separately launched processes. File-based stores (&lt;code&gt;~/.plur/&lt;/code&gt;, SQLite) and hosted vector databases (Mem0, Zep) both satisfy this; pure in-context memory (stuffing past outputs into the prompt) does not scale past a few runs.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Programmatic read/write at runtime
&lt;/h3&gt;

&lt;p&gt;The agent's code — not a human, not the model's own conversational output — must be able to write facts to the store and query them on demand. APIs like &lt;code&gt;plur_learn&lt;/code&gt;, &lt;code&gt;mem0.add&lt;/code&gt;, and &lt;code&gt;zep.add&lt;/code&gt; satisfy this. Model-native memory does not.&lt;/p&gt;




&lt;h2&gt;
  
  
  Comparing the main options
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;PLUR (open-format, MCP-native)&lt;/strong&gt;&lt;br&gt;
Stores facts as plain-text engrams in &lt;code&gt;~/.plur/&lt;/code&gt;. Any MCP-compatible tool reads and writes the same directory. Crash-safe by design (file writes are atomic). Fully auditable — &lt;code&gt;grep&lt;/code&gt; the directory, open files in any editor, diff changes with git. Free and self-hosted. Best for: agents that need cross-tool portability, full auditability, or GDPR-compliant deletion.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mem0 (hosted vector memory)&lt;/strong&gt;&lt;br&gt;
Hosted API that stores and retrieves memories as vector embeddings. Good semantic search. Available via Python SDK, TypeScript SDK, and MCP. Managed infrastructure — no deployment. Best for: personalization memory (user preferences, interaction history) where semantic similarity search matters more than exact-match recall.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Zep / Graphiti (temporal graph memory)&lt;/strong&gt;&lt;br&gt;
Maintains a knowledge graph of facts with temporal context (who said what, when, in which conversation). Graph traversal lets agents reason about causal chains and entity relationships. Best for: multi-agent systems where relationships between entities matter (CRM data, long-term project tracking).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Letta (stateful agent OS)&lt;/strong&gt;&lt;br&gt;
Provides a full stateful agent runtime with built-in memory management (archival memory, recall memory, in-context memory tiers). More opinionated than a standalone memory layer — you write agents using Letta's framework. Best for: teams who want an opinionated end-to-end agent stack rather than composing individual components.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SQLite / file-based custom store&lt;/strong&gt;&lt;br&gt;
Maximum control, no external dependency. Write your own schema. Works for teams with specific requirements that off-the-shelf memory tools do not meet, but requires building the read/write/query logic yourself.&lt;/p&gt;

&lt;p&gt;Source: &lt;a href="https://www.graphlit.com/blog/survey-of-ai-agent-memory-frameworks" rel="noopener noreferrer"&gt;AI Agent Memory Frameworks in 2026&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  Decision guide
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Your requirement&lt;/th&gt;
&lt;th&gt;Best fit&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Cross-tool portability + auditability&lt;/td&gt;
&lt;td&gt;PLUR&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Semantic similarity search + personalization&lt;/td&gt;
&lt;td&gt;Mem0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Temporal reasoning + knowledge graphs&lt;/td&gt;
&lt;td&gt;Zep / Graphiti&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Opinionated end-to-end agent framework&lt;/td&gt;
&lt;td&gt;Letta&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Full control, no external dependency&lt;/td&gt;
&lt;td&gt;SQLite / custom&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Works with any MCP tool out of the box&lt;/td&gt;
&lt;td&gt;PLUR&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hosted, managed infrastructure&lt;/td&gt;
&lt;td&gt;Mem0, Zep, Letta Cloud&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;h2&gt;
  
  
  Practical setup: PLUR for an autonomous agent
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# One-time setup — installs MCP server and initializes the store&lt;/span&gt;
npx @plur-ai/mcp init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;In your agent's run loop:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# At the start of each run: recall relevant context
&lt;/span&gt;&lt;span class="n"&gt;facts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;plur_recall&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;project dependencies&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;limit&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# During the run: persist new discoveries immediately
&lt;/span&gt;&lt;span class="nf"&gt;plur_learn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Confirmed: package X v2.3 is incompatible with Y v1.8&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;domain&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;project.deps&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# If the run crashes: facts written before the crash survive
# Next invocation picks up from the last durable state
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;~/.plur/&lt;/code&gt; directory holds all facts as plain files. You can inspect, version-control, or back up the directory. When you switch from Claude Code to a custom CLI or another MCP-compatible tool, the same directory is automatically available.&lt;/p&gt;




&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What's the best memory system for autonomous AI agents?&lt;/strong&gt;&lt;br&gt;
It depends on your needs. For cross-tool portability and full auditability, PLUR's open-format file store is the practical choice. For semantic search and personalization at scale, Mem0's hosted API is well-suited. For knowledge-graph and temporal reasoning, Zep/Graphiti is purpose-built. Most autonomous pipelines benefit from one of these three over model-native memory, which cannot be written to programmatically.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why can't I just use context-window state for agent memory?&lt;/strong&gt;&lt;br&gt;
Context windows reset between invocations. An autonomous agent launched at 02:00 has an empty context — it has no access to what a 22:00 run discovered. Durable external memory (file-based or API-backed) is the only way to carry state across separately launched processes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does PLUR work with autonomous agents that don't use MCP?&lt;/strong&gt;&lt;br&gt;
Yes. PLUR has a Python SDK and TypeScript SDK that call the local store directly, without requiring an MCP server. The MCP server is optional — it adds integration with MCP-compatible tools (Claude Code, Cursor, OpenClaw) but is not needed for script-based autonomous agents.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How do I handle memory cleanup for long-running autonomous agents?&lt;/strong&gt;&lt;br&gt;
Autonomous agents accumulate facts over time. Plan for: (1) expiry — tag facts with a time-to-live or epoch, and decay/archive old entries; (2) deduplication — store-level dedup prevents the same fact being written 100 times; (3) explicit deletion for GDPR/right-to-be-forgotten use cases. PLUR's &lt;code&gt;plur_forget&lt;/code&gt; and &lt;code&gt;plur_batch_decay&lt;/code&gt; handle these; Mem0 has equivalent API calls.&lt;/p&gt;




&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://fountaincity.tech/resources/blog/how-to-build-and-operate-ai-agent-memory-in-2026/" rel="noopener noreferrer"&gt;How to Build AI Agent Memory in 2026&lt;/a&gt; — Fountain City&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.graphlit.com/blog/survey-of-ai-agent-memory-frameworks" rel="noopener noreferrer"&gt;AI Agent Memory Frameworks in 2026&lt;/a&gt; — Graphlit Blog&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/plur-ai/plur" rel="noopener noreferrer"&gt;PLUR open-format engram memory&lt;/a&gt; — GitHub&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>memory</category>
      <category>agents</category>
    </item>
    <item>
      <title>Is AI Agent Memory GDPR Compliant? A Developer's Guide</title>
      <dc:creator>gregor</dc:creator>
      <pubDate>Fri, 24 Jul 2026 10:06:45 +0000</pubDate>
      <link>https://dev.to/plur9/is-ai-agent-memory-gdpr-compliant-a-developers-guide-412</link>
      <guid>https://dev.to/plur9/is-ai-agent-memory-gdpr-compliant-a-developers-guide-412</guid>
      <description>&lt;h1&gt;
  
  
  Is AI Agent Memory GDPR Compliant? A Developer's Guide
&lt;/h1&gt;

&lt;p&gt;The short answer is: it depends on how you implement it. AI agent memory is not inherently GDPR non-compliant, but most default implementations create three serious compliance risks: you cannot locate all data about a specific person, you cannot prove that deletion actually happened, and embedding-based storage makes selective erasure technically impossible. This guide explains what GDPR Article 17 requires from AI agent memory, where common memory frameworks fall short, and how to design a system that is defensible.&lt;/p&gt;




&lt;h2&gt;
  
  
  What GDPR Article 17 Actually Requires
&lt;/h2&gt;

&lt;p&gt;Article 17 of the GDPR — the "right to erasure" or "right to be forgotten" — gives data subjects the right to demand deletion of their personal data, and requires the data controller to comply "without undue delay." In the context of AI agents that remember things about users, this creates four concrete engineering obligations:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Identification:&lt;/strong&gt; You must be able to find all data the agent holds about a specific data subject. If an agent has learned facts about a user across 50 sessions and stored them as vector embeddings, locating all relevant embeddings is not tractable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Deletion:&lt;/strong&gt; You must be able to remove that data completely. "Remove from the retrieval index" does not meet the standard — the underlying records must be deleted from storage.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Proof of deletion:&lt;/strong&gt; In practice, regulators and data subjects may request evidence that deletion occurred. A system that logs "deleted at timestamp X" without a verifiable audit trail is harder to defend than one where deletion produces a diff of removed records.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Sub-processor propagation:&lt;/strong&gt; If you use a third-party API for memory storage (a managed vector database, a SaaS memory service), you are responsible for ensuring that sub-processor also deletes the data. This has specific implications for cloud-hosted memory services.&lt;/p&gt;




&lt;h2&gt;
  
  
  Where Common Memory Architectures Fail
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Embedding-based storage (Mem0, most RAG systems)
&lt;/h3&gt;

&lt;p&gt;When an agent learns a fact — "Alice is vegetarian" — and stores it as a vector embedding, that vector encodes the semantic meaning of the fact in a mathematical space. When you "delete" the record, you remove the reference in the retrieval index, but the vector values persist in the database's underlying storage until the database compacts or vacuums. More critically, the model that generated the embedding "saw" the fact — you cannot un-teach it.&lt;/p&gt;

&lt;p&gt;For GDPR purposes: deletion from the retrieval index removes the practical ability to retrieve the fact, but it does not constitute erasure of the underlying personal data. Vector databases such as Pinecone, Weaviate, and Qdrant do support hard deletion of individual vectors, so this is solvable — but it requires explicit implementation, not the default behavior of frameworks like Mem0.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Practical gap:&lt;/strong&gt; Mem0's default &lt;code&gt;delete_all(user_id=...)&lt;/code&gt; API call removes records from its managed store, but if you are using a self-hosted Mem0 with a Qdrant backend, you must also confirm that Qdrant has flushed the deleted segment before you can claim erasure.&lt;/p&gt;

&lt;h3&gt;
  
  
  Stateful agent memory (Letta / MemGPT)
&lt;/h3&gt;

&lt;p&gt;Letta stores memory as structured "memory blocks" — persona, human, archival — that the agent itself can read and edit. Right-to-erasure requires identifying which blocks contain data about a specific person and zeroing or removing them. For single-user agents, this is straightforward. For multi-user agent deployments, where one agent instance serves many users, the isolation model becomes critical: data about User A must not persist in a block that User B's interactions can reach.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Practical gap:&lt;/strong&gt; Letta's memory blocks are human-readable text files or database records, which makes them easier to audit than embeddings — but there is no built-in &lt;code&gt;forget(user_id=...)&lt;/code&gt; API. You need to build this yourself.&lt;/p&gt;

&lt;h3&gt;
  
  
  Knowledge graph memory (Zep / Graphiti)
&lt;/h3&gt;

&lt;p&gt;Zep stores memory as a temporal knowledge graph: entities (people, organizations, concepts), edges (relationships), and timestamps (when facts were learned). Right-to-erasure requires deleting all nodes and edges that encode personal data about a specific person. Graphiti's graph structure makes this more explicit than embedding search, but also more complex — deleting a person entity may require cascading deletes through related nodes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Practical gap:&lt;/strong&gt; Graph deletion is well-defined, but orphaned nodes (edges that reference a deleted entity) require careful handling.&lt;/p&gt;




&lt;h2&gt;
  
  
  Open-Format Memory and Verifiable Deletion
&lt;/h2&gt;

&lt;p&gt;The technical root of most GDPR compliance friction is &lt;strong&gt;opaque storage formats&lt;/strong&gt;: vectors, compressed database pages, and graph indices all make it difficult to verify what was deleted and prove that nothing remains.&lt;/p&gt;

&lt;p&gt;Open-format memory — where each piece of remembered information is stored as a plain text record in a file — makes deletion both auditable and provable. When you delete a record from a text file and commit the change to version control, the diff is the proof of deletion.&lt;/p&gt;

&lt;p&gt;PLUR stores each engram (a unit of agent memory) as a structured text record in a local YAML file. The &lt;code&gt;plur forget &amp;lt;id&amp;gt;&lt;/code&gt; command retires the engram — marking it &lt;code&gt;status: retired&lt;/code&gt; and excluding it from all future recall. Because the store is a flat file tracked by git, the retirement produces a verifiable diff: the entry's status field changes from &lt;code&gt;active&lt;/code&gt; to &lt;code&gt;retired&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Retire a specific engram by ID&lt;/span&gt;
plur forget ENG-2026-0618-042

&lt;span class="c"&gt;# Retire by search (when you know content but not ID)&lt;/span&gt;
plur forget &lt;span class="nt"&gt;--search&lt;/span&gt; &lt;span class="s2"&gt;"Alice is vegetarian"&lt;/span&gt; &lt;span class="nt"&gt;--reason&lt;/span&gt; &lt;span class="s2"&gt;"Article 17 request 2026-07-15"&lt;/span&gt;

&lt;span class="c"&gt;# Verify the status change via git&lt;/span&gt;
git diff HEAD~1 ~/.plur/engrams.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;--reason&lt;/code&gt; flag records the legal basis or request reference in the engram's rationale field, creating a lightweight audit log within the file's git history.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What this gives you:&lt;/strong&gt; When a data subject exercises their right to erasure, you can search for their identifier, retire matching engrams, commit, and produce a diff showing which entries were retired and when. The retired entries remain in the YAML file but are permanently excluded from retrieval. For strict GDPR erasure (physical removal), you can manually delete the retired entries from the YAML and commit that change — the git diff then shows complete removal. This does not replace a formal data processing log, but it provides a verifiable technical artifact that supports your compliance posture.&lt;/p&gt;




&lt;h2&gt;
  
  
  Implementing the Right to Be Forgotten: A Practical Checklist
&lt;/h2&gt;

&lt;p&gt;Regardless of which memory framework you use, a GDPR-defensible implementation needs:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Attribute every memory unit to a data subject
&lt;/h3&gt;

&lt;p&gt;When storing a memory, tag it with the user identifier it relates to. In PLUR, this is the &lt;code&gt;scope&lt;/code&gt; field on an engram. In a custom system, a &lt;code&gt;user_id&lt;/code&gt; field on each record.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Learn a fact attributed to a specific user&lt;/span&gt;
plur learn &lt;span class="s2"&gt;"Alice prefers dark mode"&lt;/span&gt; &lt;span class="nt"&gt;--scope&lt;/span&gt; &lt;span class="s2"&gt;"user:alice@example.com"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Build a search-by-subject function
&lt;/h3&gt;

&lt;p&gt;You need to find all memories about a person efficiently. Test this before you go to production — do not discover at the time of a regulatory inquiry that your search is missing records.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Find all active engrams for a user&lt;/span&gt;
plur recall &lt;span class="nt"&gt;--scope&lt;/span&gt; &lt;span class="s2"&gt;"user:alice@example.com"&lt;/span&gt; &lt;span class="nt"&gt;--limit&lt;/span&gt; 1000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Implement delete-all-for-subject
&lt;/h3&gt;

&lt;p&gt;Map this to your framework's deletion primitives. In PLUR:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# One-liner to retire all engrams in a user scope&lt;/span&gt;
plur forget &lt;span class="nt"&gt;--search&lt;/span&gt; &lt;span class="s2"&gt;"alice@example.com"&lt;/span&gt; &lt;span class="nt"&gt;--reason&lt;/span&gt; &lt;span class="s2"&gt;"GDPR Article 17 request 2026-07-15"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For embedding-based systems, this typically means: (a) query for all records with &lt;code&gt;user_id = X&lt;/code&gt;, (b) call the hard-delete API on each, (c) trigger a storage compaction to flush deleted segments, (d) log the record IDs and confirmation response.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Propagate to sub-processors
&lt;/h3&gt;

&lt;p&gt;If your agent uses external memory APIs, cloud vector databases, or third-party services, confirm that your DPA (Data Processing Agreement) with each sub-processor covers deletion, and test that deletion requests propagate.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Create an audit trail
&lt;/h3&gt;

&lt;p&gt;Log every deletion event with: request reference, subject identifier, list of deleted record IDs, timestamp, and executor. A commit diff qualifies for open-format systems; for database systems, write this to an append-only audit log.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Test deletion before you need it
&lt;/h3&gt;

&lt;p&gt;Run a deletion drill quarterly. Create test records, exercise the right-to-erasure flow, verify that the deleted records do not appear in subsequent recall, and document the result.&lt;/p&gt;




&lt;h2&gt;
  
  
  EU AI Act Considerations
&lt;/h2&gt;

&lt;p&gt;The EU AI Act (fully applicable from August 2026) introduces additional obligations for AI systems classified as high-risk under Annex III — including systems that interact with individuals in employment, education, credit, and law enforcement contexts. If your agent falls under a high-risk category, you have logging and traceability requirements that interact with memory: you must be able to reconstruct what the agent knew when it made a consequential decision.&lt;/p&gt;

&lt;p&gt;This creates a tension with GDPR right-to-erasure: if you delete the memory that informed a hiring recommendation, you may lose your ability to audit that recommendation. Legal guidance for this tension is still evolving; the practical path is to maintain a separate, subject-anonymized audit log of consequential decisions, distinct from the live memory store that is subject to deletion.&lt;/p&gt;




&lt;h2&gt;
  
  
  Summary Table
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Framework&lt;/th&gt;
&lt;th&gt;Storage format&lt;/th&gt;
&lt;th&gt;Search by subject&lt;/th&gt;
&lt;th&gt;Hard delete&lt;/th&gt;
&lt;th&gt;Provable deletion&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;PLUR&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Structured text files&lt;/td&gt;
&lt;td&gt;✅ &lt;code&gt;--scope&lt;/code&gt; filter&lt;/td&gt;
&lt;td&gt;✅ &lt;code&gt;plur forget&lt;/code&gt; (retires; physical delete via manual YAML edit)&lt;/td&gt;
&lt;td&gt;✅ git diff (status change or entry removal)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Mem0 (managed)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Managed vector store&lt;/td&gt;
&lt;td&gt;✅ &lt;code&gt;user_id&lt;/code&gt; API&lt;/td&gt;
&lt;td&gt;✅ &lt;code&gt;delete_all&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Partial (server log)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Mem0 (self-hosted)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Qdrant / PG vectors&lt;/td&gt;
&lt;td&gt;✅ &lt;code&gt;user_id&lt;/code&gt; filter&lt;/td&gt;
&lt;td&gt;Needs explicit compaction&lt;/td&gt;
&lt;td&gt;Requires Qdrant audit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Letta&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Memory blocks (text/DB)&lt;/td&gt;
&lt;td&gt;Manual&lt;/td&gt;
&lt;td&gt;Manual&lt;/td&gt;
&lt;td&gt;Manual&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Zep / Graphiti&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Knowledge graph&lt;/td&gt;
&lt;td&gt;✅ entity search&lt;/td&gt;
&lt;td&gt;Graph node delete&lt;/td&gt;
&lt;td&gt;Requires cascade audit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Custom RAG&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Vector DB&lt;/td&gt;
&lt;td&gt;Depends on indexing&lt;/td&gt;
&lt;td&gt;Depends on DB&lt;/td&gt;
&lt;td&gt;Depends on logging&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Is storing AI agent memories "personal data" under GDPR?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If the memories relate to an identified or identifiable natural person — their preferences, behavior, statements, or any other information about them — yes, they qualify as personal data under Article 4(1) GDPR.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does GDPR apply if I run the agent locally on the user's device?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you process data solely locally and do not transmit it to a server, some GDPR obligations (particularly around sub-processors) do not apply. You are still a data controller, however, and the right to erasure still applies if the user requests it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I keep anonymized memories after a deletion request?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If memories have been genuinely anonymized — not pseudonymized, but fully de-identified — they fall outside GDPR scope and do not need to be deleted. The standard for anonymization is high; removing a name while retaining behavioral patterns linked to a single individual is pseudonymization, not anonymization.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does the right to be forgotten apply to fine-tuned models?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Strictly speaking, yes — if personal data was used in fine-tuning, a data subject can request erasure. In practice, true erasure from a fine-tuned model is not yet technically feasible at scale (machine unlearning is an active research area). Regulators are still developing guidance on this. For agent memory systems, which store facts as discrete records rather than baking them into model weights, deletion is tractable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What retention period applies to agent memories?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;GDPR requires data to be kept "no longer than necessary for the purposes for which the personal data are processed" (Article 5(1)(e)). You need a defined retention policy — whether that is session-only, 90-day rolling, or indefinite with annual review — and a mechanism to enforce it.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Reviewed: 2026-07-18. This article provides technical guidance, not legal advice. Consult a qualified data protection specialist for your specific use case.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>memory</category>
    </item>
    <item>
      <title>How to Delete Specific Things an AI Remembers About You</title>
      <dc:creator>gregor</dc:creator>
      <pubDate>Thu, 23 Jul 2026 11:18:34 +0000</pubDate>
      <link>https://dev.to/plur9/how-to-delete-specific-things-an-ai-remembers-about-you-m79</link>
      <guid>https://dev.to/plur9/how-to-delete-specific-things-an-ai-remembers-about-you-m79</guid>
      <description>&lt;h1&gt;
  
  
  How to Delete Specific Things an AI Remembers About You
&lt;/h1&gt;

&lt;p&gt;Whether you can delete a specific AI memory depends on two things: which AI you are using and what storage format its memory uses. Consumer AI assistants like ChatGPT and Claude Projects let you delete individual memories through a settings panel — but only report success; they cannot prove the underlying data is gone. Developer-facing agent memory tools (Mem0, Letta, PLUR) offer deletion via API or CLI. The critical difference is the storage format: systems that store memory as plain files — open-format memory — can prove deletion with a file diff. Systems that store memory as vector embeddings or opaque database records cannot. This distinction matters for privacy-sensitive applications, GDPR compliance, and any scenario where a user needs to trust that deletion actually happened.&lt;/p&gt;




&lt;h2&gt;
  
  
  Deleting memories from consumer AI assistants
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ChatGPT (OpenAI)
&lt;/h3&gt;

&lt;p&gt;ChatGPT's memory stores facts you have shared across conversations. To delete a specific memory:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open ChatGPT and go to &lt;strong&gt;Settings → Personalization → Manage memory&lt;/strong&gt; (or ask the chat directly: "What do you remember about me?")&lt;/li&gt;
&lt;li&gt;Browse the list of stored memories&lt;/li&gt;
&lt;li&gt;Click the trash icon next to the memory you want to remove, or ask: "Forget that I [specific fact]"&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;OpenAI's Memory FAQ (&lt;a href="https://help.openai.com/articles/8590148" rel="noopener noreferrer"&gt;help.openai.com/articles/8590148&lt;/a&gt;) notes that when you delete a memory, "it is removed and won't be used in future chats." However, deletion through the UI does not guarantee erasure from server backups or audit logs — OpenAI's data retention policies govern what happens at the infrastructure layer.&lt;/p&gt;

&lt;p&gt;You can also turn off memory entirely under &lt;strong&gt;Settings → Personalization → Memory → Off&lt;/strong&gt;, which stops ChatGPT from creating new memories without deleting existing ones.&lt;/p&gt;

&lt;h3&gt;
  
  
  Claude Projects (Anthropic)
&lt;/h3&gt;

&lt;p&gt;Claude Projects store context you add to a project (via the project instructions field) and, in some configurations, persist facts across conversations within that project. To remove stored context:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open the project and edit or clear the &lt;strong&gt;Project instructions&lt;/strong&gt; field&lt;/li&gt;
&lt;li&gt;If the platform has stored conversation-derived facts, look for a memory management option in project settings&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Claude's in-conversation memory does not persist between separate conversations unless you are using a Claude Projects session with memory enabled. Anthropic's privacy controls are documented at &lt;a href="https://privacy.anthropic.com" rel="noopener noreferrer"&gt;privacy.anthropic.com&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Microsoft Copilot
&lt;/h3&gt;

&lt;p&gt;Copilot's memory settings are documented at &lt;a href="https://support.microsoft.com/en-us/microsoft-365-copilot/manage-copilot-memory-in-microsoft-365-copilot" rel="noopener noreferrer"&gt;support.microsoft.com&lt;/a&gt;. You can manage and delete stored memories through the Microsoft 365 privacy dashboard.&lt;/p&gt;

&lt;h3&gt;
  
  
  Google Gemini
&lt;/h3&gt;

&lt;p&gt;Gemini's memory features vary by product surface. For Gemini Advanced, memory is managed through &lt;strong&gt;Gemini Apps Activity&lt;/strong&gt; in your Google account. You can delete individual memory entries or turn off memory entirely through the Google Account privacy dashboard.&lt;/p&gt;




&lt;h2&gt;
  
  
  The proof problem: why "deleted" does not always mean gone
&lt;/h2&gt;

&lt;p&gt;With all consumer AI memory systems, the deletion UI removes the memory from the active recall surface. What it cannot guarantee:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The vector embedding derived from that memory is removed from all backup stores&lt;/li&gt;
&lt;li&gt;The source text is not retained in server logs for safety or audit purposes&lt;/li&gt;
&lt;li&gt;The memory is not retained in a training dataset snapshot&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is not a failure of these products — it reflects the tension between privacy controls and operational requirements (backups, safety monitoring, legal holds). For most users, UI deletion is sufficient. For regulated industries or GDPR-sensitive deployments, the inability to prove erasure is a compliance problem.&lt;/p&gt;




&lt;h2&gt;
  
  
  Deleting memories in developer agent systems
&lt;/h2&gt;

&lt;p&gt;If you are building agents — coding assistants, research agents, autonomous workflows — memory deletion is your responsibility, not the AI provider's. Your agent accumulates facts about users across sessions; when a user asks to delete specific data, you need to:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Find all memories related to that user&lt;/li&gt;
&lt;li&gt;Delete them&lt;/li&gt;
&lt;li&gt;Prove they are gone&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;How well you can do each step depends on the memory system you chose.&lt;/p&gt;

&lt;h3&gt;
  
  
  Memory systems and deletion capability
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;System&lt;/th&gt;
&lt;th&gt;Format&lt;/th&gt;
&lt;th&gt;Find specific memory&lt;/th&gt;
&lt;th&gt;Delete specific memory&lt;/th&gt;
&lt;th&gt;Prove erasure&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Mem0&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Vector store&lt;/td&gt;
&lt;td&gt;Via API similarity search — may miss entries with low similarity&lt;/td&gt;
&lt;td&gt;Via &lt;code&gt;mem0.delete(memory_id)&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;No — vector may persist in backups&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Letta&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Agent state blocks&lt;/td&gt;
&lt;td&gt;Via API / Letta Studio UI&lt;/td&gt;
&lt;td&gt;Via API &lt;code&gt;DELETE /v1/agents/{id}/memory&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;No — database record may persist&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Zep / Graphiti&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Temporal knowledge graph&lt;/td&gt;
&lt;td&gt;Via graph query&lt;/td&gt;
&lt;td&gt;Via graph node deletion&lt;/td&gt;
&lt;td&gt;Partial — temporal history chain remains&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;PLUR&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;YAML files (open format)&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;plur recall &amp;lt;query&amp;gt;&lt;/code&gt; or &lt;code&gt;grep&lt;/code&gt; in &lt;code&gt;~/.plur/&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;plur forget &amp;lt;engram-id&amp;gt;&lt;/code&gt; — retires the engram (excludes from recall; physical removal requires manual YAML edit)&lt;/td&gt;
&lt;td&gt;Yes — &lt;code&gt;git diff&lt;/code&gt; shows status change or entry removal&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The key variable is storage format. &lt;strong&gt;File-based memory can be grepped, diffed, and deleted with proof. Database-backed or vector-backed memory cannot.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Implementing deletion in PLUR
&lt;/h3&gt;

&lt;p&gt;PLUR stores each memory (engram) as a structured YAML entry in a local file store (&lt;code&gt;~/.plur/&lt;/code&gt; by default). Deletion is explicit:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# List what the agent knows about a topic&lt;/span&gt;
plur recall &lt;span class="s2"&gt;"user preferences"&lt;/span&gt;

&lt;span class="c"&gt;# View a specific engram&lt;/span&gt;
plur show ENG-2026-0512-042

&lt;span class="c"&gt;# Delete it&lt;/span&gt;
plur forget ENG-2026-0512-042

&lt;span class="c"&gt;# Confirm it is gone&lt;/span&gt;
plur recall &lt;span class="s2"&gt;"user preferences"&lt;/span&gt;   &lt;span class="c"&gt;# should not surface the deleted engram&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Because the store is a local directory (and optionally a git repository), retirement leaves a verifiable trace: the engram's status field changes from &lt;code&gt;active&lt;/code&gt; to &lt;code&gt;retired&lt;/code&gt; in the YAML, and &lt;code&gt;git log&lt;/code&gt; shows exactly when it happened and the reason provided. For complete physical erasure, you can delete the retired entry from the YAML file and commit — the diff then shows the entry is gone entirely. This is the closest you can get to provable erasure in an agent memory system without a separate audit log.&lt;/p&gt;

&lt;p&gt;PLUR's explicit retirement design — nothing is auto-deleted; only &lt;code&gt;plur forget&lt;/code&gt; can retire an engram — is the same property that makes it trustworthy from a compliance perspective. You can be confident that if you did not call &lt;code&gt;plur forget&lt;/code&gt;, the memory is still active and retrievable.&lt;/p&gt;




&lt;h2&gt;
  
  
  GDPR and the right to erasure
&lt;/h2&gt;

&lt;p&gt;GDPR Article 17 ("right to erasure," also called the right to be forgotten) requires that a data controller delete personal data when the data subject requests it, when the data is no longer necessary for its original purpose, or when consent is withdrawn.&lt;/p&gt;

&lt;p&gt;For developers building AI agents that process EU user data, this creates a concrete requirement: when a user requests deletion, you must be able to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Identify all personal data stored about that user (name, email, preferences, conversation history, derived facts)&lt;/li&gt;
&lt;li&gt;Delete it&lt;/li&gt;
&lt;li&gt;Demonstrate that deletion occurred (for potential regulatory review)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Agent memory is personal data under GDPR if it contains information that can identify an individual. Vector embeddings of personal information are still personal data even though they are not human-readable (the WP29 and EDPB have consistently taken this position).&lt;/p&gt;

&lt;p&gt;The compliance gap with most agent memory systems is step 3: demonstrating deletion. File-based, open-format memory makes this tractable; vector or graph-based memory makes it difficult.&lt;/p&gt;

&lt;p&gt;The EU AI Act (Regulation 2024/1689, in force August 2024) adds additional transparency requirements for high-risk AI systems, including the ability to trace system outputs and understand the data informing decisions. Agent memory that cannot be inspected or audited may create additional exposure under the Act.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Note: this is not legal advice. Consult a qualified privacy lawyer before making compliance decisions.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  For developers: a checklist for deletion-ready agent memory
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Can you list all memories associated with a specific user ID?&lt;/li&gt;
&lt;li&gt;[ ] Can you delete a specific memory by ID (not just by query similarity)?&lt;/li&gt;
&lt;li&gt;[ ] Can you prove that deletion occurred (file diff, audit log, database record timestamp)?&lt;/li&gt;
&lt;li&gt;[ ] Is the memory store backed up, and does your deletion propagate to backups (or does your backup policy exclude deleted records after N days)?&lt;/li&gt;
&lt;li&gt;[ ] If a user exercises GDPR Article 17 rights, can you produce a deletion record?&lt;/li&gt;
&lt;li&gt;[ ] Is the source text of memories (the raw conversation turns) stored separately, and do you have a deletion path for that too?&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Can I make ChatGPT permanently forget something?&lt;/strong&gt;&lt;br&gt;
You can delete a specific memory from ChatGPT's active recall using the Settings → Personalization → Manage memory panel. This removes the memory from future conversations. ChatGPT's server-side data retention policies govern whether the underlying data is retained in backups or logs — consult OpenAI's Privacy Policy for details.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Which agent memory tools let me inspect and delete what the AI remembers?&lt;/strong&gt;&lt;br&gt;
All major agent memory tools (Mem0, Letta, Zep, PLUR) provide deletion APIs. The practical difference is inspectability and proof of deletion. PLUR stores memory as local YAML files — you can open, read, grep, edit, and delete entries directly without an API, and a git diff serves as a deletion record. Vector-based stores (Mem0, some Zep configurations) are harder to inspect and cannot prove erasure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is AI agent memory GDPR compliant?&lt;/strong&gt;&lt;br&gt;
It depends on the architecture. Agent memory that stores personal data about EU residents is subject to GDPR, including the right to erasure (Article 17). Open-format, file-based memory systems make erasure easier to implement and demonstrate. Vector embedding stores are technically GDPR-covered personal data but harder to fully erase. This is an active area of regulatory attention as agent systems scale.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How do I implement the right to be forgotten in an AI agent?&lt;/strong&gt;&lt;br&gt;
The implementation steps: (1) tag every memory with the user ID it was derived from at creation time, (2) provide a deletion path that removes all memories with that user ID, (3) generate an audit record of the deletion. File-based memory systems (PLUR) make all three steps straightforward. For vector-based systems, step 3 typically requires a separate audit log, since the vector store itself does not record deletions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is the difference between deleting a memory and turning off memory entirely?&lt;/strong&gt;&lt;br&gt;
Turning off memory stops the agent from creating new memories but does not delete existing ones. Deleting a specific memory removes that individual entry but leaves other memories intact. Turning off memory and deleting all existing memories are separate operations in most systems.&lt;/p&gt;




&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;OpenAI Memory FAQ: &lt;a href="https://help.openai.com/articles/8590148" rel="noopener noreferrer"&gt;help.openai.com/articles/8590148&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GDPR Article 17 (right to erasure): &lt;a href="https://gdpr-info.eu/art-17-gdpr/" rel="noopener noreferrer"&gt;gdpr-info.eu/art-17-gdpr&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;EU AI Act (Regulation 2024/1689): &lt;a href="https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:32024R1689" rel="noopener noreferrer"&gt;eur-lex.europa.eu&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;"A Survey on the Memory Mechanism of Large Language Model based Agents" (Zhang et al., 2024): &lt;a href="https://arxiv.org/abs/2404.13501" rel="noopener noreferrer"&gt;arxiv.org/abs/2404.13501&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;PLUR open-format engram memory: &lt;a href="https://github.com/plur-ai/plur" rel="noopener noreferrer"&gt;github.com/plur-ai/plur&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Microsoft Copilot memory management: &lt;a href="https://support.microsoft.com/en-us/microsoft-365-copilot/manage-copilot-memory-in-microsoft-365-copilot" rel="noopener noreferrer"&gt;support.microsoft.com/en-us/microsoft-365-copilot/manage-copilot-memory-in-microsoft-365-copilot&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>memory</category>
    </item>
    <item>
      <title>Do You Still Need an Agent Memory Layer if ChatGPT Already Has Memory?</title>
      <dc:creator>gregor</dc:creator>
      <pubDate>Wed, 22 Jul 2026 10:11:28 +0000</pubDate>
      <link>https://dev.to/plur9/do-you-still-need-an-agent-memory-layer-if-chatgpt-already-has-memory-1jia</link>
      <guid>https://dev.to/plur9/do-you-still-need-an-agent-memory-layer-if-chatgpt-already-has-memory-1jia</guid>
      <description>&lt;h1&gt;
  
  
  Do You Still Need an Agent Memory Layer if ChatGPT Already Has Memory?
&lt;/h1&gt;

&lt;p&gt;Yes — for a reason that becomes clear once you separate two different jobs. ChatGPT memory, Claude Projects, and Gemini's built-in memory solve a conversational recall problem: they remember what you told the model inside its own interface. An agent memory layer (Mem0, Zep, Letta, PLUR) solves a programmatic recall problem: it stores facts inside your application, accessible from your code, portable across every tool your agent uses. These systems serve different jobs and work best together.&lt;/p&gt;




&lt;h2&gt;
  
  
  What model-native memory does (and where it stops)
&lt;/h2&gt;

&lt;p&gt;As of 2026, the major model providers ship built-in memory in two forms.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ChatGPT&lt;/strong&gt; has "saved memories" — an explicit, user-editable list of facts that ChatGPT chose to remember across conversations — and "reference chat history" (launched April 2025), which implicitly draws on patterns from past chats. Saved memories are auditable: you can open Settings → Personalization → Manage memory and see exactly what is stored. Reference chat history is not auditable — you cannot see what it has inferred. ChatGPT Projects adds a Project Memory scope that captures facts within a specific project workspace, isolated from other projects and from main chat.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Claude Projects&lt;/strong&gt; maintains a project-level instruction set and uploaded file context, scoped per project, persisting across all conversations in that project. Unlike ChatGPT's saved memories, Claude Projects does not automatically extract facts from conversations — knowledge is added explicitly via the instruction set or uploaded files.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gemini&lt;/strong&gt; offers workspace-scoped memory through Gemini Apps Activity, manageable through your Google Account privacy dashboard.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The common constraint:&lt;/strong&gt; all of these live inside the model provider's servers, scoped to the model's own interface. They do not follow your agents into code.&lt;/p&gt;

&lt;p&gt;When your Claude Code session ends, Claude's project memory does not inject into your next Cursor session. When ChatGPT remembers you prefer Python, your custom CLI agent does not know that. Model-native memory exists in one silo, per provider, per interface.&lt;/p&gt;

&lt;p&gt;Source: &lt;a href="https://gptprompts.ai/chatgpt-memory-guide" rel="noopener noreferrer"&gt;ChatGPT Memory Guide 2026&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  What an agent memory layer adds
&lt;/h2&gt;

&lt;p&gt;An agent memory layer runs in your application, not the model provider's server. It gives you four things model-native memory cannot:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Portability.&lt;/strong&gt; The memory store is a resource your code owns. If you switch from Claude to GPT-4o, or from Cursor to a custom CLI, the memory follows automatically — no migration, no re-learning.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Programmatic read/write.&lt;/strong&gt; Your code can store a fact at runtime (&lt;code&gt;plur_learn&lt;/code&gt;, &lt;code&gt;mem0.add&lt;/code&gt;), retrieve it on the next run (&lt;code&gt;plur_recall&lt;/code&gt;, &lt;code&gt;mem0.search&lt;/code&gt;), and update or delete it via API. Model-native memory cannot be written to by your code — only the model and the user can modify it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Auditability.&lt;/strong&gt; With file-based memory systems like PLUR, you can open the store with a text editor, &lt;code&gt;grep&lt;/code&gt; for specific facts, and see exactly what the agent knows and when it learned each item. With vector-based stores like Mem0, you can query the API. With model-native memory, you are limited to what the provider's UI exposes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Deletion control.&lt;/strong&gt; You can implement right-to-be-forgotten policies, purge all facts about a specific user, or wipe session state programmatically. Model-native memory deletion goes through the provider's interface, not your code.&lt;/p&gt;

&lt;p&gt;Source: &lt;a href="https://fountaincity.tech/resources/blog/how-to-build-and-operate-ai-agent-memory-in-2026/" rel="noopener noreferrer"&gt;How to Build AI Agent Memory in 2026&lt;/a&gt;, &lt;a href="https://www.graphlit.com/blog/survey-of-ai-agent-memory-frameworks" rel="noopener noreferrer"&gt;AI Agent Memory Frameworks in 2026&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The complement frame: different jobs, use both
&lt;/h2&gt;

&lt;p&gt;Model-native memory is useful for: "Remember I prefer Python over JavaScript" — a conversational preference stored in the model's own interface, useful when you are talking directly to ChatGPT or Claude.&lt;/p&gt;

&lt;p&gt;Agent memory is useful for: "Remember the architecture decision we made last sprint, the user's confirmed preferences across three tools, and the intermediate results from yesterday's research loop" — operational knowledge your code needs to function, across tools, overnight, in pipelines.&lt;/p&gt;

&lt;p&gt;The right setup for most production agent deployments: use model-native memory for its intended purpose (conversational recall in the model's own interface), and add an agent memory layer for programmatic recall in your code.&lt;/p&gt;




&lt;h2&gt;
  
  
  PLUR as the cross-tool layer
&lt;/h2&gt;

&lt;p&gt;PLUR stores memories as open-format engrams in a local directory (&lt;code&gt;~/.plur/&lt;/code&gt;). Any MCP-compatible tool — Claude Code, Cursor, Hermes, OpenClaw, or a custom CLI — reads and writes the same directory without additional configuration. When you switch between tools, the memory follows automatically.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Install once — works across all your MCP-compatible tools&lt;/span&gt;
npx @plur-ai/mcp init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;From any session, &lt;code&gt;plur_recall&lt;/code&gt; queries the store; &lt;code&gt;plur_learn&lt;/code&gt; adds to it. The same &lt;code&gt;~/.plur/&lt;/code&gt; directory is shared. This is the portability that model-native memory cannot provide: one memory store, every tool.&lt;/p&gt;




&lt;h2&gt;
  
  
  Summary table
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Model-native memory&lt;/th&gt;
&lt;th&gt;Agent memory layer (e.g. PLUR)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Where it lives&lt;/td&gt;
&lt;td&gt;Model provider's server&lt;/td&gt;
&lt;td&gt;Your application / local directory&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scope&lt;/td&gt;
&lt;td&gt;That model's interface only&lt;/td&gt;
&lt;td&gt;Any tool that speaks MCP or the API&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Set by&lt;/td&gt;
&lt;td&gt;User + model (conversational)&lt;/td&gt;
&lt;td&gt;Your code (programmatic)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Read by your code&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cross-tool portable&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Auditable in full&lt;/td&gt;
&lt;td&gt;Partially (saved memories only)&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Deletion via your code&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Works without a chat interface&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Do I still need an agent memory layer if ChatGPT already has memory?&lt;/strong&gt;&lt;br&gt;
Yes, if you are building agents in code. ChatGPT memory is scoped to the ChatGPT interface — it does not follow your agents into Cursor, Claude Code, a custom CLI, or overnight pipelines. An agent memory layer stores facts in your application, accessible from any tool that queries it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is the difference between model memory and agent memory?&lt;/strong&gt;&lt;br&gt;
Model memory (ChatGPT saved memories, Claude Projects, Gemini) is conversational memory stored on the model provider's server, accessible only through that model's interface. Agent memory is operational memory stored in your application, accessible by your code, portable across tools. The same agent can use both: model memory for interface-level recall, agent memory for cross-session and cross-tool recall.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How does Claude Projects memory compare to agent memory?&lt;/strong&gt;&lt;br&gt;
Claude Projects memory captures facts within a project session and persists them for future sessions in that project. It is scoped to Anthropic's interface and cannot be read or written by external code. Agent memory (Mem0, PLUR, Zep) is stored in your application and is accessible from any code that calls the memory API — including code running outside any Claude interface.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I use agent memory alongside a model's built-in memory?&lt;/strong&gt;&lt;br&gt;
Yes, and this is the recommended approach. Use model-native memory for conversational recall within that model's interface. Use agent memory for facts your code needs to access, persist across tools, or control programmatically. The two stores do not conflict — they serve different retrieval paths.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ChatGPT vs Mem0 vs PLUR — what should I use for AI memory?&lt;/strong&gt;&lt;br&gt;
These are not direct alternatives. ChatGPT memory serves the ChatGPT web interface. Mem0 and PLUR are agent memory layers for use in code. If you are building agents: Mem0 for general personalization, PLUR if you need cross-tool portability and open-format storage. Use ChatGPT memory in addition to — not instead of — a dedicated agent memory layer.&lt;/p&gt;




&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://gptprompts.ai/chatgpt-memory-guide" rel="noopener noreferrer"&gt;ChatGPT Memory: Complete Guide for 2026&lt;/a&gt; — gptprompts.ai&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.graphlit.com/blog/survey-of-ai-agent-memory-frameworks" rel="noopener noreferrer"&gt;AI Agent Memory Frameworks in 2026: Memory vs. Context&lt;/a&gt; — Graphlit Blog&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://fountaincity.tech/resources/blog/how-to-build-and-operate-ai-agent-memory-in-2026/" rel="noopener noreferrer"&gt;How to Build AI Agent Memory in 2026&lt;/a&gt; — Fountain City&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.mayhemcode.com/2026/07/ai-memory-problem-2026-risks-in-chatgpt.html" rel="noopener noreferrer"&gt;AI Memory Problem 2026: Risks in ChatGPT, Claude, Gemini&lt;/a&gt; — MayhemCode&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/plur-ai/plur" rel="noopener noreferrer"&gt;PLUR open-format engram memory&lt;/a&gt; — GitHub&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>memory</category>
    </item>
    <item>
      <title>Best Tools for Giving AI Agents Long-Term Memory (2026)</title>
      <dc:creator>gregor</dc:creator>
      <pubDate>Tue, 21 Jul 2026 11:21:03 +0000</pubDate>
      <link>https://dev.to/plur9/best-tools-for-giving-ai-agents-long-term-memory-2026-5gh4</link>
      <guid>https://dev.to/plur9/best-tools-for-giving-ai-agents-long-term-memory-2026-5gh4</guid>
      <description>&lt;h1&gt;
  
  
  Best Tools for Giving AI Agents Long-Term Memory (2026)
&lt;/h1&gt;

&lt;p&gt;AI agents lose everything when a session ends. If your agent is rebuilding task state from scratch on every run, re-explaining user preferences to each tool, or contradicting decisions from last week, you need a dedicated memory layer — not a larger context window. The leading options in 2026 are Mem0, Zep, Letta, LangMem, and PLUR. Each targets a different retrieval pattern: Mem0 for general personalization, Zep for temporal reasoning, Letta for autonomous agents that manage their own memory, LangMem for LangGraph-native projects, and PLUR for cross-tool portability via the open engram format.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why context windows are not enough
&lt;/h2&gt;

&lt;p&gt;Every agent framework gives your agent a context window. When the session closes, that window clears. For agents that interact with the same user across days or weeks — or for multi-agent pipelines where one agent passes state to another — you need a mechanism that extracts the facts that matter, stores them durably, and retrieves them later with high precision.&lt;/p&gt;

&lt;p&gt;That is what a dedicated memory layer does. It sits between your agent and its long-term store, handling extraction, indexing, retrieval scoring, and (where supported) forgetting.&lt;/p&gt;




&lt;h2&gt;
  
  
  The leading tools
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Mem0
&lt;/h3&gt;

&lt;p&gt;Mem0 is the most widely adopted agent memory platform in 2026, with 48,000+ GitHub stars. It combines vector search, a knowledge graph, and key-value storage, with automatic memory extraction built in. The architecture handles the most common case: a user-facing application that needs to remember preferences, past interactions, and learned facts without the developer writing extraction logic by hand.&lt;/p&gt;

&lt;p&gt;On the LongMemEval benchmark — the current standard stress test for agent memory — Mem0 scores 49.0% with GPT-4o. That is a solid general-purpose result. Mem0 offers both a hosted API and a self-hosted path via the open-source repo.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; teams starting out, personalization-heavy applications, the largest community and ecosystem.&lt;/p&gt;

&lt;h3&gt;
  
  
  Zep / Graphiti
&lt;/h3&gt;

&lt;p&gt;Zep's Graphiti backend timestamps every fact in a knowledge graph, making it the strongest option when temporal relationships matter — e.g., "what did the user want last Tuesday versus today?" or "which goal is still active after three sessions?" On LongMemEval with GPT-4o, Zep scores 63.8%, currently the strongest reported result among managed services. The graph approach also makes it easier to reason over relationships between entities, not just over isolated facts.&lt;/p&gt;

&lt;p&gt;Graphiti is the open-source knowledge graph engine underneath Zep. You can run Graphiti self-hosted if you do not want a managed service.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; agents that need to reason over how facts change over time, temporal retrieval, knowledge graph use cases.&lt;/p&gt;

&lt;h3&gt;
  
  
  Letta (formerly MemGPT)
&lt;/h3&gt;

&lt;p&gt;Letta treats agent memory like an operating system: main context is RAM, archival memory is disk, and the agent itself decides what to page in and out. This is a different philosophy from tools that abstract memory away from the agent — Letta gives the agent more autonomy over its own memory allocation, at the cost of more complex setup. Long-running agents that need to manage large, evolving knowledge bases tend to benefit most.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; autonomous agents with large knowledge bases, OS-style memory management, full self-hosting.&lt;/p&gt;

&lt;h3&gt;
  
  
  LangMem
&lt;/h3&gt;

&lt;p&gt;LangMem is the memory module from the LangChain team, designed to integrate tightly with LangGraph. If your agent is already on LangGraph, LangMem is the lowest-friction way to add persistent memory — it wires into the LangGraph state machine without a separate service.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; LangGraph-native projects, teams already in the LangChain ecosystem.&lt;/p&gt;

&lt;h3&gt;
  
  
  PLUR
&lt;/h3&gt;

&lt;p&gt;PLUR stores memories as open-format engrams: structured assertions with confidence scores, domain tags, and decay curves. Each engram is a plain-text YAML entry in a local directory (&lt;code&gt;~/.plur/&lt;/code&gt;). Any tool that speaks MCP — Claude Code, Cursor, Copilot, Hermes, or a custom CLI — can read and write the same store without configuration changes per tool.&lt;/p&gt;

&lt;p&gt;The open engram format is PLUR's primary differentiator. When your memory store is a local file directory rather than a proprietary API, you get portability (move between tools without migration), inspectability (open any file with a text editor or &lt;code&gt;grep&lt;/code&gt;), and provable deletion (a &lt;code&gt;git diff&lt;/code&gt; shows what was removed and when). PLUR includes hybrid BM25 + embedding retrieval with Reciprocal Rank Fusion, confidence decay for stale memories, and pack-based memory sharing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; cross-tool portability, MCP ecosystem, open-format auditable memory, teams that need to share memory across multiple agents or tools.&lt;/p&gt;




&lt;h2&gt;
  
  
  Comparison table
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Architecture&lt;/th&gt;
&lt;th&gt;Retrieval&lt;/th&gt;
&lt;th&gt;Self-hostable&lt;/th&gt;
&lt;th&gt;Open format&lt;/th&gt;
&lt;th&gt;Cross-tool&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Mem0&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Vector + graph + KV&lt;/td&gt;
&lt;td&gt;Semantic + graph&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Via API&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Zep / Graphiti&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Temporal knowledge graph&lt;/td&gt;
&lt;td&gt;Graph + temporal&lt;/td&gt;
&lt;td&gt;Yes (Graphiti)&lt;/td&gt;
&lt;td&gt;Graphiti is open source&lt;/td&gt;
&lt;td&gt;Via API&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Letta&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Agent-managed memory blocks&lt;/td&gt;
&lt;td&gt;Agent-controlled paging&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Letta agents only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;LangMem&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;LangGraph state&lt;/td&gt;
&lt;td&gt;LangGraph-native&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;LangGraph only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;PLUR&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Open-format YAML engrams + hybrid search&lt;/td&gt;
&lt;td&gt;BM25 + embeddings (RRF)&lt;/td&gt;
&lt;td&gt;Yes (local default)&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Any MCP-compatible tool&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  How to choose
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Start with Mem0&lt;/strong&gt; if you need a general-purpose solution with the largest community and you're not constrained by format, hosting, or cross-tool requirements.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Choose Zep&lt;/strong&gt; if your agent needs to reason about when facts were true — temporal retrieval is Zep's core strength.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Choose Letta&lt;/strong&gt; if you're building long-running autonomous agents that should manage their own context allocation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Choose LangMem&lt;/strong&gt; if you're already on LangGraph and want the lowest-friction integration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Choose PLUR&lt;/strong&gt; if your agents run across multiple tools (Claude Code + Cursor + Hermes, for example), if you need memory to be inspectable and provably deletable, or if open-standard interoperability matters to your deployment.&lt;/p&gt;

&lt;p&gt;Most production systems pair a dedicated memory platform with a vector store (Pinecone, Weaviate, or pgvector) for retrieval at scale — the memory tool handles extraction and scoring, the vector store handles indexing.&lt;/p&gt;




&lt;h2&gt;
  
  
  Quick start: PLUR
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Install the MCP server&lt;/span&gt;
npx @plur-ai/mcp init

&lt;span class="c"&gt;# Add to Claude Code, Cursor, or any MCP-compatible tool&lt;/span&gt;
&lt;span class="c"&gt;# Memory is stored in ~/.plur/ — readable, portable, diffable&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;From any MCP session, your agent can read and write engrams with &lt;code&gt;plur_recall_hybrid&lt;/code&gt; / &lt;code&gt;plur_learn&lt;/code&gt; (&lt;code&gt;plur_recall_hybrid&lt;/code&gt; is the recommended default — BM25 + embeddings merged via RRF). The same store is shared across all connected tools automatically.&lt;/p&gt;




&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is the best open-source memory layer for LLM agents?&lt;/strong&gt;&lt;br&gt;
In 2026, Mem0 has the largest open-source community (47,000+ GitHub stars) and is the most commonly recommended starting point. Zep's Graphiti engine is the strongest option for temporal reasoning. PLUR is the best choice if you need memory to be portable across tools and stored in an open, auditable format.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How do I stop an AI agent from forgetting context between sessions?&lt;/strong&gt;&lt;br&gt;
Add a dedicated memory layer. The pattern: on session end, have the agent write key facts to the memory store; on session start, query the store for relevant context and inject it into the system prompt. All five tools above support this pattern with different levels of automation — Mem0 and PLUR offer the most out-of-the-box extraction.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is the difference between an agent memory layer and a vector store?&lt;/strong&gt;&lt;br&gt;
A vector store (Pinecone, pgvector, Weaviate) handles indexing and similarity search. An agent memory layer handles the higher-level workflow: deciding what to remember, extracting structured facts from conversations, scoring relevance, decaying stale memories, and handling deletion. Most production setups use both.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do agent memory tools work with any LLM?&lt;/strong&gt;&lt;br&gt;
Yes. Memory layers are model-agnostic — they store and retrieve text-based facts, which any LLM can consume. The LLM you use for extraction and retrieval scoring can differ from the LLM running your agent.&lt;/p&gt;




&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://dev.to/agdex_ai/ai-agent-memory-in-2026-mem0-vs-zep-vs-letta-vs-cognee-a-practical-guide-cfa"&gt;AI Agent Memory in 2026: Mem0 vs Zep vs Letta vs Cognee — A Practical Guide&lt;/a&gt; — DEV Community&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.developersdigest.tech/blog/best-ai-agent-memory-providers-2026" rel="noopener noreferrer"&gt;Best AI Agent Memory Providers in 2026: Mem0 vs Zep vs Letta vs Cloudflare&lt;/a&gt; — Developers Digest&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://vectorize.io/articles/best-ai-agent-memory-systems" rel="noopener noreferrer"&gt;Best AI Agent Memory Systems in 2026: 8 Frameworks Compared&lt;/a&gt; — Vectorize&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://atlan.com/know/best-ai-agent-memory-frameworks-2026/" rel="noopener noreferrer"&gt;Best AI Agent Memory Frameworks in 2026: Compared and Ranked&lt;/a&gt; — Atlan&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/plur-ai/plur" rel="noopener noreferrer"&gt;PLUR open-format engram memory&lt;/a&gt; — GitHub&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>agents</category>
      <category>memory</category>
    </item>
    <item>
      <title>How Do I Make My AI Agent's Memory Editable and Auditable?</title>
      <dc:creator>gregor</dc:creator>
      <pubDate>Mon, 20 Jul 2026 11:52:22 +0000</pubDate>
      <link>https://dev.to/plur9/how-do-i-make-my-ai-agents-memory-editable-and-auditable-37aa</link>
      <guid>https://dev.to/plur9/how-do-i-make-my-ai-agents-memory-editable-and-auditable-37aa</guid>
      <description>&lt;h1&gt;
  
  
  How Do I Make My AI Agent's Memory Editable and Auditable?
&lt;/h1&gt;

&lt;p&gt;You ask your AI agent what it knows about you. It cannot tell you — not in a format you can read, not in a way you can verify, not in a way you can correct. The agent has been accumulating facts from every conversation: your preferences, your coding habits, your project decisions, maybe your health concerns or financial details. But the memory is a black box — stored in a vector embedding or an opaque agent state block, accessible only through the tool's API, if at all. You cannot open it in a text editor. You cannot diff it against last week. You cannot delete a single fact and prove it is gone. For a developer, this is a debugging nightmare. For a user, it is a privacy problem. For an enterprise, it is a compliance liability.&lt;/p&gt;

&lt;p&gt;The fix is memory that is &lt;strong&gt;editable and auditable by design&lt;/strong&gt; — stored in a format you can read, inspect, correct, and erase. Not all agent memory systems offer this. The distinction is not between open-source and proprietary; it is between &lt;strong&gt;open format&lt;/strong&gt; (human-readable, inspectable) and &lt;strong&gt;closed format&lt;/strong&gt; (opaque, API-only access).&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem: black-box memory
&lt;/h2&gt;

&lt;p&gt;Most agent memory systems store what the agent learns in one of three opaque formats:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Vector embeddings&lt;/strong&gt; — Text is converted to a high-dimensional vector and stored in a vector database. You cannot read the vector. You can query it ("find memories similar to X") but you cannot open it and see what the agent knows. Mem0, LangChain memory modules, and many RAG-based systems work this way.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Agent state blocks&lt;/strong&gt; — The agent's memory is stored as structured state in a database, managed through the agent's tool API. Letta (formerly MemGPT) stores core memories and archival memories this way. You can query it through the API, but you cannot open a file and read what the agent knows.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Knowledge graphs&lt;/strong&gt; — Facts are stored as entity-relationship triples in a graph database. Zep and Graphiti use this approach. More structured than vectors, but still requires graph queries to inspect — not something you can diff in git.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In all three cases, the memory is &lt;strong&gt;write-once, read-through-API&lt;/strong&gt;. You can add memories and search memories, but you cannot:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open a memory file and read what it says&lt;/li&gt;
&lt;li&gt;Correct a single fact without an API call&lt;/li&gt;
&lt;li&gt;Diff the memory store against a previous version&lt;/li&gt;
&lt;li&gt;Prove that a specific memory was deleted (you can delete it through the API, but you cannot prove erasure — the vector or graph node may persist in a backup)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is not a limitation of the tools; it is a consequence of the storage format. If the format is opaque, the memory is opaque.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this matters
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Debugging
&lt;/h3&gt;

&lt;p&gt;When an agent makes a wrong decision, you need to know what memory it was operating on. Was it a stale fact? A misremembered preference? A correction that was not captured? If the memory is a vector embedding, you cannot inspect it — you can only re-query and hope the retrieval surfaces the same memory. If the memory is a human-readable YAML file, you can open it, read it, find the error, and fix it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Privacy and compliance
&lt;/h3&gt;

&lt;p&gt;The EU AI Act (Regulation 2024/1689, entered into force August 2024) requires transparency for high-risk AI systems — including the ability to understand and trace the system's outputs. GDPR Article 17 establishes the right to erasure: a data subject can request deletion of their personal data. If your agent's memory is a vector embedding, how do you prove erasure? You can delete the vector, but the text it was derived from may exist in backups, logs, or the model's training data. If the memory is a file, you can delete the file — and prove it with a git diff.&lt;/p&gt;

&lt;p&gt;A 2024 survey of LLM-based agent memory mechanisms (Zhang et al., "A Survey on the Memory Mechanism of Large Language Model based Agents," &lt;a href="https://arxiv.org/abs/2404.13501" rel="noopener noreferrer"&gt;arXiv:2404.13501&lt;/a&gt;) noted that memory transparency and control are emerging concerns: as agents accumulate personal data from interactions, the ability to inspect, correct, and delete that data becomes a requirement, not a nice-to-have.&lt;/p&gt;

&lt;h3&gt;
  
  
  Trust
&lt;/h3&gt;

&lt;p&gt;A user who cannot see what the agent knows cannot trust it. A developer who cannot inspect the memory store cannot debug it. An enterprise that cannot prove erasure cannot deploy it in regulated environments. Transparency is not a feature; it is a prerequisite for adoption at scale.&lt;/p&gt;

&lt;h2&gt;
  
  
  What editable and auditable memory looks like
&lt;/h2&gt;

&lt;p&gt;An editable, auditable memory system has five properties:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Human-readable format
&lt;/h3&gt;

&lt;p&gt;Each memory is stored in a format you can read without an API. Plain text, YAML, JSON — something a developer can open in a text editor. The engram format (PLUR, &lt;a href="https://github.com/plur-ai/plur" rel="noopener noreferrer"&gt;github.com/plur-ai/plur&lt;/a&gt;) stores each memory as a YAML entry with an id, statement, type, domain, scope, confidence, provenance, and timestamps. You can open the file and read what the agent knows.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Inspectable
&lt;/h3&gt;

&lt;p&gt;You can list all memories, search them, and view any individual memory. Not through a vector similarity query — through a direct read. You can ask "what does the agent know about my coding preferences?" and get a list of specific, readable entries, not a cosine similarity score.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Correctable
&lt;/h3&gt;

&lt;p&gt;You can edit a memory in place. If the agent learned that you use Jest but you actually use Vitest, you can open the YAML file, change the statement, and save it. No retraining, no re-embedding, no API call. The next time the agent recalls that memory, it reads the corrected version.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Deletable with proof
&lt;/h3&gt;

&lt;p&gt;You can delete a single memory and prove it is gone. If the memory is a file, you delete the file and commit the deletion to git — the diff is your proof. If someone asks "did you delete the memory about X?", you can show the commit. This is not possible with vector embeddings, where deletion leaves no auditable trace.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Version-controllable
&lt;/h3&gt;

&lt;p&gt;Because each memory is a file, you can put the entire memory store under version control. You can see what the agent knew last week vs today. You can roll back to a previous state. You can branch and experiment. This is impossible with a vector database or an agent state block.&lt;/p&gt;

&lt;h2&gt;
  
  
  How existing tools handle inspection and deletion
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Format&lt;/th&gt;
&lt;th&gt;Inspect?&lt;/th&gt;
&lt;th&gt;Edit?&lt;/th&gt;
&lt;th&gt;Delete?&lt;/th&gt;
&lt;th&gt;Prove erasure?&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Mem0&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Vector store&lt;/td&gt;
&lt;td&gt;Via API search&lt;/td&gt;
&lt;td&gt;Via API update&lt;/td&gt;
&lt;td&gt;Via API delete&lt;/td&gt;
&lt;td&gt;No (vector may persist in backups)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Letta&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Agent state blocks&lt;/td&gt;
&lt;td&gt;Via API / visualizer&lt;/td&gt;
&lt;td&gt;Via API&lt;/td&gt;
&lt;td&gt;Via API&lt;/td&gt;
&lt;td&gt;No (state blocks in database)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Zep / Graphiti&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Temporal knowledge graph&lt;/td&gt;
&lt;td&gt;Via graph query&lt;/td&gt;
&lt;td&gt;Via graph update&lt;/td&gt;
&lt;td&gt;Via graph delete&lt;/td&gt;
&lt;td&gt;Partial (graph node removal, but temporal history persists)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cognee&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Graph + vector + relational&lt;/td&gt;
&lt;td&gt;Via API&lt;/td&gt;
&lt;td&gt;Via API&lt;/td&gt;
&lt;td&gt;Via API&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;ChatGPT memory&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Proprietary&lt;/td&gt;
&lt;td&gt;Via settings UI&lt;/td&gt;
&lt;td&gt;Via settings UI&lt;/td&gt;
&lt;td&gt;Via settings UI&lt;/td&gt;
&lt;td&gt;No (opaque, no audit log)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Claude Code (CLAUDE.md)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Markdown file&lt;/td&gt;
&lt;td&gt;Yes (read file)&lt;/td&gt;
&lt;td&gt;Yes (edit file)&lt;/td&gt;
&lt;td&gt;Yes (delete line)&lt;/td&gt;
&lt;td&gt;Yes (git diff)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;PLUR&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;YAML files (open format)&lt;/td&gt;
&lt;td&gt;Yes (read file)&lt;/td&gt;
&lt;td&gt;Yes (edit file)&lt;/td&gt;
&lt;td&gt;Yes (delete entry)&lt;/td&gt;
&lt;td&gt;Yes (git diff)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The pattern is clear: &lt;strong&gt;file-based memory is auditable; database-based memory is not&lt;/strong&gt;. CLAUDE.md — Claude Code's built-in persistent instruction file — is the simplest form of editable, auditable memory: a markdown file you write, read, and edit. It is limited to static instructions, not accumulated knowledge. PLUR extends this principle to dynamic, agent-learned memories: each engram is a YAML entry with full provenance, stored in plain local files, editable in any text editor, and version-controllable in git.&lt;/p&gt;

&lt;h2&gt;
  
  
  The right-to-be-forgotten problem
&lt;/h2&gt;

&lt;p&gt;When a user asks you to delete what your AI agent knows about them, you need to do three things:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Find all memories related to that user.&lt;/strong&gt; If memories are files, you can grep them. If they are vector embeddings, you need to query by similarity and hope you got them all.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Delete those memories.&lt;/strong&gt; If memories are files, you delete the files. If they are vectors, you delete the vectors — but the source text may exist in logs, backups, or training data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prove erasure.&lt;/strong&gt; If memories are files under version control, the git diff is your audit trail. If they are vectors, you have no proof — you can show the delete API call succeeded, but you cannot prove no copy persists.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is why format matters more than license. An Apache-2.0 memory engine that stores memories in opaque vectors is open-source but not open-format. You can read the engine's source code, but you cannot read your own memories. PLUR's engram format (Apache-2.0, &lt;a href="https://plur.ai/spec.html" rel="noopener noreferrer"&gt;plur.ai/spec.html&lt;/a&gt;) is both: the engine is open-source and the memory format is human-readable YAML. You can read the code AND read the memories.&lt;/p&gt;

&lt;h2&gt;
  
  
  The MCP dimension
&lt;/h2&gt;

&lt;p&gt;The Model Context Protocol (&lt;a href="https://modelcontextprotocol.io/specification/2025-11-25" rel="noopener noreferrer"&gt;specification 2025-11-25&lt;/a&gt;) — an open protocol from Anthropic — standardizes how LLM applications connect to external tools. An MCP memory server exposes tools like &lt;code&gt;recall&lt;/code&gt;, &lt;code&gt;learn&lt;/code&gt;, &lt;code&gt;forget&lt;/code&gt;, and &lt;code&gt;feedback&lt;/code&gt; that any MCP-compatible agent can call. This means the same memory server works across Claude Code, Hermes, OpenClaw, Cursor, and any other MCP-compatible runtime.&lt;/p&gt;

&lt;p&gt;But MCP defines the transport, not the format. Two MCP memory servers can be fully protocol-compatible and store memory in completely different ways — one as a vector embedding, one as a YAML file. If auditability is your requirement, the format is the differentiator, not the protocol.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to choose
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;If you need…&lt;/th&gt;
&lt;th&gt;Start with&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Zero-setup memory for one agent (Claude Code)&lt;/td&gt;
&lt;td&gt;CLAUDE.md + auto memory&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Structured memory with a simple API, no infra&lt;/td&gt;
&lt;td&gt;Mem0 (cloud)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Self-managing stateful agent with memory tiers&lt;/td&gt;
&lt;td&gt;Letta&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Time-aware facts with sub-200ms retrieval&lt;/td&gt;
&lt;td&gt;Zep&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Memory you can inspect, correct, version-control, and prove erasure&lt;/td&gt;
&lt;td&gt;PLUR (YAML engrams via MCP)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The underlying question is: &lt;strong&gt;what do you need to own?&lt;/strong&gt; If you need to audit what your agent knows — for debugging, for compliance, for trust — you need memory in a format you can read, edit, and diff. That means files, not vectors. The license is secondary; the format is primary.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Can I see what my AI agent remembers about me?&lt;/strong&gt; It depends on the tool. ChatGPT shows memories in settings. Claude Code has CLAUDE.md (readable) and auto memory (less transparent). Memory engines like Mem0, Letta, and Zep expose memories through APIs. PLUR stores memories as YAML files you can open in any text editor.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How do I delete a specific memory from my AI agent?&lt;/strong&gt; Each tool handles this differently. Mem0, Letta, and Zep offer delete APIs. ChatGPT lets you delete memories through the settings UI. PLUR lets you delete the YAML entry directly — and if the memory store is under git, the commit diff is your proof of erasure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I edit what my AI agent remembers without retraining?&lt;/strong&gt; Yes, if the memory is stored externally in an editable format. Fine-tuning bakes facts into model weights you cannot read or edit. External memory — whether in a vector store, knowledge graph, or YAML file — can be updated without retraining. But only file-based memory (CLAUDE.md, PLUR engrams) lets you edit memories in a text editor without an API call.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is agent memory subject to GDPR?&lt;/strong&gt; If the memory contains personal data about an identifiable individual, yes. GDPR Article 17 gives individuals the right to request erasure of their personal data. Agent memory systems that store personal data need a mechanism to find, delete, and prove erasure of that data. File-based memory makes this straightforward; vector-based memory makes it difficult to prove.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is the difference between open-source and open-format memory?&lt;/strong&gt; Open-source means the engine's code is public (e.g., Apache-2.0). Open-format means the memory data itself is in a human-readable, standardized format (e.g., YAML). A project can be open-source but store memories in opaque vector embeddings — you can read the code but not your own memories. PLUR is both: the engine is Apache-2.0 and the memory format is human-readable YAML.&lt;/p&gt;




</description>
      <category>ai</category>
      <category>opensource</category>
      <category>memory</category>
    </item>
    <item>
      <title>Are AI Agent Engrams Open Source or Proprietary?</title>
      <dc:creator>gregor</dc:creator>
      <pubDate>Sun, 19 Jul 2026 21:22:44 +0000</pubDate>
      <link>https://dev.to/plur9/are-ai-agent-engrams-open-source-or-proprietary-58kh</link>
      <guid>https://dev.to/plur9/are-ai-agent-engrams-open-source-or-proprietary-58kh</guid>
      <description>&lt;h1&gt;
  
  
  Are AI Agent Engrams Open Source or Proprietary?
&lt;/h1&gt;

&lt;p&gt;The short answer: &lt;strong&gt;both, and the split matters.&lt;/strong&gt; The major agent-memory engines — Mem0, Letta, Cognee, Graphiti, LangMem, and PLUR — are all Apache-2.0 or MIT licensed on GitHub. But "open source" and "open format" are not the same thing. A project can ship under Apache-2.0 while storing your memories in opaque vector blobs you cannot read, edit, or export. The real question is not whether the &lt;em&gt;software&lt;/em&gt; is open — it usually is — but whether your &lt;em&gt;memories&lt;/em&gt; are.&lt;/p&gt;

&lt;p&gt;This distinction separates the field into three tiers: fully open (software + format + data you own), open-core (software is open, but the hosted memory is not portable), and fully proprietary (memory baked into a model provider's infrastructure, no export at all).&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this question exists
&lt;/h2&gt;

&lt;p&gt;AI agents face a brutal constraint: they forget. Every new session starts blank. Every context window overflows. The fix is persistent memory — but persistent where, and in whose format?&lt;/p&gt;

&lt;p&gt;The term "engram" comes from neuroscience. Richard Semon coined it in 1904 for the physical trace a memory leaves in biological tissue (Semon, 1904; cited in Wikipedia, "Engram (neuropsychology)"). Applied to AI agents, an engram is one discrete thing an agent has learned — a correction, a preference, a procedure — stored so it survives across sessions.&lt;/p&gt;

&lt;p&gt;The question "open source or proprietary?" asks two things at once:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Is the &lt;em&gt;engine&lt;/em&gt; that stores and retrieves engrams open source?&lt;/li&gt;
&lt;li&gt;Is the &lt;em&gt;format&lt;/em&gt; those engrams are stored in open — readable, editable, portable?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Conflating the two is how vendors end up with open-source repos and locked-in data.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tier 1: Fully open — software, format, and data
&lt;/h2&gt;

&lt;p&gt;These projects ship under permissive licenses (Apache-2.0 or MIT) AND store memory in a format you can inspect, edit, and export.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Project&lt;/th&gt;
&lt;th&gt;License&lt;/th&gt;
&lt;th&gt;Stars (Jul 2026)&lt;/th&gt;
&lt;th&gt;Memory format&lt;/th&gt;
&lt;th&gt;Data ownership&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;PLUR&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Apache-2.0&lt;/td&gt;
&lt;td&gt;~215&lt;/td&gt;
&lt;td&gt;Human-readable YAML engrams&lt;/td&gt;
&lt;td&gt;Yours — plain files&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;PLUR stores each engram as a plain-text YAML entry — an &lt;code&gt;id&lt;/code&gt;, a &lt;code&gt;statement&lt;/code&gt;, a &lt;code&gt;type&lt;/code&gt;, a &lt;code&gt;domain&lt;/code&gt;, a &lt;code&gt;scope&lt;/code&gt;, a &lt;code&gt;confidence&lt;/code&gt;, and &lt;code&gt;provenance&lt;/code&gt; — in a file you can open in any editor, put under version control, and carry between machines. The format is published as an open specification, the Engram Specification (plur.ai/spec.html, Apache-2.0), and the implementation is Apache-2.0 on GitHub (github.com/plur-ai/plur).&lt;/p&gt;

&lt;p&gt;The tier is small but growing. The "engram" name itself is spreading fast: GitHub now hosts a dozen-plus young projects named engram, most of them early-stage local-first memory experiments. That crowding is the signal — "engram" is becoming the default word for a unit of agent memory. It is also why a published open specification matters: without one, every project that adopts the term defines it differently, and the word stops meaning anything portable.&lt;/p&gt;

&lt;p&gt;The common thread of Tier 1: you can read the memory, you can fix it, and you can prove you deleted it. That is only possible when the format is open, not just the engine.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tier 2: Open-core — software is open, hosted memory is not
&lt;/h2&gt;

&lt;p&gt;These projects have open-source engines on GitHub under permissive licenses, but their hosted/cloud products store memory in formats that are not easily portable, and the commercial tier is where revenue lives.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Project&lt;/th&gt;
&lt;th&gt;License&lt;/th&gt;
&lt;th&gt;Stars (Jul 2026)&lt;/th&gt;
&lt;th&gt;Open format?&lt;/th&gt;
&lt;th&gt;Hosted tier&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Mem0&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Apache-2.0&lt;/td&gt;
&lt;td&gt;~60,500&lt;/td&gt;
&lt;td&gt;No — vector + graph store&lt;/td&gt;
&lt;td&gt;$19–$249/mo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Letta&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Apache-2.0&lt;/td&gt;
&lt;td&gt;~23,700&lt;/td&gt;
&lt;td&gt;Partial — agent state, not portable engrams&lt;/td&gt;
&lt;td&gt;$20/mo (Pro)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cognee&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Apache-2.0&lt;/td&gt;
&lt;td&gt;~27,400&lt;/td&gt;
&lt;td&gt;No — knowledge graph internals&lt;/td&gt;
&lt;td&gt;Self-host or cloud&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Graphiti&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Apache-2.0&lt;/td&gt;
&lt;td&gt;~28,500&lt;/td&gt;
&lt;td&gt;No — temporal knowledge graph&lt;/td&gt;
&lt;td&gt;Via Zep cloud&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;LangMem&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;MIT&lt;/td&gt;
&lt;td&gt;~1,500&lt;/td&gt;
&lt;td&gt;No — LangGraph storage layer&lt;/td&gt;
&lt;td&gt;Via LangSmith&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Mem0 is the clearest example. The repo (github.com/mem0ai/mem0) is Apache-2.0 with nearly 60,000 stars — you can self-host the engine. But Mem0's commercial product (mem0.ai) charges $19–$249/month for hosted memory with graph memory, audit logs, and on-prem deployment reserved for the Enterprise tier. The memory format under the hood is a vector store with entity linking — not a human-readable file you can diff.&lt;/p&gt;

&lt;p&gt;Letta (formerly MemGPT) is similarly split. The Letta SDK is Apache-2.0 on GitHub (github.com/letta-ai/letta, ~23,700 stars). The hosted "Constellation" platform — with managed state, remote environments, and an LLM gateway — requires an account. Free accounts support up to three agents with managed state; Pro is $20/month. Memory is stored as agent state (blocks of text managed by the agent), not as individual portable engrams you can export and edit.&lt;/p&gt;

&lt;p&gt;Graphiti (github.com/getzep/graphiti, ~28,500 stars) builds real-time knowledge graphs for agents under Apache-2.0, but its commercial path is through Zep's cloud platform.&lt;/p&gt;

&lt;p&gt;Cognee (github.com/topoteretes/cognee, ~27,400 stars) is an open-source AI memory platform using knowledge graphs, also Apache-2.0, with self-host or cloud options.&lt;/p&gt;

&lt;p&gt;The pattern: the engine is open, the data format is not. You can run the software, but the memories live in vector embeddings, knowledge graphs, or agent state blocks that are not designed to be read by humans or exported to a different system.&lt;/p&gt;

&lt;p&gt;This is not a criticism — open-core is a legitimate model. But it means "open source" answers the wrong question. The right question is: &lt;strong&gt;can I take my memories with me?&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Tier 3: Fully proprietary — memory baked into the model provider
&lt;/h2&gt;

&lt;p&gt;The third tier is memory that is neither open-source software nor an open format. It lives inside the model provider's infrastructure, and you cannot inspect, export, or port it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;OpenAI's ChatGPT memory&lt;/strong&gt; is the canonical example. When ChatGPT "remembers" facts about you across conversations, those memories are stored in OpenAI's infrastructure. There is no open-source engine, no documented format, no export API. You can toggle memory on or off, and you can view and delete individual memories in the UI — but you cannot extract them in a structured format, run them locally, or feed them to a different model.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Anthropic's Claude memory tool&lt;/strong&gt; takes a similar approach. The memory tool is a feature of the Claude platform — agents can store and retrieve context — but the storage format, the retrieval mechanism, and the data itself are proprietary. There is no GitHub repo, no format spec, no portability guarantee. (Note the distinction: Claude Code's CLAUDE.md and auto-memory files are a separate, file-based mechanism — plain markdown on your own disk — and do not belong in this tier.)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Google Gemini's context&lt;/strong&gt; operates the same way. Long-term context is managed inside Google's infrastructure with no documented open format.&lt;/p&gt;

&lt;p&gt;The risk here is not that these features are bad — they are convenient and often work well. The risk is &lt;strong&gt;vendor lock-in for your most personal data&lt;/strong&gt;. When your agent's accumulated knowledge about your preferences, projects, and workflow lives inside a single provider's black box, switching costs become prohibitive. You cannot audit what it knows. You cannot prove what it forgot. You cannot carry it elsewhere.&lt;/p&gt;

&lt;h2&gt;
  
  
  The real split: open engine vs open format
&lt;/h2&gt;

&lt;p&gt;Three tiers, but the meaningful boundary is between Tier 1 and everything else:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Property&lt;/th&gt;
&lt;th&gt;Tier 1 (Fully open)&lt;/th&gt;
&lt;th&gt;Tier 2 (Open-core)&lt;/th&gt;
&lt;th&gt;Tier 3 (Proprietary)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Engine open source?&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Memory format documented?&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Data human-readable?&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No (vectors/graphs)&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Can edit individual memories?&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Via API only&lt;/td&gt;
&lt;td&gt;Via UI only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Can prove erasure?&lt;/td&gt;
&lt;td&gt;Yes (delete the entry; git diff as proof)&lt;/td&gt;
&lt;td&gt;Best-effort&lt;/td&gt;
&lt;td&gt;Best-effort&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Can export to another system?&lt;/td&gt;
&lt;td&gt;Yes (it's a file)&lt;/td&gt;
&lt;td&gt;No standard export&lt;/td&gt;
&lt;td&gt;No export&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Portable across model providers?&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The agents that need open memory most are the ones operating across multiple tools, models, and providers. An agent that uses Claude for analysis, GPT-4 for coding, and a local model for privacy needs a memory layer that is none of those — it needs a format that belongs to the operator, not the model.&lt;/p&gt;

&lt;p&gt;This is where the Model Context Protocol (MCP) enters. MCP (specification version 2025-11-25, modelcontextprotocol.io) is an open protocol — JSON-RPC 2.0 based, inspired by the Language Server Protocol — that standardizes how LLM applications connect to external data sources and tools. It is transport-level: it says how an agent talks to a memory server, not what format the memories are in. But it makes format-level openness newly relevant, because any MCP-compatible agent can now connect to any MCP-compatible memory server. The format question — can I read, edit, and port my memories? — becomes the differentiator.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to evaluate whether your agent's memory is open
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Is the engine on GitHub under a permissive license?&lt;/strong&gt; (Apache-2.0, MIT — not BSL, not "source-available")&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Is the memory format documented?&lt;/strong&gt; Can you read the spec without signing up?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Can you open a memory file in a text editor and understand it?&lt;/strong&gt; Or is it an opaque vector?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Can you delete one memory and prove it is gone?&lt;/strong&gt; GDPR-grade erasure, not best-effort.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Can you export all memories and import them into a different system?&lt;/strong&gt; True portability.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Does the memory work across model providers?&lt;/strong&gt; Or is it locked to one vendor's infrastructure?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If the answer to all six is yes, you are in Tier 1. If the engine is open but the format is not (questions 3–6 fail), you are in Tier 2. If there is no open engine at all, you are in Tier 3.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Are AI agent engrams open source?&lt;/strong&gt; The major engines are — Mem0, Letta, Cognee, Graphiti, LangMem, and PLUR all ship under Apache-2.0 or MIT. But the memory &lt;em&gt;format&lt;/em&gt; is often not open. Very few projects store memory in a human-readable, documented, portable format you can inspect and export — PLUR publishes its engram format as an open Apache-2.0 specification (plur.ai/spec.html) precisely so that "engram" stays an open, implementable thing rather than a vendor label.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is the difference between open source and open format for AI memory?&lt;/strong&gt; Open source means the software engine is on GitHub under a permissive license. Open format means the memory data itself is stored in a documented, human-readable structure you can read, edit, and carry between systems. A project can be open source without being open format — most are.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I export my agent's memory from a proprietary system?&lt;/strong&gt; Generally, no. OpenAI's ChatGPT memory, Anthropic's Claude memory tool, and Google Gemini's context all store memory inside the provider's infrastructure with no structured export. You can view and delete memories in the UI, but you cannot extract them in a portable format.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What license is PLUR's engram format under?&lt;/strong&gt; Apache-2.0. The engram format is documented in the Engram Specification at plur.ai/spec.html and the implementation is at github.com/plur-ai/plur. Each engram is a YAML entry you can open, edit, and version-control.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is MCP an open standard for agent memory?&lt;/strong&gt; MCP is an open transport protocol (JSON-RPC 2.0, specification 2025-11-25) that standardizes how agents connect to external tools and data sources — including memory servers. It does not define a memory format. But it makes format-level openness more valuable, because any MCP-compatible agent can connect to any MCP-compatible memory server regardless of vendor.&lt;/p&gt;




</description>
      <category>ai</category>
      <category>opensource</category>
      <category>memory</category>
    </item>
    <item>
      <title>Is There an MCP Server for AI Agent Memory?</title>
      <dc:creator>gregor</dc:creator>
      <pubDate>Tue, 14 Jul 2026 11:46:01 +0000</pubDate>
      <link>https://dev.to/plur9/is-there-an-mcp-server-for-ai-agent-memory-4kmd</link>
      <guid>https://dev.to/plur9/is-there-an-mcp-server-for-ai-agent-memory-4kmd</guid>
      <description>&lt;h1&gt;
  
  
  Is There an MCP Server for AI Agent Memory?
&lt;/h1&gt;

&lt;p&gt;Yes. The Model Context Protocol (MCP) — an open protocol published by Anthropic in November 2024, specification version 2025-11-25 — standardizes how LLM applications connect to external tools and data sources, and several MCP servers exist specifically for agent memory. The official MCP servers repository includes a knowledge graph-based memory server (&lt;code&gt;@modelcontextprotocol/server-memory&lt;/code&gt;), and third-party memory servers — including PLUR, Zep, Mem0's OpenMemory, and community projects — expose persistent agent memory through the same protocol. The practical question is not whether an MCP memory server exists, but which one fits your needs, because "MCP-compatible" tells you the transport, not the memory format.&lt;/p&gt;

&lt;h2&gt;
  
  
  What MCP is (and what it is not)
&lt;/h2&gt;

&lt;p&gt;MCP is an open protocol built on JSON-RPC 2.0, inspired by the Language Server Protocol (LSP). Just as LSP standardized how editors connect to language servers (so any editor works with any language server), MCP standardizes how AI agents connect to external tools and data sources (so any agent works with any tool server). The protocol defines three things a server can offer: &lt;strong&gt;Resources&lt;/strong&gt; (context and data), &lt;strong&gt;Prompts&lt;/strong&gt; (templated messages), and &lt;strong&gt;Tools&lt;/strong&gt; (functions the AI can execute). A memory MCP server typically exposes tools — &lt;code&gt;store&lt;/code&gt;, &lt;code&gt;recall&lt;/code&gt;, &lt;code&gt;search&lt;/code&gt;, &lt;code&gt;learn&lt;/code&gt;, &lt;code&gt;forget&lt;/code&gt; — that the agent calls to manage what it remembers (modelcontextprotocol.io/specification/2025-11-25).&lt;/p&gt;

&lt;p&gt;What MCP does &lt;strong&gt;not&lt;/strong&gt; define is the memory format. It says how an agent talks to a memory server, not what the memories look like inside. This means two MCP memory servers can be fully protocol-compatible and store memory in completely different ways — one as a vector embedding, one as a human-readable YAML file. The protocol is open; the format is the differentiator.&lt;/p&gt;

&lt;h2&gt;
  
  
  Memory MCP servers available today
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Official MCP memory server (knowledge graph)
&lt;/h3&gt;

&lt;p&gt;The MCP servers repository (github.com/modelcontextprotocol/servers) ships a reference memory server: &lt;code&gt;@modelcontextprotocol/server-memory&lt;/code&gt;. It is a knowledge graph-based persistent memory system. You run it locally with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx &lt;span class="nt"&gt;-y&lt;/span&gt; @modelcontextprotocol/server-memory
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And configure it in your MCP client (Claude Desktop, Cursor, etc.) as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"memory"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"-y"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"@modelcontextprotocol/server-memory"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It stores entities, observations, and relations as a local knowledge graph. &lt;strong&gt;Good for&lt;/strong&gt;: lightweight, local-only memory for a single agent. &lt;strong&gt;Limitation&lt;/strong&gt;: the knowledge graph format is not human-readable YAML — you inspect it through the tool API, not a text editor — and it is designed for single-agent, single-machine use, not cross-runtime persistence.&lt;/p&gt;

&lt;h3&gt;
  
  
  PLUR (open engram format via MCP)
&lt;/h3&gt;

&lt;p&gt;PLUR (Apache-2.0, github.com/plur-ai/plur) ships an MCP server that exposes its engram engine. Each memory — an "engram" — is a human-readable YAML entry with an id, statement, type, domain, scope, confidence, and provenance. The MCP tools include &lt;code&gt;plur_learn&lt;/code&gt; (create an engram), &lt;code&gt;plur_recall&lt;/code&gt; (search by topic), &lt;code&gt;plur_inject&lt;/code&gt; (get relevant engrams for a task), &lt;code&gt;plur_forget&lt;/code&gt; (delete by id or query), and &lt;code&gt;plur_feedback&lt;/code&gt; (rate relevance to improve injection quality).&lt;/p&gt;

&lt;p&gt;Because it is MCP-compatible, the same memory follows an agent across Claude Code, Hermes, OpenClaw, Cursor, and any other MCP-compatible runtime. And because the format is plain-text YAML, you can open any engram in a text editor, put the memory store under version control, correct a single fact mid-conversation, and prove erasure by removing the entry — with the store under git, the diff is your audit trail.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Good for&lt;/strong&gt;: agents that need portable, inspectable, correctable memory across multiple tools and model providers.&lt;br&gt;
&lt;strong&gt;Limitation&lt;/strong&gt;: newer project, less production-tested than the reference server at scale.&lt;/p&gt;

&lt;h3&gt;
  
  
  OpenMemory (Mem0's local MCP memory server)
&lt;/h3&gt;

&lt;p&gt;OpenMemory (mem0.ai/openmemory) is Mem0's official MCP memory server: a private, local memory layer that runs on your own machine and exposes standardized memory tools — &lt;code&gt;add_memories&lt;/code&gt;, &lt;code&gt;search_memory&lt;/code&gt;, &lt;code&gt;list_memories&lt;/code&gt;, &lt;code&gt;delete_all_memories&lt;/code&gt; — to any MCP-compatible client. Memories stay local; the same store is shared across every MCP client you connect to it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Good for&lt;/strong&gt;: sharing one local memory store across multiple MCP clients with Mem0's simple CRUD model.&lt;br&gt;
&lt;strong&gt;Limitation&lt;/strong&gt;: storage is vector-based (a local database, inspected through the built-in UI or API) — not human-readable files you can open in a text editor or diff in git.&lt;/p&gt;

&lt;h3&gt;
  
  
  Zep (enterprise memory via MCP)
&lt;/h3&gt;

&lt;p&gt;Zep (docs.getzep.com) offers an MCP server for connecting coding agents to its agent memory platform. Zep builds a temporal knowledge graph from any input — chat, business data, documents — and serves prompt-ready context with sub-200ms retrieval. The MCP server exposes Zep's memory tools to any MCP-compatible agent.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Good for&lt;/strong&gt;: production agents that need time-aware, high-throughput memory at enterprise scale.&lt;br&gt;
&lt;strong&gt;Limitation&lt;/strong&gt;: Zep's memory format is a knowledge graph and Context Lake — not a human-readable file you can diff or version-control.&lt;/p&gt;

&lt;h3&gt;
  
  
  Community MCP memory servers
&lt;/h3&gt;

&lt;p&gt;The awesome-mcp-servers list (github.com/punkpeye/awesome-mcp-servers) catalogs dozens of community MCP servers, several with memory capabilities:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Forage&lt;/strong&gt; (isaac-levine/forage) — Self-improving tool discovery that persists tool knowledge across sessions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unclick&lt;/strong&gt; (malamut1973/unclick) — 450+ callable endpoints with persistent cross-session memory. &lt;code&gt;npx @unclick/mcp-server&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Memory Vault&lt;/strong&gt; (scotia1973-bot/api-hub) — 49 MCP tools with persistent agent memory (store/recall/search). &lt;code&gt;pip install gadgethumans-api-hub-mcp&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cortex&lt;/strong&gt; (gzoonet/cortex) — Local-first knowledge graph that extracts entities and relationships via LLMs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;pg-mnemosyne&lt;/strong&gt; (Janadasroor/pg-mnemosyne-mcp) — PostgreSQL-backed persistent super memory and multi-agent coordination hub.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These range from single-purpose utilities to full memory systems. The ecosystem is young and moving fast — verify current status before adopting.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to choose an MCP memory server
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;If you need…&lt;/th&gt;
&lt;th&gt;Start with&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;A free, local, single-agent reference implementation&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@modelcontextprotocol/server-memory&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;One local vector-based memory store shared across MCP clients&lt;/td&gt;
&lt;td&gt;OpenMemory (Mem0)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Enterprise-scale temporal memory with sub-200ms retrieval&lt;/td&gt;
&lt;td&gt;Zep's MCP server&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Human-readable, portable, correctable memory across runtimes&lt;/td&gt;
&lt;td&gt;PLUR's MCP server&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Multi-agent shared memory in PostgreSQL&lt;/td&gt;
&lt;td&gt;pg-mnemosyne&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Quick utility memory without infra&lt;/td&gt;
&lt;td&gt;Unclick or Memory Vault&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The underlying decision is the same one that runs through all of agent memory: &lt;strong&gt;what do you need to own?&lt;/strong&gt; If you need memory that is portable across agent runtimes, inspectable in a text editor, correctable mid-conversation, and provably erasable — the format matters more than the transport. MCP makes the transport open; the format is the differentiator.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Is there an MCP server for AI agent memory?&lt;/strong&gt; Yes. The official MCP servers repository includes &lt;code&gt;@modelcontextprotocol/server-memory&lt;/code&gt; (a knowledge graph memory server). Third-party memory servers — PLUR, Zep, Mem0's OpenMemory, and several community projects — also expose agent memory through MCP. Any MCP-compatible agent (Claude Code, Cursor, Hermes, OpenClaw) can connect to any of them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is the MCP memory server?&lt;/strong&gt; The reference implementation is &lt;code&gt;@modelcontextprotocol/server-memory&lt;/code&gt;, a knowledge graph-based persistent memory system. Run it with &lt;code&gt;npx -y @modelcontextprotocol/server-memory&lt;/code&gt; and configure it in your MCP client. It stores entities, observations, and relations as a local knowledge graph.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does MCP define a memory format?&lt;/strong&gt; No. MCP defines the transport (JSON-RPC 2.0) — how an agent talks to a memory server — but not what the memories look like inside. Two MCP memory servers can be fully protocol-compatible and store memory in completely different formats (vector embeddings vs human-readable YAML, for example). The format is the differentiator.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I use MCP memory with Claude Code?&lt;/strong&gt; Yes. Claude Code supports MCP servers. Add a memory server to your MCP configuration and Claude Code can call its tools — &lt;code&gt;store&lt;/code&gt;, &lt;code&gt;recall&lt;/code&gt;, &lt;code&gt;search&lt;/code&gt; — to persist and retrieve memory across sessions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is the difference between MCP memory and CLAUDE.md?&lt;/strong&gt; CLAUDE.md is a static file of instructions you write, loaded at the start of every Claude Code session. An MCP memory server is a dynamic system the agent can call during a conversation — it stores, searches, updates, and forgets memory items programmatically. CLAUDE.md is the simplest form of persistent context; an MCP memory server is for structured, accumulating, queryable memory.&lt;/p&gt;




</description>
      <category>ai</category>
      <category>opensource</category>
      <category>memory</category>
    </item>
    <item>
      <title>Is Fine-Tuning or Memory Better for Teaching an AI New Facts?</title>
      <dc:creator>gregor</dc:creator>
      <pubDate>Mon, 13 Jul 2026 15:18:58 +0000</pubDate>
      <link>https://dev.to/plur9/is-fine-tuning-or-memory-better-for-teaching-an-ai-new-facts-4m78</link>
      <guid>https://dev.to/plur9/is-fine-tuning-or-memory-better-for-teaching-an-ai-new-facts-4m78</guid>
      <description>&lt;h1&gt;
  
  
  Is Fine-Tuning or Memory Better for Teaching an AI New Facts?
&lt;/h1&gt;

&lt;p&gt;Fine-tuning bakes new facts into a model's weights through gradient updates; agent memory stores them in an external layer the model reads at runtime. For teaching an AI agent new facts — user preferences, project decisions, domain knowledge that changes — external memory wins on four dimensions: it is cheaper to update (seconds vs hours of GPU compute), inspectable (you can see what the model "knows"), deletable (you can remove a fact without retraining), and portable (memories transfer across models; fine-tuned weights do not). Fine-tuning excels at changing &lt;em&gt;behavior&lt;/em&gt; — tone, format, style — but for storing &lt;em&gt;facts&lt;/em&gt; an agent must recall accurately and update on demand, a memory layer is the right tool. The hidden cost of fine-tuning for factual knowledge is what we call the &lt;strong&gt;parallel learning tax&lt;/strong&gt;: every new fact requires retraining the entire model, and every update to one fact risks degrading others through catastrophic forgetting.&lt;/p&gt;

&lt;h2&gt;
  
  
  The pain: why fine-tuning for facts is expensive
&lt;/h2&gt;

&lt;p&gt;You taught your AI agent a new fact: the database moved from PostgreSQL to MySQL. Three problems follow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Problem 1: Retraining cost.&lt;/strong&gt; Fine-tuning is a compute-intensive process. You must prepare training data, run gradient descent on GPU clusters, evaluate the result, and deploy a new model checkpoint. For a single fact, that is absurd. For facts that change weekly — API endpoints, user preferences, project decisions — it is unsustainable. OpenAI's own documentation recommends prompt engineering and retrieval (RAG) as the first approaches for adding knowledge, reserving fine-tuning for cases where you need to customize model &lt;em&gt;behavior&lt;/em&gt; — tone, format, response structure — not for injecting facts (&lt;a href="https://developers.openai.com/api/docs/guides/model-optimization" rel="noopener noreferrer"&gt;developers.openai.com/api/docs/guides/model-optimization&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Problem 2: The unlearning problem.&lt;/strong&gt; When a fact changes or must be deleted — a user requests erasure under GDPR Article 17, or an API endpoint is deprecated — removing it from fine-tuned weights is notoriously difficult. Bourtoule et al. (&lt;a href="https://arxiv.org/abs/1912.03817" rel="noopener noreferrer"&gt;arXiv:1912.03817&lt;/a&gt;) formalized this as the "machine unlearning" problem: once a data point is baked into model weights through training, it cannot be selectively removed without either retraining from scratch or using specialized training-time techniques (like SISA training) that must be planned &lt;em&gt;before&lt;/em&gt; fine-tuning. You cannot look inside the weights, find the fact, and delete it. With an external memory layer, deletion is a single operation: remove the memory item from the store.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Problem 3: Vendor lock-in.&lt;/strong&gt; Facts baked into GPT-4's fine-tuned weights stay in GPT-4. They do not transfer to Claude, to Llama, to Gemini. When the model is deprecated or you switch providers, the knowledge is lost — you must re-fine-tune the new model from scratch. External memory is model-agnostic: the same memory store works with any LLM, because the knowledge lives outside the model and is injected into the prompt at session start.&lt;/p&gt;

&lt;h2&gt;
  
  
  What fine-tuning is good at
&lt;/h2&gt;

&lt;p&gt;Fine-tuning is not wrong — it is a tool for a different job. The distinction is between &lt;strong&gt;behavior&lt;/strong&gt; and &lt;strong&gt;knowledge&lt;/strong&gt;:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Fine-tuning is for…&lt;/th&gt;
&lt;th&gt;Memory is for…&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Changing response tone (more formal, more concise)&lt;/td&gt;
&lt;td&gt;Storing user preferences (prefers TypeScript, uses Vitest)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Learning output format (JSON schema, markdown structure)&lt;/td&gt;
&lt;td&gt;Remembering project decisions (we chose PostgreSQL)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Acquiring a skill (writing SQL, generating tests in a framework)&lt;/td&gt;
&lt;td&gt;Tracking facts that change (API endpoint moved, schema updated)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Style transfer (matching a brand voice)&lt;/td&gt;
&lt;td&gt;Correcting mistakes (the agent was wrong about X)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Behavioral patterns that should be consistent across all interactions&lt;/td&gt;
&lt;td&gt;Episodic knowledge that accumulates over sessions&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Fine-tuning modifies the model's &lt;em&gt;parameters&lt;/em&gt; — how it generates. Memory modifies the model's &lt;em&gt;context&lt;/em&gt; — what it knows right now. These are complementary layers, not alternatives. A well-designed agent uses fine-tuning for stable behavioral patterns and memory for evolving factual knowledge.&lt;/p&gt;

&lt;h2&gt;
  
  
  The parallel learning tax
&lt;/h2&gt;

&lt;p&gt;Every time you teach a fine-tuned model a new fact, you pay a tax. The model must be retrained — or at least incrementally fine-tuned — on the new data. But gradient-based learning does not write facts cleanly into isolated slots. New training data interferes with existing weights, and the model may degrade on previously learned tasks. This is called &lt;strong&gt;catastrophic forgetting&lt;/strong&gt; — the model learns the new fact but partially forgets old ones.&lt;/p&gt;

&lt;p&gt;The parallel learning tax is the total cost of this cycle:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Compute cost&lt;/strong&gt; — GPU hours for every fine-tuning run.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Evaluation cost&lt;/strong&gt; — you must test the model after each update to verify it did not regress on existing capabilities.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Latency cost&lt;/strong&gt; — the fact is not available until the fine-tuning run completes and the new checkpoint is deployed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Forgetting cost&lt;/strong&gt; — the risk that the new fine-tuning degraded previously learned knowledge, requiring further correction runs.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;With an external memory layer, the tax is zero. You write the fact to the store (milliseconds, no GPU). It is available immediately at the next session. It does not interfere with existing memories. And if it is wrong or outdated, you delete it — one operation, no retraining. (Full definition: &lt;a href="https://plur.ai/parallel-learning-tax.html" rel="noopener noreferrer"&gt;plur.ai/parallel-learning-tax&lt;/a&gt;.)&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Property&lt;/th&gt;
&lt;th&gt;Fine-tuning&lt;/th&gt;
&lt;th&gt;Agent memory&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Time to teach a new fact&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Hours (data prep + GPU training + eval)&lt;/td&gt;
&lt;td&gt;Milliseconds (write to store)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cost per fact&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;GPU compute per run&lt;/td&gt;
&lt;td&gt;Storage cost (negligible)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Inspection&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Opaque — cannot see what the model "knows"&lt;/td&gt;
&lt;td&gt;Transparent — read the memory store&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Deletion&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Machine unlearning (notoriously difficult; &lt;a href="https://arxiv.org/abs/1912.03817" rel="noopener noreferrer"&gt;arXiv:1912.03817&lt;/a&gt;)&lt;/td&gt;
&lt;td&gt;Delete the memory item (one operation)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Portability&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Locked to the fine-tuned model&lt;/td&gt;
&lt;td&gt;Model-agnostic (any LLM reads the same store)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Update risk&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Catastrophic forgetting (new data degrades old)&lt;/td&gt;
&lt;td&gt;No interference (memories are independent)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;GDPR compliance&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Requires retraining from scratch or SISA training&lt;/td&gt;
&lt;td&gt;Delete the memory item, done&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Latency to availability&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Hours (deploy new checkpoint)&lt;/td&gt;
&lt;td&gt;Immediate (available next session)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  What the research says
&lt;/h2&gt;

&lt;p&gt;Zhang et al. (&lt;a href="https://arxiv.org/abs/2404.13501" rel="noopener noreferrer"&gt;arXiv:2404.13501&lt;/a&gt;) frame the distinction clearly: agent memory is what enables "self-evolving capability" — the ability of agents to improve through experience rather than retraining. Their survey organizes the field around memory as a &lt;em&gt;separate module&lt;/em&gt; from the model, not as modifications to model weights.&lt;/p&gt;

&lt;p&gt;Packer et al. (&lt;a href="https://arxiv.org/abs/2310.08560" rel="noopener noreferrer"&gt;arXiv:2310.08560&lt;/a&gt;) demonstrated this empirically with MemGPT: by managing memory externally in tiers (core memory in the context window, archival memory retrieved on demand), agents dramatically outperform models that try to hold everything in the context window or rely on fine-tuning. The OS-inspired insight: agents need &lt;em&gt;managed&lt;/em&gt; memory, not &lt;em&gt;more&lt;/em&gt; parameters.&lt;/p&gt;

&lt;p&gt;Park et al. (&lt;a href="https://arxiv.org/abs/2304.03442" rel="noopener noreferrer"&gt;arXiv:2304.03442&lt;/a&gt;) showed that generative agents — which store experiences as natural-language memory records, synthesize them into reflections, and retrieve them dynamically — produce more believable behavior than agents relying on parametric knowledge alone. The memory architecture, not the model weights, is what made the agents feel like they had continuity and personality.&lt;/p&gt;

&lt;h2&gt;
  
  
  When fine-tuning is the right answer
&lt;/h2&gt;

&lt;p&gt;Fine-tuning is the right tool when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You need to change the model's &lt;strong&gt;behavior&lt;/strong&gt; across all interactions (tone, format, style).&lt;/li&gt;
&lt;li&gt;You have a &lt;strong&gt;stable&lt;/strong&gt; dataset that does not change frequently.&lt;/li&gt;
&lt;li&gt;You need &lt;strong&gt;latency-free&lt;/strong&gt; behavioral changes at inference time (fine-tuning eliminates the need to include style instructions in every prompt).&lt;/li&gt;
&lt;li&gt;You are working with a model you will use for a long time, so the lock-in cost is acceptable.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Fine-tuning is the wrong tool when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You need to teach &lt;strong&gt;facts&lt;/strong&gt; that change (API endpoints, user preferences, project decisions).&lt;/li&gt;
&lt;li&gt;You need to &lt;strong&gt;inspect&lt;/strong&gt; what the model knows and &lt;strong&gt;correct&lt;/strong&gt; individual facts.&lt;/li&gt;
&lt;li&gt;You need to &lt;strong&gt;delete&lt;/strong&gt; specific knowledge (GDPR right to erasure, compliance, stale information).&lt;/li&gt;
&lt;li&gt;You need knowledge to &lt;strong&gt;transfer&lt;/strong&gt; across models or providers.&lt;/li&gt;
&lt;li&gt;Facts need to be &lt;strong&gt;available immediately&lt;/strong&gt; (not after a training run).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The landscape: memory layers vs fine-tuning
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Approach&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;th&gt;Cost per fact update&lt;/th&gt;
&lt;th&gt;Inspectable?&lt;/th&gt;
&lt;th&gt;Deletable?&lt;/th&gt;
&lt;th&gt;Portable?&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Fine-tuning&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Bakes facts into model weights&lt;/td&gt;
&lt;td&gt;GPU hours&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No (unlearning)&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;RAG&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Retrieves from a fixed document corpus&lt;/td&gt;
&lt;td&gt;Add document to index&lt;/td&gt;
&lt;td&gt;Yes (documents)&lt;/td&gt;
&lt;td&gt;Yes (remove document)&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;Mem0&lt;/strong&gt; (Apache-2.0, ~60K stars)&lt;/td&gt;
&lt;td&gt;External memory layer with CRUD API&lt;/td&gt;
&lt;td&gt;Milliseconds&lt;/td&gt;
&lt;td&gt;Yes (API)&lt;/td&gt;
&lt;td&gt;Yes (delete call)&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;Letta&lt;/strong&gt; (Apache-2.0, ~24K stars)&lt;/td&gt;
&lt;td&gt;Stateful agent OS with memory blocks&lt;/td&gt;
&lt;td&gt;Milliseconds&lt;/td&gt;
&lt;td&gt;Yes (block API)&lt;/td&gt;
&lt;td&gt;Yes (replace block)&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;Zep/Graphiti&lt;/strong&gt; (Apache-2.0, ~28K stars)&lt;/td&gt;
&lt;td&gt;Temporal knowledge graph&lt;/td&gt;
&lt;td&gt;Milliseconds&lt;/td&gt;
&lt;td&gt;Yes (graph query)&lt;/td&gt;
&lt;td&gt;Yes (remove edge/node)&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;PLUR&lt;/strong&gt; (Apache-2.0, ~215 stars)&lt;/td&gt;
&lt;td&gt;Local-first YAML engrams via MCP&lt;/td&gt;
&lt;td&gt;Milliseconds&lt;/td&gt;
&lt;td&gt;Yes (text editor)&lt;/td&gt;
&lt;td&gt;Yes (delete entry)&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;RAG and agent memory both avoid the parallel learning tax, but they serve different needs: RAG retrieves documents you already have; agent memory stores what the agent &lt;em&gt;learned&lt;/em&gt; from interactions. See &lt;a href="https://plur.ai/blog/rag-vs-agent-memory" rel="noopener noreferrer"&gt;RAG vs. Agent Memory&lt;/a&gt; for that comparison.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Is fine-tuning or memory better for teaching an AI new facts?&lt;/strong&gt; For factual knowledge that changes or must be inspectable, memory is better. Fine-tuning is designed for changing model behavior (tone, format, style), not for storing facts. Fine-tuning a fact into model weights requires GPU compute, cannot be inspected or selectively deleted, risks catastrophic forgetting, and locks the knowledge into one model. A memory layer writes facts in milliseconds, is fully inspectable, can delete individual facts, and works with any LLM.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is the parallel learning tax?&lt;/strong&gt; The parallel learning tax is the total cost of teaching a fine-tuned model a new fact: GPU compute for retraining, evaluation to verify no regression, latency while the training runs, and the risk of catastrophic forgetting — where new training data degrades previously learned knowledge. With an external memory layer, the tax is zero: facts are written in milliseconds with no GPU, no retraining, and no interference with existing memories.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can fine-tuning and memory be used together?&lt;/strong&gt; Yes, and they should be. Fine-tune for stable behavioral patterns (tone, format, response structure) and use memory for evolving factual knowledge (preferences, decisions, corrections). These are complementary layers: fine-tuning modifies how the model generates; memory modifies what the model knows right now.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is catastrophic forgetting?&lt;/strong&gt; Catastrophic forgetting is a phenomenon in machine learning where training a model on new data causes it to degrade on previously learned tasks. When you fine-tune a model with a new fact, the gradient updates modify the same weights that encode existing knowledge, potentially degrading it. External memory avoids this because each memory item is stored independently — adding a new fact does not modify existing memories.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How does GDPR right to erasure work with fine-tuned models?&lt;/strong&gt; Poorly. GDPR Article 17 gives individuals the right to have their data deleted. If personal data was baked into model weights through fine-tuning, removing it requires "machine unlearning" — a notoriously difficult problem (Bourtoule et al., &lt;a href="https://arxiv.org/abs/1912.03817" rel="noopener noreferrer"&gt;arXiv:1912.03817&lt;/a&gt;) that typically requires retraining the model from scratch or using specialized training-time techniques. With an external memory layer, deletion is a single operation: remove the memory item from the store. See &lt;a href="https://plur.ai/blog/editable-auditable-agent-memory" rel="noopener noreferrer"&gt;Editable and Auditable Agent Memory&lt;/a&gt; for details.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does fine-tuning make the model smarter?&lt;/strong&gt; No. Fine-tuning adjusts the model's weights to produce different output patterns — it does not add general intelligence. It can make the model better at a specific task (by training on task-relevant examples) or change its style, but it cannot add knowledge the model can inspect, correct, or selectively forget. For accumulating factual knowledge over time, a memory layer is the appropriate mechanism.&lt;/p&gt;




</description>
      <category>ai</category>
      <category>opensource</category>
      <category>memory</category>
      <category>agents</category>
    </item>
  </channel>
</rss>
