<?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: Edward Izgorodin</title>
    <description>The latest articles on DEV Community by Edward Izgorodin (@izgorodin).</description>
    <link>https://dev.to/izgorodin</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%2F3989589%2F15cb8fb8-9785-496a-be83-65c3061529d2.jpeg</url>
      <title>DEV Community: Edward Izgorodin</title>
      <link>https://dev.to/izgorodin</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/izgorodin"/>
    <language>en</language>
    <item>
      <title>Agent Memory: Everything It Remembers Has the Same Authority, and That Is the Bug</title>
      <dc:creator>Edward Izgorodin</dc:creator>
      <pubDate>Wed, 19 Aug 2026 15:18:00 +0000</pubDate>
      <link>https://dev.to/izgorodin/your-agent-doesnt-need-more-memory-it-needs-to-know-what-its-allowed-to-believe-22j7</link>
      <guid>https://dev.to/izgorodin/your-agent-doesnt-need-more-memory-it-needs-to-know-what-its-allowed-to-believe-22j7</guid>
      <description>&lt;p&gt;Every team that wires long-term memory into a coding agent hits the same wall about three weeks in. The agent remembers plenty. It remembers the migration you abandoned, the library you replaced, the convention one person suggested once in a thread. It recalls all of it with the same flat confidence, and now you are debugging your memory instead of your code.&lt;/p&gt;

&lt;p&gt;The instinct at that point is to store less, or to store better. Both are the wrong axis. The problem is not how much the agent remembers. The problem is that &lt;strong&gt;everything it remembers has the same authority&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Short-term versus long-term is not the useful split
&lt;/h2&gt;

&lt;p&gt;The common framing separates the conversation you are in now from facts you keep forever. It is a real distinction, and it will not help you, because it says nothing about what the agent should do when two remembered things disagree.&lt;/p&gt;

&lt;p&gt;A more useful split is &lt;strong&gt;evidence versus policy&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Evidence is what happened.&lt;/strong&gt; The agent tried a fix and it failed. A user rewrote a function. A test went red. Evidence is cheap to produce, it accumulates fast, and any single piece of it can be wrong or unrepresentative.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Policy is what should happen.&lt;/strong&gt; Use pnpm. Tests mirror the src layout. Never touch the legacy billing module. Policy is expensive to produce, because a human usually decides it, and it should be hard to change by accident.&lt;/p&gt;

&lt;p&gt;Hold those apart and a lot of confusing behaviour becomes obvious. An agent that treats one observation as policy overfits to a single incident. An agent that treats a merged architecture decision as mere evidence keeps relitigating it. Most memory systems collapse both into one undifferentiated bucket of "things we know," which is exactly why they feel unpredictable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three layers, ordered by how easily they should change
&lt;/h2&gt;

&lt;p&gt;In practice the split works better as three layers, because evidence and policy live at different scopes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Shared project truth.&lt;/strong&gt; Architecture decision records, API contracts, naming conventions, the deployment runbook. This is policy: versioned, source-linked, and the same copy for every agent on the project. If your agent invents its own answer to "which database do we use," that is not a memory problem, it is a missing shared layer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Role memory.&lt;/strong&gt; Heuristics that belong to a job rather than to a project. What a frontend reviewer usually checks. How the QA pass is structured. Which failure modes a migration tends to hit. This is the layer most systems skip entirely, and it is why teams re-teach the same review standards to every new session.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Episodes.&lt;/strong&gt; What happened on a task: what was attempted, what failed, what feedback followed. Evidence in its rawest form, the layer that grows fastest and rots fastest.&lt;/p&gt;

&lt;p&gt;These are not ranked by importance. They are ranked by &lt;strong&gt;how easily something should change&lt;/strong&gt;. Episodes are written constantly. Role memory shifts slowly. Shared project truth changes only when a human decides it does.&lt;/p&gt;

&lt;h2&gt;
  
  
  The two time axes, and the bug you get free without them
&lt;/h2&gt;

&lt;p&gt;This is the part worth stealing even if you ignore everything else.&lt;/p&gt;

&lt;p&gt;Say your codebase used Redux, and last quarter you moved to Zustand.&lt;/p&gt;

&lt;p&gt;With one time axis, the agent learns "we use Zustand" and the older note is overwritten or decays away. Now ask why a component written in March is structured the way it is. The agent cannot tell you. The fact that explains that code has been deleted, because it is no longer current.&lt;/p&gt;

&lt;p&gt;But "recorded at" and "was true from / until" are different questions. "Use Redux" was &lt;strong&gt;true from January to June&lt;/strong&gt; and was &lt;strong&gt;recorded in February&lt;/strong&gt;. It is not wrong. It is &lt;strong&gt;closed&lt;/strong&gt;. An agent that keeps closed facts with their validity window can still explain old code, warn you that a pattern you are copying belongs to a superseded era, and avoid confidently rewriting history.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Replacing a fact instead of closing it is the most common destructive operation in agent memory&lt;/strong&gt;, and it stays invisible until someone asks about the past.&lt;/p&gt;

&lt;p&gt;None of this is new engineering, by the way. Separating when a fact was true from when the system learned it is bitemporal modelling, standardised in SQL:2011 as application-time and system-versioned period tables (&lt;a href="https://www.iso.org/standard/53681.html" rel="noopener noreferrer"&gt;ISO/IEC 9075:2011&lt;/a&gt;; Kulkarni and Michels, &lt;em&gt;Temporal features in SQL:2011&lt;/em&gt;, &lt;a href="https://doi.org/10.1145/2380776.2380786" rel="noopener noreferrer"&gt;DOI:10.1145/2380776.2380786&lt;/a&gt;). The database people solved this before agents existed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Evidence should have to earn its way into policy
&lt;/h2&gt;

&lt;p&gt;If evidence and policy are different things, there has to be a path between them, and it should be explicit rather than accidental.&lt;/p&gt;

&lt;p&gt;An agent observation starts as low-authority evidence. It becomes policy through one of a few events: a &lt;strong&gt;human correction&lt;/strong&gt;, which is the strongest signal there is; a &lt;strong&gt;merged ADR or pull request&lt;/strong&gt; that puts the decision in the repository; or a &lt;strong&gt;repeated successful outcome&lt;/strong&gt;, where the same approach has worked often enough to stop being a guess.&lt;/p&gt;

&lt;p&gt;The important word is &lt;em&gt;earns&lt;/em&gt;. Systems that let a single agent observation write straight into shared knowledge will drift, and the drift is hard to spot because every individual step looks reasonable.&lt;/p&gt;

&lt;p&gt;Demotion matters too and is rarer to see implemented. If a policy keeps producing failures, something should notice. Not delete it automatically: mark it disputed and surface that to a human.&lt;/p&gt;

&lt;h2&gt;
  
  
  Retrieval should hand you contradictions, not resolve them quietly
&lt;/h2&gt;

&lt;p&gt;This is where most implementations go wrong, and it follows from everything above.&lt;/p&gt;

&lt;p&gt;The default behaviour of a vector store is to return the nearest matches. If two stored items contradict each other, the one that happens to sit closer in embedding space wins, silently, and the agent proceeds as though there was never a disagreement.&lt;/p&gt;

