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
- Assess the source. What format? How many files? What structure?
- Plan the mapping. How do source fields map to gbrain fields (type, title, tags, compiled_truth, timeline)?
- Test with a sample. Import 5-10 files, verify by reading them back from gbrain and exporting.
- Bulk import. Import the full directory into gbrain.
- Verify. Check gbrain health and statistics, spot-check pages.
- Build links. Extract cross-references from content and create typed links in gbrain.
Obsidian Migration
Import the vault directory into gbrain (Obsidian vaults are markdown directories)
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
- Export from Notion: Settings > Export > Markdown & CSV
- Notion exports nested directories with UUIDs in filenames
- Strip UUIDs from filenames for clean slugs
- Map Notion's database properties to frontmatter
- Import the cleaned directory into gbrain
CSV Migration
For tabular data (e.g., CRM exports, contact lists):
- For each row in the CSV, create a page with column values as frontmatter
- Use a designated column as the slug (e.g., name)
- Use another column as compiled_truth (e.g., notes)
- Store each page in gbrain
Verification
After any migration:
- Check gbrain statistics to verify page count matches source
- Check gbrain health for orphans and missing embeddings
- Export pages from gbrain for round-trip verification
- Spot-check 5-10 pages by reading them from gbrain
- 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)
Source: garrytan/gbrain → skills/migrate/SKILL.md
1---2name: migrate3description: Universal migration from Obsidian, Notion, Logseq, markdown, CSV, JSON, Roam4---567# Migrate Skill89Universal migration from any wiki, note tool, or brain system into GBrain.1011## Contract1213- Source data is never modified or deleted; migration is additive only.14- Every migrated page is verified round-trip: written to gbrain, read back, spot-checked.15- Cross-references from the source system (wikilinks, block refs, tags) are converted to gbrain equivalents.16- Migration is tested on a sample (5-10 files) before bulk execution.17- Post-migration health check confirms page count, link integrity, and embedding coverage.1819## Supported Sources2021| Source | Format | Strategy |22|--------|--------|----------|23| Obsidian | Markdown + `[[wikilinks]]` | Direct import, convert wikilinks to gbrain links |24| Notion | Exported markdown or CSV | Parse Notion's export structure |25| Logseq | Markdown with `((block refs))` | Convert block refs to page links |26| Plain markdown | Any .md directory | Import directory into gbrain directly |27| CSV | Tabular data | Map columns to frontmatter fields |28| JSON | Structured data | Map keys to page fields |29| Roam | JSON export | Convert block structure to pages |3031## Phases32331. **Assess the source.** What format? How many files? What structure?342. **Plan the mapping.** How do source fields map to gbrain fields (type, title, tags, compiled_truth, timeline)?353. **Test with a sample.** Import 5-10 files, verify by reading them back from gbrain and exporting.364. **Bulk import.** Import the full directory into gbrain.375. **Verify.** Check gbrain health and statistics, spot-check pages.386. **Build links.** Extract cross-references from content and create typed links in gbrain.3940## Obsidian Migration41421. Import the vault directory into gbrain (Obsidian vaults are markdown directories)432. Wire the graph with native wikilink support (v0.12.1+):4445 ```bash46 gbrain extract links --source db --dry-run | head -20 # preview47 gbrain extract links --source db # commit48 ```4950 `extract links` natively parses `[[relative/path]]` and `[[relative/path|Display Text]]`51 alongside standard `[text](page.md)` markdown syntax. Ancestor-search resolution handles52 wiki KBs where authors omit one or more leading `../` prefixes. The `.md` suffix is53 inferred automatically for wikilinks.5455Obsidian-specific:56- Tags (`#tag`) become gbrain tags57- Frontmatter properties map to gbrain frontmatter58- Attachments (images, PDFs) are noted but handled separately via file storage5960## Notion Migration61621. Export from Notion: Settings > Export > Markdown & CSV632. Notion exports nested directories with UUIDs in filenames643. Strip UUIDs from filenames for clean slugs654. Map Notion's database properties to frontmatter665. Import the cleaned directory into gbrain6768## CSV Migration6970For tabular data (e.g., CRM exports, contact lists):711. For each row in the CSV, create a page with column values as frontmatter722. Use a designated column as the slug (e.g., name)733. Use another column as compiled_truth (e.g., notes)744. Store each page in gbrain7576## Verification7778After any migration:791. Check gbrain statistics to verify page count matches source802. Check gbrain health for orphans and missing embeddings813. Export pages from gbrain for round-trip verification824. Spot-check 5-10 pages by reading them from gbrain835. Test search: search gbrain for "someone you know is in the data"8485## Anti-Patterns8687- **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.88- **Destroying source data.** Migration is additive. Never modify, move, or delete the source files.89- **Ignoring cross-references.** Wikilinks, block refs, and tags from the source system must be converted to gbrain equivalents. Dropping them loses the knowledge graph.90- **Skipping verification.** A migration without post-import health check, page count comparison, and spot-check reads is incomplete.9192## Output Format9394```95MIGRATION REPORT -- [source] -> GBrain96=======================================9798Source: [format] ([file count] files, [size])99Mapping: [field mapping summary]100101Sample Test (N files):102- Imported: N/N103- Round-trip verified: N/N104- Cross-refs converted: N105106Bulk Import:107- Total imported: N108- Skipped (duplicates/errors): N109- Links created: N110- Tags migrated: N111112Verification:113- Page count match: [yes/no]114- Health check: [pass/fail]115- Search test: [query] -> [result count] hits116```117118## Tools Used119120- Store/update pages in gbrain (put_page)121- Read pages from gbrain (get_page)122- Link entities in gbrain (add_link)123- Tag pages in gbrain (add_tag)124- Get gbrain statistics (get_stats)125- Check gbrain health (get_health)126- Search gbrain (query)127128---129130**Source:** [`garrytan/gbrain`](https://github.com/garrytan/gbrain) → `skills/migrate/SKILL.md`