<?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: Arulnidhi Karunanidhi</title>
    <description>The latest articles on DEV Community by Arulnidhi Karunanidhi (@arulnidhi_karunanidhi_7ff).</description>
    <link>https://dev.to/arulnidhi_karunanidhi_7ff</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3047648%2F0281d56e-0f07-449d-90fb-71eec3948f78.jpg</url>
      <title>DEV Community: Arulnidhi Karunanidhi</title>
      <link>https://dev.to/arulnidhi_karunanidhi_7ff</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/arulnidhi_karunanidhi_7ff"/>
    <language>en</language>
    <item>
      <title>Part 2: The 5 Types of Memory Every AI Agent Needs (And Why LLMs Can Only Do 2)</title>
      <dc:creator>Arulnidhi Karunanidhi</dc:creator>
      <pubDate>Tue, 10 Feb 2026 16:54:42 +0000</pubDate>
      <link>https://dev.to/arulnidhi_karunanidhi_7ff/part-2-the-5-types-of-memory-every-ai-agent-needs-and-why-llms-can-only-do-2-73c</link>
      <guid>https://dev.to/arulnidhi_karunanidhi_7ff/part-2-the-5-types-of-memory-every-ai-agent-needs-and-why-llms-can-only-do-2-73c</guid>
      <description>&lt;p&gt;In &lt;a href="https://dev.to/arulnidhi_karunanidhi_7ff/foundations-why-memory-matters-in-ai-36np"&gt;Part 1&lt;/a&gt;, I mentioned there's one memory type that LLMs literally cannot implement — not with clever prompting, not with RAG, not with any current technique. Today we find out which one, and why it's the exact type multi-agent systems need most.&lt;br&gt;
But first, let's build the vocabulary.&lt;/p&gt;
&lt;h2&gt;
  
  
  Why Taxonomy Matters
&lt;/h2&gt;

&lt;p&gt;When someone says "my AI agent needs memory," they could mean completely different things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"I need it to remember what we discussed 5 minutes ago" → Short-term&lt;/li&gt;
&lt;li&gt;"I need it to remember the user's name across sessions" → Long-term semantic&lt;/li&gt;
&lt;li&gt;"I need it to remember that it tried approach X and it failed" → Episodic&lt;/li&gt;
&lt;li&gt;"I need it to get better at a specific task over time" → Procedural&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Building the wrong type of memory for your use case wastes effort and creates frustrating user experiences.&lt;/p&gt;

&lt;p&gt;Let's break down each type.&lt;/p&gt;
&lt;h2&gt;
  
  
  2.1 Short-Term Memory (Working Memory)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; Information the system is actively processing right now.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Human equivalent:&lt;/strong&gt; The thoughts you're holding in your head while solving a problem. Limited, temporary, high-attention.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In LLMs:&lt;/strong&gt; This is the &lt;strong&gt;context window&lt;/strong&gt;. Everything the model can see in a single API call.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌─────────────────────────────────────────┐
│           Context Window                │
│                                         │
│  [System Prompt]                        │
│  [Previous messages in this session]    │
│  [Retrieved memories]                   │
│  [Current user message]                 │
│                                         │
│  ← Everything here is "working memory"  │
└─────────────────────────────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Characteristics:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Property&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Duration&lt;/td&gt;
&lt;td&gt;Single session or API call&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Capacity&lt;/td&gt;
&lt;td&gt;Limited by context window (128K-200K tokens typically)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Access&lt;/td&gt;
&lt;td&gt;Immediate — model sees everything at once&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cost&lt;/td&gt;
&lt;td&gt;Expensive — every token is processed&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;When it's sufficient:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Single-turn Q&amp;amp;A&lt;/li&gt;
&lt;li&gt;Short conversations (&amp;lt; 50 messages)&lt;/li&gt;
&lt;li&gt;Tasks that don't require historical context&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;When it breaks down:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Long conversations (token limit)&lt;/li&gt;
&lt;li&gt;Multi-session continuity (context clears between sessions)&lt;/li&gt;
&lt;li&gt;Cost-sensitive applications at scale&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  2.2 Long-Term Memory (Persistent Storage)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; Information that persists beyond a single session, stored externally and retrieved when needed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Human equivalent:&lt;/strong&gt; Everything you "know" that isn't currently in your active thoughts. Vast, durable, requires recall.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In AI systems:&lt;/strong&gt; External databases (PostgreSQL, vector stores, etc.) that store information and inject relevant pieces into context when needed.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌──────────────────┐         ┌──────────────────┐
│   Session 1      │         │   Session 2      │
│                  │         │                  │
│  "My name is     │         │  "What's my      │
│   John"          │         │   name?"         │
│                  │         │                  │
└────────┬─────────┘         └────────┬─────────┘
         │                            │
         │ Extract &amp;amp; Store            │ Retrieve
         ▼                            ▼