&lt;p&gt;That is backwards. &lt;strong&gt;A contradiction is information.&lt;/strong&gt; If the store holds "we use Redux, valid until June" and "we use Zustand, valid from June," the right move is not to pick one. It is to return both with their validity windows and let the reasoning step deal with it. Same for a policy that a recent episode contradicts: an agent that sees "convention says X" next to "X failed twice last week" can raise it with you. An agent that sees only the closer embedding match cannot.&lt;/p&gt;

&lt;p&gt;Preserving contradictions costs context budget. That is the honest trade. Losing them costs correctness in a way you cannot detect from the outside.&lt;/p&gt;

&lt;h2&gt;
  
  
  The practical gap nobody mentions
&lt;/h2&gt;

&lt;p&gt;Here is the thing that surprises teams most, and it has nothing to do with architecture.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Connecting a memory tool does not make an agent use it.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You can wire up a perfectly good backend, expose it over MCP, watch the tools register, and then watch the agent go an entire session without calling any of them. Tool availability is not tool usage. The model has no standing incentive to check memory before acting, and no habit of writing anything down afterwards.&lt;/p&gt;

&lt;p&gt;What closes the gap is boring: a standing instruction. Something in the system prompt or the project rules that says, in effect, recall before acting on anything project-specific, and save durable decisions and corrections when they happen. In Cursor that is a rule file. In Claude Code it is the project instructions. The exact mechanism matters much less than the instruction existing at all.&lt;/p&gt;

&lt;p&gt;If you take one thing from this piece, take that one. It is the cheapest fix on the list and the one most often missing.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Disclosure: I work on &lt;a href="https://mnemoverse.com" rel="noopener noreferrer"&gt;Mnemoverse&lt;/a&gt;, a memory engine for AI agents. This article is adapted from the original in our library, which carries the FAQ and the mechanics in more depth: &lt;a href="https://mnemoverse.com/docs/library/agent-memory-evidence-vs-policy" rel="noopener noreferrer"&gt;Agent memory: evidence versus policy&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>architecture</category>
      <category>llm</category>
    </item>
    <item>
      <title>Knowledge Graph vs Retrieval for Agent Memory: The Real Split Is What You Are Willing to Assert</title>
      <dc:creator>Edward Izgorodin</dc:creator>
      <pubDate>Mon, 17 Aug 2026 14:21:00 +0000</pubDate>
      <link>https://dev.to/izgorodin/knowledge-graph-vs-retrieval-for-agent-memory-the-real-split-is-what-you-are-willing-to-assert-4l6</link>
      <guid>https://dev.to/izgorodin/knowledge-graph-vs-retrieval-for-agent-memory-the-real-split-is-what-you-are-willing-to-assert-4l6</guid>
      <description>&lt;p&gt;"Should agent memory use a knowledge graph or retrieval?" is the wrong question, and the reason is worth more than the answer. Both are storage shapes. The decision that actually changes how your system fails is whether you store structure your system &lt;strong&gt;learned&lt;/strong&gt; from use, or structure someone &lt;strong&gt;asserted&lt;/strong&gt; about the world. Those two carry different truth guarantees, and merging them into one "memory graph" is how systems become confident without becoming checkable.&lt;/p&gt;

&lt;p&gt;Here are the four terms that carry the whole argument.&lt;/p&gt;

&lt;p&gt;A &lt;strong&gt;knowledge graph&lt;/strong&gt; stores typed, directed relations between resolved entities. It asserts facts about the world and answers by traversal.&lt;/p&gt;

&lt;p&gt;A &lt;strong&gt;learned graph&lt;/strong&gt;, or associative memory, stores untyped weighted links that come from co-occurrence and use. It asserts nothing attributable and never merges identities.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Entity resolution&lt;/strong&gt; is the decision that two mentions refer to the same thing. It is the load-bearing and most expensive assertion in any knowledge graph.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Provenance&lt;/strong&gt; is the record of where a memory came from: the source link, the retrieval date, and the exact text that was read.&lt;/p&gt;

&lt;p&gt;Disclosure before we go further: I work on Mnemoverse, which ships the learned side of this split, so I have a position. I have tried to make the trade-offs verifiable rather than flattering, including one place where the evidence goes against me.&lt;/p&gt;

&lt;h2&gt;
  
  
  The two structures fail in completely different ways
&lt;/h2&gt;

&lt;p&gt;An asserted edge that is wrong is &lt;strong&gt;precisely wrong&lt;/strong&gt;. If the system decided that "J. Smith", "Jane Smith" and "Jane A. Smith" are one person, and they are not, then every traversal crossing that merged node inherits the error. The system will state a falsehood with full confidence, and it will be attributable to a specific stored claim.&lt;/p&gt;

&lt;p&gt;A learned edge that is wrong is never an explicit falsehood. It is a bias in what surfaces. That sounds safer, and in one narrow sense it is: no attributable claim, no identity merging. But it is not the same as "cannot mislead."&lt;/p&gt;

&lt;p&gt;Two results make that concrete. Caliskan, Bryson and Narayanan showed that embeddings trained purely on language co-occurrence predict real occupational gender composition at rho = 0.90 and reproduce human bias effects (&lt;a href="https://www.science.org/doi/10.1126/science.aal4230" rel="noopener noreferrer"&gt;Science 356, 2017&lt;/a&gt;). Co-occurrence is not neutral just because nobody typed an explicit edge. And from psychology, the DRM paradigm shows that hearing &lt;em&gt;bed, rest, tired&lt;/em&gt; produces confident false recall of &lt;em&gt;sleep&lt;/em&gt;, a word that was never presented, in roughly 40 to 55 percent of trials (&lt;a href="https://doi.org/10.1037/0278-7393.21.4.803" rel="noopener noreferrer"&gt;Roediger and McDermott, 1995&lt;/a&gt;). Associative structure alone is enough to manufacture a memory.&lt;/p&gt;

&lt;p&gt;So the honest formulation for a learned graph is "no attributable claim, no identity merging," not "cannot be wrong."&lt;/p&gt;

&lt;h2&gt;
  
  
  Asserting identity is expensive, and the cost is structural
&lt;/h2&gt;

&lt;p&gt;A knowledge graph earns real power. Traversal over typed relations answers questions plain retrieval handles badly. The price is entity resolution, and it is not an implementation detail you optimize away later.&lt;/p&gt;

&lt;p&gt;The systems that do this at scale treat it with visible caution. Google's Knowledge Vault attached a calibrated confidence to every extracted triple rather than asserting it flat, and only a minority of triples reached high confidence (&lt;a href="https://dl.acm.org/doi/10.1145/2623330.2623623" rel="noopener noreferrer"&gt;Dong et al., KDD 2014&lt;/a&gt;). Zep's Graphiti puts validity intervals on edges and runs entity resolution at ingest with an LLM in the loop (&lt;a href="https://arxiv.org/abs/2501.13956" rel="noopener noreferrer"&gt;arXiv:2501.13956&lt;/a&gt;). Microsoft's GraphRAG builds an LLM-derived entity graph and says plainly in its own paper that indexing is expensive and the win shows up on global, corpus-level questions rather than needle lookup (&lt;a href="https://arxiv.org/abs/2404.16130" rel="noopener noreferrer"&gt;arXiv:2404.16130&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;None of them treats entity resolution as cheap or solved. Adding asserted structure means accepting that cost, and accepting that some merges will be precisely wrong.&lt;/p&gt;

