<?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: Alfredo Izquierdo</title>
    <description>The latest articles on DEV Community by Alfredo Izquierdo (@alfredoizjr).</description>
    <link>https://dev.to/alfredoizjr</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%2F3802145%2F4a4bb8e3-6da9-49bc-899b-4699d1d31481.jpg</url>
      <title>DEV Community: Alfredo Izquierdo</title>
      <link>https://dev.to/alfredoizjr</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/alfredoizjr"/>
    <language>en</language>
    <item>
      <title>Claude Code Compaction: Why Your Session Forgets Mid-Task (and the Fix)</title>
      <dc:creator>Alfredo Izquierdo</dc:creator>
      <pubDate>Thu, 24 Sep 2026 17:00:43 +0000</pubDate>
      <link>https://dev.to/alfredoizjr/claude-code-compaction-why-your-session-forgets-mid-task-and-the-fix-cef</link>
      <guid>https://dev.to/alfredoizjr/claude-code-compaction-why-your-session-forgets-mid-task-and-the-fix-cef</guid>
      <description>&lt;p&gt;Last week I published a piece about &lt;a href="https://contextforge.dev/blog/claude-code-session-handoff-how-to-resume-work" rel="noopener noreferrer"&gt;handing off a Claude Code session&lt;/a&gt; without re-explaining everything. A reader left a comment that stuck with me: "Compaction is the limit that actually bites." He was right, and I'd glossed over it. So this post is the one I should have written first.&lt;/p&gt;

&lt;p&gt;If you searched for "claude code compaction" because your session suddenly stopped knowing things it knew an hour ago, here's what's going on, what actually survives, and the small hook I shipped to fix the part that hurt me most.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; When a Claude Code session gets long, Claude summarizes the conversation to free space. The summary keeps the gist and drops the details, and the details are usually your decisions. You can't see what got cut. The fix is to keep decisions outside the conversation and put them back after every compaction. ContextForge 0.12.0 does that with a Claude Code hook that runs automatically.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  What compaction actually does
&lt;/h2&gt;

&lt;p&gt;Every model has a context window, and a working session fills it fast: file reads, tool output, your back-and-forth. When Claude Code gets close to the limit, it compacts. It writes a summary of everything so far, throws away the original messages, and keeps going with the summary plus whatever hadn't been summarized yet. You can trigger it yourself with &lt;code&gt;/compact&lt;/code&gt;, and it also happens on its own when the window fills up.&lt;/p&gt;

&lt;p&gt;From the outside it looks harmless. The status line says "Compacted," the conversation continues, and Claude still sounds like it knows what you're doing. That's the trap.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why you can't tell what you lost
&lt;/h2&gt;

&lt;p&gt;Here's the part my reader nailed. After a compaction you get the summary &lt;strong&gt;plus&lt;/strong&gt; the tail of messages that hadn't been folded in yet. Where that cut lands depends on the exact moment compaction fired. So no two resumes give you the same context, and from inside the session there's no seam to look for. The summary reads as complete.&lt;/p&gt;

&lt;p&gt;What actually falls out is predictable, though. Summaries are good at "we're refactoring the retry logic." They're bad at "retry logic goes in the client, not the handler, and we dropped the Redis layer because it added 40ms for nothing." The gist survives. The decisions evaporate. You find out when Claude cheerfully re-adds the caching layer you removed two hours ago.&lt;/p&gt;

&lt;h2&gt;
  
  
  What survives a compaction
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The gist of the task:&lt;/strong&gt; kept, as a summary.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Recent messages (the tail):&lt;/strong&gt; kept verbatim, but which ones depends on timing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Specific decisions and their reasons:&lt;/strong&gt; usually gone.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tool output and file contents you discussed:&lt;/strong&gt; gone.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Anything saved outside the conversation:&lt;/strong&gt; untouched.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That last line is the whole strategy. &lt;code&gt;--resume&lt;/code&gt; won't help you here, because it brings back the same compacted transcript. &lt;code&gt;CLAUDE.md&lt;/code&gt; helps for the stable stuff, but it goes stale the moment your decisions move faster than you edit the file (I wrote about that in &lt;a href="https://contextforge.dev/blog/why-claude-md-goes-stale" rel="noopener noreferrer"&gt;Why Your CLAUDE.md Goes Stale&lt;/a&gt;). What you want is the handful of decisions, stored somewhere compaction can't reach, and reloaded the instant the cut happens.&lt;/p&gt;

&lt;h2&gt;
  
  
  The fix: a hook that runs after every /compact
&lt;/h2&gt;

&lt;p&gt;Claude Code has a hooks system, and one of the events is &lt;code&gt;SessionStart&lt;/code&gt; with a &lt;code&gt;compact&lt;/code&gt; matcher. Anything a command prints there gets added straight into Claude's context right after the summary. That is exactly the moment we need.&lt;/p&gt;

&lt;p&gt;So in ContextForge MCP 0.12.0, &lt;code&gt;init&lt;/code&gt; installs this into your project's &lt;code&gt;.claude/settings.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="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"hooks"&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;"SessionStart"&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="nl"&gt;"matcher"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"compact"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"hooks"&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="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"command"&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 -y contextforge-mcp recall"&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;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;h2&gt;
  
  
  What the hook does after every /compact
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;recall&lt;/code&gt; is a new subcommand. It reads which project this folder is linked to, fetches the 10 most recent memories saved for that project and up to 5 pending tasks, and prints them as plain text. Claude Code appends that text to the context. From Claude's point of view, the decisions were never gone.&lt;/p&gt;

&lt;p&gt;Here's what it looks like in the terminal, right after a compaction:&lt;/p&gt;

&lt;p&gt;A few things I cared about while building it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;It can never break your session.&lt;/strong&gt; No API key, no linked project, no network, or more than eight seconds: it prints nothing and exits cleanly. You'd never know it ran.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It's a tool call, not magic.&lt;/strong&gt; The hook is a shell command. You can run &lt;code&gt;npx contextforge-mcp recall&lt;/code&gt; yourself from the project folder and see exactly what Claude will see.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It's fast.&lt;/strong&gt; About four seconds, most of it waiting on the network.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0fzaom2djfj7ajj5w1uz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0fzaom2djfj7ajj5w1uz.png" alt=" " width="800" height="507"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Setting it up
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;New to ContextForge?&lt;/strong&gt; Install the MCP server the usual way, then run this once in your project:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx contextforge-mcp init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That writes the memory rules to your &lt;code&gt;CLAUDE.md&lt;/code&gt; and, on Claude Code, adds the hook. Nothing else to configure. Full steps are in the &lt;a href="https://contextforge.dev/docs/compaction-recall" rel="noopener noreferrer"&gt;docs&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Already using it?&lt;/strong&gt; Update to 0.12.0 and re-run &lt;code&gt;init&lt;/code&gt; in each project. It's idempotent: it only adds what's missing and leaves your existing &lt;code&gt;settings.json&lt;/code&gt; and hooks alone.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx contextforge-mcp &lt;span class="nt"&gt;--version&lt;/span&gt;   &lt;span class="c"&gt;# should say 0.12.0 or newer&lt;/span&gt;
npx contextforge-mcp init        &lt;span class="c"&gt;# adds the hook, prints "already present" next time&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then test it: run &lt;code&gt;/compact&lt;/code&gt; in a session and ask "what context did you just receive?" If Claude quotes a block that starts with "ContextForge: context restored after compaction," you're set.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where it falls short
&lt;/h2&gt;

&lt;p&gt;I'd rather you know this now than find out later.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;It only brings back what was saved.&lt;/strong&gt; If nobody saved the decision, there's nothing to restore. The habit that does the real work is asking the agent to save decisions as you go, and "save where we are and what's next" before you close the terminal.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It still can't tell you what the summary dropped.&lt;/strong&gt; Nobody can. What it does is make that question matter less.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Claude Code only.&lt;/strong&gt; Cursor and Copilot don't have this hook system. The same saved memories are there when you open the project in those tools, but the automatic re-injection is a Claude Code feature.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Your project has to be linked.&lt;/strong&gt; The hook needs a &lt;code&gt;.contextforge&lt;/code&gt; file in the repo root to know which project's memories to fetch. Ask the agent to "link project" once and you're done.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;&lt;strong&gt;Does compaction happen without me asking?&lt;/strong&gt;&lt;br&gt;
Yes. Claude Code compacts automatically when the context window fills up, and you can trigger it manually with &lt;code&gt;/compact&lt;/code&gt;. Both fire the hook.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does this replace &lt;code&gt;--resume&lt;/code&gt;?&lt;/strong&gt;&lt;br&gt;
No. &lt;code&gt;--resume&lt;/code&gt; reopens a session on the same machine; use it. The hook covers what &lt;code&gt;--resume&lt;/code&gt; can't: the decisions that a compaction summarized away. They complement each other.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I see what the hook sends?&lt;/strong&gt;&lt;br&gt;
Run &lt;code&gt;npx contextforge-mcp recall&lt;/code&gt; from the project folder. It prints exactly the block Claude receives, or nothing if the project isn't linked or the API key can't be found.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why did the hook print nothing for me?&lt;/strong&gt;&lt;br&gt;
The usual causes: an old &lt;code&gt;CONTEXTFORGE_API_KEY&lt;/code&gt; exported in your shell that overrides the one in &lt;code&gt;~/.claude.json&lt;/code&gt;, an older global install of &lt;code&gt;contextforge-mcp&lt;/code&gt; shadowing &lt;code&gt;npx&lt;/code&gt;, or the project isn't linked yet. The docs have a short troubleshooting list.&lt;/p&gt;




&lt;p&gt;Compaction isn't a bug. It's the price of long sessions, and the alternative is a session that stops working. The mistake I made for months was treating the transcript as the thing worth keeping. It isn't. The decisions are. Keep those outside the conversation, hand them back at the right moment, and compaction becomes something you stop noticing.&lt;/p&gt;

&lt;p&gt;If you want to try it, &lt;a href="https://contextforge.dev" rel="noopener noreferrer"&gt;ContextForge&lt;/a&gt; has a free tier and the setup is three commands. And if you're the reader who left that comment: thank you. You were right.&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>compaction</category>
      <category>claude</category>
      <category>ai</category>
    </item>
    <item>
      <title>Claude Code Session Handoff: How to Resume Work Without Re-Explaining Everything</title>
      <dc:creator>Alfredo Izquierdo</dc:creator>
      <pubDate>Wed, 23 Sep 2026 14:56:19 +0000</pubDate>
      <link>https://dev.to/alfredoizjr/claude-code-session-handoff-how-to-resume-work-without-re-explaining-everything-39n2</link>
      <guid>https://dev.to/alfredoizjr/claude-code-session-handoff-how-to-resume-work-without-re-explaining-everything-39n2</guid>
      <description>&lt;h1&gt;
  
  
  Claude Code Session Handoff: How to Resume Work Without Re-Explaining Everything
&lt;/h1&gt;

&lt;p&gt;Tuesday, 4:50 pm. I'm forty minutes into moving our payment retry logic out of the request handler and into the client, Claude Code has the whole shape of it in its head, and a calendar reminder pops up. I close the terminal. Wednesday morning I open it again, type "continue the retry refactor," and get a polite question back: &lt;em&gt;which&lt;/em&gt; retry refactor? Everything we'd worked out the day before was gone.&lt;/p&gt;

&lt;p&gt;If you searched for "claude code session handoff how to resume work," you've had that morning too. The good news is that Claude Code has a real answer for the simple case. The bad news is that the simple case is smaller than it looks.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Claude Code Gives You Out of the Box
&lt;/h2&gt;

&lt;p&gt;Claude Code keeps your sessions on disk. Two flags bring one back:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude &lt;span class="nt"&gt;--continue&lt;/span&gt;      &lt;span class="c"&gt;# reopen the most recent session in this directory&lt;/span&gt;
claude &lt;span class="nt"&gt;--resume&lt;/span&gt;        &lt;span class="c"&gt;# pick from a list of past sessions&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That restores the conversation: what you asked, what it answered, which files it touched. For the Tuesday-to-Wednesday case on the same laptop, in the same repo, this is usually all you need. Start here before you build anything.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where &lt;code&gt;--resume&lt;/code&gt; Stops Working
&lt;/h2&gt;

&lt;p&gt;I leaned on &lt;code&gt;--resume&lt;/code&gt; for months and kept hitting the same four walls.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A different machine.&lt;/strong&gt; Sessions live in your local home directory. Your desktop doesn't know what your laptop did.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A different tool.&lt;/strong&gt; Open the same repo in Cursor or Claude Desktop and there is nothing to resume. Each tool has its own history.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A compacted or full context.&lt;/strong&gt; Long sessions get summarized to make room. The summary keeps the gist and drops the details, and the details are usually the decisions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Weeks later.&lt;/strong&gt; Resuming a three-week-old session drags in a lot of stale conversation to find the one decision that still matters.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In every case the thing you actually want back is not the transcript. It's the handful of decisions and facts the transcript contained.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Manual Handoff, and Why It Rots
&lt;/h2&gt;

&lt;p&gt;The workaround most of us reach for is a handoff note: a &lt;code&gt;HANDOFF.md&lt;/code&gt;, a section in &lt;code&gt;CLAUDE.md&lt;/code&gt;, or a paragraph you paste at the start of every session. It works, and I still recommend a short one for anything you'd tell a new teammate on day one.&lt;/p&gt;