┌─────────────────────────────────────────────────┐
│              Long-Term Memory Store             │
│                                                 │
│  { "user_name": "John", stored: "2025-12-01" }  │
│                                                 │
└─────────────────────────────────────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Characteristics:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Property&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Duration&lt;/td&gt;
&lt;td&gt;Permanent (until explicitly deleted)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Capacity&lt;/td&gt;
&lt;td&gt;Virtually unlimited&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Access&lt;/td&gt;
&lt;td&gt;Requires retrieval step (adds latency)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cost&lt;/td&gt;
&lt;td&gt;Storage cost + retrieval cost (much cheaper than context)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;The tradeoff:&lt;/strong&gt; You can store unlimited information, but you can only retrieve and inject a subset into the context window. Retrieval quality becomes critical.&lt;/p&gt;




&lt;h2&gt;
  
  
  2.3 Episodic Memory (Specific Events)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; Memory of specific events, conversations, or experiences — tied to a particular time and context.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Human equivalent:&lt;/strong&gt; "Remember that meeting last Tuesday where John got angry about the deadline?"&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In AI systems:&lt;/strong&gt; Stored conversation logs, interaction records, or event traces with temporal metadata.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Episodic memory record
&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;episodic&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;timestamp&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2025-12-10T14:30:00Z&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;session_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;abc123&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;event&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;User discussed funding strategy&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;context&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;User was exploring pre-seed vs seed options&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;participants&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;assistant&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;outcome&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Decided to target pre-seed first&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Key properties:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Time-stamped&lt;/strong&gt; — When did this happen?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Contextual&lt;/strong&gt; — What was the surrounding situation?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Specific&lt;/strong&gt; — Not abstracted into general facts&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Queryable by time&lt;/strong&gt; — "What did we discuss last week?"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Use cases:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Continue where we left off"&lt;/li&gt;
&lt;li&gt;"What did I say about X last time?"&lt;/li&gt;
&lt;li&gt;Audit trails and compliance&lt;/li&gt;
&lt;li&gt;Debugging agent behavior ("Why did it do that?")&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Retrieval challenge:&lt;/strong&gt; Episodic memories are often verbose. You can't inject entire conversation transcripts. Systems typically:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Store full episodes&lt;/li&gt;
&lt;li&gt;Generate summaries for retrieval&lt;/li&gt;
&lt;li&gt;Fetch full detail only when specifically needed&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  2.4 Semantic Memory (Facts &amp;amp; Knowledge)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; Abstracted facts, knowledge, and information — divorced from the specific episode where they were learned.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Human equivalent:&lt;/strong&gt; "Paris is the capital of France." You know this, but you probably don't remember &lt;em&gt;when&lt;/em&gt; you learned it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In AI systems:&lt;/strong&gt; Extracted facts, user profiles, preferences, and knowledge bases.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Semantic memory records
&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;semantic&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;fact&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;User&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;s name is John&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;confidence&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;source&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;explicit_statement&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;first_seen&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2025-11-01&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;last_confirmed&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2025-12-15&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;semantic&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;fact&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;User prefers concise responses without bullet points&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;confidence&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;source&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;inferred_from_feedback&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;first_seen&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2025-11-15&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Key properties:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Abstracted&lt;/strong&gt; — General facts, not tied to specific moments&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Updateable&lt;/strong&gt; — Facts can change; need conflict resolution&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Confidence-scored&lt;/strong&gt; — Some facts are more certain than others&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Categorizable&lt;/strong&gt; — Can be organized (preferences, demographics, knowledge)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The extraction problem:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Converting episodic to semantic memory requires judgment:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Episode: "User said 'I just started at Microsoft last week, 
          really excited about the AI team there'"

Extracted semantic memories:
- User works at Microsoft (high confidence)
- User is on the AI team (high confidence)  
- User started recently (medium confidence — "last week" will become stale)
- User is excited about their job (medium confidence — emotional state may change)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;What to extract? At what confidence? This is where LLM-based extraction comes in — and where systems differ in sophistication.&lt;/p&gt;




&lt;h2&gt;
  
  
  2.5 Procedural Memory (How to Do Things)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; Memory of how to perform tasks, skills, and behaviors.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Human equivalent:&lt;/strong&gt; How to ride a bike, how to write code, how to negotiate. You don't consciously recall steps — you just &lt;em&gt;do&lt;/em&gt; it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In AI systems:&lt;/strong&gt; This is the trickiest category. Current implementations include:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Approach&lt;/th&gt;