&lt;h2&gt;
  
  
  A stored paraphrase is a stored misgrounding
&lt;/h2&gt;

&lt;p&gt;Here is the shortcut almost every memory pipeline takes. At write time, an LLM extracts a summary of what happened, and the summary gets stored next to a pointer at the source. The retriever sees the summary. The pointer is there so someone can check later.&lt;/p&gt;

&lt;p&gt;Nobody checks later.&lt;/p&gt;

&lt;p&gt;A preregistered study of commercial legal AI tools measured hallucination rates of 17 to 33 percent, where hallucination includes misgrounding: the answer cites a source, and the source does not support the claim (&lt;a href="https://doi.org/10.1111/jels.12413" rel="noopener noreferrer"&gt;Magesh et al., Journal of Empirical Legal Studies&lt;/a&gt;). A stored paraphrase beside a pointer is that failure mode by construction, and it is undetectable without re-reading the source.&lt;/p&gt;

&lt;p&gt;The obvious fix, storing just the pointer, has its own decay. The Hypothes.is anchoring study looked at about 21,000 quote-anchored web annotations collected over roughly two years: 22 percent no longer matched their live page, 19 percent were permanently unrecoverable, and only about 12 percent of the broken ones could be re-attached through web archives (&lt;a href="https://arxiv.org/abs/1512.06195" rel="noopener noreferrer"&gt;arXiv:1512.06195&lt;/a&gt;). A bare pointer is honest only at write time.&lt;/p&gt;

&lt;p&gt;What works is storing the &lt;strong&gt;verbatim span that was read&lt;/strong&gt;, together with the source link and the retrieval date. The span does three jobs at once. It is deterministic, because it is bytes from the source rather than a model's interpretation. It is ordinary text, so it embeds and searches like everything else. And it is exactly what a W3C Web Annotation &lt;code&gt;TextQuoteSelector&lt;/code&gt; is: exact text with prefix and suffix, which re-locates the passage later and &lt;strong&gt;fails detectably&lt;/strong&gt; when the document changed (&lt;a href="https://www.w3.org/TR/annotation-model/#text-quote-selector" rel="noopener noreferrer"&gt;W3C Web Annotation Data Model&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;That last property is the whole point. Fuzzy anchoring reports failure. A paraphrase lies silently.&lt;/p&gt;

&lt;p&gt;Anthropic's Citations API follows the same instinct: cited text is extracted directly with character indices, so interpretation happens at read time instead of being frozen into storage.&lt;/p&gt;

&lt;h2&gt;
  
  
  Provenance is the bridge, not a merge
&lt;/h2&gt;

&lt;p&gt;If learned and asserted structure answer different questions with different guarantees, then the thing connecting them cannot be a merge. It has to be a record of consultation: what was read, from where, and when.&lt;/p&gt;

&lt;p&gt;This is standardised prior art, not something to invent. Memento (RFC 7089) defines the original resource and the archived state with its datetime. Robust Links carry &lt;code&gt;data-originalurl&lt;/code&gt;, &lt;code&gt;data-versionurl&lt;/code&gt; and &lt;code&gt;data-versiondate&lt;/code&gt;, so a reader can find a replacement snapshot if one archive dies. Wikipedia's citation templates even record drift as a state: &lt;code&gt;url-status=deviated&lt;/code&gt; means the link is alive but no longer supports the claim it was cited for.&lt;/p&gt;

&lt;p&gt;One limit worth stating plainly: at most 38.7 percent of composite web mementos are temporally coherent, and at most 17.9 percent are both coherent and complete, because embedded resources get captured at different moments (&lt;a href="https://doi.org/10.1145/2700171.2791044" rel="noopener noreferrer"&gt;Ainsworth, Nelson, Van de Sompel&lt;/a&gt;). So promise the text span, not the whole page.&lt;/p&gt;

&lt;h2&gt;
  
  
  The part where the evidence goes against me
&lt;/h2&gt;

&lt;p&gt;I would rather state this than have you find it.&lt;/p&gt;

&lt;p&gt;The dominant memory architectures store interpretations, not raw spans, and they have a measurement on their side. Generative Agents stores natural-language experience records and synthesises reflections. RAPTOR stores recursive summaries as retrieval units. And on LOCOMO, a benchmark of question answering over long multi-session conversations, the best chunk-based RAG configuration reaches a judge score of J = 60.97 while LLM-extracted dense memories reach J = 66.88 (Table 2 of &lt;a href="https://arxiv.org/abs/2504.19413" rel="noopener noreferrer"&gt;arXiv:2504.19413&lt;/a&gt;; note that this is the Mem0 team evaluating its own system).&lt;/p&gt;

&lt;p&gt;The mechanism is not mysterious. A distilled fact is denser than the conversation around it, so the same retrieval budget lands on the answer more often.&lt;/p&gt;

&lt;p&gt;That result should not be waved away, and I am not going to pretend it does not exist. Extraction buys benchmark points. What it costs is auditability, because an extracted memory is already a judgment and the system can only trust the extractor that made it. Storing the original wording and the original pointer gives up those points on purpose.&lt;/p&gt;

&lt;p&gt;Make that trade explicitly. The one thing to never do is let an extractor's sentence silently become the stored fact.&lt;/p&gt;

&lt;h2&gt;
  
  
  A decision rule you can actually use
&lt;/h2&gt;

&lt;p&gt;Not a verdict, a rule.&lt;/p&gt;

&lt;p&gt;Use &lt;strong&gt;retrieval&lt;/strong&gt; when the agent needs to find past evidence. This is the floor and it is the right default.&lt;/p&gt;

&lt;p&gt;Add &lt;strong&gt;learned association&lt;/strong&gt; when lexical retrieval keeps missing related memories that would have helped. Treat what it returns as ranking influence, not as truth.&lt;/p&gt;

&lt;p&gt;Add an &lt;strong&gt;asserted knowledge graph&lt;/strong&gt; when the agent must answer structural questions over resolved entities, and only when you accept entity resolution as a stored assertion you will sometimes have to correct.&lt;/p&gt;

&lt;p&gt;Keep &lt;strong&gt;provenance&lt;/strong&gt; across all three: source link, retrieval date, exact text read, and a dated snapshot where you can get one.&lt;/p&gt;

