Mimisbrunn turns a folder of markdown into a memory your AI maintains for you: it ingests email, meetings and quick captures, links every fact to its source, and serves it to Claude on every device through MCP.
Plain markdown with YAML frontmatter and [[wikilinks]]. Git is the database. Claude Code is the librarian.
People, clients, projects, tools, concepts, places, recipes — each one file, each with a one-sentence description that drives recall, sources, confidence and freshness.
One Python file exposes search, outline, get, related, recent, append and create. Run it over stdio locally or behind a token on Docker for the Claude app, claude.ai and other agents.
BM25, weighted term-match and a local embedding lane fused with reciprocal rank fusion. Two deterministic evals keep it honest: retrieval-eval.py reports recall@5 0.98, MRR 0.84 and section coverage 0.86, and answer-eval.py runs the whole tool chain for groundedness 0.93 and abstention 1.00 — so a ranking change is a number that moved, not an impression — and it is fast: 14 ms median and 25 ms at p95 across 907 pages, 257 ms to re-read the whole vault. bench.py re-measures all of it, so the numbers on this page can be checked rather than believed.
Email, meeting transcripts and phone captures land in the vault with their source path. Contradictions are flagged, never overwritten. Nothing is deleted; merges leave redirects.
Stale pages by type, undated prices and versions, missing provenance — one lint script lists them. Archived things stop nagging; active things get downweighted when they go quiet.
The schema forbids keys and passwords, a pre-commit hook refuses staged Resend, GitHub, OpenAI, AWS, Slack, Google and Stripe key formats, and CI runs gitleaks and trivy on every push. A second workflow runs selftest.py, which asserts the exact tool and prompt surface, so a patch that silently deletes half the server turns the build red instead of quietly shipping. A third, no-private-data.py, checks that no email address, public IP or phone number reaches this public repository — a secret scanner never looks for those, because they only matter depending on whose they are. The remote server compares its token in constant time and keeps credentials out of .git/config.
Cloud routines for ingest, pre-meeting briefs, weekly digest, lint and a Sunday “reflect” pass that rewrites summaries and proposes merges — proposals only, you decide.
Compact hits first (about 60 tokens each), then the outline, then one section. Read-only tools are annotated as such; write tools commit and push.
| Tool | What it does |
|---|---|
| wiki_search | Query across entity, aliases, description, tags and body. Three lanes (BM25 · weighted match · embeddings) fused with RRF; stale pages weigh less; redirects hidden. Returns slug, type, description, path, score, snippet. |
| wiki_outline | Frontmatter head plus every ## section with its first line and length. Cheap way to decide what to read. |
| wiki_get | A whole page, or just one section with section=. Cite as path#heading. |
| wiki_related | Outbound and inbound links, dead links, and semantic neighbours. |
| wiki_recent | Pages changed in the last N days by last_updated. |
| wiki_handover | The latest task handover, so a new session continues where the last one stopped. |
| wiki_stats | Pages per type, dirty files, last commits. |
| wiki_append | Add knowledge to a page with section and source. Deterministic contradiction check on email, phone, prices, versions, contact person and hosting → callout + review queue. |
| wiki_create | New page following the schema. Refuses duplicates and anything that looks like a secret. |
You need Claude Code, Python 3.10+ and Obsidian (optional but recommended). Everything else is in the repo.
Run the setup interview inside Claude Code. It asks for your name, role and stack and creates the first entities.
A pre-commit hook blocks API keys, tokens and private keys before they reach git.
Register the MCP server once; every Claude Code session can now search and write to the brain.
Deploy deploy/wiki-mcp/ with Docker (Dokploy compose included), then add it as a custom connector in the Claude app with a Bearer token.
/wiki-save quick update · /wiki-query ask the brain · /wiki-ingest one source · /wiki-auto-ingest batch · /wiki-lint quality · /wiki-review confidence graduation · /wiki-learn before compaction · /wiki-handover and /wiki-resume across sessions · /wiki-import for ChatGPT, Claude, LinkedIn, Facebook, Google Takeout and Notion exports.
wiki-lint.py dead links, orphans, duplicate slugs · wiki-freshness.py frontmatter, stale pages per type, undated values, missing sources · retrieval-eval.py recall@5 / MRR · answer-eval.py groundedness and abstention · selftest.py 21 invariants of the MCP tool surface · claims.py which claims a live source could verify · open-actions.py actions written down and never done · dns-check.py domains that no longer resolve · wiki-merge.py merge with redirect stub, --candidates · regen-index.py index and hub pages · completeness-score.py, gen-dashboard.py, gen-graph.py.
wiki-context.py runs at session start and injects the critical facts plus the pages that match the project folder you opened. wiki-autocommit.py commits only the wiki file you changed and aborts a failed rebase instead of leaving the vault broken. See docs/automation-setup.md.
deploy/wiki-inbox/). A daily triage routine files it on the right page or parks it in the review queue — it never invents new pages.No. Search runs on SQLite FTS5 (BM25) plus an optional local embedding index built with fastembed. The markdown files remain the source of truth; the index is rebuilt from them and is git-ignored.
The new value goes into the text, the old one is preserved in a warning callout, and a line is added to _review-queue.md. Nothing is silently overwritten.
The vault is plain markdown and the MCP server speaks the open Model Context Protocol, so any MCP client works. The skills and hooks are written for Claude Code.
Only what you configure. The template contains no keys, and the pre-commit hook blocks secrets. Embeddings are computed locally. Cloud routines are optional.
In Norse myth, Mímir’s well lies beneath one of the roots of Yggdrasil and holds all wisdom and memory. Odin gave an eye for a single drink from it. This project is a smaller bargain: give your notes a schema and a librarian, and the well fills itself.
All wisdom is in the well; the price is that you keep drawing from it.Gylfaginning, loosely — and the maintenance rule of every second brain that survives