Most memory tools store facts. This stores when a fact was believed and when it stopped being true, with `supersedes` and `corroborates` as explicit relationships and a confidence that decays rather than a boolean. The session briefing capped at 1500 tokens is the other design choice worth noting — it is what keeps a large repository from eating the context window at session start. The cost is real infrastructure: Neo4j and a Gemini key are both required.
A daemon and MCP server that turns every commit and file change into structured graph state in Neo4j. tree-sitter extracts symbols, imports and lockfile facts; Gemini Flash distils diffs into `Decision` nodes; every edge carries a `created_at` and an optional `expired_at`, so the graph records what was true when, not just what is true now. Confidence is computed at query time and decays, so stale knowledge fades instead of being asserted forever.
- A cluster-level session briefing held under 1500 tokens no matter how large the repository — `get_project_context`
- Callers, callees and linked decisions for a function or class, before you edit it — `get_symbol_context`
- Recent architectural decisions over the last N days, optionally scoped to a module, and the open bugs and tech debt sorted by severity — `get_recent_decisions`, `get_open_problems`
- Hybrid search combining semantic, keyword and graph traversal with an RRF merge — `search_context`
- Edges whose composite confidence fell below a threshold, so you can see what the graph no longer trusts — `get_stale_context`
- A commit explained by cross-referencing its diff with the linked decision and problem nodes — `explain_change`
- The modules a file change is likely to affect, ranked by graph coupling and computed without any model call — `predict_impact`
- Writes back into the graph, with `corroborates` to reinforce and `supersedes` to replace — `record_decision`, `record_problem`, `resolve_problem`, `invalidate_edge`
- Per-node-type write ACLs and intent confirmation on agent writes, so the agent cannot quietly rewrite history
A Neo4j instance — the repository ships a Docker Compose file for it — plus four values: `NEO4J_URI`, `NEO4J_USER`, `NEO4J_PASSWORD` and `GEMINI_API_KEY`, since Gemini is what turns diffs into decisions. Install through the Claude Code marketplace, or run `npx stifler-memex-mcp` with `init`, `watch` and `serve`; the same tool is on PyPI as `memex-mcp` and on npm as `stifler-memex-mcp`, both at 0.8.0. For a shared team setup there is a separate bootstrap script and Compose file that turn auth on by default and keep Neo4j's ports off the host — with a documented `down -v` footgun to avoid.
One command plus a key — npx stifler-memex-mcp serve --repo ., then supply credentials