&lt;p&gt;The two structures do not need to merge. They need to be connected by a record that can be checked. Treating them as one artifact is exactly how a memory system becomes confident without becoming checkable.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This is a shorter version of an article in the &lt;a href="https://mnemoverse.com/docs/library/agent-memory-knowledge-graph-vs-retrieval" rel="noopener noreferrer"&gt;Mnemoverse library&lt;/a&gt;, where the full argument, the complete source list, and the related pieces on provenance and bitemporal memory live.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>llm</category>
      <category>architecture</category>
    </item>
    <item>
      <title>Why Your AI Agent Forgets Everything Between Sessions (and the Three Honest Fixes)</title>
      <dc:creator>Edward Izgorodin</dc:creator>
      <pubDate>Fri, 14 Aug 2026 15:05:55 +0000</pubDate>
      <link>https://dev.to/izgorodin/why-your-ai-agent-forgets-everything-between-sessions-and-the-three-honest-fixes-4k3o</link>
      <guid>https://dev.to/izgorodin/why-your-ai-agent-forgets-everything-between-sessions-and-the-three-honest-fixes-4k3o</guid>
      <description>&lt;p&gt;Your AI agent forgets everything between sessions because nothing in the stack persists by default: the context window empties when the session ends, and the model's weights only change when the vendor ships a new model. "Remember this" gets a polite acknowledgement, then vanishes. The fix is always some form of external memory, and there are exactly three honest ways to add one: files your agent reads, a self-hosted memory store, or a managed memory layer over MCP. Which one is right depends on which problem you actually have.&lt;/p&gt;

&lt;h2&gt;
  
  
  The forgetting is structural, not a bug
&lt;/h2&gt;

&lt;p&gt;Every session starts from a blank context window. Whatever you explained yesterday, the decisions you made, the conventions you agreed on, the bug you already fixed twice: none of it exists for the agent today unless something outside the model carries it.&lt;/p&gt;

&lt;p&gt;This is why the same complaints keep showing up in every community where people use coding agents seriously. You get tired of re-explaining who you are and how your project works. The agent confidently contradicts a decision it helped you make on Tuesday. It suggests npm in a pnpm repo for the third time this week. Longer context windows do not fix this: a million tokens still empty out at the end of the session, and most of what you paste back in is noise by then.&lt;/p&gt;

&lt;p&gt;So the real question is not "why does it forget" but "where should the memory live". Three camps, each with a genuine reason to exist.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fix 1: files the agent reads (CLAUDE.md, AGENTS.md, notes)
&lt;/h2&gt;

&lt;p&gt;The simplest fix is a markdown file in your repo that the agent reads at the start of every session: project conventions, key decisions, things it should never do. Most coding agents support this natively, and you can go further with agent-curated note files that the agent itself appends to.&lt;/p&gt;

&lt;p&gt;Honest pros: free, local, versionable in git, zero dependencies, and you can read every byte of what the agent knows. For a single repo on a single machine, this is often enough, and it is the right place to start.&lt;/p&gt;

&lt;p&gt;Honest cons: you are the memory system. Files grow stale unless someone curates them, nothing ranks what matters, nothing forgets what stopped being true, and the memory is trapped in one repo. Your agent in Cursor knows nothing about what you told Claude Code, and vice versa.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fix 2: a self-hosted memory store
&lt;/h2&gt;

&lt;p&gt;The second camp runs a real memory engine on your own infrastructure. Open-source options take different angles: some store facts as vectors with extraction pipelines, some build temporal knowledge graphs where facts carry validity windows, some turn your documents into a queryable graph.&lt;/p&gt;

&lt;p&gt;Honest pros: you own the data end to end, you can inspect and tune the engine, and nothing leaves your perimeter. If privacy or compliance is the hard constraint, this camp wins outright.&lt;/p&gt;

&lt;p&gt;Honest cons: it is infrastructure. You run it, scale it, tune retrieval quality, and handle upgrades. Memory quality becomes another thing your team maintains, and most stores still serve one application rather than every tool you work in.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fix 3: a managed memory layer over MCP
&lt;/h2&gt;

&lt;p&gt;The third camp moves memory outside any single tool. Disclosure: I work on Mnemoverse, which sits in this camp, so read this section knowing that.&lt;/p&gt;

&lt;p&gt;The idea: a hosted memory service that every MCP client shares. You write a memory in Claude Code, and the same memory is there when you open Cursor, VS Code, or ChatGPT, behind one API key or OAuth login. Nothing to run.&lt;/p&gt;

&lt;p&gt;The interesting part is what the memory does between sessions. In Mnemoverse, each write carries an importance score, associations between concepts strengthen as memories are recalled together through a Hebbian rule tuned by a Rescorla-Wagner update, and reporting whether a recalled memory actually helped re-ranks what comes back next time. The goal is memory that improves with use instead of accumulating noise.&lt;/p&gt;

&lt;p&gt;Honest cons: the engine is hosted, so you are trusting a vendor with your context, and if your requirement is running everything inside your own perimeter, camp 2 is your answer. There is also no magic about invocation: an agent with memory tools available will not necessarily call them, which brings me to the one tip that applies to every camp.&lt;/p&gt;

&lt;h2&gt;
  
  
  The tip that matters in all three camps
&lt;/h2&gt;

&lt;p&gt;Whatever memory you add, give the agent a standing instruction to use it. Something as short as "before non-trivial work, check memory; after decisions, corrections, or lessons, save them" in your system prompt or project file changes memory from a tool that exists to a habit that runs. Tool available does not mean tool used. This is the most common reason any memory setup quietly does nothing.&lt;/p&gt;

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

&lt;p&gt;Latency-critical and privacy-critical, single repo: start with files, they are genuinely good. Own-your-data with engineering capacity, one main application: self-host a store. Same memory across every AI tool you use, nothing to operate: a managed MCP layer. There is no free lunch, only the corner of the trade-off triangle that fits your work.&lt;/p&gt;

&lt;p&gt;If you want to see the cross-tool version in action, Mnemoverse has a free tier (1,000 queries a day, no credit card): write a memory in one tool, recall it in another, and decide for yourself whether the continuity is worth it.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>mcp</category>
      <category>llm</category>
    </item>
    <item>
      <title>How to Add Persistent Memory to Cursor with MCP (2026)</title>
      <dc:creator>Edward Izgorodin</dc:creator>
      <pubDate>Wed, 12 Aug 2026 12:06:00 +0000</pubDate>
      <link>https://dev.to/izgorodin/how-to-add-persistent-memory-to-cursor-with-mcp-2026-148n</link>
      <guid>https://dev.to/izgorodin/how-to-add-persistent-memory-to-cursor-with-mcp-2026-148n</guid>
      <description>&lt;p&gt;Cursor starts every session with amnesia: yesterday's architecture discussion, the migration you agreed not to touch, your preference for pnpm, all gone. There are three real ways to fix that. One, use Cursor's built-in Rules and Memories. Two, run a local-first MCP memory server such as Basic Memory, which keeps everything on your machine. Three, connect a managed memory service over MCP so the same memory follows you across tools. Disclosure up front: I'm Edward, co-founder of Mnemoverse, which is one of those managed services, so I'm biased about option three. The other two are genuinely the right choice for plenty of people, and I'll try to show where.&lt;/p&gt;

&lt;h2&gt;
  
  
  Option 1: Cursor's native Rules and Memories
&lt;/h2&gt;

&lt;p&gt;Rules are instruction files Cursor loads into the model's context. Project rules live in &lt;code&gt;.cursor/rules&lt;/code&gt;, and there are global user rules in settings. They are memory in the "sticky note" sense: static text you write and curate by hand. That is exactly right for stable conventions. "Use pnpm." "Tests mirror the src layout." "Never touch the legacy billing module." Write those once and stop repeating yourself.&lt;/p&gt;