&lt;th&gt;How It Works&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Fine-tuning&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Bake procedures into model weights&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Few-shot examples&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Store examples of correct behavior, inject when relevant&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Tool configurations&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Remember how to use specific tools/APIs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Workflow templates&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Store successful action sequences&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Procedural memory example
&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;procedural&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;skill&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;deploy_langraph_agent&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;steps&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Validate entry point exists&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Check dependencies in requirements.txt&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Build Docker container&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Push to registry&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Update deployment config&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;learned_from&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;session_xyz&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;session_abc&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;success_rate&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.94&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Why it's hard for LLMs:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;LLMs don't truly "learn" procedures from memory injection — they follow instructions. Procedural memory in current systems is really:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Storing successful patterns&lt;/li&gt;
&lt;li&gt;Retrieving relevant patterns&lt;/li&gt;
&lt;li&gt;Injecting them as instructions/examples&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;True procedural learning would require weight updates (fine-tuning), which can't happen at runtime.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where this matters:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Agents that repeat similar tasks should get better over time&lt;/li&gt;
&lt;li&gt;Learning user-specific workflows ("When I say 'deploy', run these 5 steps")&lt;/li&gt;
&lt;li&gt;Tool use patterns ("This API needs auth header X, learned from past failures")&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  2.6 The Memory Hierarchy in Cognitive Architectures
&lt;/h2&gt;

&lt;p&gt;Now let's see how these types compose in a complete system:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌─────────────────────────────────────────────────────────────────┐
│                        Agent Runtime                            │
│                                                                 │
│  ┌────────────────────────────────────────────────────────────┐ │
│  │                   Working Memory                           │ │
│  │                   (Context Window)                         │ │
│  │                                                            │ │
│  │  • Current conversation                                    │ │
│  │  • Retrieved long-term memories                            │ │
│  │  • Active task state                                       │ │
│  └────────────────────────────────────────────────────────────┘ │
│                              ↑↓                                 │
│         ┌────────────────────┴───────────────────┐              │
│         │           Retrieval Layer              │              │
│         │   (Semantic search, filtering, ranking)│              │
│         └────────────────────┬───────────────────┘              │
│                              ↓                                  │
│  ┌──────────────────────────────────────────────────────────┐   │
│  │                   Long-Term Memory                       │   │
│  │                                                          │   │
│  │  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐       │   │
│  │  │  Episodic   │  │  Semantic   │  │ Procedural  │       │   │
│  │  │             │  │             │  │             │       │   │
│  │  │ • Sessions  │  │ • Facts     │  │ • Skills    │       │   │
│  │  │ • Events    │  │ • Prefs     │  │ • Patterns  │       │   │
│  │  │ • Logs      │  │ • Knowledge │  │ • Workflows │       │   │
│  │  └─────────────┘  └─────────────┘  └─────────────┘       │   │
│  │                                                          │   │
│  └──────────────────────────────────────────────────────────┘   │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;The flow:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Input arrives&lt;/strong&gt; → Goes into working memory&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Retrieval triggers&lt;/strong&gt; → Query long-term stores for relevant memories&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Context assembly&lt;/strong&gt; → Combine current input + retrieved memories&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Processing&lt;/strong&gt; → LLM generates response using full context&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Storage&lt;/strong&gt; → Extract new memories from interaction, persist to long-term&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Different systems prioritize different memory types:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;System&lt;/th&gt;
&lt;th&gt;Primary Focus&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;ChatGPT Memory&lt;/td&gt;
&lt;td&gt;Semantic (user facts/preferences)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude Memory&lt;/td&gt;
&lt;td&gt;Semantic + light Episodic (cross-conversation recall)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LangGraph Checkpointers&lt;/td&gt;
&lt;td&gt;Episodic (workflow state)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;mem0&lt;/td&gt;
&lt;td&gt;Semantic (extracted facts)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Aegis Memory&lt;/td&gt;
&lt;td&gt;Semantic + Episodic + Scoped (multi-agent aware)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Memory Type Decision Framework
&lt;/h2&gt;

