Citations are the whole design: retrieval returns the file, the section and the lines, so a claim is checkable rather than plausible. The permission model is unusually careful for a memory tool — reads are open, writes need one flag, deletes and moves need another, and anything written is secret-scanned first. One documented gap to know: moving a file does not rewrite inbound markdown links to the old path, it logs a warning.
A single cgo-free Go binary that indexes plain-Markdown folders — ADRs, design docs, runbooks, notes, source — and serves them over MCP so an agent searches your own knowledge instead of guessing. Every answer lands on a `file#section` and a line range you can open. No vector database, no Python or Node service, and nothing leaves the machine.
- Ranked, filtered retrieval with citations attached — `mnemos.search`
- A precise chunk read by `chunk_id`, or a whole document by `uri`, optionally pulling in its one-hop link neighbours — `mnemos.read`
- Top results returned as LLM-ready context blocks addressed `uri:start-end` — `mnemos.context`
- A document's link graph: outbound links and inbound backlinks, with dangling targets marked `resolved: false` — `mnemos.related`
- The knowledge tree walked on disk with index metadata attached and an `indexed` flag, so files you have not indexed yet are still visible — `mnemos.list`
- Writes behind an explicit gate (`allow_write = true`): a note written into memory at an auto-named or explicit path, and an existing `.txt`/`.md` converted into a structured document — both secret-scanned before they are written — `mnemos.remember`, `mnemos.okfy`
- Deletes and moves behind a second gate (`allow_delete = true`), with a directory move carrying its whole subtree and preserving each document's collection — `mnemos.forget`, `mnemos.move`
- A watcher that reindexes incrementally on change and drops deleted files — `mnemos watch . --collection myproject`
- Optional Claude Code hooks: a `SessionStart` matcher that injects the working set and re-injects it after compaction, and a `UserPromptSubmit` matcher that fires on recall cues like "as we decided" and injects the top 3 search hits
Go 1.25+ to build; `make install` puts one binary in `$GOBIN`, or `make build` keeps it in `./bin/mnemos` and off your `$PATH`. No account, no key, no external service. Register it with an **absolute** `--config` path — `claude mcp add mnemos -- mnemos serve --config /abs/path/to/project/.mnemos/mnemos.toml` — because Claude Code does not guarantee the working directory it spawns the server in; a bare `mnemos serve` only finds your data by luck, and fails with a clear error rather than returning empty results. The default build is lexical-only; semantic search is an optional build plus `mnemos models install all-MiniLM-L6-v2` and `use_vectors = true`. The prompt-cue hook needs `jq`.
Build from source — clone the repository and build it, then point your client at the binary