&lt;p&gt;Memories is Cursor's automatic layer: the editor generates memories from your sessions so context carries forward. I have to be honest here: availability and behavior vary by version. The feature has moved around and changed between releases, so check what your build actually does before relying on it. When it is present and fits your workflow, it is the zero-setup option.&lt;/p&gt;

&lt;p&gt;The limits are structural. Everything stays inside Cursor. Open Claude Code or VS Code and none of it comes with you. Rules do not learn from your sessions, and because Memories varies by version, what it captures is worth auditing rather than assuming.&lt;/p&gt;

&lt;h2&gt;
  
  
  Option 2: local-first MCP memory servers
&lt;/h2&gt;

&lt;p&gt;MCP (Model Context Protocol) lets you plug external tools into Cursor's agent, and memory servers are a natural fit. A local-first server keeps every byte on your machine.&lt;/p&gt;

&lt;p&gt;Basic Memory is a good example: an AGPL-3.0 MCP server that stores your memories as Markdown files on disk. That design decision does a lot of work. Your memory becomes a folder you can grep, edit in any editor, back up, and version in a private repo. Nothing leaves your machine, it works offline, there is no per-query cost, and there is no vendor to trust or outlive.&lt;/p&gt;

&lt;p&gt;The tradeoffs are equally clear. It lives on one machine unless you sync it yourself. Retrieval tends to be simpler than in hosted systems, with no learned ranking or feedback loop. And maintenance is yours. But if you operate under compliance constraints, or you simply do not want project context on anyone's server, this option wins and it is not close.&lt;/p&gt;

&lt;h2&gt;
  
  
  Option 3: managed cross-tool memory (a Mnemoverse walkthrough)
&lt;/h2&gt;

&lt;p&gt;This is what I build, so read this section with that bias in mind. The point of a managed service is not that it is smarter than your local setup. The point is portability plus mechanics you do not have to build yourself. All integrations reach the same account and memory, but authentication differs: the local MCP package and a Custom GPT use an API key; compatible remote MCP clients can use OAuth. That means a fact written in Cursor on Monday can be available in Claude Code on Tuesday.&lt;/p&gt;

&lt;p&gt;Setup takes a few minutes:&lt;/p&gt;

&lt;p&gt;Step 1. Sign up at &lt;a href="https://console.mnemoverse.com" rel="noopener noreferrer"&gt;console.mnemoverse.com&lt;/a&gt;. The free tier is 1,000 queries per day and 10,000 atoms, no credit card.&lt;/p&gt;

&lt;p&gt;Step 2. Copy your API key.&lt;/p&gt;

&lt;p&gt;Step 3. Add the server to &lt;code&gt;.cursor/mcp.json&lt;/code&gt; in your project (or the global &lt;code&gt;~/.cursor/mcp.json&lt;/code&gt;):&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="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;"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;"mnemoverse"&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;"@mnemoverse/mcp-memory-server@latest"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
         &lt;/span&gt;&lt;span class="nl"&gt;"env"&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;"MNEMOVERSE_API_KEY"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"mk_live_YOUR_KEY"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
           &lt;/span&gt;&lt;span class="nl"&gt;"MNEMOVERSE_API_URL"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://core.mnemoverse.com/api/v1"&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;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;Step 4. Reload MCP servers in Cursor's settings. The local package now exposes nine tools: six core memory tools (&lt;code&gt;memory_write&lt;/code&gt;, &lt;code&gt;memory_read&lt;/code&gt;, &lt;code&gt;memory_feedback&lt;/code&gt;, &lt;code&gt;memory_stats&lt;/code&gt;, &lt;code&gt;memory_delete&lt;/code&gt;, &lt;code&gt;memory_delete_domain&lt;/code&gt;) plus three Beta shared-room tools (create, invite, join). For the current Cursor configuration and tool list, use the &lt;a href="https://mnemoverse.com/docs/api/editors" rel="noopener noreferrer"&gt;editor setup documentation&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you would rather not manage a key, compatible MCP clients can connect to &lt;code&gt;https://mcp.mnemoverse.com/mcp&lt;/code&gt; and sign in through OAuth. The remote connector exposes seven tools: four core tools (write, read, feedback, stats) plus the three Beta shared-room tools. The two deletion tools remain local-package-only.&lt;/p&gt;

&lt;p&gt;What actually happens under the hood:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;On write&lt;/strong&gt;, each memory (we call them atoms) gets an importance score at write time, and its concepts form Hebbian associations with the concepts they co-occur with. Association strengths are tuned by a Rescorla-Wagner update, so surprising co-occurrences shift weights more than expected ones. In the background, consolidation merges similar memories into prototypes, with Von Restorff protection so a distinctive memory does not get averaged into the pile.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;On recall&lt;/strong&gt;, &lt;code&gt;memory_read&lt;/code&gt; returns atoms ranked using those signals: importance, the learned associations, and past feedback.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;On feedback&lt;/strong&gt;, the agent calls &lt;code&gt;memory_feedback&lt;/code&gt; with a score from -1 to 1 when a recalled memory helped or misled it, and that signal re-ranks future recall.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The current package behavior and tool surface are documented in the &lt;a href="https://mnemoverse.com/docs/api/mcp-server" rel="noopener noreferrer"&gt;MCP server reference&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Openness, stated plainly: the MCP server and the Python SDK are MIT licensed, but the engine is hosted and not open source. Your atoms live on our servers. That is the real tradeoff against option two, and &lt;code&gt;memory_delete&lt;/code&gt; / &lt;code&gt;memory_delete_domain&lt;/code&gt; exist precisely so you stay in control of what is kept.&lt;/p&gt;

&lt;h2&gt;
  
  
  Which should you pick
&lt;/h2&gt;

&lt;p&gt;If Cursor is your only tool and your needs are conventions plus light session carry-over, use the native features. It is the least machinery, and Rules in particular are underrated.&lt;/p&gt;

&lt;p&gt;If privacy, latency, or data ownership dominates, go local-first. Basic Memory if Markdown on disk appeals to you; the pattern matters more than the specific server.&lt;/p&gt;

&lt;p&gt;If you work across several tools, managed memory is the category to look at, and I would compare honestly within it. Mem0 offers an Apache-2.0 open-source SDK plus a managed cloud and focuses on extracting facts from conversations. Zep builds on the open-source Graphiti temporal knowledge graph, where facts carry validity windows, a real advantage if you care about what was true when. If your stack is LangGraph, LangMem is native to its Long-term Memory Store and is the path of least resistance. Cognee is the one to evaluate for a self-hosted knowledge graph. Letta gives you a whole agent framework with self-editing memory rather than a bolt-on. Supermemory leans on connectors (Notion, Google Drive, Gmail, S3) if your context lives in documents more than code. Mnemoverse's angle is the cross-tool key plus the learning mechanics above.&lt;/p&gt;

