What I BuildResultsAboutBlogGuidesServicesBook a Call
← Back to blog
2026-05-24AIClaudeBuild LogTools

I Had Two Second Brains. Now I Have One.

Collapsing an operational Obsidian vault and an LLM-readable wiki vault into a single unified knowledge graph, and the rules that changed along the way.

Matty CartwrightMatty Cartwright
Ɨ
ClaudeClaude Sonnet 4.6

I had two Obsidian vaults running side by side. One ran my day. The other ran my knowledge. Today I collapsed them into one.

The two-vault setup

The first vault was ~/ai-vault. Operational stuff. Daily notes organized by year and month, meeting notes per call, a folder per person, a folder per project. The morning brief cron wrote a Daily Brief file here every day. This was my "what am I doing today" vault.

The second was ~/Documents/brain. Built around the Karpathy LLM Wiki pattern. Source pages get created when I drop something into raw/inbox/ and run /second-brain-ingest. Entities and concepts get their own pages. Every page links to every related page. The wiki grows with every source I add.

For about a month I lived in both. Daily notes in one window, the wiki of who-everyone-is in another. It worked, but the friction was real.

What was wrong

The two vaults didn't talk to each other. A meeting note in ~/ai-vault/03 Meetings/ mentioned [[Marc Hostovsky]], but the [[Marc Hostovsky]] page with all the context about Minoan and his $100M GMV business lived in ~/Documents/brain/. The wikilink resolved to nothing.

The daily brief cron only knew about ai-vault. It wrote 01 Updates/šŸ“Œ Daily Brief.md there. When I wanted to propagate items from the brief back to entity pages, the entity pages were in a different vault.

I had two CLAUDE.md files. One described how the operational vault worked. The other described how the wiki worked. They had conflicting rules (operational vault said no H1 headings, wiki vault said H1 must match the filename). Whenever I added a new convention, I had to figure out which file to put it in.

The mental model was bad. I kept thinking of "wiki" as a separate thing from "my notes." A person I met in a meeting was in the operational vault. The person I read about in a podcast was in the wiki. Same person, two pages.

Unifying it

The collapse was a one-day project. The plan was: brain becomes the home, ai-vault gets frozen, every operational convention from ai-vault gets ported into brain's structure.

The new top-level layout is flat. No more "wiki" wrapper folder. The whole vault is the wiki. Every .md file is a page. Wikilinks resolve by filename across the entire vault, regardless of what folder a file lives in.

brain/
ā”œā”€ā”€ raw/{inbox,archive,assets}/   ← ingestion pipeline
ā”œā”€ā”€ 01 Updates/                    ← daily brief lives here
ā”œā”€ā”€ 02 Daily/                      ← personal journal
ā”œā”€ā”€ 03 Meetings/YYYY/              ← + Transcriptions/
ā”œā”€ā”€ 04 People/
ā”œā”€ā”€ 05 Projects/
ā”œā”€ā”€ 06 Research/
ā”œā”€ā”€ 07 Sources/                    ← source summaries from ingest
ā”œā”€ā”€ 08 Concepts/
ā”œā”€ā”€ 09 Synthesis/
ā”œā”€ā”€ 10 Places/
ā”œā”€ā”€ 11 Companies/
ā”œā”€ā”€ 12 Products/
ā”œā”€ā”€ 13 Tools/
ā”œā”€ā”€ output/                        ← query reports
ā”œā”€ā”€ _Templates/ _Bases/ Archive/
ā”œā”€ā”€ PROJECTS.md
ā”œā”€ā”€ index.md
└── log.md

The numbered folders sort to the top of Obsidian's file tree in a useful order. Operational first (Updates, Daily, Meetings, People, Projects, Research), then the curated knowledge layer (Sources, Concepts, Synthesis), then the rest of the entity types.

The rules that changed

A few rules from the operational vault won. The wiki vault gave them up.