&lt;p&gt;It stops working the moment it stops being short. Decisions pile up, half of them go stale as the code moves, and the agent starts trusting a note that is no longer true. I wrote about that failure mode in &lt;a href="https://contextforge.dev/blog/why-claude-md-goes-stale" rel="noopener noreferrer"&gt;Why Your CLAUDE.md Goes Stale&lt;/a&gt;. A hand-maintained file is a snapshot. A real project makes decisions faster than anyone updates a snapshot.&lt;/p&gt;

&lt;h2&gt;
  
  
  Persistent Memory: Saving the Decisions, Not the Transcript
&lt;/h2&gt;

&lt;p&gt;The approach that finally stuck for me was to stop trying to preserve the conversation and start preserving what came out of it. During the session, the agent saves the things that matter: "retry logic goes in the client, not the handler," "we dropped the caching layer," "the vendor API rejects batches over 50." In the next session, in any tool, on any machine, it searches that memory before it starts and picks up from the decisions instead of from zero.&lt;/p&gt;

&lt;p&gt;This is what I built ContextForge for. It runs as an MCP server, so the same memory is reachable from Claude Code, Claude Desktop, Cursor, Windsurf and ChatGPT. One line per tool:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude mcp add contextforge &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;CONTEXTFORGE_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&amp;lt;your-key&amp;gt; &lt;span class="nt"&gt;--&lt;/span&gt; npx &lt;span class="nt"&gt;-y&lt;/span&gt; contextforge-mcp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Two things worth being clear about, because the marketing version of this idea tends to skip them. First, nothing is injected magically. The agent has memory tools the same way it has a tool to read a file, and it saves and recalls because your &lt;code&gt;CLAUDE.md&lt;/code&gt; tells it to. Second, memory belongs to the Project linked to your repo, so a decision saved from Claude Code on the desktop is there when Cursor opens the repo on the laptop. That is the whole point.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Handoff That Actually Survives
&lt;/h2&gt;

&lt;p&gt;Here is the loop I use now for the retry refactor, or anything longer than one sitting.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Before you close the terminal&lt;/strong&gt;, ask the agent to save where things stand: what's done, what's next, and any decision you'd hate to re-derive. Thirty seconds.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Next session, same machine&lt;/strong&gt;, run &lt;code&gt;claude --continue&lt;/code&gt;. You get the transcript back, and the saved decisions are in memory as a safety net for anything compaction dropped.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Next session, different machine or tool&lt;/strong&gt;, just start. The agent queries memory for the project, finds "retry refactor: client-side, handler untouched, next step is the timeout config," and continues from there.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;When the code changes under a memory&lt;/strong&gt;, ContextForge flags it as possibly stale. You or the agent confirm it, correct it, or forget it. Skip this and old decisions quietly steer new work.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you split your day across several tools, &lt;a href="https://contextforge.dev/blog/how-to-share-context-between-claude-code-and-cursor" rel="noopener noreferrer"&gt;How to Share Context Between Claude Code and Cursor&lt;/a&gt; walks through step three in more detail. For the three-command setup with a video, see &lt;a href="https://contextforge.dev/blog/give-your-ai-coding-agent-a-memory-that-survives-every-session" rel="noopener noreferrer"&gt;Give Your AI Coding Agent a Memory That Survives Every Session&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where It Falls Short
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Setup is real.&lt;/strong&gt; An API key and an MCP entry per tool. Ten minutes, once, but not zero.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Memory only holds what gets saved.&lt;/strong&gt; If nobody saves the decision, it isn't there. The pre-close habit in step one is doing most of the work.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It doesn't replace reading the code.&lt;/strong&gt; Memory says what you decided. The file says what the code does today. The agent needs both.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It's early.&lt;/strong&gt; Small team, active development, rough edges. Core first, polish second.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  A Practical Next Step
&lt;/h2&gt;

&lt;p&gt;Tonight, before you close Claude Code, type one line: "save where we are on this task and what's next." Tomorrow, open the same repo in a different tool or on a different machine and ask it what you were doing. If it answers correctly, you have a session handoff that doesn't depend on a transcript. If you want the setup walkthrough first, start with &lt;a href="https://contextforge.dev/blog/mcp-memory-server-how-to-give-claude-cursor-persistent-memory-2026" rel="noopener noreferrer"&gt;MCP Memory Server: How to Give Claude &amp;amp; Cursor Persistent Memory&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>claudecode</category>
      <category>mcp</category>
      <category>sessionhandoff</category>
      <category>persistentmemory</category>
    </item>
    <item>
      <title>Cursor Rules vs Persistent Memory</title>
      <dc:creator>Alfredo Izquierdo</dc:creator>
      <pubDate>Thu, 17 Sep 2026 16:48:18 +0000</pubDate>
      <link>https://dev.to/alfredoizjr/cursor-rules-vs-persistent-memory-3a19</link>
      <guid>https://dev.to/alfredoizjr/cursor-rules-vs-persistent-memory-3a19</guid>
      <description>&lt;p&gt;Last month I spent most of an afternoon in Cursor untangling a generic type constraint in a shared utilities package. I got it right, wrote a short note about &lt;em&gt;why&lt;/em&gt; it had to be that way, and closed the laptop. Two days later I opened the same repo, asked Cursor to extend that utility, and it cheerfully proposed the exact constraint I had ruled out. My &lt;code&gt;.cursor/rules&lt;/code&gt; file was right there. It just doesn't hold that kind of information.&lt;/p&gt;

&lt;p&gt;That afternoon is the whole "cursor rules vs persistent memory" question in one scene. Rules and memory get lumped together because both are "context you give the agent," but they answer different questions, and mixing them up is why so many rules files end up as 400-line dumping grounds.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Cursor Rules Actually Are
&lt;/h2&gt;