&lt;p&gt;On performance claims: vendor-reported numbers are contested, ours included; run your own evals on your own recall tasks before you commit.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Does MCP memory slow Cursor down?&lt;/strong&gt;&lt;br&gt;
Every read or write is a tool call the agent chooses to make, so the cost shows up a few times per session, not per keystroke. A local server answers on localhost; a managed one adds a network hop. If that hop bothers you, that is a point for option two.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does a memory service see my whole codebase?&lt;/strong&gt;&lt;br&gt;
No. It only receives what the agent explicitly sends through the memory tools: the memories it writes and the queries it reads with. You can inspect and delete everything: with Mnemoverse via the delete tools, with Basic Memory by deleting a Markdown file. If "only what the tools send" is still too much for your threat model, that is option two's whole argument, and it is a fair one.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can other tools share the memory Cursor builds?&lt;/strong&gt;&lt;br&gt;
Native Rules and Memories stay in Cursor. A local MCP server can be mounted by any MCP client on the same machine. A managed service shares across machines and tools; with Mnemoverse, the same account and memory can be reached from Claude Code, Cursor, VS Code, and ChatGPT. The authentication method depends on the client: API key for the local package and Custom GPT action, OAuth for compatible remote MCP clients.&lt;/p&gt;

&lt;p&gt;I build one of these options, so weigh my framing accordingly. And if you try any of the three and hit something rough, tell me in the comments. I read them.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>cursor</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Mem0 vs Zep vs Letta vs Cognee vs LangMem vs Mnemoverse: An Honest Map of Agent Memory in 2026</title>
      <dc:creator>Edward Izgorodin</dc:creator>
      <pubDate>Mon, 10 Aug 2026 16:42:56 +0000</pubDate>
      <link>https://dev.to/izgorodin/mem0-vs-zep-vs-letta-vs-cognee-vs-langmem-vs-mnemoverse-an-honest-map-of-agent-memory-in-2026-3l7b</link>
      <guid>https://dev.to/izgorodin/mem0-vs-zep-vs-letta-vs-cognee-vs-langmem-vs-mnemoverse-an-honest-map-of-agent-memory-in-2026-3l7b</guid>
      <description>&lt;p&gt;The short answer up front: there is no best agent memory tool. These six projects solve genuinely different problems that happen to share the word "memory," and picking between them by star count or a leaderboard screenshot is how teams end up running a temporal knowledge graph to store "user prefers dark mode."&lt;/p&gt;

&lt;p&gt;I am Edward, co-founder of Mnemoverse. One of the six tools below is mine, so read this whole piece knowing that. I have tried to handle the bias the way I would want a competitor to: my product gets one section among equals, and I tell you when not to pick it.&lt;/p&gt;

&lt;p&gt;This is a map, not a ranking. For each tool: what it actually is, the job it wins, and when you should walk past it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mem0: extracted facts, open-source SDK, managed option
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; an Apache-2.0 open-source memory SDK with a managed cloud on top. Its core move is fact extraction: it distills conversations into discrete facts it can recall in later sessions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The job it wins:&lt;/strong&gt; adding a memory layer to a conversational product quickly, with an exit hatch. Because the SDK is open source, you can start on the managed cloud and move toward self-hosting if compliance or cost pushes you there. If "remember what the user told us and recall it next session" describes your need, this is a short path to it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When not to pick it:&lt;/strong&gt; when facts change over time and you need to know what was true when. Plain fact extraction flattens time; that job belongs to Zep. And if what you actually want is a structured graph over your documents rather than conversation-derived facts, look at Cognee.&lt;/p&gt;

&lt;h2&gt;
  
  
  Zep: facts with expiry dates
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; a managed memory service built on the open-source Graphiti temporal knowledge graph. The defining feature is that facts carry validity windows. The graph does not just know the customer's plan is Enterprise; it knows when that became true and when it stopped being true. The free tier is 10,000 credits a month.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The job it wins:&lt;/strong&gt; any domain where state changes and history matters. Support agents, sales agents, anything touching accounts, subscriptions, or relationships. When an agent has to answer "what changed since last quarter," temporal validity is the actual feature, and Zep is honestly the tool I point people to for it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When not to pick it:&lt;/strong&gt; strict local-first or data-residency requirements. Graphiti is open source, but the managed service is what Zep sells. Also skip it if your memory needs are simple preferences and session context; a temporal graph is real machinery, and machinery you don't need is just operational surface.&lt;/p&gt;

&lt;h2&gt;
  
  
  Letta: the agent owns its memory
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; an Apache-2.0 agent framework in the MemGPT lineage. Memory here is not a sidecar service. Agents edit their own memory as a first-class behavior, rewriting what they know instead of delegating that to an external lookup.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The job it wins:&lt;/strong&gt; building agents from scratch where memory management is part of the agent's cognition. If the MemGPT idea feels philosophically right to you, that the agent itself should curate what it remembers, Letta is the direct descendant of that idea and you should build inside it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When not to pick it:&lt;/strong&gt; when you already have an agent stack and just want memory bolted on. Letta is a framework, and adopting a framework to get a memory feature is a large trade that most existing codebases will not want to make.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cognee: your graph, your infra
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; an Apache-2.0 framework that builds a knowledge graph on your own infrastructure through an extract-cognify-load pipeline. You feed it data, it constructs the graph, and everything stays inside your walls.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The job it wins:&lt;/strong&gt; self-hosted knowledge graphs. If your security team's first question is "where does the data live" and the only acceptable answer is "our VPC," Cognee is designed for exactly you. It wins on data control the same way hosted services win on convenience.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When not to pick it:&lt;/strong&gt; when nobody on the team wants to own a pipeline. Extract-cognify-load is yours to run, monitor, and evolve. If you want an API that just answers, a hosted service will cost you less in engineer-hours.&lt;/p&gt;

&lt;h2&gt;
  
  
  LangMem: memory that speaks LangGraph natively
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; LangChain's memory SDK, native to LangGraph's Long-term Memory Store, with storage in memory or in Postgres.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The job it wins:&lt;/strong&gt; memory for teams already building on LangGraph. Native means no adapter layer and no impedance mismatch with your graph state, and Postgres persistence keeps operations boring. If your agents are LangGraph agents, LangMem is the honest default, and I say that as someone selling an alternative.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When not to pick it:&lt;/strong&gt; outside the LangChain ecosystem. Its advantage is integration depth, and away from LangGraph that advantage evaporates. If your agents live in Claude Code, Cursor, or a custom stack, you take on the concepts without the payoff.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mnemoverse: one memory across your tools (mine, so calibrate)
&lt;/h2&gt;

