Skip to content

Releases: tpierrain/second-brain-generator

v3.2.2 — The One Where Citations Click Through

19 Jun 15:20

Choose a tag to compare

Patch release polishing the local-mirror experience. All changes are engine-side and deterministic, so they reach every brain through /update-engine — not just new installs.

Clickable dual-link citations (the anchor)

Mirror-backed answers used to cite their sources as plain, non-clickable text. Now every search_vault citation carries:

  • 🧠 a local copy link (obsidian://open?path=<absolute>) on every result;
  • 🔗 a Notion source link on mirror notes (forwarding the canonicalized www.notion.so URL).

Wiring: a nullable source_url column with an out-of-band ALTER migration — existing rows grandfather to null, no forced reindex. Link destinations are CommonMark <…>-wrapped and escaped (>/</whitespace percent-encoded) so any source_url stays a single clickable link.

/update-engine recap shows your vault note count

The update recap now states "your vault holds N note(s)" (+ "searchable as the reindex finishes" when a reindex ran). It's a deterministic on-disk Markdown count (no native deps), using the same exclusions as the indexer.

Onboarding polish (local-mirror skill)

  • Coherent restart message: set up now, no restart — a restart is only an optional later step.
  • Confirm the token env-var name before writing any .env placeholder.
  • Verify a sync via the structured result and the status tool, never a compound shell command.
  • Reconcile the two counts the user sees ("N pages mirrored" → "N notes ready to search").

Engine

  • rag engine 1.1.11.1.2; index schema unchanged (1).

🤖 Generated with Claude Code

v3.2.1 — The One Where Updating Finally Brings The Mirror Along (and Clears the npm Vulns)

19 Jun 06:53
3e58c86

Choose a tag to compare

A bugfix release that makes engine updates actually deliver the flagship feature — and clears every npm vulnerability.

What it fixes

Before v3.2.1, updating a brain to v3.2.x copied the local-mirror code but never installed its skill nor registered its MCP server — so only a fresh install got the feature. Upgraders silently missed it.

Now, an engine update:

  • Installs missing engine-declared skills (install-if-absent) — a brand-new engine skill (e.g. local-mirror) reaches upgraders, while a custom/already-present skill is left byte-identical.
  • Reconciles .mcp.json from the manifest's engineMcpServers — registers a newly-shipped engine server, preserving existing engine/user servers.
  • Names what it delivered in the update summary, so you see you finally have the feature.
  • Clears all npm vulnerabilities (0 vulns on rag/ and local-mirror/).

Safety

Your notes, .env, constitution, settings and custom skills stay untouchable by construction — only manifest-declared engine assets are written, and only when absent.

ℹ️ Brains already on ≤v3.2.0 self-heal over two update cycles (run 1 installs the new logic, run 2 runs it) — documented in the update-engine skill + ADR 0025.

Closes QA findings #1 (major) + #2 (npm vulns).

v3.2.0 — The One Where Notion Moves Into Your Brain

18 Jun 22:18
8c93745

Choose a tag to compare

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-engine skill (opt-in, never touches your notes), then just ask your brain to "mirror this Notion zone locally" — the new /local-mirror skill 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-synclocal-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.

v3.1.0 — The One That Can Migrate Your Old Second Brain Like Kenjaku (and fixes Node compatibility)

17 Jun 18:24
08b388c

Choose a tag to compare

👥 Who is this for?

This release lands differently depending on where you start from — here's the takeaway for each:

  • 🌱 New here — you've never installed a second brain. Nothing to migrate: just install and you get a private, local, RAG-powered second brain out of the box. The import feature below simply doesn't apply to you yet — you start fresh.
  • 🔄 You already run a second brain from an earlier version (pre-/around v3.0). Install (or update to) 3.1.0 and use import to bring all your existing notes into the new one. You keep your content and move it onto the latest engine — no starting over.
  • 📁 You built your own notes by hand, as a plain Obsidian vault (a folder of Markdown). import brings that vault in, so your existing notes instantly gain everything this second brain offers — semantic search / RAG, the skills, the constitution — without rewriting a single note.

In short: first-timers install and go; everyone who already has notes (a previous brain or a self-made Obsidian vault) uses import to bring them in and unlock the full RAG-powered experience on top of them.


✨ New — bring a previous brain's notes over (import)

Migrate the notes of an older second brain (or any Obsidian-style vault) into this one — safe, opt-in, non-destructive. No special vocabulary: just ask in plain language, in any language, and a native folder picker opens so you can point at your former brain (no path to copy-paste). Examples:

  • "migrate my previous second brain"(you'll be prompted to pick the location of your former second brain)
  • "import my old notes"
  • "recover / bring over the notes from my old brain"
  • 🇫🇷 "importe / migre / rapatrie mes anciennes notes"
  • "import my old notes from <path>"(give the path directly, if you'd rather type it than use the picker)

It shows a plan first (zero writes), waits for your explicit yes, then copies only your content — never the old engine, .git, .claude or .env. It skips demo notes, never overwrites a name collision, preserves subfolders and accented names, then reindexes so your imported notes are immediately searchable. When indexing finishes, an OS notification lets you know — no waiting blind.

🧬 We nickname it the Kenjaku move — transplanting a mind into a new vessel. (Pure lore; you trigger it with ordinary words.)

🐛 Fixes

  • Node compatibility — install no longer refuses a recent Node (24/25/26); too-old (< 20) fails early with an actionable message telling you what to switch to. (ADR 0020)
  • SQLite native self-heal — on a multi-Node machine, the search engine now detects a better-sqlite3 ABI skew (binary built under one Node, loaded by another) and rebuilds itself once, transparently — no more "native module broken" at first start. Works on macOS, Windows and Linux. (ADR 0021)

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).

v3.0.0 — The One With The Engine That Will Now Be Able to Update Itself (Without Touching Your Notes) 🔄

14 Jun 22:46
f22068f

Choose a tag to compare

📦 How to install — don't download the archives below. Your brain is generated by cloning this launcher, not by unzipping it (the installer reads the repo via git, so it needs the git history). Follow the README → Install: git clone … && node installer.mjs. The "Source code (zip/tar.gz)" assets at the bottom are added automatically by GitHub and can be ignored.


🔄 The headline: your brain now upgrades its own engine — without ever touching your notes

From v3.0.0, every generated second brain ships with a built-in, opt-in updater (update-engine). Ask in plain words — "update your engine, please" — confirm, done. No terminal, no re-running the installer, no new folder.

  • Self-carried updater. The brain carries its own update-engine + libs (it can upgrade even the updater).
  • engine-manifest.json = the readable map. Spells out what counts as engine (upgradable) vs what is yours (off-limits), and records where a newer engine is pulled from.
  • Throw-away errand. Fetches a disposable copy of the newer engine into a temp folder, applies only the engine pieces, deletes the temp folder. Nothing lingers.
  • Reindexes only if the index format changed — otherwise your search keeps working untouched.
  • Cross-platform parity (macOS · Linux · Windows) is a release gate (ADR 0015).
  • Offline version display — the brain can see its own engine version (this git tag) with no phone-home, so it may even offer the update on its own.

Sacred — never touched by an update: your notes, your .env keys, your CLAUDE.md constitution, your settings, and your custom skills.

First clean semver release (ADR 0017). V1/V2 were legacy tags.