The Librarian v1.0 update
Six weeks ago, I posted about my MVP of The Librarian - a small agentic memory server with a JSONL event log, a SQLite index, and a few rules for how agents should use it delivered as markdown skills.
It has grown into an actively curated context vault with support for durable facts, long-form reference materials and session handoff between agents, all delivered through plugins for 5 popular harnesses and a feature-rich dashboard.
I started working on this because I was trying to learn how to build serious projects with AI, and I kept hitting the same wall: every agent started with only partial context. They'd forget decisions, misplace preferences, repeat old mistakes or persist useful details in files that only one specific harness on one machine could see.
The obvious fix was to "give the agents shared memory," but that just created a different kind of mess. Memories were persisted haphazardly and inconsistently. Some facts belonged to a project, some to a tool, some to me, and many were just noise that shouldn't have been stored at all. A bigger database didn't make my tools smarter, it just gave them more room to be confused.
The first version was a simple attempt to create a single memory funnel: a central place to store, recall, and govern context. I provided the agents with a big set of tools and a complex data model, hoping that they would be smart enough to use it all sensibly, scoping memories to projects, deciding what needed my approval etc.
v1.0 is now markdown-native and git-backed. Instead of a database, the source of truth is a vault of plain text files, and the agents have a very simple toolset that only allows them to remember, recall, search references, transfer sessions, and toggle privacy mode.
There is even auto-capture by default so they don't even need to remember to /remember. But don't worry, you can toggle a private mode that ensures nothing is sent to the librarian (agents can still recall though, so you don't lose context).
It's all designed to be as lightweight and low friction for the agents as possible so the results become consistent across harnesses and models.
I made the data format shift because I believe agentic memory needs to be something humans can actually read and work with. If a memory is going to change how an agent behaves, I want to be able to inspect it, edit it, and even roll it back to a previous version. A database can do some of that, but a git-backed markdown vault is a simpler and more natural fit. It also heavily draws inspiration from the "second brain" workflow: small linked notes, and a graph that evolves as your understanding changes.
I've also put a lot more thought and iteration into retrieval. The Librarian builds a quick in-memory index from the markdown vault and uses a mix of keyword scoring (BM25), exact-phrase matching, and vector search (via a local EmbeddingGemma model). These rankings are fused together and expanded through [[wikilinks]] so that related notes can be retrieved together.
It sounds a bit elaborate, but it seems to be working well: exact names matter for precision, semantic similarity helps with intuition, and links carry the relationships that neither keyword search nor embeddings can catch on their own.
I've separated "references" from regular memory because you don't want a massive research paper being shoved into an agent's context window just because it's vaguely related to a recall request. An agent has to actually ask for them via a dedicated search tool.
The leaner interface is working well now, too. There are just seven MCP verbs remaining, and agents send and receive plain text - no complex and mistake-prone JSON payloads.
The key addition is the "curator." When you or an agent invokes /remember or turns are auto-captured, the text goes into an intake inbox. The curator then decides: is this a new memory? Does it update an existing one? Should we merge it or archive it? Most routine stuff happens automatically, but anything where the curator isn't highly confident is sent to you for review. You can adjust the confidence level if the default is too trigger happy or too cautious for your liking.
The curator also has a scheduled grooming job that puts it to work over the entire vault, allowing it to reorganise, merge or split files, and flag out of date or conflicting ones for archive or review. Both of the curator's jobs have custom prompt addenda that you control, so you can tweak its behaviour over time. This is how the Librarian keeps your vault focused and functional without requiring any thought from your agents.
The entire goal is to create an autonomously curated operating environment, frictionless for your agents, and accessible no matter which harness they are using, or where they run.
The biggest lesson for me has been how much of the work was actually about removing things. I regularly had to cut out dead tools, old plugins, and a bunch of "nice-to-have" features that just added noise. AI is great at helping you iterate quickly to try ideas, but I found I had to spend a lot of my time pulling the design back toward the simplest possible set of concepts that both an agent and a human could understand.
The Librarian isn't "finished" in any grand sense. v1.0 just means the foundation is stable enough for other people to try. There will still be rough edges, the curator will make mistakes, retrieval will miss things, and no doubt people will find bugs.
Still, I'm rather proud of it and I hope some of you find it useful too.
The project site goes into more detail with screenshots: codeministry.net/the-librarian
The code is open source under Apache-2.0: github.com/code-ministry-ltd/the-librarian
If you're working on agentic memory, second-brain tooling, or just trying to make your coding agents behave more consistently, I'd love to hear what breaks, what feels wrong, and what you would build differently. Contributions and feature requests are welcomed!