How it works:
- It's an MCP server, so Claude Code, Cursor and Codex share one memory per project (keyed by the git repo). - When the agent saves a memory, it can link it to the files it depends on. Mnemolith stores each file's git blob hash. If the file's contents change (committed or not), the memory is set aside and flagged for review, so the agent stops relying on it. - A local dashboard shows what the agent remembers, where each memory came from (tool, session, file versions), and its full history. You can confirm a memory is still true, or retire it and say what's true now. - Contradictions are judged by the agent, not by a similarity threshold. In my calibration, "we use Postgres" vs "we migrated to MySQL" only scored 0.30 similarity, so a threshold can't tell a contradiction from an unrelated fact. - Current memories can sync into a managed section of AGENTS.md / CLAUDE.md, so they get reviewed in PRs.
Under the hood it runs on an engine I wrote from scratch in Java: a Redis-compatible server with a built-in memory model and an HNSW vector index. Embeddings run locally (all-MiniLM-L6-v2). Everything stays on your machine.
It's early (v0.2.1). There's no team sync yet beyond the AGENTS.md/CLAUDE.md files, and it needs Java 11+ (it downloads a private copy if you don't have one).
I'd really like feedback, especially from people running coding agents on real codebases. What does your agent keep getting wrong?