Jessica: Okay, first thing: the moment you type agent memory into your search bar you get like six shiny new tools promising to solve it forever and ever. Graphiti, mem0, HydraDB, cognee, they’re all racing to crack the unified-memory problem. Cathy: Right — and when the field looks this crowded it usually means none of them actually work. So I’m already skeptical of any tool that claims to solve it entirely. Jessica: Exactly. So this post’s thesis isn’t ‘here’s the magic tool,’ it’s ‘here’s why you should build the thing yourself so you know what’s even possible.’ Cathy: Yeah, because in practice the author’s test got thirty-four relationship types from five documents… and three versions of the same relation. That’s not a training issue; that’s the pipeline just exploding. Jessica: Right, so the hook lands: if you’re the kind of team that’s about to glue together Obsidian notes, Readwise highlights, starred repos, and every conversation with your agent… and then ask the agent to keep learning across sessions… you probably should know how the memory layer actually works under the hood before you outsource it. Cathy: Or decide you even need a unified memory at all in the first place. Jessica: And the post walks you through building the whole stack from scratch, ending at a FastMCP server that exposes agent-shaped primitives instead of raw database endpoints. I’m already sold on the principle-level win, but let’s see if the execution holds up. Cathy: Sure. The architecture is basically a single MongoDB collection that does text, vector, and graph search in one shot. Lineage is free: nodes hang references to source docs, not copies. They scale to millions of documents via sharding and replicas. Jessica: Free lineage is nice — until your KG decides that part_of, Part Of, and part of are three separate relationship types and invents seventeen node types from five documents. But okay, the long pole here is continual learning: every conversation the agent has gets ingested back into the graph before the user moves on. Cathy: So the memory is always catching up. Good luck keeping the RAM bill under control — they’re writing to a single collection, not an append-only log with a materialized view. That keeps the footprint lean but loses built-in versioning and soft-delete. Jessica: Which is fine until you need to roll back a bad extraction. And the post’s ontology is the contract that keeps the writer and reader in sync: one artifact, two consumers, no drift. They adopt the POLE+O model from law enforcement — Person, Object, Location, Event, Organization, plus preference and fact — and then adapt it for gaming or personal-assistant needs. Cathy: POLE+O plus typed edges like knows or member_of. But here’s the real departure: instead of baking the ontology into prompts as a one-off, they serialize the Pydantic schema into JSON and dump it into every system prompt. One schema, two prompts, no drift. Jessica: Which is clever — until a team lands on a different schema. Then the schema itself is the thing that fractures, not the graph. Cathy: No, I’m saying let’s take the post as a thoughtful starting point, not gospel. There’s real meat here on ontology design and deduplication, and less so on the operational guardrails. Jessica: Fine, fine. So who on earth should actually roll their own? Only teams that have already hit the ceiling on off-the-shelf memory layers and need continual learning tied to their specific data model. Everyone else should reach for cognee or mem0 and call it a day. Cathy: And even then, measure twice, cut once. Because once you fuse two nodes that shouldn’t be merged, that’s a permanent scar in your graph. Jessica: Right. End-to-end, the post gives you a blueprint you can adapt or abandon. Just don’t mistake it for a silver bullet.