v3.2.0 — The One Where Notion Moves Into Your Brain
Your brain can now mirror a live Notion zone into its own vault — as clean, searchable, citable Markdown — so it answers from that zone framed, sourced and offline, with no copy-paste and no manual reindex. The central RAG your company doesn't have yet — but local, and right now.
👥 Who is this for?
- 🌱 New here — you've never installed a second brain. Install and go: you get a private, local, RAG-powered second brain out of the box. Local mirrors are there the day you want your brain to also search an internal Notion zone — nothing to set up until then.
- 🔄 You already run a second brain. Update its engine with the
update-engineskill (opt-in, never touches your notes), then just ask your brain to "mirror this Notion zone locally" — the new/local-mirrorskill walks you through it. - 🏢 Your team lives in Notion and there's no central mcp/search. This is the local-first answer in the meantime: your own brain mirrors the zone that concerns you and indexes it locally — zero infra, works today.
✨ New — mirror a Notion zone into your brain (/local-mirror)
Point your brain at a Notion root page, share a read-only integration with it, and the whole sub-tree becomes first-class notes in your vault — searchable semantically, cited, offline. No special vocabulary: ask in plain language, in any language.
- "mirror the product zone from Notion locally"
- "make my brain able to search this Notion"
- 🇫🇷 "mets en place un miroir local pour ce Notion" · "réplique cette zone Notion en local"
- "refresh my product mirror" / "is my mirror behind?"
A one-way local copy kept for the offline RAG: copied once, then refreshed on demand. Under the hood — delta sync via watermark, content-hash no-op skipping (an unchanged page rewrites/reindexes nothing), deletion reconciliation, atomic vault writes, clickable internal Notion-page links, and child-database extraction so DB-backed pages aren't mirrored empty.
Six tools, driven conversationally by the skill:
| Tool | What it does |
|---|---|
setup_source |
Interactive onboarding: tests the scope, first sync, guides the token into .env (never through the chat) |
sync |
Delta sync + deletion reconciliation for one mirror or all |
check_freshness |
Light watermark-only check — is it behind, and by how much? (pulls nothing) |
status |
Last sync, watermark, item count, lateness |
list_sources |
All declared mirrors + their state |
remove_source |
De-register, optionally clean up the folder + sidecar |
The skill also disambiguates up front: durable / offline / citable → a local mirror; one-off / live / right now → the native Notion connector. It only asks when your intent is genuinely ambiguous.
🧭 Why "local mirror" (and not "golden source")
This release renames the concept golden-source-sync → local-mirror (skill, MCP server, persisted names, docs). "Golden source" over-claimed — it implied the authoritative source — and blurred the line with reading Notion live. A local mirror says exactly what it is: a one-way local copy of a chosen zone, kept for the offline RAG. The day a central search platform arrives, you switch over without rewriting anything (same vault contract).
🧩 Architecture — decoupled by the filesystem (ADR 0022)
local-mirror writes and deletes files, full stop. The existing FileWatcher reindexes and the auto-commit hook commits — the mirror server is unaware of the RAG. No tool bolted onto vault-rag, no code link between the two. It's a self-contained pure-JS MCP package (no native deps, no ABI-skew), hexagonal (ports & adapters).
📐 Known limitations (documented, by design)
- Attached PDFs / Google Slides are not extracted — only the page's Notion text is mirrored (flagged at use-time).
- Links to other Notion spaces are not pulled in — only the declared root page's sub-tree is mirrored.
Already have a brain installed? Update its engine with the update-engine skill (opt-in; never touches your notes, .env, constitution, settings or custom skills) — then ask it to mirror a Notion zone.