A few weeks back, one of my AI agents quoted a client a price we had retired months earlier. It wasn't a hallucination. The dead number was sitting right there in my notes, and the agent's search ranked it above the current one, because a retired price list uses the word "price" just as often as a live one.
That was the moment I stopped trusting bolt-on "agent memory" and built my own.
Engram is an open-source, self-hosted memory layer for AI agents. It's an MCP server plus a dashboard over a plain folder of markdown files. Your agents (Claude Code, Cursor, Codex, whatever speaks MCP) read and write notes through one endpoint, the files are the source of truth, and git is the database. No vector store, no black-box "memories" you can't read.
The core idea, and the thing I'd genuinely love feedback on, is what I call authority-aware search. Normal search ranks by how well text matches your query and has no notion of which note is still true. So Engram gives every note an authority from its folder and frontmatter (locked, current, superseded, archived) and ranks by relevance x authority. A superseded note sinks below the live one, and every search result tells the agent how much to trust it. That one change is what stopped my agents from quoting dead data.
A few other things that came out of running it with several agents at once:
It's MIT, one Docker container, deploys to Railway or Render or any box with a volume.
Repo (deploy buttons in the readme): https://github.com/rwnalds/engram
The closest tools I found are hypermnesic and basic-memory, both git-backed markdown memory. The difference with Engram is the dashboard, the authority ranking, and the per-agent access control, rather than a headless server.
I'm still early and figuring out whether the authority-ranking idea generalizes past my own vault. If you run agents that keep resurfacing stale context, I'd really like to hear where this holds up or breaks for you.
What I like here is that you treated the failure as an interpretation problem rather than a retrieval problem.
The agent already had the right information. It just couldn't distinguish between "historically true" and "currently true." That feels like a more fundamental issue than memory quality, and it's probably going to matter in a lot more agent workflows than pricing.