Memories
The library itself. Filter by agent, project, category, visibility, or date; recall surfaces hits with a usefulness verdict so the store learns which memories pull their weight.
Portable memory for AI agents, and a neutral session layer for handing work between them.
I think memory is one of the most important components of the agentic stack. The Librarian is what I built after trying — and abandoning — half a dozen approaches that treated storage as the problem. Storage isn't the problem. Discipline is.
Underneath, it's an append-only JSONL event log with a rebuildable SQLite/FTS index in front. Agents talk to it over MCP stdio or JSON-RPC over HTTP. A small Next.js dashboard sits on top for browsing, recall, and approving protected memories.
A separate session layer rides alongside the memory store: a neutral handover format that lets work started in one harness resume cleanly in another. Sessions are evidence, not memory; durable facts are promoted explicitly rather than scraped from chat history.
Evidence, not memory.
Events are written once, never edited. The JSONL is the source of truth; everything else is a view on top of it.
Rebuildable from the log, fast enough for thousands of memories. No external database, no embedding service, no network round trips.
Stdio for harnesses that speak MCP. JSON-RPC over HTTP for everything else. Same surface, two transports.
Browse, filter, recall, approve. The operator's view of the store, with a search bar that runs the same recall path the agents do.
Start a session in Claude Code, resume it in Codex, end it from a shell. The handover is a structured artefact, not a chat dump.
Active, proposed, archived. Protected categories — identity, relationships — route through proposals so a person sees them before they go live.
A small Next.js app on the side of the MCP server. Browse the active set, filter by agent or project, run the same recall path the agents do, and approve the categories the system won't auto-write.
The library itself. Filter by agent, project, category, visibility, or date; recall surfaces hits with a usefulness verdict so the store learns which memories pull their weight.
Active, paused, ended. Each one carries a rolling summary and a next-steps list so the next agent — or the same agent next week — picks up cold without re-deriving context.
See who's writing what, by agent and by category. Identity and relationship memories route through a proposal queue so a person reviews them before they go active.
Node 22.5+ for the built-in node:sqlite. pnpm 9.15 via Corepack. That is the entire runtime requirement.
corepack enable && corepack prepare pnpm@9.15.0 --activate
pnpm install
pnpm run seed
pnpm run serve # MCP server at http://127.0.0.1:3838
pnpm --filter @librarian/dashboard dev # Dashboard at http://127.0.0.1:3000
There is a Docker compose path too, if you would rather not install pnpm locally:
cp .env.example .env
docker compose -f docker/docker-compose.yml up -d --build
Health check: pnpm run healthcheck. The full source — including the dashboard, the MCP server, and the the-librarian CLI — lives on GitHub.