Building Personal Memory Store Oleh built a self-managed, decentralized personal memory store for AI agents using the open-source Graphiti framework and FalkorDB, storing context as entity-relationship graphs alongside a SQLite database for todos and reminders. The store is exposed to agents through an MCP server and to humans via a REST API, with an LLM classifier deciding whether each stored "Episode" goes to the vector database, SQLite, or both. The author argues that usefulness equals intelligence plus context, and that owning personal context avoids lock-in to any single model provider. Building personal memory store Sep 2026 · 8 min read When I played with Grok Bot, I was hooked by how proactive and useful it could be. It's an impressive product, both in its capabilities and its UI. But it didn't know me, my life context, or what I care about right now. It was cool, but I'd never call it a personal butler that can help me with all my daily chores and projects. Intelligence is only one part of what makes AI agents useful. The other part is context. Usefulness = intelligence + context. We are fortunate to have many intelligence providers, with models getting more powerful and more affordable every few weeks. And this is precisely why it makes little sense to keep all my personal context with any one model provider. I want to be able to switch between models without being locked into any of them, and own my personal context and have full control over it. When I started designing my little village of AI agents, one of the first decisions I made was to build a decentralised memory store that I could manage myself and connect to any third-party model or agent. It's been a fun journey, and in this post I'll describe how I built it. This is Part 1 of my Personal Little AI World setup series. Architecture I use open-source Graphiti framework and FalkorDB to orchestrate my memory store. Graphiti parses information and stores context as relationships between entities: "Entity → Relationship → Entity". With more queries the graph grows and develops more complex relationships like "Oleh friends with James who works at XYZ competitor of Acme". The good news is that Graphiti abstracts away most of the complexity for you - entity deduplication, query parsing, conflict management, etc. The framework has been great at hiding the complexity while still being developer-friendly enough for me to experiment with custom entity types and search strategies. Graphiti supports several graph databases out of the box. I went with FalkorDB because it's the simplest option and works well at my small, personal scale. Alongside context, I want my memory store to store my todos and reminders. Vector DBs are a bad choice for storing tabular data, as similarity search can't precisely answer questions like "what's due before Friday?". To store tabular data, I added a SQLite db and a thin piece of logic that parses free-text todo queries into SQL rows. I expose memory store data via an MCP server for agents and a REST API for analytics for humans. When an agent decides to add a new memory, it calls add memory with the new context as a function parameter. I always store an input query Graphiti uses the "Episode" term for raw text in the Episode store. This means I always have a source of truth for everything further down the pipeline. Then I run an LLM classifier call to decide whether the Episode should be added to the Vector DB, stored inside SQLite, or both. For search, I expose a search memories function that performs similarity search across my context and returns a list of relevant facts, entities, and source-of-truth Episodes. For Todos, I decided to simply attach a list of active TODOs to the response. It's not the most elegant solution, but it works really well at my scale and keeps things simple.