RuleOld wiki ruleOld operational ruleNew unified rule
H1 headingsRequired, must match filenameBannedBanned
Aliases field in frontmatterBannedBannedBanned
Daily notesOptional, undocumentedMandatory at session endOptional, auto-stubbed by cron
One-entity-one-link ruleNoneUse display aliasesUse display aliases

The H1 rule was the one I'd been holding onto for too long. Obsidian renders the filename as the title at the top of every page. If you also write a # Title line in the body, you see the title twice every time you open the file. The original logic was that H1 == filename == wikilink kept the three in sync. But the invariant that matters (wikilinks resolve by filename) doesn't depend on the H1 at all. Dropping it removes a line from every page in the vault.

The migration mechanics

There were 320-something pages in the wiki vault. Most of the migration was scripted.

Entity classification. The old vault had everyone and everything dumped flat into wiki/entities/. People, companies, products, tools, places, all in one folder. The new structure splits these out. I went through the 150 entity files, classified each by name (and read a few I wasn't sure about), and batch-moved them into 04 People/, 10 Places/, 11 Companies/, 12 Products/, and 13 Tools/.

H1 strip. Every page in the wiki vault had a # Title line right after the frontmatter. A Python script walked the vault, found the H1 line, deleted it (plus the blank line after), and rewrote the file. 323 files stripped.

Cron migration. The morning brief script moved from ~/ai-vault/crons/daily-brief.sh to a new home at ~/.local/bin/brain-crons/ (had to move it out of ~/Documents/ because macOS won't let launchd execute scripts from there). The launchd plist com.cdm.daily-brief.plist got repointed at the new path. The script itself was rewritten to write into the new vault and chain a propagation pass that reads CLAUDE.md and updates entity pages with anything durable from the brief.

CLAUDE.md merge. The two CLAUDE.md files folded into one. The brain version was the structural spine (architecture, page format, operations like ingest/query/lint). The ai-vault version contributed the daily/meeting/people/projects sections and the aliases rule. The merged file is around 200 lines, has one set of rules for the whole vault, and explicitly notes that auto-generated daily brief content lives under a different filename pattern from personal journals so wikilinks don't collide.

Index regenerate. The old index.md was organized under headers that no longer matched the folder structure ("Tools / Platforms / Companies" was one merged section). I wrote a Python script that read the existing entries, parsed out the wikilink names and descriptions, and rebuilt the index under the 10 new category headers. All 320 descriptions preserved by matching wikilink names.

The insight

The reason I'd kept the wiki and the operational vault separate was that I thought of them as different kinds of content. A meeting note was a record of a thing that happened. A wiki entity page was a curated piece of knowledge.

This is wrong. Both are nodes in the same graph. When the meeting note mentions [[Marc Hostovsky]], that's the same Marc Hostovsky whose entity page lives in 04 People/. Linking from one to the other isn't a special case. It's the default.

Once you stop thinking of "the wiki" as a subfolder and start thinking of the whole vault as the wiki, all the structural decisions get easier. There's one set of rules for naming files. One frontmatter standard. One place to look for "what does Claude know about X." The folders are for organization, not for type-distinction.

What's next

Two things to watch in the next week.

First, whether the daily brief cron handles the new structure cleanly. It fired this morning against the unified vault, pulled in messages from Beeper, email from Gmail, calendar from Apple Calendar, and scanned the vault for open tasks. It wrote the brief into a date-stamped daily note and ran a propagation pass that updated [[Jake Shubin]] and [[Crest Pest Control]] with a community-partnership proposal from an email I'd missed for nine days. That's the kind of catch the system is supposed to make.

Second, whether the lint pass surfaces anything weird. I haven't run /second-brain-lint against the unified structure yet. The orphan check, the duplicate-entity check, and the broken-wikilink check are going to be useful first signals on whether the migration introduced anything I didn't notice. Expect a follow-up post when those come back.

Want me to build something like this for you?

I design and build custom AI workflows for creators and businesses. Let's talk about what you need.

Book a Call