&lt;p&gt;Cursor rules are plain instruction files you write by hand: a project-level &lt;code&gt;.cursorrules&lt;/code&gt; file, or the newer &lt;code&gt;.cursor/rules/*.mdc&lt;/code&gt; files that can be scoped to paths. Cursor reads them into the prompt so the agent behaves the way you want. Typical contents:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which language and framework conventions to follow&lt;/li&gt;
&lt;li&gt;How to name things, format code, structure tests&lt;/li&gt;
&lt;li&gt;What to avoid ("never edit the generated client," "don't add dependencies without asking")&lt;/li&gt;
&lt;li&gt;A short description of the project so the agent isn't guessing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Rules are static and deliberate. You write them once, they apply to every conversation, and they change only when you edit the file. That's their strength. It's also the reason they can't remember your Tuesday afternoon: a rules file describes how the project &lt;em&gt;should&lt;/em&gt; be worked on, not what happened while working on it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Rules Can't Remember Decisions
&lt;/h2&gt;

&lt;p&gt;Everything Cursor knows in a session lives in the model's context window: the rules, the files you've opened, the chat so far. When the session ends, that context is gone. The rules survive because they're a file on disk that gets loaded again. The decision about the type constraint doesn't survive, because it was only ever in the conversation.&lt;/p&gt;

&lt;p&gt;You can try to promote decisions into the rules file. Plenty of people do. It works for a few weeks, then two things happen. The file grows past what anyone will maintain, and half of it goes stale as the code moves on. I wrote about that failure mode for &lt;code&gt;CLAUDE.md&lt;/code&gt; in &lt;a href="https://contextforge.dev/blog/why-claude-md-goes-stale" rel="noopener noreferrer"&gt;Why Your CLAUDE.md Goes Stale&lt;/a&gt;, and Cursor rules rot the same way, for the same reason: a hand-maintained file can't keep up with the rate at which a real project makes decisions.&lt;/p&gt;

&lt;p&gt;Think of rules as the house style guide of a newsroom. Every writer reads it. It says nothing about the story you were reporting yesterday.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Persistent Memory Adds
&lt;/h2&gt;

&lt;p&gt;Persistent memory stores decisions, preferences and project facts &lt;em&gt;outside&lt;/em&gt; the context window, in a place the agent can search later. Instead of you copying "we dropped the caching layer" into a file, the agent saves it as a memory during the session and recalls it the next time the topic comes up, in Cursor or in whatever tool you switch to.&lt;/p&gt;

&lt;p&gt;The kinds of things that belong in memory rather than in rules:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Design decisions and the reason behind them&lt;/li&gt;
&lt;li&gt;Bugs you've already chased and how they were fixed&lt;/li&gt;
&lt;li&gt;Constraints that surfaced mid-task ("the vendor API rejects batches over 50")&lt;/li&gt;
&lt;li&gt;Things you said once in a chat and don't want to say again&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Rules stay short and stable. Memory grows with the project. That division is the point: each one does the job it's good at.&lt;/p&gt;

&lt;h2&gt;
  
  
  How ContextForge Fits In
&lt;/h2&gt;

&lt;p&gt;ContextForge is the memory layer I built after too many afternoons like the one above. It runs as an MCP server, so the same memory is reachable from Cursor, Claude Code, Claude Desktop, Windsurf and ChatGPT. You add it once per tool:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude mcp add contextforge &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;CONTEXTFORGE_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&amp;lt;your-key&amp;gt; &lt;span class="nt"&gt;--&lt;/span&gt; npx &lt;span class="nt"&gt;-y&lt;/span&gt; contextforge-mcp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In practice it looks like this. You finish the type-constraint work in Cursor and the agent saves the decision to the Project linked to your repo, with the reasoning attached. Two days later you ask Cursor to extend the utility. Before it proposes anything, it searches memory, finds the note, and doesn't repeat the mistake. If you open the same repo in Claude Code on Friday, it finds the same note, because the memory belongs to the project, not to the tool.&lt;/p&gt;

&lt;p&gt;Inside a Project, memories are grouped into Spaces (folders by topic), Tasks track open issues, and the Git integration pulls commit messages and pull requests in as well. The piece that keeps it honest is freshness checks: when the code a memory describes has changed since it was saved, ContextForge flags it, and you or the agent can confirm it, correct it, or forget it. That is the difference between memory and a rules file that quietly lies to you six weeks later.&lt;/p&gt;

&lt;p&gt;If you're setting up MCP memory for the first time, the walkthrough in &lt;a href="https://contextforge.dev/blog/mcp-memory-server-how-to-give-claude-cursor-persistent-memory-2026" rel="noopener noreferrer"&gt;MCP Memory Server: How to Give Claude &amp;amp; Cursor Persistent Memory&lt;/a&gt; covers the basics. And if you bounce between Cursor and Claude Code all day, &lt;a href="https://contextforge.dev/blog/how-to-share-context-between-claude-code-and-cursor" rel="noopener noreferrer"&gt;How to Share Context Between Claude Code and Cursor&lt;/a&gt; goes deeper on that specific workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where It Falls Short
&lt;/h2&gt;

&lt;p&gt;I'd rather you hear this from me than find out on day three.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;There's a setup step.&lt;/strong&gt; An API key and an MCP entry in each tool. One-time, but not zero.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Memory only holds what gets saved.&lt;/strong&gt; ContextForge doesn't know what matters. If the agent never saves the decision, it isn't there. Your rules file is the right place to tell the agent &lt;em&gt;when&lt;/em&gt; to save, which is the one job rules and memory share.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It doesn't replace reading the code.&lt;/strong&gt; Memory says what you decided. The file says what the code does today. The agent still needs both.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It's early.&lt;/strong&gt; Small team, active development, rough edges. We ship the core first and polish second.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Routines (scheduled cloud agents) and Skills (reusable prompt templates) sit on top of this, but they're a topic for another day. Get the basic loop working first.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Practical Next Step
&lt;/h2&gt;

&lt;p&gt;Open your rules file and read it with one question in mind: which lines are &lt;em&gt;how to work&lt;/em&gt; and which are &lt;em&gt;what we decided&lt;/em&gt;? Keep the first kind. Move the second kind into memory, or delete them if they're already stale. Then do one real task in Cursor with a memory server connected and check what got saved. If the next session already knows what you decided in the last one, you'll feel the difference immediately.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>cursor</category>
      <category>mcp</category>
      <category>programming</category>
    </item>
    <item>
      <title>How ContextForge Saves Tokens in Claude Code and Cursor</title>
      <dc:creator>Alfredo Izquierdo</dc:creator>
      <pubDate>Mon, 14 Sep 2026 18:31:13 +0000</pubDate>
      <link>https://dev.to/alfredoizjr/how-contextforge-saves-tokens-in-claude-code-and-cursor-3b5e</link>
      <guid>https://dev.to/alfredoizjr/how-contextforge-saves-tokens-in-claude-code-and-cursor-3b5e</guid>
      <description>&lt;p&gt;Last month I opened the usage page of my Claude account and did the math I had been avoiding. Most of the tokens I pay for are not the code the model writes. They are the same things I feed it again and again: what the project is, how it is laid out, which decisions we already made, which tool does what. I was paying to re-introduce my own project to the model several times a day.&lt;/p&gt;

&lt;p&gt;So let me be upfront: ContextForge saves tokens, but there is no trick in it. It replaces the big blob of context you paste every time with a small lookup when the model actually needs something. Below is where the tokens go, what changes with a memory server, and where it doesn't help you at all.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where the tokens actually go in a coding session
&lt;/h2&gt;

&lt;p&gt;Before talking about saving anything, look at what a normal Claude Code or Cursor session spends on. In my projects it is always the same four things, in different proportions.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;The static preamble.&lt;/strong&gt; Your &lt;code&gt;CLAUDE.md&lt;/code&gt; or rules file, loaded on every single session whether today's task needs it or not. In our own repo the two &lt;code&gt;CLAUDE.md&lt;/code&gt; files add up to about 14 KB, roughly 3,500 tokens, before you type a word.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tool definitions.&lt;/strong&gt; Every MCP server you connect sends its tool schemas to the model at the start of the session. This one is invisible in the UI and it adds up fast. More on it below, with real numbers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Re-explanation.&lt;/strong&gt; "We use Postgres for sessions, not Redis." "Errors return problem+json." "Don't touch the legacy auth module." You type these, or the model re-reads the files that contain them, once per session. Sometimes once per tool.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rework.&lt;/strong&gt; The expensive one. The model confidently does the thing you decided against three weeks ago, you notice, you explain, it redoes it. Every token in that loop was wasted.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Bigger context windows don't fix any of this. I wrote about why in &lt;a href="https://contextforge.dev/blog/context-rot-bigger-windows-wont-save-you" rel="noopener noreferrer"&gt;Context Rot: Bigger Windows Won't Save You&lt;/a&gt;. A larger bucket just lets you waste more per session.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pull the two facts you need, not the forty you don't
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;CLAUDE.md&lt;/code&gt; approach loads everything, always. A memory server flips that. When the agent needs context, it calls &lt;code&gt;memory_query&lt;/code&gt; with what it is working on, and gets back the handful of items that match.&lt;/p&gt;

&lt;p&gt;Two design details in ContextForge matter here:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Results come back as previews.&lt;/strong&gt; A query returns short summaries (about 150 characters each) with an ID. The agent only pulls the full text of an item, with &lt;code&gt;memory_get&lt;/code&gt;, when it actually needs it. A query about "auth session storage" costs a few hundred tokens, not the whole knowledge base.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Spaces narrow the search.&lt;/strong&gt; Memory is organized into spaces inside a project (auth, billing, infra). Searching the auth space for an auth question returns auth answers, with no billing noise to skim past and pay for.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So the trade is: a small retrieval when it is needed, instead of a large preamble whether it is needed or not. On a project with any history, that is the biggest single saving, and it grows as the project grows. I wrote about the stale-file side of this in &lt;a href="https://contextforge.dev/blog/why-claude-md-goes-stale" rel="noopener noreferrer"&gt;Why Your CLAUDE.md Goes Stale&lt;/a&gt;; the token side is the same story from the other end.&lt;/p&gt;

&lt;h2&gt;
  
  
  69 tools, but the model only sees 11
&lt;/h2&gt;

&lt;p&gt;This is the one I actually measured, because the number surprised me when I first saw it.&lt;/p&gt;

&lt;p&gt;ContextForge exposes 69 tools over MCP: memory, tasks, git sync, snapshots, team, and so on. Until version 0.11.0 the client sent all 69 schemas to the model on every session. I spawned the server and measured the raw &lt;code&gt;tools/list&lt;/code&gt; payload:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Mode&lt;/th&gt;
&lt;th&gt;Tools visible&lt;/th&gt;
&lt;th&gt;Payload size&lt;/th&gt;
&lt;th&gt;Approx. tokens&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Full (pre 0.11.0)&lt;/td&gt;
&lt;td&gt;69&lt;/td&gt;
&lt;td&gt;45 KB&lt;/td&gt;
&lt;td&gt;7,000 to 11,000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lean (default now)&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;11 KB&lt;/td&gt;
&lt;td&gt;2,000 to 2,800&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The exact token count depends on the tokenizer and on how your client formats the schemas, which is why I give a range. The proportion is stable: roughly 75% fewer tokens spent on tool definitions, on every session, before any work happens.&lt;/p&gt;

&lt;p&gt;How it works: the lean set is the ten tools people actually call all day (query, ingest, correct, forget, tasks, sessions, help) plus one gateway tool called &lt;code&gt;cf_tools&lt;/code&gt;. If the agent needs one of the other 59, it asks the gateway in plain language ("sync my git commits", "restore a snapshot") and the gateway finds and runs the right tool. Nothing was removed. The schemas just stopped riding along in every prompt.&lt;/p&gt;

&lt;p&gt;There is a second effect that isn't about tokens. Cursor caps MCP tools at 40, and several clients get noticeably worse at picking the right tool past roughly 50. Eleven tools keeps ContextForge well under both lines. If you want the old behavior, set &lt;code&gt;CONTEXTFORGE_TOOLS=full&lt;/code&gt; and you get all 69 back.&lt;/p&gt;

&lt;h2&gt;
  
  
  The tokens you don't spend twice
&lt;/h2&gt;

&lt;p&gt;This one is harder to put a number on, so I'll describe it instead of measuring it.&lt;/p&gt;

&lt;p&gt;When Claude Code saves a decision on Monday and Cursor reads it on Tuesday, the Tuesday session skips the whole "let me explain the architecture" opening. That is a few hundred to a couple of thousand tokens per session, depending on how much you usually paste. It doesn't sound like much until you count how many sessions you open in a week.&lt;/p&gt;

&lt;p&gt;The bigger saving is the rework bucket. A model that knows "sessions live in Postgres, decided 2026-04-11, here is why" does not propose Redis, does not get corrected, and does not redo the work. One avoided wrong turn can cost more than a whole day of memory queries. I don't have a clean way to measure avoided mistakes, so I'm not going to give you a percentage. I can tell you it's the reason I built this, more than the schema math above. The setup for two tools sharing one memory is in &lt;a href="https://contextforge.dev/blog/how-to-share-context-between-claude-code-and-cursor" rel="noopener noreferrer"&gt;How to Share Context Between Claude Code and Cursor&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where ContextForge does not save tokens
&lt;/h2&gt;

&lt;p&gt;I would rather you hear this from me than find out after signing up.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Every memory call costs tokens.&lt;/strong&gt; A query and its results are a few hundred tokens. Saving a memory is a few hundred more. If the agent queries on every turn because your rules file tells it to, you can spend more than you save. Tell it to query at the start of a task and when it hits something unfamiliar, not constantly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It does not shrink the code the model has to read.&lt;/strong&gt; Memory tells the agent what you decided, not what the file says today. It still has to open the file. Retrieval replaces the explanation, not the reading.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Memory only pays off if it exists.&lt;/strong&gt; An empty memory saves nothing. The first week is an investment: the agent saves decisions as you make them (because it has the tools and the instruction to use them), and the returns start when the second session, or the second tool, reads them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stale memory costs tokens too.&lt;/strong&gt; A six-week-old decision that no longer matches the code sends the agent down the wrong path just as surely as no memory at all. ContextForge runs freshness checks that flag items when the code they describe has changed, and you confirm, correct or forget them. Skip that and the savings turn into rework.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  A rough picture of one week
&lt;/h2&gt;

&lt;p&gt;Take a developer who runs three or four sessions a day across Claude Code and Cursor, on a project with a 14 KB rules file and a couple of MCP servers connected. Their fixed cost per session, before any work, is somewhere around 3,500 tokens of preamble plus 7,000 to 11,000 tokens of ContextForge tool schemas in the old full mode. Call it 12,000 tokens a session that produce no code.&lt;/p&gt;

&lt;p&gt;Move the project facts into memory, keep the rules file to the short "how to behave" part, and run the lean tool set. The same session starts at roughly 2,500 tokens (a trimmed rules file plus the lean schemas), and adds a few hundred per query when the agent actually needs something. Most sessions land under 5,000 tokens of overhead. Over twenty sessions a week that is well over 100,000 tokens not spent on introductions, and that is before counting a single avoided wrong turn.&lt;/p&gt;

&lt;p&gt;Your numbers will be different from mine. I would be surprised if the picture were.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where to start
&lt;/h2&gt;

&lt;p&gt;If you want to see the effect on your own project rather than trust my table: connect ContextForge to one tool, run &lt;code&gt;memory_query&lt;/code&gt; on a real question, and look at the size of the response next to the size of the rules file you would have pasted instead. Then check what your client reports for tool definitions with &lt;code&gt;CONTEXTFORGE_TOOLS=full&lt;/code&gt; versus the default. Those two comparisons take about ten minutes, and honestly they make the case better than this post does. The install is one line:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude mcp add contextforge &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;CONTEXTFORGE_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&amp;lt;your-key&amp;gt; &lt;span class="nt"&gt;--&lt;/span&gt; npx &lt;span class="nt"&gt;-y&lt;/span&gt; contextforge-mcp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The free tier covers one project and 500 queries a month, which is enough to find out whether the math works for you.&lt;/p&gt;

</description>
      <category>tokens</category>
      <category>claudecode</category>
      <category>cursor</category>
      <category>mcp</category>
    </item>
    <item>
      <title>How to Share Context Between Claude Code and Cursor</title>
      <dc:creator>Alfredo Izquierdo</dc:creator>
      <pubDate>Wed, 09 Sep 2026 14:41:32 +0000</pubDate>
      <link>https://dev.to/alfredoizjr/how-to-share-context-between-claude-code-and-cursor-3n2a</link>
      <guid>https://dev.to/alfredoizjr/how-to-share-context-between-claude-code-and-cursor-3n2a</guid>
      <description>&lt;p&gt;You're an hour deep into a debugging session with Claude Code. Good progress. Then you open Cursor to refactor the same function, and it has no idea what you were just doing. So you re-explain. Switch back, re-explain again. This is the question behind "how to share context between Claude Code and Cursor," and the short answer is: neither tool will do it for you, but there is a clean way to make them share one memory.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Core Problem: Context Dies With the Session
&lt;/h2&gt;

&lt;p&gt;This isn't a bug in either tool. Claude Code works inside its context window (200,000 tokens on most tiers, more on some), and when the session ends, that context is gone. Cursor lives in its own world and knows nothing about what happened elsewhere. Two silos.&lt;/p&gt;

&lt;p&gt;Imagine writing a novel with a co-author who forgets everything you wrote the moment you switch computers. That's your coding workflow right now.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Usual Workarounds (and Why They Don't Hold Up)
&lt;/h2&gt;

&lt;p&gt;Most of us tried these first. They work for about a week.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Copy-pasting.&lt;/strong&gt; Manually moving snippets and notes between tools. Tedious, error-prone, and it collapses on anything bigger than a toy project.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;CLAUDE.md&lt;/code&gt; files.&lt;/strong&gt; Writing context into a Markdown file both tools can read. This is fine for a small project, but the file is only as good as the last time you remembered to update it. I wrote about exactly why in &lt;a href="https://contextforge.dev/blog/why-claude-md-goes-stale" rel="noopener noreferrer"&gt;Why Your CLAUDE.md Goes Stale&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Shared docs.&lt;/strong&gt; Notion, Google Docs, a notes app. Still manual, and the content never reaches the tool where you're actually coding.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All three patch the symptom. The root cause is that Claude Code and Cursor have no memory layer they both can read and write.&lt;/p&gt;

&lt;h2&gt;
  
  
  What MCP Changes
&lt;/h2&gt;

&lt;p&gt;The Model Context Protocol (MCP) is a standard that lets an AI tool talk to an external memory server: save a decision, recall a preference, look up a project fact. Because it's a standard, the same memory server can serve Claude Code, Cursor, Claude Desktop, Windsurf and ChatGPT at once. That is the whole trick: you don't share context &lt;em&gt;between&lt;/em&gt; the tools, you give them one shared place to keep it.&lt;/p&gt;

&lt;p&gt;If you haven't set up an MCP memory server yet, start with &lt;a href="https://contextforge.dev/blog/mcp-memory-server-how-to-give-claude-cursor-persistent-memory-2026" rel="noopener noreferrer"&gt;MCP Memory Server: How to Give Claude &amp;amp; Cursor Persistent Memory (2026)&lt;/a&gt;. It covers the basic setup.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Concrete Example with ContextForge
&lt;/h2&gt;

&lt;p&gt;ContextForge is the memory layer I built for exactly this. It runs as an MCP server, and you add it to each tool once:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude mcp add contextforge &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;CONTEXTFORGE_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&amp;lt;your-key&amp;gt; &lt;span class="nt"&gt;--&lt;/span&gt; npx &lt;span class="nt"&gt;-y&lt;/span&gt; contextforge-mcp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here's what a normal week looks like with both tools pointed at it:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Claude Code, Monday.&lt;/strong&gt; You're debugging a Python function. As you decide things ("the retry logic goes in the client, not the handler," "we're dropping the caching layer"), Claude Code saves those decisions to ContextForge. Not magically: it saves them because it has the memory tools and the instructions to use them, the same way it has a tool to read a file. They land in the Project linked to your repo.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cursor, Tuesday.&lt;/strong&gt; You open the same repo in Cursor to refactor that function. Cursor is connected to the same ContextForge project, so before it touches anything it can pull up Monday's decisions. It doesn't propose the caching layer you already killed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Claude Code, Friday.&lt;/strong&gt; You come back after three days on something else. It recalls the whole thread instead of asking you to summarize it.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It isn't only decisions. Preferences, conventions, the commands you always run, the one weird constraint in your deploy: anything the agent saves is there for the other tool. You can browse all of it in the dashboard at &lt;a href="https://contextforge.dev" rel="noopener noreferrer"&gt;contextforge.dev&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Spaces, Projects, and Keeping Memory Honest
&lt;/h2&gt;

&lt;p&gt;Inside a Project, memories are organized into Spaces, which are just folders by topic (auth, billing, infra). Tasks track the issues you're working on, and the Git integration pulls commit messages and pull request descriptions in as well, so "why did we do this" usually has an answer.&lt;/p&gt;

&lt;p&gt;The part people skip is governance. Code moves fast and memories go stale. ContextForge runs freshness checks that flag a memory when the code it describes has changed since it was saved. You, or the agent, can then confirm it, correct it, or forget it. Skip this and a six-week-old decision will quietly steer today's work, which is worse than having no memory at all.&lt;/p&gt;

&lt;h2&gt;
  
  
  Limitations, Honestly
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;There's a setup.&lt;/strong&gt; One-time, but real: an API key and an MCP entry in each tool. It's not plug-and-play yet, and we're still smoothing it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Memory is only what gets saved.&lt;/strong&gt; ContextForge doesn't know what matters. If the agent doesn't save a decision, it isn't there. Your &lt;code&gt;CLAUDE.md&lt;/code&gt; or rules file should tell the agent when to save, and you'll still nudge it sometimes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It complements reading the code.&lt;/strong&gt; Memory tells the agent what you decided, not what the code does today. It still has to read the file.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It's early.&lt;/strong&gt; Small team, active development, occasional rough edges. We ship core functionality first and polish second.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Where to Start
&lt;/h2&gt;

&lt;p&gt;If you use both tools daily, the order that worked for me: get one MCP memory server running, connect Claude Code to it first, then Cursor. Do one real task in each and check what got saved. From there the habit builds itself, because the first time Cursor already knows what you decided in Claude Code, you won't want to go back.&lt;/p&gt;

</description>
      <category>claude</category>
      <category>mcp</category>
      <category>cursor</category>
      <category>memory</category>
    </item>
    <item>
      <title>Does Claude Remember Between Individual Chats in the Same Thread?</title>
      <dc:creator>Alfredo Izquierdo</dc:creator>
      <pubDate>Thu, 03 Sep 2026 14:37:54 +0000</pubDate>
      <link>https://dev.to/alfredoizjr/does-claude-remember-between-individual-chats-in-the-same-thread-24b6</link>
      <guid>https://dev.to/alfredoizjr/does-claude-remember-between-individual-chats-in-the-same-thread-24b6</guid>
      <description>&lt;p&gt;If you build with Claude, you've almost certainly asked it: &lt;strong&gt;does Claude remember between individual chats in the same thread?&lt;/strong&gt; It's one of the most common questions developers have about Claude's memory, and the honest answer is more nuanced than a simple yes or no.&lt;/p&gt;

&lt;p&gt;The short version: it depends on what you mean by "remember." Within a single conversation, Claude remembers your context really well. Start a brand-new chat, and that memory resets to zero. Understanding the gap between those two behaviors — how Claude remembers within a thread versus across separate chats — is the difference between an AI feature that works in a demo and one that holds up in production. Let's break down exactly how Claude's memory works, why it works that way, and what you can do about it.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Claude's Memory Works: The Context Window
&lt;/h2&gt;

&lt;p&gt;Claude, like every large language model, doesn't have persistent memory the way a person does. Claude's memory lives entirely inside the &lt;strong&gt;context window&lt;/strong&gt; — the amount of text the model can "see" at once when it generates a response. Everything Claude knows in a given moment sits in that window: your current message, the earlier messages in the thread, any system instructions, and any files or data you've pasted in.&lt;/p&gt;

&lt;p&gt;Claude's context window is large — currently up to 200,000 tokens, with versions supporting even bigger windows. A token is roughly three-quarters of a word, so that's a lot of room (hundreds of pages). But it isn't infinite, and — this is the key part — &lt;strong&gt;the context window doesn't carry over between separate chats.&lt;/strong&gt; Open a new conversation and you get a fresh, empty window. Nothing from yesterday's chat is waiting there.&lt;/p&gt;

&lt;h2&gt;
  
  
  Does Claude Remember Previous Conversations?
&lt;/h2&gt;

&lt;p&gt;This is where "does Claude remember between individual chats" splits into two very different answers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Within a chat thread — yes, Claude remembers.&lt;/strong&gt; The model keeps a running history of the conversation. Mention a constraint early on and refer back to it twenty messages later, and Claude can generally recall it. This is the smooth, "it just works" case, as long as the conversation fits inside the context window.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Across individual chats — no, Claude does not remember on its own.&lt;/strong&gt; Creating a new chat starts a completely fresh context window. &lt;strong&gt;Claude does not automatically carry information from one separate chat into another.&lt;/strong&gt; Think of it like starting a new email thread: none of the previous thread's content is present unless you bring it in. So if you're wondering whether Claude remembers previous conversations from last week, the answer is no — not without help.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why Claude's Memory Trips People Up
&lt;/h2&gt;

&lt;p&gt;The reason this is so easy to get wrong is that &lt;em&gt;within&lt;/em&gt; a thread, Claude feels like it has real, persistent memory. It remembers your name, the bug you're chasing, the coding style you asked for. So it's natural to assume that memory follows you into the next session. It doesn't.&lt;/p&gt;

&lt;p&gt;There's also a subtler failure mode inside a single thread: the context window filling up. On very long conversations, the earliest messages eventually fall out of the window to make room for new ones. When that happens, Claude appears to "forget" something from the start of the chat — not out of carelessness, but because that text is no longer in front of it. Knowing where that edge is lets you design around it instead of getting surprised.&lt;/p&gt;

&lt;h2&gt;
  
  
  Practical Examples: When Claude Remembers and When It Doesn't
&lt;/h2&gt;

&lt;p&gt;Say you're building a customer-support chatbot.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Scenario 1 (good):&lt;/strong&gt; A customer asks, "What's my order number?" Claude provides it. Later in the &lt;em&gt;same&lt;/em&gt; chat they ask, "Can you track that order?" Claude handles it easily, because the order number is still inside the context window.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scenario 2 (problematic):&lt;/strong&gt; The customer ends the chat. The next day, in a &lt;em&gt;new&lt;/em&gt; chat, they ask, "Can you track my order?" With no context provided, Claude has no idea which order they mean. Your app has to re-supply that history or the experience falls apart.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That second scenario quietly breaks a lot of AI features. The demo works because everything happens in one session. Real usage happens across many sessions — which is exactly why Claude's memory across chats becomes an architecture decision, not just trivia.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI Agent Memory Across Tools and the Model Context Protocol (MCP)
&lt;/h2&gt;

&lt;p&gt;The same limitation shows up hard once you move from chatbots to agents. &lt;strong&gt;AI agent memory across tools&lt;/strong&gt; is the whole ballgame: an agent needs to remember its goals, its progress, and past decisions as it moves between a code editor, a browser, and a terminal. Without persistent memory, every hop is a fresh start.&lt;/p&gt;

&lt;p&gt;This is exactly the gap the &lt;strong&gt;Model Context Protocol (MCP)&lt;/strong&gt; is meant to close. MCP is a standardized way to feed context to LLMs from external sources — memory stores, databases, tools — instead of relying on whatever happens to be in the current chat window. The goal is one continuous "conversation" that survives across sessions and across applications, because the relevant context is retrieved and supplied on demand. It's an active, fast-moving space.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Give Claude Persistent Memory Today
&lt;/h2&gt;

&lt;p&gt;You don't have to wait for the ecosystem to mature to get better continuity right now:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Re-supply context yourself.&lt;/strong&gt; Store the important facts (user profile, past decisions, project state) in your own database and inject the relevant slice into each new prompt. This is the most reliable approach for production.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Summarize instead of dumping.&lt;/strong&gt; Don't paste an entire previous conversation into a new one — you'll burn the context window fast. Distill it to the handful of facts that matter, then include that.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use a persistent memory layer.&lt;/strong&gt; Rather than hand-rolling all of this, a memory layer can store and retrieve context for you, so each new session starts with the relevant history already in place.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Where ContextForge Fits In
&lt;/h2&gt;

&lt;p&gt;At ContextForge, we're focused on making Claude's memory problem manageable. The goal isn't to replace Claude or any other LLM — it's to give developers a persistent memory layer their apps can write to and read from across sessions, MCP-based access so context can flow between tools, and clear visibility into what's actually in the context window.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Short Answer
&lt;/h2&gt;

&lt;p&gt;So, does Claude remember between individual chats in the same thread? &lt;strong&gt;Within a thread, yes — across separate chats, not on its own.&lt;/strong&gt; Claude faithfully uses whatever is in the current context window and nothing more. Once that clicks, the fix is obvious: stop hoping the model will remember, and start deciding what context to bring into each session. That single shift is the difference between a chatbot that forgets everyone the moment they leave and an AI assistant that actually feels like it knows them.&lt;/p&gt;

&lt;p&gt;What's your experience with Claude's memory across sessions? If you want to go deeper on persistent memory, AI agent memory, and MCP, take a look around the site.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>claude</category>
      <category>agentskills</category>
      <category>programming</category>
    </item>
    <item>
      <title>How to Give Claude &amp; Cursor Persistent Memory 2026</title>
      <dc:creator>Alfredo Izquierdo</dc:creator>
      <pubDate>Wed, 26 Aug 2026 15:42:48 +0000</pubDate>
      <link>https://dev.to/alfredoizjr/how-to-give-claude-cursor-persistent-memory-2026-1oj4</link>
      <guid>https://dev.to/alfredoizjr/how-to-give-claude-cursor-persistent-memory-2026-1oj4</guid>
      <description>&lt;p&gt;Install the free official MCP memory server, then upgrade to project-aware ContextForge. 2026 guide.&lt;/p&gt;

&lt;p&gt;Here's a small tragedy that plays out in my terminal every single morning: I open&lt;br&gt;
Claude Code, and it has no idea who I am, what I'm building, or what we decided&lt;br&gt;
yesterday. Same with Cursor. Brilliant assistants, zero memory. It's like working&lt;br&gt;
with a genius who has amnesia.&lt;/p&gt;

&lt;p&gt;The fix is an &lt;strong&gt;MCP memory server&lt;/strong&gt; — a little service that plugs into Claude or&lt;br&gt;
Cursor over the Model Context Protocol and gives your assistant memory that&lt;br&gt;
survives when the session ends. In this guide I'll show you exactly how to set one&lt;br&gt;
up, starting with the free official server and then the project-aware option I&lt;br&gt;
ended up building because the official one wasn't enough for real work.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;New to this whole space? I ranked&lt;br&gt;
&lt;a href="https://contextforge.dev/blog/best-ai-memory-tools-for-claude-in-2026-top-8-ranked" rel="noopener noreferrer"&gt;the 8 best AI memory tools for Claude&lt;/a&gt;&lt;br&gt;
and did a deep &lt;a href="https://contextforge.dev/blog/contextforge-vs-mem0-vs-zep-best-ai-memory-layer-2026" rel="noopener noreferrer"&gt;ContextForge vs Mem0 vs Zep&lt;/a&gt;&lt;br&gt;
comparison in separate posts. This one is the hands-on &lt;em&gt;how to actually install&lt;br&gt;
one&lt;/em&gt; guide.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
  
  
  What is an MCP memory server?
&lt;/h2&gt;

&lt;p&gt;MCP — the &lt;strong&gt;Model Context Protocol&lt;/strong&gt; — is the open standard that lets tools like&lt;br&gt;
Claude Code and Cursor talk to external services. An &lt;strong&gt;MCP memory server&lt;/strong&gt; is just&lt;br&gt;
one of those services, with one job: store what your assistant learns (facts,&lt;br&gt;
decisions, project context) and hand the right pieces back at the start of the&lt;br&gt;
next conversation.&lt;/p&gt;

&lt;p&gt;Without one, everything your assistant knows lives inside a single session's&lt;br&gt;
context window — and vanishes the moment that session closes. With one, memory&lt;br&gt;
lives &lt;em&gt;outside&lt;/em&gt; the model, so tomorrow's you doesn't start from zero.&lt;/p&gt;

&lt;p&gt;Two ways to get there, from simplest to most capable. Let's do both.&lt;/p&gt;
&lt;h2&gt;
  
  
  Option 1: The official MCP memory server (free, 2 minutes)
&lt;/h2&gt;

&lt;p&gt;The Model Context Protocol team ships a reference &lt;strong&gt;memory&lt;/strong&gt; server. It's a&lt;br&gt;
knowledge-graph memory that stores entities, relations, and observations in a&lt;br&gt;
local JSON file. It's the fastest way to &lt;em&gt;feel&lt;/em&gt; what MCP memory does, and it costs&lt;br&gt;
nothing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Install it in Claude Code / Claude Desktop.&lt;/strong&gt; Open your MCP config&lt;br&gt;
(&lt;code&gt;claude_desktop_config.json&lt;/code&gt;, or &lt;code&gt;.mcp.json&lt;/code&gt; in your project) and add:&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;&lt;strong&gt;Install it in Cursor.&lt;/strong&gt; Same idea — add the block to &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="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;Restart the app, and your assistant can now save and recall entities across&lt;br&gt;
sessions. That's genuinely useful — and for a lot of people it's enough.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where it stops being enough.&lt;/strong&gt; I ran the official server for weeks, and three&lt;br&gt;
things wore me down:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It's &lt;strong&gt;one flat graph&lt;/strong&gt; in a local file — no notion of &lt;em&gt;which project&lt;/em&gt; a memory
belongs to. My side project's facts and my client work bled into the same blob.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No sync.&lt;/strong&gt; The memory lives on one machine; switch laptops or tools and it
doesn't follow you.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You have to babysit recall.&lt;/strong&gt; Nothing loads automatically at session start —
you're nudging it to remember, every time.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For quick experiments, perfect. For the actual work I do every day, I wanted&lt;br&gt;
something that understood &lt;em&gt;projects&lt;/em&gt;. So I built it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Option 2: ContextForge — a project-aware MCP memory server
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;ContextForge&lt;/strong&gt; is an MCP memory server too — same standard, plugs into Claude&lt;br&gt;
and Cursor the same way — but instead of one flat graph, it organizes memory&lt;br&gt;
around your &lt;strong&gt;projects&lt;/strong&gt;: spaces, items, tasks, and decisions that load&lt;br&gt;
automatically the second a new session starts. No vector database to run, no local&lt;br&gt;
file to babysit.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Connect it&lt;/strong&gt; the same way you connected the official one — add it to your MCP&lt;br&gt;
config, drop in your ContextForge API key, and restart. From that point on, when&lt;br&gt;
you open Claude Code or Cursor, your assistant already knows what project you're&lt;br&gt;
in and what you were doing. You can even import the ChatGPT and Claude history you&lt;br&gt;
already have, so you're not starting your memory from scratch.&lt;/p&gt;

&lt;p&gt;Here's the honest side-by-side:&lt;/p&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;Official memory server&lt;/th&gt;
&lt;th&gt;ContextForge&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cost&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;td&gt;Free tier, then paid&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Setup&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;npx&lt;/code&gt;, 2 min&lt;/td&gt;
&lt;td&gt;Connect MCP + API key&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Storage&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Local JSON file&lt;/td&gt;
&lt;td&gt;Managed, no infra&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Structure&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;One flat knowledge graph&lt;/td&gt;
&lt;td&gt;Projects, spaces, tasks, decisions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Loads at session start&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Manual&lt;/td&gt;
&lt;td&gt;Automatic&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Syncs across machines/tools&lt;/strong&gt;&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;&lt;strong&gt;Import existing history&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes (ChatGPT / Claude)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Best for&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Quick experiments, local use&lt;/td&gt;
&lt;td&gt;Real project work across sessions&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Neither is "the winner" in the abstract. If you want a free, local, kick-the-tires&lt;br&gt;
memory, the official server is a great first stop. If you live in Claude Code or&lt;br&gt;
Cursor and want memory that actually understands your projects and follows you&lt;br&gt;
around, that's the gap ContextForge was built to fill.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Just curious how MCP memory feels?&lt;/strong&gt; → the official &lt;code&gt;@modelcontextprotocol/server-memory&lt;/code&gt;. Free, two minutes, done.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Working on real projects across sessions, machines, or tools?&lt;/strong&gt; → &lt;strong&gt;ContextForge&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Not sure which memory tool at all yet?&lt;/strong&gt; → start with my
&lt;a href="https://contextforge.dev/blog/best-ai-memory-tools-for-claude-in-2026-top-8-ranked" rel="noopener noreferrer"&gt;top-8 ranking&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;&lt;strong&gt;What is an MCP memory server?&lt;/strong&gt;&lt;br&gt;
It's a service that connects to Claude, Cursor, or any MCP client over the Model&lt;br&gt;
Context Protocol and stores your assistant's memory outside the session, so facts,&lt;br&gt;
decisions, and project context persist across conversations instead of resetting&lt;br&gt;
each time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How do I install the official MCP memory server?&lt;/strong&gt;&lt;br&gt;
Add &lt;code&gt;@modelcontextprotocol/server-memory&lt;/code&gt; to your MCP config&lt;br&gt;
(&lt;code&gt;claude_desktop_config.json&lt;/code&gt;, &lt;code&gt;.mcp.json&lt;/code&gt;, or &lt;code&gt;~/.cursor/mcp.json&lt;/code&gt;) with the&lt;br&gt;
command &lt;code&gt;npx -y @modelcontextprotocol/server-memory&lt;/code&gt;, then restart the app.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does this work with both Claude Code and Cursor?&lt;/strong&gt;&lt;br&gt;
Yes. Both speak MCP, so the same memory server plugs into either one — you just add&lt;br&gt;
the server to each tool's MCP config file.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What's the difference between the official server and ContextForge?&lt;/strong&gt;&lt;br&gt;
The official server stores one flat knowledge graph in a local file. ContextForge&lt;br&gt;
organizes memory by project (spaces, tasks, decisions), loads it automatically at&lt;br&gt;
session start, needs no local infrastructure, and syncs across your tools and&lt;br&gt;
machines.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do I need a vector database?&lt;/strong&gt;&lt;br&gt;
No. Neither the official server nor ContextForge asks you to run a vector database&lt;br&gt;
— that's part of the appeal of an MCP memory server over building recall yourself.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Tired of re-introducing your project to Claude and Cursor every morning? I built&lt;br&gt;
&lt;a href="https://contextforge.dev" rel="noopener noreferrer"&gt;ContextForge&lt;/a&gt; to be the MCP memory server I wanted —&lt;br&gt;
project-aware, zero infrastructure, connected in minutes.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>claude</category>
      <category>productivity</category>
    </item>
    <item>
      <title>ContextForge vs Mem0 vs Zep: Best AI Memory Layer (2026)</title>
      <dc:creator>Alfredo Izquierdo</dc:creator>
      <pubDate>Tue, 25 Aug 2026 14:18:05 +0000</pubDate>
      <link>https://dev.to/alfredoizjr/contextforge-vs-mem0-vs-zep-best-ai-memory-layer-2026-5e44</link>
      <guid>https://dev.to/alfredoizjr/contextforge-vs-mem0-vs-zep-best-ai-memory-layer-2026-5e44</guid>
      <description>&lt;p&gt;I'll be honest with you: I build one of the three tools in this post, so you'd&lt;br&gt;
be right to raise an eyebrow. But I've spent the last year staring at this exact&lt;br&gt;
decision — &lt;em&gt;which memory layer do I actually trust with my agents?&lt;/em&gt; — and I got&lt;br&gt;
tired of comparisons that were really just sales pages in disguise.&lt;/p&gt;

&lt;p&gt;So here's the version I wish someone had written me. Three tools, head to head,&lt;br&gt;
including the parts where mine loses. If you use Claude and MCP, &lt;strong&gt;ContextForge&lt;/strong&gt;&lt;br&gt;
is in the mix. If you don't, &lt;strong&gt;Mem0&lt;/strong&gt; or &lt;strong&gt;Zep&lt;/strong&gt; is probably your answer — and&lt;br&gt;
I'll tell you exactly when.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Already narrowed it down to these three? Good — that's what this post is for. If&lt;br&gt;
you're still scanning the whole field, I ranked&lt;br&gt;
&lt;a href="https://contextforge.dev/blog/best-ai-memory-tools-for-claude-in-2026-top-8-ranked" rel="noopener noreferrer"&gt;the 8 best AI memory tools for Claude&lt;/a&gt;&lt;br&gt;
in a separate guide. Come back here once you've got your finalists.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; Pick &lt;strong&gt;ContextForge&lt;/strong&gt; if you live in Claude / Claude Code and want&lt;br&gt;
project-aware memory that plugs in over MCP with zero infrastructure. Pick&lt;br&gt;
&lt;strong&gt;Mem0&lt;/strong&gt; if you want a general, framework-agnostic memory API with the biggest&lt;br&gt;
community behind it. Pick &lt;strong&gt;Zep&lt;/strong&gt; if you need temporal, entity-aware memory&lt;br&gt;
with the best published accuracy benchmarks.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  The 30-second verdict
&lt;/h2&gt;

&lt;p&gt;If you only have a minute, this table is the whole post:&lt;/p&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;ContextForge&lt;/th&gt;
&lt;th&gt;Mem0&lt;/th&gt;
&lt;th&gt;Zep&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Best for&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Claude + MCP workflows&lt;/td&gt;
&lt;td&gt;General memory API&lt;/td&gt;
&lt;td&gt;Temporal / entity memory&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Architecture&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Project/space memory over MCP&lt;/td&gt;
&lt;td&gt;Vector-first, layered scopes&lt;/td&gt;
&lt;td&gt;Temporal knowledge graph (Graphiti)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Setup&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Connect as MCP server, no infra&lt;/td&gt;
&lt;td&gt;SDK or managed cloud&lt;/td&gt;
&lt;td&gt;Managed or self-host graph&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Standout&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Loads project context at session start&lt;/td&gt;
&lt;td&gt;~48K GitHub stars, wide adoption&lt;/td&gt;
&lt;td&gt;63.8% LongMemEval (accuracy leader)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Free tier&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;~10k memory adds/mo&lt;/td&gt;
&lt;td&gt;~1k credits/mo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Open source&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Engine (Graphiti, Apache 2.0)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The rest of this post is about the &lt;em&gt;why&lt;/em&gt; — because the three don't just differ on&lt;br&gt;
features, they disagree on what "memory" even means.&lt;/p&gt;

&lt;h2&gt;
  
  
  The real difference: three philosophies, not three feature lists
&lt;/h2&gt;

&lt;p&gt;Here's the thing that took me embarrassingly long to see. These tools aren't&lt;br&gt;
competing on who has more features — they start from three different beliefs&lt;br&gt;
about what your agent should remember:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Mem0&lt;/strong&gt; believes memory is a pile of &lt;strong&gt;facts&lt;/strong&gt; you retrieve by similarity.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zep&lt;/strong&gt; believes memory is a web of &lt;strong&gt;entities and events&lt;/strong&gt; that change over time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ContextForge&lt;/strong&gt; believes memory is your &lt;strong&gt;project&lt;/strong&gt; — the tasks, decisions, and
context of the work in front of you.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once you see it that way, the "which is best" question dissolves into a much&lt;br&gt;
better one: &lt;em&gt;which shape matches how you actually work?&lt;/em&gt; Let's take them one at a&lt;br&gt;
time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mem0: memory as a pile of facts
&lt;/h2&gt;

&lt;p&gt;Mem0 is the one you've probably already heard of — with roughly 48K GitHub stars,&lt;br&gt;
it's the popular kid. Its whole bet is generality: drop it onto almost any stack,&lt;br&gt;
and it quietly files away facts and pulls back the ones that look relevant when&lt;br&gt;
you ask. It even reaches into Claude Desktop and Cursor through an MCP server, so&lt;br&gt;
your facts can follow you between tools.&lt;/p&gt;

&lt;p&gt;The trade-off is baked into that same bet. Retrieving by similarity is fast and&lt;br&gt;
flexible, but it's a little forgetful about &lt;em&gt;relationships&lt;/em&gt; — how two facts&lt;br&gt;
connect, or which one is still true today. Ask it "what did we decide about auth,&lt;br&gt;
and did that change?" and it'll hand you every auth-flavored memory it has, newest&lt;br&gt;
and stalest alike, and let you sort it out. For a lot of apps that's plenty. For a&lt;br&gt;
messy, evolving project, you feel the gap.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Reach for Mem0 when:&lt;/strong&gt; you're building on any framework and want one simple,&lt;br&gt;
well-supported memory API that just works everywhere.&lt;/p&gt;

&lt;h2&gt;
  
  
  Zep: memory as a timeline of entities
&lt;/h2&gt;

&lt;p&gt;If Mem0 is the popular kid, Zep is the honor student. It doesn't store loose facts&lt;br&gt;
— it builds a graph where the &lt;em&gt;people, projects, and things&lt;/em&gt; in your data are&lt;br&gt;
connected, and every connection is stamped with when it was true. That's why it&lt;br&gt;
can answer the question Mem0 fumbles: &lt;em&gt;what was true last Tuesday, and what&lt;br&gt;
changed since?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;And it's not just theory — Zep posts the best public accuracy numbers in this&lt;br&gt;
space, 63.8% on LongMemEval against Mem0's 49.0%. When I say it earns my respect,&lt;br&gt;
that benchmark is a big part of why.&lt;/p&gt;

&lt;p&gt;The catch is the same thing that makes it powerful: a graph is something you&lt;br&gt;
&lt;em&gt;design and maintain&lt;/em&gt;, not something you drop in and forget. If your goal is&lt;br&gt;
"help my assistant remember this project," Zep can feel like hiring a librarian to&lt;br&gt;
organize a single shelf — genuinely excellent, just more machine than the moment&lt;br&gt;
calls for.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Reach for Zep when:&lt;/strong&gt; you're building conversational agents that track real&lt;br&gt;
entities over time and accuracy is the hill you'll die on.&lt;/p&gt;

&lt;h2&gt;
  
  
  ContextForge: memory as your project
&lt;/h2&gt;

&lt;p&gt;This is mine, so read it with your skepticism turned up. I didn't build&lt;br&gt;
ContextForge to win a benchmark — I built it because I was tired of re-explaining&lt;br&gt;
my own codebase to Claude every single morning. So instead of storing facts or&lt;br&gt;
entities, it stores the thing I actually care about: &lt;strong&gt;the project&lt;/strong&gt;. You connect&lt;br&gt;
it as an MCP server, and your assistant gets spaces, items, tasks, and decisions&lt;br&gt;
that survive across sessions and load automatically the second a new conversation&lt;br&gt;
opens. No cold start.&lt;/p&gt;

&lt;p&gt;What makes it click for Claude users: there's no vector database for you to run,&lt;br&gt;
memory is organized by project and space instead of one giant blob, and it'll&lt;br&gt;
pull in the ChatGPT and Claude history you already have.&lt;/p&gt;

&lt;p&gt;And now the honest part. ContextForge is built &lt;em&gt;around&lt;/em&gt; Claude and MCP. That's its&lt;br&gt;
superpower and its ceiling. If you're not in that ecosystem, it's the wrong tool —&lt;br&gt;
Mem0 is more general and I won't pretend otherwise. Zep will out-benchmark me on&lt;br&gt;
raw recall accuracy. I'm not the best at everything; I'm the best at one specific&lt;br&gt;
job.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Reach for ContextForge when:&lt;/strong&gt; you live in Claude / Claude Code and you want&lt;br&gt;
memory that understands your projects without you standing up any infrastructure.&lt;/p&gt;

&lt;h2&gt;
  
  
  Head-to-head by what actually matters
&lt;/h2&gt;

&lt;p&gt;Enough philosophy — here's how they feel day to day:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Setup cost:&lt;/strong&gt; ContextForge (connect MCP, no infra) &amp;lt; Mem0 (SDK/cloud) &amp;lt; Zep
(graph, managed or self-host). If you hate infrastructure, that order is your
whole decision.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Retrieval quality:&lt;/strong&gt; Zep leads on benchmarks; Mem0 is solid on similarity;
ContextForge keeps context scoped to your project instead of going global on you.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Claude / Claude Code fit:&lt;/strong&gt; ContextForge is MCP-native and loads at session
start; Mem0 offers an MCP server too; Zep integrates but isn't Claude-first.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Openness &amp;amp; price:&lt;/strong&gt; Mem0 and Zep's engine are open source and self-hostable —
Mem0's free tier runs ~10k adds/month, Zep's ~1k credits/month. ContextForge is
a managed service with a free tier and nothing to self-host. If self-hosting is
a hard requirement, that line just picked your tool.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Structure:&lt;/strong&gt; ContextForge models projects, spaces, and tasks; Mem0 and Zep
model facts and entities. If your memory &lt;em&gt;is&lt;/em&gt; your project, structure wins.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  A concrete way to choose
&lt;/h2&gt;

&lt;p&gt;Still torn? Answer one question — &lt;em&gt;what does your agent forget that hurts the&lt;br&gt;
most?&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It forgets &lt;strong&gt;my project, my decisions, my stack&lt;/strong&gt; → &lt;strong&gt;ContextForge&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;It forgets &lt;strong&gt;facts across a big general app&lt;/strong&gt; → &lt;strong&gt;Mem0&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;It forgets &lt;strong&gt;who's who and what changed when&lt;/strong&gt; → &lt;strong&gt;Zep&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And here's the plot twist nobody tells you: these aren't mutually exclusive.&lt;br&gt;
Plenty of teams run Zep or Mem0 for general app-level memory &lt;em&gt;and&lt;/em&gt; ContextForge for&lt;br&gt;
their Claude/MCP dev workflow. They're solving different halves of the problem, so&lt;br&gt;
using two isn't hedging — it's just matching the tool to the job.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Is Mem0 or Zep better?&lt;/strong&gt;&lt;br&gt;
Depends on what you're optimizing for. Mem0 leads on adoption and simplicity with&lt;br&gt;
a vector-first layer; Zep leads on accuracy (63.8% vs 49.0% on LongMemEval) with&lt;br&gt;
a temporal knowledge graph. Choose Mem0 for a general memory API, Zep for time-&lt;br&gt;
and entity-aware recall.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What's the best memory tool for Claude specifically?&lt;/strong&gt;&lt;br&gt;
For Claude and Claude Code, ContextForge is purpose-built: it connects over MCP&lt;br&gt;
and gives project-aware memory that loads automatically at session start —&lt;br&gt;
without you running your own vector database.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I use more than one of these together?&lt;/strong&gt;&lt;br&gt;
Yes, and many teams do — for example Zep or Mem0 for broad app memory plus&lt;br&gt;
ContextForge for the Claude/MCP developer workflow. They target different layers,&lt;br&gt;
so combining them is common rather than redundant.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Are these open source?&lt;/strong&gt;&lt;br&gt;
Mem0 is open source; Zep's engine Graphiti is Apache 2.0 and self-hostable.&lt;br&gt;
ContextForge is a managed service with a free tier.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Using Claude and tired of re-explaining your project every single session? I&lt;br&gt;
built &lt;a href="https://contextforge.dev" rel="noopener noreferrer"&gt;ContextForge&lt;/a&gt; precisely because I was — it's&lt;br&gt;
persistent, project-aware memory over MCP, and you can be set up in minutes.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mem0</category>
      <category>zep</category>
      <category>comparison</category>
    </item>
    <item>
      <title>Best AI Memory Tools for Claude in 2026 (Top 8 Ranked)</title>
      <dc:creator>Alfredo Izquierdo</dc:creator>
      <pubDate>Mon, 24 Aug 2026 16:39:43 +0000</pubDate>
      <link>https://dev.to/alfredoizjr/best-ai-memory-tools-for-claude-in-2026-top-8-ranked-3cj</link>
      <guid>https://dev.to/alfredoizjr/best-ai-memory-tools-for-claude-in-2026-top-8-ranked-3cj</guid>
      <description>&lt;p&gt;If your AI assistant forgets your project every time you open a new session,&lt;br&gt;
you don't have a model problem — you have a &lt;strong&gt;memory&lt;/strong&gt; problem. In 2026, memory&lt;br&gt;
stopped being a nice-to-have and became core AI infrastructure. This guide ranks&lt;br&gt;
the 8 best AI memory tools you can use with Claude, Claude Code, and other agents,&lt;br&gt;
with honest picks for each use case.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; For Claude and MCP-native workflows, &lt;strong&gt;ContextForge&lt;/strong&gt; is the fastest&lt;br&gt;
way to give your assistant persistent, project-aware memory. For a general&lt;br&gt;
vector memory layer, &lt;strong&gt;Mem0&lt;/strong&gt; leads on adoption. For temporal, entity-aware&lt;br&gt;
memory, &lt;strong&gt;Zep&lt;/strong&gt; leads on accuracy. For fully self-hosted graph memory, pick&lt;br&gt;
&lt;strong&gt;Cognee&lt;/strong&gt; or &lt;strong&gt;Letta&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  What "AI memory" actually means
&lt;/h2&gt;

&lt;p&gt;An AI memory tool stores facts, preferences, decisions, and project context&lt;br&gt;
&lt;em&gt;outside&lt;/em&gt; the model's context window, then retrieves the right pieces on demand —&lt;br&gt;
so your agent remembers across sessions, tools, and days instead of starting cold&lt;br&gt;
every time. The approaches differ: some are vector-first, some build knowledge&lt;br&gt;
graphs, some manage the context window like an operating system manages RAM.&lt;/p&gt;

&lt;h2&gt;
  
  
  How we ranked these
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Persistence across sessions&lt;/strong&gt; — does it actually survive a new conversation?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Retrieval quality&lt;/strong&gt; — does it pull the &lt;em&gt;relevant&lt;/em&gt; memory, not everything?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Setup cost&lt;/strong&gt; — managed vs. self-hosted infrastructure.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Claude / MCP fit&lt;/strong&gt; — how cleanly it plugs into Claude Code and MCP clients.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pricing &amp;amp; openness&lt;/strong&gt; — free tier, open source, self-hostable.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  1. ContextForge — Best for Claude + MCP persistent memory
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;ContextForge&lt;/strong&gt; is a persistent memory system built for Claude and MCP clients.&lt;br&gt;
Instead of running a vector database yourself, you connect it as an MCP server and&lt;br&gt;
your assistant gains &lt;strong&gt;project-scoped, git-aware memory&lt;/strong&gt;: spaces and items,&lt;br&gt;
tasks, and project context that persist across every session and sync across tools&lt;br&gt;
(Claude Code, Cursor, and imported ChatGPT history).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Best for:&lt;/strong&gt; Claude / Claude Code users who want project-aware memory without
standing up infrastructure.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Why it wins its niche:&lt;/strong&gt; MCP-native, so memory loads at session start
automatically; organized by project and space, not one flat blob; captures
tasks and decisions, not just chat facts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Trade-off:&lt;/strong&gt; purpose-built around the Claude/MCP workflow rather than a
general-purpose SDK for any stack.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2. Mem0 — Best overall adoption / general memory layer
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Mem0&lt;/strong&gt; is a vector-first memory layer you bolt onto almost any agent stack. It&lt;br&gt;
organizes memory by scope (conversation, session, user, organization) and promotes&lt;br&gt;
facts between layers over time. With ~48K GitHub stars it's the most widely adopted&lt;br&gt;
option, and its OpenMemory MCP server carries memory across clients.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Best for:&lt;/strong&gt; teams wanting a general, framework-agnostic memory API.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pricing:&lt;/strong&gt; open source + managed cloud; free tier ~10,000 memory adds/month.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Trade-off:&lt;/strong&gt; vector-first recall can miss how facts relate or change over time.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  3. Zep — Best for temporal, entity-aware memory
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Zep&lt;/strong&gt; builds a temporal knowledge graph (via &lt;strong&gt;Graphiti&lt;/strong&gt;, Apache 2.0) where&lt;br&gt;
entities are nodes and facts are edges with validity intervals — so it tracks how&lt;br&gt;
facts change over time. It leads published accuracy benchmarks (63.8% on&lt;br&gt;
LongMemEval vs. Mem0's 49.0%).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Best for:&lt;/strong&gt; conversational agents that need entity memory and "what was true
when" reasoning.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pricing:&lt;/strong&gt; open-source engine; managed free tier ~1,000 credits/month.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Trade-off:&lt;/strong&gt; graph model is more to reason about than a simple vector store.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  4. Cognee — Best self-hosted graph memory (open source)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Cognee&lt;/strong&gt; is the open-source memory platform that natively combines graph,&lt;br&gt;
vector, and relational storage into one self-improving "memory control plane."&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Best for:&lt;/strong&gt; teams that want full data ownership and a graph+vector hybrid.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pricing:&lt;/strong&gt; open source, self-hostable.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Trade-off:&lt;/strong&gt; you run and maintain the infrastructure.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  5. Letta (formerly MemGPT) — Best for agent-managed context
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Letta&lt;/strong&gt; treats the context window as a constrained resource — like RAM in an OS —&lt;br&gt;
letting the agent move data between in-context "core" memory and external&lt;br&gt;
recall/archival memory. It's the MemGPT tradition, and its OSS self-host is the&lt;br&gt;
most complete open-source offering.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Best for:&lt;/strong&gt; long-running autonomous agents that self-manage memory.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pricing:&lt;/strong&gt; open source; managed tiers roughly $19–$125/mo for early production.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Trade-off:&lt;/strong&gt; more framework than drop-in layer.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  6. Supermemory — Best lightweight managed option
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Supermemory&lt;/strong&gt; is a managed memory API focused on simplicity and fast setup for&lt;br&gt;
adding recall to assistants and apps without infrastructure overhead.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Best for:&lt;/strong&gt; shipping memory quickly in a small product.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Trade-off:&lt;/strong&gt; less control than a self-hosted graph.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  7. Basic Memory (Official Memory MCP) — Best minimal MCP server
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Basic Memory&lt;/strong&gt; is a lightweight MCP memory server: create entities, add&lt;br&gt;
observations, search by keyword or semantics, persist across sessions. Runs via&lt;br&gt;
npx, Docker, or local install with minimal dependencies.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Best for:&lt;/strong&gt; developers who want a tiny, official MCP memory primitive.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Trade-off:&lt;/strong&gt; minimal by design — no project/task structure or team features.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  8. Pinecone — Best managed vector store to build on
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Pinecone&lt;/strong&gt; isn't a memory framework — it's the managed vector database many&lt;br&gt;
memory layers are built on. Choose it when you're building custom memory retrieval&lt;br&gt;
and want a scalable, managed index underneath.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Best for:&lt;/strong&gt; teams rolling their own memory pipeline.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Trade-off:&lt;/strong&gt; you build the memory logic; it only stores/retrieves vectors.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Quick comparison
&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;Best for&lt;/th&gt;
&lt;th&gt;Approach&lt;/th&gt;
&lt;th&gt;Open source&lt;/th&gt;
&lt;th&gt;Free tier&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;ContextForge&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Claude + MCP persistent memory&lt;/td&gt;
&lt;td&gt;Project/space + MCP&lt;/td&gt;
&lt;td&gt;—&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;&lt;/td&gt;
&lt;td&gt;General adoption&lt;/td&gt;
&lt;td&gt;Vector-first, layered&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;~10k adds/mo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Zep&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Temporal / entity memory&lt;/td&gt;
&lt;td&gt;Temporal knowledge graph&lt;/td&gt;
&lt;td&gt;Yes (Graphiti)&lt;/td&gt;
&lt;td&gt;~1k credits/mo&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;Self-hosted graph memory&lt;/td&gt;
&lt;td&gt;Graph + vector + relational&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Self-host&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 context&lt;/td&gt;
&lt;td&gt;Context-as-RAM (MemGPT)&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;OSS / $19+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Supermemory&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Lightweight managed&lt;/td&gt;
&lt;td&gt;Managed API&lt;/td&gt;
&lt;td&gt;Partial&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Basic Memory&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Minimal MCP server&lt;/td&gt;
&lt;td&gt;Entity/observation store&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Self-host&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Pinecone&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Build-your-own&lt;/td&gt;
&lt;td&gt;Managed vector DB&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;
  
  
  How to choose
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;You use Claude / Claude Code and want it to remember your projects&lt;/strong&gt; →
&lt;strong&gt;ContextForge&lt;/strong&gt; (MCP-native, project-aware, zero infra).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You want one memory API across any framework&lt;/strong&gt; → &lt;strong&gt;Mem0&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You need entity memory and time-aware facts&lt;/strong&gt; → &lt;strong&gt;Zep&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You want to self-host a graph+vector brain&lt;/strong&gt; → &lt;strong&gt;Cognee&lt;/strong&gt; or &lt;strong&gt;Letta&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You're building custom retrieval&lt;/strong&gt; → &lt;strong&gt;Pinecone&lt;/strong&gt; underneath.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;&lt;strong&gt;What is the best AI memory tool for Claude in 2026?&lt;/strong&gt;&lt;br&gt;
For Claude and Claude Code specifically, ContextForge is the fastest path to&lt;br&gt;
persistent, project-aware memory because it connects as an MCP server and loads&lt;br&gt;
context automatically at session start. For a general-purpose memory layer across&lt;br&gt;
any stack, Mem0 leads on adoption and Zep on benchmark accuracy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does Claude have built-in memory?&lt;/strong&gt;&lt;br&gt;
Claude Code has CLAUDE.md files and auto-memory for lightweight persistence. For&lt;br&gt;
richer, searchable, project-scoped memory that syncs across tools, teams add a&lt;br&gt;
dedicated memory tool like ContextForge or an MCP memory server.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What's the difference between vector memory and knowledge-graph memory?&lt;/strong&gt;&lt;br&gt;
Vector memory (Mem0, Pinecone) retrieves by semantic similarity. Knowledge-graph&lt;br&gt;
memory (Zep, Cognee) stores entities and relationships, so it can reason about how&lt;br&gt;
facts connect and change over time — at the cost of more complexity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Are these AI memory tools free?&lt;/strong&gt;&lt;br&gt;
Most ship meaningful free tiers or are fully open source and self-hostable —&lt;br&gt;
Mem0 (~10k adds/mo), Zep (~1k credits/mo), Letta and Cognee (OSS). ContextForge&lt;br&gt;
offers a free tier to start.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Want persistent memory for Claude in about five minutes? &lt;a href="https://contextforge.dev" rel="noopener noreferrer"&gt;Try ContextForge&lt;/a&gt; —&lt;br&gt;
connect it as an MCP server and your assistant remembers your projects across&lt;br&gt;
every session.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>claude</category>
      <category>mcp</category>
      <category>comparison</category>
    </item>
    <item>
      <title>One Developer, Five Terminals, Zero Awareness</title>
      <dc:creator>Alfredo Izquierdo</dc:creator>
      <pubDate>Wed, 08 Jul 2026 13:43:46 +0000</pubDate>
      <link>https://dev.to/alfredoizjr/one-developer-five-terminals-zero-awareness-1cgk</link>
      <guid>https://dev.to/alfredoizjr/one-developer-five-terminals-zero-awareness-1cgk</guid>
      <description>&lt;h1&gt;
  
  
  One Developer, Five Terminals, Zero Awareness
&lt;/h1&gt;

&lt;p&gt;It's 11 p.m. and I have four terminals open.&lt;/p&gt;

&lt;p&gt;One is running a Claude Code session on the auth refactor. Another is in a git worktree, rebuilding the tests. A third is reviewing a pull request. A fourth is just… there, waiting, because I know I'll need it in ten minutes. Somewhere in the mix there's a small team of sub-agents fanning out on a migration.&lt;/p&gt;

&lt;p&gt;I'm not doing this because I enjoy the chaos. I'm doing it because this is what "productive" looks like now.&lt;/p&gt;

&lt;p&gt;If you ship software with AI agents, you already know the feeling. One agent working one task, start to finish, is too slow. So you split the work. You open a second window. Then a third. You spin up a worktree so two branches can move at once. You hand a batch of independent tasks to a fleet of sub-agents and let them run. Parallelism is the only lever left when a single session can't keep up with the size of what you're trying to do.&lt;/p&gt;

&lt;p&gt;And it works — right up until it doesn't.&lt;/p&gt;

&lt;h2&gt;
  
  
  The parallel blind spot
&lt;/h2&gt;

&lt;p&gt;Here's the thing nobody tells you when you start running sessions in parallel: &lt;strong&gt;every one of those sessions is an island.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Session A is deep in the auth module. It's been there for twenty minutes, halfway through a refactor, files open, changes uncommitted. Three minutes later, Session B — a completely separate process, in a completely separate terminal — also reaches for the auth module. Not because it's reckless. Because it has &lt;em&gt;no idea Session A exists.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Now you have two agents editing the same code with no knowledge of each other. One overwrites the other's assumptions. A merge conflict blooms out of nowhere. Or worse — no conflict, just two half-finished ideas quietly braided into the same file, and you don't notice until the tests go red for reasons that make no sense.&lt;/p&gt;

&lt;p&gt;You lose exactly the time parallelism was supposed to save. That's the trap. The faster you go by splitting work, the more surface area you create for the splits to collide — because none of them can see the others.&lt;/p&gt;

&lt;p&gt;I started calling this the &lt;strong&gt;parallel blind spot&lt;/strong&gt;. You added more hands to move faster, and the hands can't see each other.&lt;/p&gt;

&lt;h2&gt;
  
  
  Memory solves "what happened." This is "what's happening."
&lt;/h2&gt;

&lt;p&gt;If you've used &lt;a href="https://contextforge.dev" rel="noopener noreferrer"&gt;ContextForge&lt;/a&gt;, you know it already gives your agents a memory that survives every session — the decisions, the corrections, the constraints, &lt;a href="https://contextforge.dev/blog/give-your-ai-coding-agent-a-memory-that-survives-every-session" rel="noopener noreferrer"&gt;carried from one session to the next so your agent stops forgetting Friday by Monday&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;But durable memory answers a question about the &lt;em&gt;past&lt;/em&gt;: what happened before. The parallel blind spot is a different question entirely — a question about &lt;em&gt;right now&lt;/em&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Who else is working on this, at this moment, while I am?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Memory is history. This is presence. A session's history tells you what it did yesterday; it tells you nothing about the session running in the terminal next to it &lt;em&gt;this second&lt;/em&gt;. No amount of "remember what happened" fixes "I can't see what's happening."&lt;/p&gt;

&lt;p&gt;That's the gap. And for a while, it was a gap I only half-noticed — because when it's just you and one terminal, it doesn't exist. It only shows up once you're deep enough into parallel work to get bitten by it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The comment that named it
&lt;/h2&gt;

&lt;p&gt;Then a reader left a comment on one of my posts that named it exactly.&lt;/p&gt;

&lt;p&gt;They pointed out that ContextForge covered the single-session story beautifully — memory that persists — but that the multi-session case was wide open. When you run two or more agents against the same project, there's no live shared-state layer. Nothing that lets Session A raise a hand and say &lt;em&gt;"I've got the auth module right now"&lt;/em&gt; so Session B doesn't walk into it.&lt;/p&gt;

&lt;p&gt;Reading it, I felt that particular sting of good feedback: the obvious thing you somehow hadn't let yourself see. They were right. Memory across sessions was solved. Awareness &lt;em&gt;between&lt;/em&gt; sessions wasn't. It had a name now, and once something has a name, you have to go build it.&lt;/p&gt;

&lt;p&gt;So I did.&lt;/p&gt;

&lt;h2&gt;
  
  
  Session Presence: a live "who's here" for your agents
&lt;/h2&gt;

&lt;p&gt;The new feature is called &lt;strong&gt;Session Presence&lt;/strong&gt;, and the whole idea fits in one sentence: your parallel sessions can now see each other in real time.&lt;/p&gt;

&lt;p&gt;Here's how it actually works, because the best part is how little you have to do:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;It registers itself.&lt;/strong&gt; Every Claude Code session (or Cursor, or any MCP client) automatically announces itself as live the first time it does anything. You don't run a command. You don't think about it. The moment a session starts working, it's on the board.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It stays honest.&lt;/strong&gt; Each session sends a quiet heartbeat every couple of minutes. So the list is always &lt;em&gt;live&lt;/em&gt; sessions — not a graveyard of things you closed hours ago. A session that dies without saying goodbye simply ages off on its own.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It disappears cleanly.&lt;/strong&gt; When you close a session, it's removed at once — even in the split second before the process is fully killed. No stale ghosts lingering on the list.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On top of that, three small tools give the agent a voice:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;session_update&lt;/code&gt; — "I'm working on the auth module." One session declares what it's focused on.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;session_list&lt;/code&gt; — "Who else is on this project right now, and what are they doing?"&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;session_end&lt;/code&gt; — "I'm done here."&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And you don't have to memorize any of that. You just talk. Ask your agent, in plain English, &lt;em&gt;"is anyone else working on this project right now?"&lt;/em&gt; — and it checks the board and tells you: &lt;em&gt;yes, another session has been on the auth module for the last few minutes; you might want to steer clear.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;One more thing that matters: &lt;strong&gt;it's advisory, not a lock.&lt;/strong&gt; Presence is a "busy" sign on a door, not a key that bolts it shut. It doesn't stop you from doing anything — it just makes sure you're never doing it &lt;em&gt;blind&lt;/em&gt;. You stay in control; you just get to make the call with the full picture instead of half of it. And it's scoped to the project you're actually in, so a busy afternoon across five different repos doesn't turn into noise — you see the sessions that can actually collide with yours, and nothing else.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it feels like in practice
&lt;/h2&gt;

&lt;p&gt;Back to that 11 p.m. scene. Two sessions, both drifting toward the auth module.&lt;/p&gt;

&lt;p&gt;With presence, the second one asks the board before it dives in. It sees that Session A is already there, focused on exactly that. So instead of colliding, it picks up the tests — the other thing on the list that nobody's touching. No conflict. No braided half-ideas. No 30 minutes lost untangling a mess that never needed to happen.&lt;/p&gt;

&lt;p&gt;That's the whole win. It's not flashy. It's the quiet difference between five sessions &lt;em&gt;working near each other&lt;/em&gt; and five sessions &lt;em&gt;working blind next to each other.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it this week
&lt;/h2&gt;

&lt;p&gt;If you're already running parallel sessions — worktrees, agent teams, three terminals before lunch — this is for you.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Update to the latest ContextForge MCP.&lt;/strong&gt; Session Presence ships in the current release and works with Claude Code, Cursor, and Copilot through MCP — so even if you &lt;a href="https://contextforge.dev/blog/i-use-3-ai-coding-tools-every-day-heres-how-i-keep-them-in-sync" rel="noopener noreferrer"&gt;bounce between all three tools in a day&lt;/a&gt;, your sessions still see each other.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ask "who else is here?" at the start of a session.&lt;/strong&gt; Make it the first thing you do when you sit down, the same way you'd glance around an office before taking a desk.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Say what you're working on when you switch tasks.&lt;/strong&gt; One sentence — "I'm on the payments flow now" — and every other session can see it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Already have a CLAUDE.md? Re-running npx contextforge-mcp init is safe, it's idempotent per section. It checks for a hidden marker and only appends what's missing. Your existing content and your own edits stay exactly as they are; it just adds the new "Session Presence, Coordination Rules" block if it isn't there yet.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It's on the &lt;a href="https://contextforge.dev" rel="noopener noreferrer"&gt;free tier&lt;/a&gt;. Five minutes to set up. And if you've ever lost an evening to two of your own agents fighting over the same file, you already know exactly what it's worth.&lt;/p&gt;

&lt;p&gt;Parallelism without awareness isn't speed. It's a collision waiting to happen.&lt;/p&gt;

&lt;p&gt;Give your sessions a way to see each other.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>mcp</category>
      <category>claude</category>
    </item>
    <item>
      <title>Give Your AI Coding Agent a Memory That Survives Every Session</title>
      <dc:creator>Alfredo Izquierdo</dc:creator>
      <pubDate>Fri, 26 Jun 2026 22:02:27 +0000</pubDate>
      <link>https://dev.to/alfredoizjr/give-your-ai-coding-agent-a-memory-that-survives-every-session-341o</link>
      <guid>https://dev.to/alfredoizjr/give-your-ai-coding-agent-a-memory-that-survives-every-session-341o</guid>
      <description>&lt;p&gt;Open a new session with Claude Code, Cursor, or Copilot and it has no idea what you were doing yesterday. Your stack, your decisions, the bug you spent an hour explaining — gone. So you re-explain. Again.&lt;/p&gt;

&lt;p&gt;The root cause is simple: your AI's memory only lasts one conversation. Close the terminal and it's wiped.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ContextForge&lt;/strong&gt; fixes that. It's an &lt;a href="https://modelcontextprotocol.io" rel="noopener noreferrer"&gt;MCP&lt;/a&gt; server that gives any AI agent a permanent, searchable memory that carries across every session and every project. Below is the full setup — it takes three commands.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The walkthrough uses &lt;strong&gt;Claude Code&lt;/strong&gt; as the example, but the same setup works for Cursor, ChatGPT, Claude Desktop, Windsurf, and GitHub Copilot.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  📺 Watch the full walkthrough
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://dev.toPASTE_YOUTUBE_URL"&gt;▶️ Watch the setup on YouTube →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The setup, in three commands
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Install the MCP server&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; contextforge-mcp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;2. Connect it to your editor&lt;/strong&gt; — the wizard asks for your API key (grab a free one at &lt;a href="https://contextforge.dev" rel="noopener noreferrer"&gt;contextforge.dev&lt;/a&gt;):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx contextforge-setup
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;3. Initialize your project&lt;/strong&gt; — this is the step people skip:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx contextforge-mcp init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That last command writes a small rules file (&lt;code&gt;CLAUDE.md&lt;/code&gt; for Claude Code, &lt;code&gt;.cursorrules&lt;/code&gt; for Cursor) that tells your AI to &lt;em&gt;use&lt;/em&gt; ContextForge for memory. Without it, your agent silently falls back to its built-in memory and ignores ContextForge — even though the server is connected.&lt;/p&gt;

&lt;h2&gt;
  
  
  The payoff
&lt;/h2&gt;

&lt;p&gt;Once it's connected, you just talk to your agent like normal:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Remember this is a todo app with Next.js and Supabase, deployed on Vercel. Save it to memory."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It stores that as a real, searchable memory — not in the chat, in a permanent store. Plant a couple of tasks the same way, then close the terminal and open a &lt;strong&gt;brand-new session&lt;/strong&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Let's start working on this project. What do I have pending?"&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And it knows. New session, clean slate, and your agent already has your stack, your context, and your open tasks — no re-explaining. You can browse everything in the dashboard, organized by project.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;ContextForge has a free tier — no credit card. Give your AI a memory that actually sticks:&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://contextforge.dev" rel="noopener noreferrer"&gt;Get started at contextforge.dev&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Works with Claude Code, Cursor, ChatGPT, Claude Desktop, Windsurf, and GitHub Copilot.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>claude</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Your CLAUDE.md Is Lying to Your Agent — Why a Stale Instructions File Is Worse Than None</title>
      <dc:creator>Alfredo Izquierdo</dc:creator>
      <pubDate>Tue, 23 Jun 2026 14:20:31 +0000</pubDate>
      <link>https://dev.to/alfredoizjr/your-claudemd-is-lying-to-your-agent-why-a-stale-instructions-file-is-worse-than-none-34od</link>
      <guid>https://dev.to/alfredoizjr/your-claudemd-is-lying-to-your-agent-why-a-stale-instructions-file-is-worse-than-none-34od</guid>
      <description>&lt;h1&gt;
  
  
  Your CLAUDE.md Is Lying to Your Agent
&lt;/h1&gt;

&lt;p&gt;An empty &lt;code&gt;CLAUDE.md&lt;/code&gt; is honest.&lt;/p&gt;

&lt;p&gt;When the file isn't there, your agent does the sensible thing: it looks around. It reads the code. It asks you a question. It admits, in its quiet way, that it doesn't know yet — and so it goes and finds out.&lt;/p&gt;

&lt;p&gt;A stale &lt;code&gt;CLAUDE.md&lt;/code&gt; does the opposite. It walks into the room with total confidence and tells your agent something that used to be true. And your agent believes it. Why wouldn't it? You wrote it down. You committed it. It's &lt;em&gt;the context file.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;That's the part nobody warns you about. We talk about &lt;code&gt;CLAUDE.md&lt;/code&gt; like it's free insurance — write it once, and your agent stops doing dumb things. Nobody mentions that the file has a half-life, and that a decayed instruction doesn't fall silent. It keeps talking. It just starts being wrong.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Friday I got betrayed by my own notes
&lt;/h2&gt;

&lt;p&gt;Let me tell you how I learned this, because I learned it the embarrassing way.&lt;/p&gt;

&lt;p&gt;A few months ago I spent a Friday afternoon cleaning up a project. You know the kind of afternoon — the satisfying one. I pulled authentication out of a fat &lt;code&gt;utils.ts&lt;/code&gt; file and gave it its own home. I renamed a module that had been bugging me for weeks. I deleted a helper we'd stopped using and replaced it with something cleaner. I committed all of it, closed the laptop, and felt like a responsible adult.&lt;/p&gt;

&lt;p&gt;What I did &lt;em&gt;not&lt;/em&gt; do was open &lt;code&gt;CLAUDE.md&lt;/code&gt;. It was three weeks old. It still said "auth lives in &lt;code&gt;utils.ts&lt;/code&gt;." It still named the module I'd just renamed. It still recommended the helper I'd just deleted.&lt;/p&gt;

&lt;p&gt;Monday morning, I asked my agent to add a small feature near the auth flow. And it did exactly what I'd told it to do — back in a version of the project that no longer existed. It went looking for auth in &lt;code&gt;utils.ts&lt;/code&gt;. It reached for the dead helper. When it couldn't find them, it didn't stop and ask. It &lt;em&gt;reconstructed&lt;/em&gt; them. It rebuilt a little ghost of last month's codebase, confidently, because the one document I'd told it to trust said that's how things were.&lt;/p&gt;

&lt;p&gt;The model wasn't broken. The reasoning was fine. It followed its instructions perfectly. The instructions were just lying to it — and I was the one who'd written the lie and signed it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The half-life of a CLAUDE.md
&lt;/h2&gt;

&lt;p&gt;Here's the uncomfortable truth about that file: it starts dying the moment you save it.&lt;/p&gt;

&lt;p&gt;A &lt;code&gt;CLAUDE.md&lt;/code&gt; is a static photograph. Your codebase is a moving thing. Every commit, every rename, every "actually, let's not do it that way" pulls the real project a half-step away from the photograph. None of those moves announce themselves to the file. The file has no idea Friday happened.&lt;/p&gt;

&lt;p&gt;So the gap opens quietly. Day one, the photo is perfect. Week two, a couple of details are off. Month two, whole paragraphs describe a project that's been refactored out from under them. And the worst part is that it still &lt;em&gt;reads&lt;/em&gt; fine. Stale documentation doesn't look stale. It looks authoritative. That's exactly what makes it dangerous.&lt;/p&gt;

&lt;p&gt;This is the same disease I wrote about in &lt;a href="https://contextforge.dev/blog/context-rot-bigger-windows-wont-save-you" rel="noopener noreferrer"&gt;context rot&lt;/a&gt; — more text doesn't mean more truth. A longer &lt;code&gt;CLAUDE.md&lt;/code&gt; isn't a more reliable one. It's just a bigger surface for the rot to spread across.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why "wrong" is worse than "empty"
&lt;/h2&gt;

&lt;p&gt;We treat having &lt;em&gt;some&lt;/em&gt; context as strictly better than having none. With static files, that math is backwards.&lt;/p&gt;

&lt;p&gt;Anthropic's own data tells you why. The biggest single category of agent failure isn't creativity or hallucination — it's &lt;strong&gt;consistent wrong interpretation&lt;/strong&gt;: the agent making the same incorrect assumption, every single run. A stale &lt;code&gt;CLAUDE.md&lt;/code&gt; is a factory for exactly that failure. It hands the agent a wrong assumption and stamps it "official." Now the mistake isn't a one-off. It's load-bearing. Every session starts from the same wrong place and marches confidently in the same wrong direction.&lt;/p&gt;

&lt;p&gt;Compare the two failure modes honestly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No file:&lt;/strong&gt; the agent is uncertain, so it explores, asks, and checks. Slower, occasionally annoying — but it self-corrects.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stale file:&lt;/strong&gt; the agent is &lt;em&gt;certain&lt;/em&gt;, so it doesn't check. It just executes. Fast, smooth, and wrong in a way you won't catch until it's three commits deep.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Uncertainty is recoverable. Misplaced confidence is the thing that ships the bug.&lt;/p&gt;

&lt;h2&gt;
  
  
  The three ways it rots
&lt;/h2&gt;

&lt;p&gt;It's never dramatic. It's always small. In my experience it's almost always one of these three:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;The map stops matching the territory.&lt;/strong&gt; You move a file, rename a module, restructure a folder. The &lt;code&gt;CLAUDE.md&lt;/code&gt; still points at the old address, so your agent keeps knocking on a door that isn't there — and then builds a new door rather than admit it's lost.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A reversed decision keeps giving orders.&lt;/strong&gt; "We use library X." Three weeks later you rip out library X because it didn't support your runtime. Nobody tells the file. It keeps cheerfully recommending the thing you spent a whole afternoon removing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Yesterday's conventions outlive themselves.&lt;/strong&gt; The rule that was right when it was just you becomes wrong the moment a teammate joins, or the project grows past the shape it had when you wrote it down.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Each one is tiny. Each one is invisible until an agent acts on it. And the friction of keeping all three in sync, by hand, forever — that's the actual problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  "Just keep it updated" is not a plan
&lt;/h2&gt;

&lt;p&gt;I know what you're thinking, because I thought it too: &lt;em&gt;fine, I'll just keep the file current.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;You won't. Not because you're lazy — because nobody does. Documentation that has to be hand-updated drifts out of date in every team that has ever existed, and a &lt;code&gt;CLAUDE.md&lt;/code&gt; is documentation wearing an agent's clothes. The instinct to write down what you learn is exactly right. The mechanism — a flat file you have to remember to edit at the precise moment your hands are busy doing the thing that just made it wrong — is what's broken.&lt;/p&gt;

&lt;p&gt;This is the same gap I keep circling back to in &lt;a href="https://contextforge.dev/blog/why-your-ai-forgets-everything" rel="noopener noreferrer"&gt;why your AI forgets everything&lt;/a&gt;: the problem was never that the agent had no memory. It's that the memory lived in a place that couldn't keep up with you. A static file can't keep up. It was never built to.&lt;/p&gt;

&lt;h2&gt;
  
  
  What living memory actually looks like
&lt;/h2&gt;

&lt;p&gt;The fix isn't a better file. It's a different shape entirely.&lt;/p&gt;

&lt;p&gt;Imagine memory that updates from the work instead of from your discipline. You correct the agent once — "auth moved, it's in its own module now" — and that correction &lt;em&gt;sticks&lt;/em&gt;, surfacing the next time it's relevant instead of waiting for you to remember to go edit a paragraph. The renamed module updates because you renamed it, not because you also opened a markdown file afterward. The reversed decision stops giving orders the moment you reverse it.&lt;/p&gt;

&lt;p&gt;And because it isn't trapped in one tool's config file, it follows you. Claude Code on Monday, &lt;a href="https://contextforge.dev/blog/i-use-3-ai-coding-tools-every-day-heres-how-i-keep-them-in-sync" rel="noopener noreferrer"&gt;Cursor on Tuesday, Copilot for the PR review on Wednesday&lt;/a&gt; — same memory, same truth, no three-way drift between three stale files telling three agents three different versions of last month.&lt;/p&gt;

&lt;p&gt;That living layer is what I built &lt;a href="https://contextforge.dev" rel="noopener noreferrer"&gt;ContextForge&lt;/a&gt; to be: a memory that plugs into Claude Code, Cursor, and Copilot over MCP, holds your corrections and decisions in one place, and surfaces the right one at the right moment instead of handing your agent a month-old photograph and calling it context.&lt;/p&gt;

&lt;p&gt;You don't have to use mine. You can roll your own. What you can't do — what I tried to do, on that Friday, and failed — is keep a static file honest by sheer force of will.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to do this week
&lt;/h2&gt;

&lt;p&gt;Three things, and you can start the first one in the next ten minutes:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Audit your &lt;code&gt;CLAUDE.md&lt;/code&gt; for lies.&lt;/strong&gt; Open it and read it like a stranger. Every path, every "we use," every convention — is it &lt;em&gt;still true today?&lt;/em&gt; Count the ones that aren't. That number is how often your agent has been confidently misled this month.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Split the durable from the decaying.&lt;/strong&gt; Some things in that file are genuinely stable (the project's purpose, hard constraints). Some are just state that caches the current shape of the code — and state belongs somewhere that updates itself, not in a file you have to babysit.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Try a memory layer.&lt;/strong&gt; ContextForge has a free tier that plugs into Claude Code, Cursor, and Copilot via MCP. Five minutes to set up. Your corrections start sticking instead of rotting.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;An empty &lt;code&gt;CLAUDE.md&lt;/code&gt; admits it doesn't know. A stale one pretends it does — and your agent can't tell the difference.&lt;/p&gt;

&lt;p&gt;Stop asking your agent to trust a photograph. Give it something that can actually keep up with you.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>claude</category>
      <category>developers</category>
      <category>devtool</category>
    </item>
  </channel>
</rss>
