/migrate
Universal migration from Obsidian, Notion, Logseq, markdown, CSV, JSON, Roam
$ npx -y skills add garrytan/gbrain --skill migrate --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/migrate
Context preview
The summary Claude sees to decide when to auto-load this skill.
Universal migration from Obsidian, Notion, Logseq, markdown, CSV, JSON, Roam
SKILL.md
migrate.SKILL.mdname: migrate
description: Universal migration from Obsidian, Notion, Logseq, markdown, CSV, JSON, Roam
triggers:
- "migrate from"
- "import from obsidian"
- "import from notion"
tools:
- put_page
- search
- add_link
- add_tag
- sync_brain
mutating: true
Migrate Skill
Universal migration from any wiki, note tool, or brain system into GBrain.
Contract
- Source data is never modified or deleted; migration is additive only.
- Every migrated page is verified round-trip: written to gbrain, read back, spot-checked.
- Cross-references from the source system (wikilinks, block refs, tags) are converted to gbrain equivalents.
- Migration is tested on a sample (5-10 files) before bulk execution.
- Post-migration health check confirms page count, link integrity, and embedding coverage.
Supported Sources
| Source | Format | Strategy | |--------|--------|----------| | Obsidian | Markdown + `[[wikilinks]]` | Direct import, convert wikilinks to gbrain links | | Notion | Exported markdown or CSV | Parse Notion's export structure | | Logseq | Markdown with `((block refs))` | Convert block refs to page links | | Plain markdown | Any .md directory | Import directory into gbrain directly | | CSV | Tabular data | Map columns to frontmatter fields | | JSON | Structured data | Map keys to page fields | | Roam | JSON export | Convert block structure to pages |
Phases
1. **Assess the source.** What format? How many files? What structure? 2. **Plan the mapping.** How do source fields map to gbrain fields (type, title, tags, compiled_truth, timeline)? 3. **Test with a sample.** Import 5-10 files, verify by reading them back from gbrain and exporting. 4. **Bulk import.** Import the full directory into gbrain. 5. **Verify.** Check gbrain health and statistics, spot-check pages. 6. **Build links.** Extract cross-references from content and create typed links in gbrain.
Obsidian Migration
1. Import the vault directory into gbrain (Obsidian vaults are markdown directories) 2. Wire the graph with native wikilink support (v0.12.1+):
gbrain extract links --source db --dry-run | head -20 # preview
gbrain extract links --source db # commit
`extract links` natively parses `[[relative/path]]` and `[[relative/path|Display Text]]` alongside standard `[text](page.md)` markdown syntax. Ancestor-search resolution handles wiki KBs where authors omit one or more leading `../` prefixes. The `.md` suffix is inferred automatically for wikilinks.
Obsidian-specific:
- Tags (`#tag`) become gbrain tags
- Frontmatter properties map to gbrain frontmatter
- Attachments (images, PDFs) are noted but handled separately via file storage
Notion Migration
1. Export from Notion: Settings > Export > Markdown & CSV 2. Notion exports nested directories with UUIDs in filenames 3. Strip UUIDs from filenames for clean slugs 4. Map Notion's database properties to frontmatter 5. Import the cleaned directory into gbrain
CSV Migration
For tabular data (e.g., CRM exports, contact lists): 1. For each row in the CSV, create a page with column values as frontmatter 2. Use a designated column as the slug (e.g., name) 3. Use another column as compiled_truth (e.g., notes) 4. Store each page in gbrain
Verification
After any migration: 1. Check gbrain statistics to verify page count matches source 2. Check gbrain health for orphans and missing embeddings 3. Export pages from gbrain for round-trip verification 4. Spot-check 5-10 pages by reading them from gbrain 5. Test search: search gbrain for "someone you know is in the data"
Anti-Patterns
- **Bulk import without sample test.** Never import the full dataset before verifying with 5-10 files. The cost of cleaning up hundreds of bad pages is enormous.
- **Destroying source data.** Migration is additive. Never modify, move, or delete the source files.
- **Ignoring cross-references.** Wikilinks, block refs, and tags from the source system must be converted to gbrain equivalents. Dropping them loses the knowledge graph.
- **Skipping verification.** A migration without post-import health check, page count comparison, and spot-check reads is incomplete.
Output Format
MIGRATION REPORT -- [source] -> GBrain
=======================================
Source: [format] ([file count] files, [size])
Mapping: [field mapping summary]
Sample Test (N files):
- Imported: N/N
- Round-trip verified: N/N
- Cross-refs converted: N
Bulk Import:
- Total imported: N
- Skipped (duplicates/errors): N
- Links created: N
- Tags migrated: N
Verification:
- Page count match: [yes/no]
- Health check: [pass/fail]
- Search test: [query] -> [result count] hits
Tools Used
- Store/update pages in gbrain (put_page)
- Read pages from gbrain (get_page)
- Link entities in gbrain (add_link)
- Tag pages in gbrain (add_tag)
- Get gbrain statistics (get_stats)
- Check gbrain health (get_health)
- Search gbrain (query)
Read more
name: migrate description: Universal migration from Obsidian, Notion, Logseq, markdown, CSV, JSON, Roam triggers: - "migrate from" - "import from obsidian" - "import from notion" tools: - put_page - search - add_link - add_tag - sync_brain mutating: true
Migrate Skill
Universal migration from any wiki, note tool, or brain system into GBrain.
Contract
- Source data is never modified or deleted; migration is additive only.
- Every migrated page is verified round-trip: written to gbrain, read back, spot-checked.
- Cross-references from the source system (wikilinks, block refs, tags) are converted to gbrain equivalents.
- Migration is tested on a sample (5-10 files) before bulk execution.
- Post-migration health check confirms page count, link integrity, and embedding coverage.
Supported Sources
| Source | Format | Strategy | |--------|--------|----------| | Obsidian | Markdown + `[[wikilinks]]` | Direct import, convert wikilinks to gbrain links | | Notion | Exported markdown or CSV | Parse Notion's export structure | | Logseq | Markdown with `((block refs))` | Convert block refs to page links | | Plain markdown | Any .md directory | Import directory into gbrain directly | | CSV | Tabular data | Map columns to frontmatter fields | | JSON | Structured data | Map keys to page fields | | Roam | JSON export | Convert block structure to pages |
Phases
1. **Assess the source.** What format? How many files? What structure? 2. **Plan the mapping.** How do source fields map to gbrain fields (type, title, tags, compiled_truth, timeline)? 3. **Test with a sample.** Import 5-10 files, verify by reading them back from gbrain and exporting. 4. **Bulk import.** Import the full directory into gbrain. 5. **Verify.** Check gbrain health and statistics, spot-check pages. 6. **Build links.** Extract cross-references from content and create typed links in gbrain.
Obsidian Migration
1. Import the vault directory into gbrain (Obsidian vaults are markdown directories) 2. Wire the graph with native wikilink support (v0.12.1+):
gbrain extract links --source db --dry-run | head -20 # preview gbrain extract links --source db # commit
`extract links` natively parses `[[relative/path]]` and `[[relative/path|Display Text]]` alongside standard `[text](page.md)` markdown syntax. Ancestor-search resolution handles wiki KBs where authors omit one or more leading `../` prefixes. The `.md` suffix is inferred automatically for wikilinks.
Obsidian-specific:
- Tags (`#tag`) become gbrain tags
- Frontmatter properties map to gbrain frontmatter
- Attachments (images, PDFs) are noted but handled separately via file storage
Notion Migration
1. Export from Notion: Settings > Export > Markdown & CSV 2. Notion exports nested directories with UUIDs in filenames 3. Strip UUIDs from filenames for clean slugs 4. Map Notion's database properties to frontmatter 5. Import the cleaned directory into gbrain
CSV Migration
For tabular data (e.g., CRM exports, contact lists): 1. For each row in the CSV, create a page with column values as frontmatter 2. Use a designated column as the slug (e.g., name) 3. Use another column as compiled_truth (e.g., notes) 4. Store each page in gbrain
Verification
After any migration: 1. Check gbrain statistics to verify page count matches source 2. Check gbrain health for orphans and missing embeddings 3. Export pages from gbrain for round-trip verification 4. Spot-check 5-10 pages by reading them from gbrain 5. Test search: search gbrain for "someone you know is in the data"
Anti-Patterns
- **Bulk import without sample test.** Never import the full dataset before verifying with 5-10 files. The cost of cleaning up hundreds of bad pages is enormous.
- **Destroying source data.** Migration is additive. Never modify, move, or delete the source files.
- **Ignoring cross-references.** Wikilinks, block refs, and tags from the source system must be converted to gbrain equivalents. Dropping them loses the knowledge graph.
- **Skipping verification.** A migration without post-import health check, page count comparison, and spot-check reads is incomplete.
Output Format
MIGRATION REPORT -- [source] -> GBrain ======================================= Source: [format] ([file count] files, [size]) Mapping: [field mapping summary] Sample Test (N files): - Imported: N/N - Round-trip verified: N/N - Cross-refs converted: N Bulk Import: - Total imported: N - Skipped (duplicates/errors): N - Links created: N - Tags migrated: N Verification: - Page count match: [yes/no] - Health check: [pass/fail] - Search test: [query] -> [result count] hits
Tools Used
- Store/update pages in gbrain (put_page)
- Read pages from gbrain (get_page)
- Link entities in gbrain (add_link)
- Tag pages in gbrain (add_tag)
- Get gbrain statistics (get_stats)
- Check gbrain health (get_health)
- Search gbrain (query)
Search gives you raw pages. GBrain gives you the answer. It's the brain layer your AI agent has been missing — the only one that does synthesis, graph traversal, and gap analysis in one box.
Repo: garrytan/gbrain
Other skills on gbrain.
- /voice-persona-mars
Route to Mars (introspective thought partner / demo showman voice persona). Used when the operator wants depth, meaning, or impressive social demos rather than logistics. Mars handles SOLO mode (philosophy, presence, patterns) and DEMO mode (tool-driven showmanship)
Open skill - /voice-persona-venus
Route to Venus (sharp executive-assistant voice persona). Used for logistics — calendar, tasks, recent messages, brain lookups — at sub-second phone-call latency. The default voice persona unless DEFAULT_PERSONA=mars is set.
Open skill - /voice-post-call
Post-call handling for a voice session — turn the transcript into a brain page, post the summary to the operator's messaging surface, archive the audio. Belt-and-suspenders: fires both from a tool the voice persona can call mid-call AND from the automatic call-end handler in
Open skill - /retrieval-reflex
When/what to retrieve — open the brain page for a salient entity before answering from memory.
Open skill - /academic-verify
Verify a research claim or academic citation by tracing it through publication → methodology → raw data → independent replication. Routes through perplexity-research for the actual web lookup, then formats results as a citation-checked brain page. Use when a
Open skill - /archive-crawler
Universal archivist for personal file archives (Dropbox/B2/Gmail-takeout/local-mount/hard-drive-dump). Filters for high-value content (the user's own writing, ideas, relationships) and surfaces it interactively. REFUSES TO RUN without an explicit gbrain.yml
Open skill

