[ ABORT TO HUD ]
SEQ. 1
SEQ. 2
SEQ. 3
Adding Memory & Persistence
Making Your Agent Remember
Our basic agent forgets everything between sessions. Let's fix that.
Level 1: In-Memory History
const sessions = new Map();
async function chat(sessionId: string, userMessage: string) {
if (!sessions.has(sessionId)) sessions.set(sessionId, []);
const messages = sessions.get(sessionId);
messages.push({ role: "user", content: userMessage });
const response = await runAgentLoop(messages, tools);
messages.push({ role: "assistant", content: response });
return response;
}
Level 2: Persistent Storage
import { readFileSync, writeFileSync } from "fs";
function saveSession(id: string, messages: any[]) {
writeFileSync(`./sessions/${id}.json`, JSON.stringify(messages));
}
function loadSession(id: string): any[] {
try { return JSON.parse(readFileSync(`./sessions/${id}.json`, "utf-8")); }
catch { return []; }
}
Level 3: Semantic Memory (Vector DB)
// After each turn, store the key facts:
await vectorDB.add({
text: `User asked about ${topic}. Key facts: ${facts}`,
metadata: { userId, timestamp, sessionId }
});
// Before responding, recall relevant memories:
const memories = await vectorDB.query(userMessage, { topK: 3 });
Memory Decision Tree
| Need | Solution | Complexity |
|---|---|---|
| Remember within a session | In-memory array | Low |
| Resume after restart | File/DB persistence | Low-Medium |
| Recall from any past chat | Vector DB (Chroma) | Medium |
| Learn preferences over time | User profiles + vector search | Medium-High |
🎯 Pro Tip: Start with Level 1. Only add persistence when needed. Over-engineering memory early is a common trap.
SYNAPSE VERIFICATION
QUERY 1 // 2
What is the simplest way to give an agent memory?
Vector database
In-memory message array passed on each turn
Fine-tuning
Graph database