&lt;p&gt;I build Mnemoverse. Read this section knowing that.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; a hosted persistent-memory API that agents reach over MCP. All integrations reach the same account and memory, but authentication differs: the local MCP package and a Custom GPT action use an API key; compatible remote MCP clients use OAuth. The design bet is cognitive rather than graph-first: memories get an importance score on write; concepts form Hebbian associations tuned by a Rescorla-Wagner update; consolidation merges similar memories into prototypes while Von Restorff protection keeps distinctive ones from being averaged away; and outcome feedback (memory_feedback, a signal from -1 to 1) re-ranks future recall based on whether a memory actually helped. The local MCP package exposes nine tools: six core memory tools (write, read, feedback, stats, delete, and delete-domain) plus three Beta shared-room tools (create, invite, and join). The remote OAuth connector exposes seven: four core tools (write, read, feedback, and stats) plus the same three Beta room tools; the two destructive delete tools remain local-package-only. The MCP server and Python SDK are MIT; the engine is hosted. On the research side, our SLoD paper (arXiv 2603.08965) was accepted at the GRAAI workshop at IEEE WCCI.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The job it wins:&lt;/strong&gt; continuity across tools. If you code in Cursor at work, run Claude Code at home, ask ChatGPT questions in between, and are tired of every tool relearning your stack and preferences, one shared memory over MCP is the point. The free tier is 1,000 queries a day and 10,000 atoms with no credit card; Pro is $29/month. Sign-up is at console.mnemoverse.com, docs at mnemoverse.com/docs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When not to pick it:&lt;/strong&gt; if memory cannot leave your machine, use Basic Memory instead, a local-first AGPL-3.0 MCP server that stores plain Markdown. If you need the engine itself self-hosted, Cognee or self-hosted Mem0 fit; our engine is hosted, and that is a real constraint, not a footnote. If you are deep in LangGraph, LangMem's native integration likely serves you better. And if your core need is temporal validity windows on facts, that is Zep's home turf, not ours.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's not on this map
&lt;/h2&gt;

&lt;p&gt;Supermemory, if your problem is connectors (Notion, Google Drive, Gmail, S3) and multimodal extraction; note that while there is an open-source repo, the hosted engine is not fully public. Basic Memory, mentioned above, for local-first purists. And Cursor now ships native Rules plus a Memories feature, with availability varying by version, which may be all you need if Cursor is your only tool.&lt;/p&gt;

&lt;h2&gt;
  
  
  About those benchmark numbers
&lt;/h2&gt;

&lt;p&gt;Every vendor in this space, mine included, has numbers that look impressive. They conflict because everyone benchmarks the task their architecture is shaped for: a temporal-graph system gets evaluated on temporal questions, an extraction system on fact recall, and the datasets, retrieval budgets, and judge models differ from paper to paper. Small harness choices swing results substantially. So treat all of it, including anything I publish, the same way: vendor-reported numbers are contested; run your own evals. Take two candidates from this map, wire each into a week of your actual workload, and measure whether the agent stops asking questions it already asked. Wiring that up costs you a day, and it tells you more than every leaderboard combined.&lt;/p&gt;

&lt;h2&gt;
  
  
  The map in one paragraph
&lt;/h2&gt;

&lt;p&gt;Facts extracted from conversations with an open-source SDK: Mem0. Facts with expiry dates: Zep. An agent that curates its own context: Letta. A knowledge graph you host yourself: Cognee. Already on LangGraph: LangMem. One memory following you across coding tools: Mnemoverse, and remember who wrote this. None of these is a wrong answer in its own lane. Most of the pain I see comes from picking a tool from someone else's lane because its number was bigger on a benchmark that was never about your problem.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>opensource</category>
      <category>tooling</category>
    </item>
    <item>
      <title>Workflow intelligence ships as a primitive</title>
      <dc:creator>Edward Izgorodin</dc:creator>
      <pubDate>Mon, 29 Jun 2026 13:31:06 +0000</pubDate>
      <link>https://dev.to/izgorodin/workflow-intelligence-ships-as-a-primitive-531p</link>
      <guid>https://dev.to/izgorodin/workflow-intelligence-ships-as-a-primitive-531p</guid>
      <description>&lt;p&gt;This past week, OpenAI shipped Record &amp;amp; Replay for Codex.&lt;/p&gt;

&lt;p&gt;Show Codex a workflow once. It turns the demonstration into an inspectable, editable skill that can guide similar work later through Computer Use, browser actions, and installed plugins.&lt;/p&gt;

&lt;p&gt;Anthropic moved in the same direction through a different architecture: agent teams, composable skills, and nested subagents in Claude Code.&lt;/p&gt;

&lt;p&gt;Two stacks. Same week. Same shift.&lt;/p&gt;

&lt;h2&gt;
  
  
  From research conversation to shipped primitive
&lt;/h2&gt;

&lt;p&gt;The thing that was a research conversation last month and a procurement decision last week is becoming a shipped primitive.&lt;/p&gt;

&lt;p&gt;In the OpenAI version:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;record a workflow&lt;/li&gt;
&lt;li&gt;extract the repeatable procedure&lt;/li&gt;
&lt;li&gt;save it as a callable skill&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In the Anthropic version:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;describe a skill&lt;/li&gt;
&lt;li&gt;load it into specialized agents&lt;/li&gt;
&lt;li&gt;compose agents and skills into a larger workflow&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One learns from demonstration. The other composes explicit procedures. Both move the unit of work up a level.&lt;/p&gt;

&lt;h2&gt;
  
  
  Workflow intelligence as a product
&lt;/h2&gt;

&lt;p&gt;You are no longer only wiring tools to prompts. You are encoding how work is actually done and making that procedure callable by agents.&lt;/p&gt;

&lt;p&gt;That is workflow intelligence as a product.&lt;/p&gt;

&lt;p&gt;And it sharpens the ownership question.&lt;/p&gt;

&lt;p&gt;Who owns the recording, the corrections, the exceptions, and the accumulated procedure the agent inherits?&lt;/p&gt;

&lt;p&gt;The vendor? Or the builder?&lt;/p&gt;

&lt;h2&gt;
  
  
  What the Cursor deal may have been pricing
&lt;/h2&gt;

&lt;p&gt;Perhaps that is part of what the Cursor deal was pricing.&lt;/p&gt;

&lt;p&gt;Not only the editor. The workflow layer around it.&lt;/p&gt;

&lt;p&gt;If memory was part of what last week's procurement conversation was about, workflow intelligence is what this week shipped. The two layers are arriving as products around the same time, and the ownership question follows them both.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally posted &lt;a href="https://www.linkedin.com/posts/izgorodin_aiagents-aimemory-devtools-share-7474787843928862720-6KMY/" rel="noopener noreferrer"&gt;on LinkedIn&lt;/a&gt; on June 22, 2026 — Edward Izgorodin.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Related: &lt;a href="https://izgorodin.hashnode.dev/memory-as-procurement-decision" rel="noopener noreferrer"&gt;Memory is becoming a procurement decision&lt;/a&gt; (last week's piece on the same arc).&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;More research on AI agent memory and workflow intelligence at &lt;a href="https://mnemoverse.com/docs/library/" rel="noopener noreferrer"&gt;mnemoverse.com/docs/library&lt;/a&gt;. I build &lt;a href="https://mnemoverse.com" rel="noopener noreferrer"&gt;Mnemoverse&lt;/a&gt;, open-source persistent memory for AI agents.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>devtools</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Memory is becoming a procurement decision</title>
      <dc:creator>Edward Izgorodin</dc:creator>
      <pubDate>Mon, 22 Jun 2026 17:44:11 +0000</pubDate>
      <link>https://dev.to/izgorodin/memory-is-becoming-a-procurement-decision-1h63</link>
      <guid>https://dev.to/izgorodin/memory-is-becoming-a-procurement-decision-1h63</guid>
      <description>&lt;p&gt;Last week: $60B for Cursor, where the deeper asset was not just the editor, but workflow memory around engineering teams.&lt;/p&gt;