&lt;p&gt;When designing memory for your application, ask:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Question&lt;/th&gt;
&lt;th&gt;If Yes → Memory Type&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Do I need to recall &lt;em&gt;what happened&lt;/em&gt; at a specific time?&lt;/td&gt;
&lt;td&gt;Episodic&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Do I need to recall &lt;em&gt;facts&lt;/em&gt; about the user/world?&lt;/td&gt;
&lt;td&gt;Semantic&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Do I need the agent to &lt;em&gt;improve at tasks&lt;/em&gt; over time?&lt;/td&gt;
&lt;td&gt;Procedural&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Do I just need continuity within a session?&lt;/td&gt;
&lt;td&gt;Working memory (context) is enough&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Most applications need a combination:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Personal Assistant:
├── Semantic (user preferences, facts) — Primary
├── Episodic (recent conversations) — Secondary
└── Procedural (user's common workflows) — Nice to have

Research Agent:
├── Episodic (what sources were checked) — Primary
├── Semantic (extracted findings) — Primary
└── Procedural (search strategies that work) — Secondary

Multi-Agent System:
├── Semantic (shared knowledge base) — Primary
├── Episodic (handoff history, who did what) — Primary
├── Scoped access (who can see what) — Critical ← This is the gap
└── Procedural (team coordination patterns) — Secondary
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Module 2 Summary
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Memory Type&lt;/th&gt;
&lt;th&gt;Duration&lt;/th&gt;
&lt;th&gt;Content&lt;/th&gt;
&lt;th&gt;AI Implementation&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Working (Short-term)&lt;/td&gt;
&lt;td&gt;Single session&lt;/td&gt;
&lt;td&gt;Active context&lt;/td&gt;
&lt;td&gt;Context window&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Episodic&lt;/td&gt;
&lt;td&gt;Permanent&lt;/td&gt;
&lt;td&gt;Specific events&lt;/td&gt;
&lt;td&gt;Conversation logs, event stores&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Semantic&lt;/td&gt;
&lt;td&gt;Permanent&lt;/td&gt;
&lt;td&gt;Abstracted facts&lt;/td&gt;
&lt;td&gt;Knowledge bases, user profiles&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Procedural&lt;/td&gt;
&lt;td&gt;Permanent&lt;/td&gt;
&lt;td&gt;Skills, behaviors&lt;/td&gt;
&lt;td&gt;Few-shot examples, fine-tuning&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Key insight:&lt;/strong&gt; Most "memory" products today focus on &lt;strong&gt;semantic memory&lt;/strong&gt; (facts extraction). &lt;strong&gt;Episodic&lt;/strong&gt; is often just raw logs without smart retrieval. &lt;strong&gt;Procedural&lt;/strong&gt; is largely unsolved at runtime.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The multi-agent gap:&lt;/strong&gt; None of the standard memory types address &lt;strong&gt;who can access what&lt;/strong&gt;. In multi-agent systems, you need memory scoping — which isn't a type of memory, but a &lt;strong&gt;property&lt;/strong&gt; that cuts across all types.&lt;/p&gt;




&lt;p&gt;In the next &lt;strong&gt;Part&lt;/strong&gt; we will cover &lt;strong&gt;how products implement memory today&lt;/strong&gt;. How leading AI systems — such as Claude’s memory and ChatGPT’s memory — are designed, why they work well for chat‑centric products, and why those same approaches break down for developer‑focused use cases.&lt;/p&gt;




</description>
      <category>agents</category>
      <category>ai</category>
      <category>architecture</category>
      <category>llm</category>
    </item>
    <item>
      <title>Part 1: Foundations - Why Memory Matters in AI</title>
      <dc:creator>Arulnidhi Karunanidhi</dc:creator>
      <pubDate>Mon, 09 Feb 2026 15:59:57 +0000</pubDate>
      <link>https://dev.to/arulnidhi_karunanidhi_7ff/foundations-why-memory-matters-in-ai-36np</link>
      <guid>https://dev.to/arulnidhi_karunanidhi_7ff/foundations-why-memory-matters-in-ai-36np</guid>
      <description>&lt;h2&gt;
  
  
  1.1 The Stateless Nature of LLMs
&lt;/h2&gt;

&lt;p&gt;Let's start with a truth that seems counterintuitive when you're chatting with Claude or ChatGPT:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Large Language Models have no memory.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Every single time you send a message, the model starts completely fresh. It has no idea who you are, what you discussed before, or what preferences you have. It's like talking to someone with perfect amnesia, as every conversation begins at zero.&lt;/p&gt;

&lt;p&gt;But, the conversation feels continuous, right!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The trick: Your entire conversation history is sent with every message.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When you send "Can you explain that differently?", what actually reaches the model is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[System prompt: You are Claude, made by Anthropic...]
[Message 1: User asked about Python decorators]
[Message 2: Claude explained decorators with examples]
[Message 3: User says "Can you explain that differently?"]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The model reads everything, generates a response, and then &lt;strong&gt;forgets everything&lt;/strong&gt;. The next time you send a message, the whole history is sent again.&lt;/p&gt;

&lt;p&gt;This is what we mean by &lt;strong&gt;stateless&lt;/strong&gt; , the model itself stores nothing between calls. All "memory" is an illusion created by passing context back and forth.&lt;/p&gt;




&lt;h2&gt;
  
  
  1.2 Context Windows: The Illusion of Memory
&lt;/h2&gt;

&lt;p&gt;The "context window" is the maximum amount of text a model can process in a single call. Think of it as the model's working memory, everything it can "see" at once.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Context window sizes (as of late 2025):&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Context Window&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;GPT-4o&lt;/td&gt;
&lt;td&gt;128K tokens&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude 3.5 Sonnet&lt;/td&gt;
&lt;td&gt;200K tokens&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude Opus 4&lt;/td&gt;
&lt;td&gt;200K tokens&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gemini 1.5 Pro&lt;/td&gt;
&lt;td&gt;2M tokens&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A token is roughly ¾ of a word. So 200K tokens ≈ 150,000 words ≈ a 500-page book.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This sounds huge. So what's the problem?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Three issues:&lt;/p&gt;

&lt;h3&gt;
  
  
  Issue 1: Cost
&lt;/h3&gt;

&lt;p&gt;Every token you send costs money. If you're building an application with 1,000 users, each sending 10 messages per day, and you're stuffing 50K tokens of history into each call...&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1,000 users × 10 messages × 50K tokens = 500M input tokens/day
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;At Claude's pricing ($3/1M input tokens for Sonnet), that's &lt;strong&gt;$1,500/day&lt;/strong&gt; just on input tokens. And that's before the model generates any output.&lt;/p&gt;

&lt;h3&gt;
  
  
  Issue 2: Latency
&lt;/h3&gt;

&lt;p&gt;More tokens = slower responses. The model has to process everything you send before generating the first word of its response. With 100K tokens of context, you might wait 5-10 seconds before seeing any output.&lt;/p&gt;

&lt;h3&gt;
  
  
  Issue 3: The "Lost in the Middle" Problem
&lt;/h3&gt;

&lt;p&gt;Research has shown that LLMs pay more attention to the &lt;strong&gt;beginning&lt;/strong&gt; and &lt;strong&gt;end&lt;/strong&gt; of their context window, and less attention to the middle. If you stuff a 200K context window full of conversation history, the model might miss important details from 3 hours ago that are buried in the middle.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[Beginning - High Attention]
...
[Middle - Lower Attention] ← Important detail about user's project here
...
[End - High Attention]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is why "just use a bigger context window" isn't a complete solution.&lt;/p&gt;




&lt;h2&gt;
  
  
  1.3 The Forgetting Problem: What Happens After 128K Tokens?
&lt;/h2&gt;

&lt;p&gt;Let's make this concrete.&lt;/p&gt;

&lt;p&gt;Imagine you're building a personal assistant that helps a user over weeks or months. They discuss:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Their job (software engineer at a fintech startup)&lt;/li&gt;
&lt;li&gt;Their preferences (likes concise answers, hates bullet points)&lt;/li&gt;
&lt;li&gt;Their projects (building a recommendation engine)&lt;/li&gt;
&lt;li&gt;Their schedule (busy Mondays, prefers async communication)&lt;/li&gt;
&lt;li&gt;Hundreds of small details mentioned in passing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After a few weeks of daily use, you have &lt;strong&gt;millions of tokens&lt;/strong&gt; of conversation history.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What do you do?&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Option A: Truncate (Delete Old Messages)
&lt;/h3&gt;

&lt;p&gt;Just keep the most recent N messages. Simple, but brutal.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Day 1: User mentions they're allergic to shellfish
Day 2-30: Various conversations
Day 31: User asks for dinner recommendations
Assistant: "How about this great lobster restaurant?" 💀
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The model forgot because you deleted the context where the allergy was mentioned.&lt;/p&gt;

&lt;h3&gt;
  
  
  Option B: Summarize
&lt;/h3&gt;

&lt;p&gt;Periodically compress old conversations into summaries.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Original (5000 tokens):
- Long conversation about user's job search
- Details about companies they applied to
- Specific concerns about salary negotiation

Summary (200 tokens):
"User is job searching in tech, has applied to several companies, 
concerned about salary negotiation."
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Better, but you lose nuance. Which companies? What were the specific concerns? Summaries are lossy compression.&lt;/p&gt;

&lt;h3&gt;
  
  
  Option C: Extract and Store
&lt;/h3&gt;

&lt;p&gt;Pull out key facts and store them separately:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Facts extracted:
- User works at: TechCorp (software engineer)
- User preference: concise answers
- User allergy: shellfish
- User project: recommendation engine
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is the foundation of what memory systems like mem0 do. But now you need a system to:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Decide what's worth extracting&lt;/li&gt;
&lt;li&gt;Store it somewhere&lt;/li&gt;
&lt;li&gt;Retrieve relevant facts for each new conversation&lt;/li&gt;
&lt;li&gt;Handle conflicts (user changed jobs, old fact is now wrong)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;This is the memory problem.&lt;/strong&gt; And it's why a whole category of tools exists to solve it.&lt;/p&gt;




&lt;h2&gt;
  
  
  1.4 Human Memory vs Machine Memory: A Conceptual Framework
&lt;/h2&gt;

&lt;p&gt;To build good AI memory systems, it helps to understand how human memory actually works. Not because we should copy it exactly, but because it reveals what kinds of memory matter.&lt;/p&gt;

&lt;h3&gt;
  
  
  Human Memory Types
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Sensory Memory&lt;/strong&gt; (milliseconds)&lt;br&gt;
Raw input from senses. Mostly irrelevant for AI, this is like the streaming tokens before they're processed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Short-Term / Working Memory&lt;/strong&gt; (seconds to minutes)&lt;br&gt;
What you're actively thinking about right now. Limited capacity — humans can hold about 7±2 items.&lt;/p&gt;

&lt;p&gt;For LLMs: This is the &lt;strong&gt;context window&lt;/strong&gt;. What the model can "see" in a single call.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Long-Term Memory&lt;/strong&gt; — This is where it gets interesting:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;What It Stores&lt;/th&gt;
&lt;th&gt;Human Example&lt;/th&gt;
&lt;th&gt;AI Equivalent&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Episodic&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Specific events&lt;/td&gt;
&lt;td&gt;"Last Tuesday's meeting"&lt;/td&gt;
&lt;td&gt;Conversation logs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Semantic&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Facts &amp;amp; knowledge&lt;/td&gt;
&lt;td&gt;"Paris is in France"&lt;/td&gt;
&lt;td&gt;Extracted facts, knowledge bases&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Procedural&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;How to do things&lt;/td&gt;
&lt;td&gt;Riding a bike&lt;/td&gt;
&lt;td&gt;Fine-tuned behaviors, tool usage patterns&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h3&gt;
  
  
  The Key Insight
&lt;/h3&gt;

&lt;p&gt;Humans don't remember everything. We:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Consolidate&lt;/strong&gt; — Important things move from short-term to long-term&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Forget&lt;/strong&gt; — Unimportant things decay&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reconstruct&lt;/strong&gt; — We don't replay memories perfectly; we rebuild them from fragments&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Associate&lt;/strong&gt; — Memories connect to each other (one memory triggers another)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Good AI memory systems need similar properties:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Not everything should be stored (selective extraction)&lt;/li&gt;
&lt;li&gt;Old irrelevant memories should fade (decay/relevance scoring)&lt;/li&gt;
&lt;li&gt;Retrieval should be associative, not just keyword-based (semantic search)&lt;/li&gt;
&lt;li&gt;Memory should be reconstructible from fragments (summarization + facts)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  The Gap
&lt;/h3&gt;

&lt;p&gt;Here's what current LLM products (Claude's memory, ChatGPT's memory) give you:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User Preferences ✓ (semantic memory)
Key Facts ✓ (semantic memory)
Conversation Recall ✓ (episodic memory, limited)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here's what they &lt;strong&gt;don't&lt;/strong&gt; handle well:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Multi-agent shared memory ✗
Memory scoping (who knows what) ✗
Memory validation (is this fact still true?) ✗
Procedural memory for agents ✗
Memory across applications ✗
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This gap is exactly where developer-facing memory tools (mem0, Supermemory, Aegis Memory) come in.&lt;/p&gt;




&lt;h2&gt;
  
  
  Module 1 Summary
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Concept&lt;/th&gt;
&lt;th&gt;Key Takeaway&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Stateless LLMs&lt;/td&gt;
&lt;td&gt;Models remember nothing; context is re-sent every call&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Context Windows&lt;/td&gt;
&lt;td&gt;Limited size, costly, slow, attention problems&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;The Forgetting Problem&lt;/td&gt;
&lt;td&gt;Can't keep everything; need selective storage &amp;amp; retrieval&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Memory Types&lt;/td&gt;
&lt;td&gt;Episodic (events), Semantic (facts), Procedural (skills)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;The Gap&lt;/td&gt;
&lt;td&gt;Product memory ≠ Agent/Developer memory&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;p&gt;In Part 2, we'll answer a question that trips up most developers:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What's the difference between episodic and semantic memory, and why does it matter for your agent?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We'll build a complete taxonomy mapping human memory research to AI implementation. &lt;br&gt;
You'll learn why LLMs can fake most memory types but struggle with one critical category — &lt;br&gt;
the same one that multi-agent systems need most.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>beginners</category>
      <category>llm</category>
      <category>machinelearning</category>
    </item>
    <item>
      <title>How to Add Persistent Memory to CrewAI Agents</title>
      <dc:creator>Arulnidhi Karunanidhi</dc:creator>
      <pubDate>Sat, 07 Feb 2026 07:52:33 +0000</pubDate>
      <link>https://dev.to/arulnidhi_karunanidhi_7ff/how-to-add-persistent-memory-to-crewai-agents-2o63</link>
      <guid>https://dev.to/arulnidhi_karunanidhi_7ff/how-to-add-persistent-memory-to-crewai-agents-2o63</guid>
      <description>&lt;h2&gt;
  
  
  What is Aegis Memory?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/quantifylabs/aegis-memory" rel="noopener noreferrer"&gt;Aegis Memory&lt;/a&gt; is an open-source memory layer built specifically for multi-agent AI systems. It solves the "amnesia problem" where AI agents forget everything between sessions.&lt;/p&gt;

&lt;p&gt;Unlike built-in framework memory (which is session-only), Aegis provides:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Persistent storage&lt;/strong&gt; that survives restarts&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Semantic search&lt;/strong&gt; across all memories&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scoped access control&lt;/strong&gt; (private, shared, global)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Self-improvement patterns&lt;/strong&gt; (ACE) for agents that learn over time&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In this tutorial, you'll learn how to integrate Aegis Memory with CrewAI in under 10 minutes.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;You build a CrewAI agent. It works great. Then you restart it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Run 1
&lt;/span&gt;&lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;My name is Alex, I&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;m a Python developer&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;# Agent: "Nice to meet you, Alex!"
&lt;/span&gt;
&lt;span class="c1"&gt;# Run 2 (new session)
&lt;/span&gt;&lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;What&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;s my name?&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;# Agent: "I don't know your name."
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Everything your agent learned? Gone.&lt;/p&gt;

&lt;p&gt;This isn't a bug, it's how LLMs work. Context windows reset. Sessions end. Memory disappears.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;But multi-agent systems need persistent memory.&lt;/strong&gt; Agents that remember users. Teams that share knowledge. Systems that learn from mistakes.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Solution: Aegis Memory
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/quantifylabs/aegis-memory" rel="noopener noreferrer"&gt;Aegis Memory&lt;/a&gt; is an open-source memory layer for multi-agent systems. It gives your CrewAI agents:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Persistent memory&lt;/strong&gt; that survives restarts&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Semantic search&lt;/strong&gt; (query by meaning, not keywords)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scoped access&lt;/strong&gt; (private, shared, or global memories)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Self-improvement&lt;/strong&gt; through ACE patterns&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let's add it to a CrewAI project.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 1: Install
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;aegis-memory crewai
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Start the Aegis server (requires Docker):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/quantifylabs/aegis-memory.git
&lt;span class="nb"&gt;cd &lt;/span&gt;aegis-memory
docker-compose up &lt;span class="nt"&gt;-d&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Step 2: Basic Integration
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;aegis_memory&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;AegisClient&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;crewai&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Task&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Crew&lt;/span&gt;

&lt;span class="c1"&gt;# Connect to Aegis
&lt;/span&gt;&lt;span class="n"&gt;memory&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;AegisClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;base_url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;http://localhost:8741&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;your-api-key&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Store a memory
&lt;/span&gt;&lt;span class="n"&gt;memory&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;User prefers concise responses and dark mode&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;agent_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;assistant&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;user_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user_123&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;scope&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;agent-private&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Query memories semantically
&lt;/span&gt;&lt;span class="n"&gt;results&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;memory&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;query&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;What are the user&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;s preferences?&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;agent_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;assistant&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;user_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user_123&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;top_k&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;results&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="c1"&gt;# Output: "User prefers concise responses and dark mode"
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Step 3: CrewAI Integration
&lt;/h2&gt;

&lt;p&gt;Here's a research crew with persistent memory:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;aegis_memory.integrations.crewai&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;AegisCrewMemory&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;crewai&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Task&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Crew&lt;/span&gt;

&lt;span class="c1"&gt;# Initialize Aegis memory for CrewAI
&lt;/span&gt;&lt;span class="n"&gt;memory&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;AegisCrewMemory&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;base_url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;http://localhost:8741&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;your-api-key&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Create agents with shared memory
&lt;/span&gt;&lt;span class="n"&gt;researcher&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;role&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Research Analyst&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;goal&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Find accurate information on given topics&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;backstory&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Expert at gathering and analyzing data&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;memory&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;memory&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;verbose&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;writer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;role&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Content Writer&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
    &lt;span class="n"&gt;goal&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Write clear, engaging content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;backstory&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Skilled at transforming research into readable content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;memory&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;memory&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="c1"&gt;# Same memory instance = shared knowledge
&lt;/span&gt;    &lt;span class="n"&gt;verbose&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Define tasks
&lt;/span&gt;&lt;span class="n"&gt;research_task&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Task&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Research the latest trends in AI agents&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;researcher&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;expected_output&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Summary of key trends&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;writing_task&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Task&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Write a blog post based on the research&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;writer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;expected_output&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Draft blog post&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Create and run the crew
&lt;/span&gt;&lt;span class="n"&gt;crew&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Crew&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;agents&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;researcher&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;writer&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;tasks&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;research_task&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;writing_task&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;memory&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;memory&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;crew&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;kickoff&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;What happens:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Researcher finds information → stored in shared memory&lt;/li&gt;
&lt;li&gt;Writer queries memory → gets researcher's findings&lt;/li&gt;
&lt;li&gt;Next run → both agents remember what they learned&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  How Memory Scopes Work
&lt;/h2&gt;

&lt;p&gt;Aegis provides three scopes:&lt;/p&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.amazonaws.com%2Fuploads%2Farticles%2Fwjpoy6t22qyr60k7bxc0.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.amazonaws.com%2Fuploads%2Farticles%2Fwjpoy6t22qyr60k7bxc0.png" alt="How Aegis Memory scopes works" width="800" height="800"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Private: only the researcher can see this
&lt;/span&gt;&lt;span class="n"&gt;memory&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Internal analysis notes&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;agent_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;researcher&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;scope&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;agent-private&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Shared: researcher and writer can see this
&lt;/span&gt;&lt;span class="n"&gt;memory&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Key finding: AI agent market growing 40% YoY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;agent_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;researcher&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;scope&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;agent-shared&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;shared_with_agents&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;writer&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Global: all agents can see this
&lt;/span&gt;&lt;span class="n"&gt;memory&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Company policy: always cite sources&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;agent_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;admin&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;scope&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;global&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Why Not Just Use CrewAI's Built-in Memory?
&lt;/h2&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.amazonaws.com%2Fuploads%2Farticles%2Fsm1ta4srp6imt22mz22y.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.amazonaws.com%2Fuploads%2Farticles%2Fsm1ta4srp6imt22mz22y.png" alt="Crew AI Built-in memory vs Aegis Memory" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;CrewAI's memory works for single sessions. Aegis works for production systems.&lt;/p&gt;




&lt;h2&gt;
  
  
  What's Next?
&lt;/h2&gt;

&lt;p&gt;Once you have persistent memory working, you can add:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Memory voting&lt;/strong&gt;: Track which memories help vs harm task completion&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reflections&lt;/strong&gt;: Store lessons from failures&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Playbooks&lt;/strong&gt;: Query proven strategies before starting tasks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are called &lt;a href="https://www.aegismemory.com/blog/self-improving-ai-agents-ace-pattern/" rel="noopener noreferrer"&gt;ACE patterns&lt;/a&gt; — they help agents improve over time.&lt;/p&gt;




&lt;h2&gt;
  
  
  Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub&lt;/strong&gt;: &lt;a href="https://github.com/quantifylabs/aegis-memory" rel="noopener noreferrer"&gt;github.com/quantifylabs/aegis-memory&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Docs&lt;/strong&gt;: &lt;a href="https://docs.aegismemory.com" rel="noopener noreferrer"&gt;docs.aegismemory.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Full tutorial&lt;/strong&gt;: &lt;a href="https://www.aegismemory.com/blog/add-persistent-memory-to-crewai/" rel="noopener noreferrer"&gt;aegismemory.com/blog/add-persistent-memory-to-crewai&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Built something cool with Aegis Memory? Please drop a comment I'd love to see :)&lt;/em&gt;&lt;/p&gt;

</description>
      <category>agents</category>
      <category>ai</category>
      <category>python</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