&lt;p&gt;Recently: Anthropic previewed "dreaming" for Managed Agents. Google's Memory Bank in Vertex AI and Agent Engine points in the same direction.&lt;/p&gt;

&lt;p&gt;Different architectures. Same shift.&lt;/p&gt;

&lt;h2&gt;
  
  
  Persistent memory has stopped being only a research conversation
&lt;/h2&gt;

&lt;p&gt;It is becoming a procurement decision.&lt;/p&gt;

&lt;p&gt;For builders, this changes one thing.&lt;/p&gt;

&lt;p&gt;You no longer get to defer the memory layer choice.&lt;/p&gt;

&lt;p&gt;Either you pick a cloud vendor's memory and inherit its abstractions: what state means, what consolidation means, how revision works, and who controls the memory surface.&lt;/p&gt;

&lt;p&gt;Or you pick an open layer and keep those architectural decisions inside your own stack.&lt;/p&gt;

&lt;p&gt;Both are valid. They produce very different systems.&lt;/p&gt;

&lt;h2&gt;
  
  
  The uncomfortable question is what gets priced next
&lt;/h2&gt;

&lt;p&gt;Is it only IP, product, and distribution?&lt;/p&gt;

&lt;p&gt;Or is it the accumulated understanding of how teams actually get work done with agents?&lt;/p&gt;

&lt;p&gt;Not raw user data in the crude sense.&lt;/p&gt;

&lt;p&gt;Something more strategic: repeated workflows, corrections, repo context, task patterns, and intent signals transformed into an agent's ability to understand the job.&lt;/p&gt;

&lt;h2&gt;
  
  
  The vendor or the builder
&lt;/h2&gt;

&lt;p&gt;If memory was part of what the market priced last week, the question now is who controls it.&lt;/p&gt;

&lt;p&gt;The vendor.&lt;/p&gt;

&lt;p&gt;Or the builder.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally posted &lt;a href="https://www.linkedin.com/posts/izgorodin_aiagents-aimemory-devtools-share-7473706489723981824-cv9z/" rel="noopener noreferrer"&gt;on LinkedIn&lt;/a&gt; on June 19, 2026 — Edward Izgorodin.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Related research on AI agent memory at &lt;a href="https://mnemoverse.com/docs/library/" rel="noopener noreferrer"&gt;mnemoverse.com/docs/library&lt;/a&gt;. I build &lt;a href="https://mnemoverse.com" rel="noopener noreferrer"&gt;Mnemoverse&lt;/a&gt;, open-source persistent memory for AI agents.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>opensource</category>
      <category>mcp</category>
    </item>
    <item>
      <title>Agent memory is not a database</title>
      <dc:creator>Edward Izgorodin</dc:creator>
      <pubDate>Thu, 18 Jun 2026 20:49:55 +0000</pubDate>
      <link>https://dev.to/izgorodin/agent-memory-is-not-a-database-4m29</link>
      <guid>https://dev.to/izgorodin/agent-memory-is-not-a-database-4m29</guid>
      <description>&lt;p&gt;A paper from late May argues that agent memory is not a database. I think it is right.&lt;/p&gt;

&lt;p&gt;That sentence is the entire thesis. The rest of this post is what it means.&lt;/p&gt;

&lt;h2&gt;
  
  
  The four failure modes
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://arxiv.org/abs/2605.26252" rel="noopener noreferrer"&gt;Orogat and Mansour&lt;/a&gt; name four failure modes you hit when you treat memory like storage:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Unregulated growth&lt;/strong&gt; — facts pile up indefinitely with no shape control&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Missing semantic revision&lt;/strong&gt; — the system cannot update what a fact &lt;em&gt;means&lt;/em&gt; over time, only the row itself&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Capacity-driven forgetting&lt;/strong&gt; — you forget the wrong things first, because storage limits decide for you&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Read-only retrieval&lt;/strong&gt; — retrieval cannot reshape state; reading is decoupled from learning&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you have built a serious agent, all four are familiar. They are not edge cases. They are what happens when the abstraction is wrong.&lt;/p&gt;

&lt;h2&gt;
  
  
  GEM — four state-level operations
&lt;/h2&gt;

&lt;p&gt;The authors' model, &lt;strong&gt;Governed Evolving Memory&lt;/strong&gt; (GEM), replaces record-level CRUD with four state-level operations:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Ingestion&lt;/strong&gt; — incorporate a new observation into memory state&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Revision&lt;/strong&gt; — update what existing memory means, not just its contents&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Forgetting&lt;/strong&gt; — explicit, governed reduction of state&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Retrieval&lt;/strong&gt; — read-coupled-to-state, not detached lookup&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Notice what is missing. There is no insert. No update. No delete. The operations are about the &lt;em&gt;state&lt;/em&gt; of memory, not the &lt;em&gt;rows&lt;/em&gt; in it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The strongest claim
&lt;/h2&gt;

&lt;p&gt;Then they make the strongest claim in the paper:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;No record-level system can satisfy the correctness conditions, whatever storage engine sits underneath.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is the part worth sitting with.&lt;/p&gt;

&lt;p&gt;The claim is not that databases are slow. It is that the abstraction is wrong. Correctness lives in how memory state evolves over time, not in any single record.&lt;/p&gt;

&lt;p&gt;For anyone building long-running agents that are supposed to remember, this reframes the design question.&lt;/p&gt;

&lt;p&gt;Less: &lt;em&gt;"What is the right schema for memory rows?"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;More: &lt;em&gt;"What is the right vocabulary for memory state evolution?"&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The honest gap
&lt;/h2&gt;

&lt;p&gt;The prototype runs on a property graph, and the authors are honest about the gap: state-level revision and forgetting are expensive to do properly. Native engine work is still ahead.&lt;/p&gt;

&lt;h2&gt;
  
  
  Worth reading
&lt;/h2&gt;

&lt;p&gt;A short paper. Worth reading if you build for agents that have to remember.&lt;/p&gt;

&lt;p&gt;📄 Paper: &lt;a href="https://arxiv.org/abs/2605.26252" rel="noopener noreferrer"&gt;arxiv.org/abs/2605.26252&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Also shared &lt;a href="https://www.linkedin.com/posts/izgorodin_aiagents-aimemory-llms-share-7470864140660801537-MoMO/" rel="noopener noreferrer"&gt;on LinkedIn&lt;/a&gt; — Edward Izgorodin, June 11, 2026.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Related research on AI agent memory at &lt;a href="https://mnemoverse.com/docs/library/" rel="noopener noreferrer"&gt;mnemoverse.com/docs/library&lt;/a&gt;. I build &lt;a href="https://mnemoverse.com" rel="noopener noreferrer"&gt;Mnemoverse&lt;/a&gt; — open-source persistent memory for AI agents.&lt;/em&gt;&lt;/p&gt;

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