[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6R30YKJVCK99P6HVCF6GNFS":3,"skill-same:01M6R30YKJVCK99P6HVCF6GNFS":83},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":22,"publishedAt":41,"linkOnly":42,"markdownContent":43,"markdownBody":44,"frontMatter":45,"refName":64,"commitSha":65,"skillDirectory":66,"forksCount":13,"repositoryHtmlUrl":67,"repositoryHomepageUrl":6,"ownerHtmlUrl":68,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":69,"install":70,"resources":82},"01M6R30YKJVCK99P6HVCF6GNFS","migrate",null,"Universal migration from Obsidian, Notion, Logseq, markdown, CSV, JSON, Roam","sixtycat2000-ctrl\u002Fgbrain-qmd","sixtycat2000-ctrl","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F263121306?v=4","01M6R2SPVP79P6Y6CC3HW4Y6GD","01M6R2SQ2MJXN4VVXWT7NQW9DD",0,"MIT","https:\u002F\u002Fgithub.com\u002Fsixtycat2000-ctrl\u002Fgbrain-qmd\u002Fblob\u002Fmaster\u002Fskills\u002Fmigrate\u002FSKILL.md",[17],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000004","电子表格","SCENARIO","使用场景",[5,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40],"json","true","logseq","add","import","link","db","brain","migration","page","notion","markdown","data","csv","content","search","sync","obsidian","2026-11-10 10:12:30",false,"---\nname: migrate\nversion: 1.0.0\ndescription: Universal migration from Obsidian, Notion, Logseq, markdown, CSV, JSON, Roam\ntriggers:\n  - \"migrate from\"\n  - \"import from obsidian\"\n  - \"import from notion\"\n  - \"import from logseq\"\n  - \"migrate data\"\n  - \"import csv\"\n  - \"import json\"\ntools:\n  - put_page\n  - search\n  - add_link\n  - add_tag\n  - sync_brain\nmutating: true\nwrites_to:\n  - brain.db\n  - content\u002F\n---\n\n# Migrate Skill\n\nUniversal migration from any wiki, note tool, or brain system into GBrain.\n\n## Contract\n\n- Source data is never modified or deleted; migration is additive only.\n- Every migrated page is verified round-trip: written to gbrain, read back, spot-checked.\n- Cross-references from the source system (wikilinks, block refs, tags) are converted to gbrain equivalents.\n- Migration is tested on a sample (5-10 files) before bulk execution.\n- Post-migration health check confirms page count, link integrity, and embedding coverage.\n\n## Migrating from Postgres GBrain (v1 -> v2)\n\nIf you have an existing GBrain installation using Postgres + pgvector + Supabase,\nuse the built-in migration script:\n\n```bash\nDATABASE_URL=\"postgresql:\u002F\u002F...\" bun run src\u002Fscripts\u002Fmigrate-pg-to-qmd.ts\n```\n\nThe script:\n1. Connects to your old Postgres database\n2. Exports all pages, links, tags, timeline, versions, and raw data\n3. Writes markdown files to `~\u002F.gbrain\u002Fdata\u002Fcontent\u002F`\n4. Imports all domain data into SQLite\n5. Runs QMD indexing and embedding (downloads ~640MB model on first run)\n6. Verifies counts match\n\nOptions:\n- `--dry-run` -- count records without writing\n- `--skip-embed` -- defer embedding to a later `gbrain embed` run\n\n## Supported Sources\n\n| Source | Format | Strategy |\n|--------|--------|----------|\n| Obsidian | Markdown + `[[wikilinks]]` | Direct import, convert wikilinks to gbrain links |\n| Notion | Exported markdown or CSV | Parse Notion's export structure |\n| Logseq | Markdown with `((block refs))` | Convert block refs to page links |\n| Plain markdown | Any .md directory | Import directory into gbrain directly |\n| CSV | Tabular data | Map columns to frontmatter fields |\n| JSON | Structured data | Map keys to page fields |\n| Roam | JSON export | Convert block structure to pages |\n\n## Phases\n\n1. **Assess the source.** What format? How many files? What structure?\n2. **Plan the mapping.** How do source fields map to gbrain fields (type, title, tags, compiled_truth, timeline)?\n3. **Test with a sample.** Import 5-10 files, verify by reading them back from gbrain and exporting.\n4. **Bulk import.** Import the full directory into gbrain.\n5. **Verify.** Check gbrain health and statistics, spot-check pages.\n6. **Build links.** Extract cross-references from content and create typed links in gbrain.\n\n## Obsidian Migration\n\n1. Import the vault directory into gbrain (Obsidian vaults are markdown directories)\n2. Convert `[[wikilinks]]` to gbrain links with ancestor-search resolution:\n   - Read each page from gbrain\n   - For each `[[Name]]` found, resolve to a slug and create a link in gbrain\n   - `[[Name|alias]]` uses the alias for context\n   - Ancestor-search handles wiki KBs where authors omit one or more leading `..\u002F` prefixes\n   - The `.md` suffix is inferred automatically for wikilinks\n3. Use `--dry-run` to preview before committing changes\n\nObsidian-specific:\n- Tags (`#tag`) become gbrain tags\n- Frontmatter properties map to gbrain frontmatter\n- Attachments (images, PDFs) are noted but handled separately via file storage\n- Native wikilink support handles `[[relative\u002Fpath]]` and `[[relative\u002Fpath|Display Text]]`\n  alongside standard `[text](page.md)` markdown syntax\n\n## Notion Migration\n\n1. Export from Notion: Settings > Export > Markdown & CSV\n2. Notion exports nested directories with UUIDs in filenames\n3. Strip UUIDs from filenames for clean slugs\n4. Map Notion's database properties to frontmatter\n5. Import the cleaned directory into gbrain\n\n## CSV Migration\n\nFor tabular data (e.g., CRM exports, contact lists):\n1. For each row in the CSV, create a page with column values as frontmatter\n2. Use a designated column as the slug (e.g., name)\n3. Use another column as compiled_truth (e.g., notes)\n4. Store each page in gbrain\n\n## Verification\n\nAfter any migration:\n1. Check gbrain statistics to verify page count matches source\n2. Check gbrain health for orphans and missing embeddings\n3. Export pages from gbrain for round-trip verification\n4. Spot-check 5-10 pages by reading them from gbrain\n5. Test search: search gbrain for \"someone you know is in the data\"\n\n## Anti-Patterns\n\n- **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.\n- **Destroying source data.** Migration is additive. Never modify, move, or delete the source files.\n- **Ignoring cross-references.** Wikilinks, block refs, and tags from the source system must be converted to gbrain equivalents. Dropping them loses the knowledge graph.\n- **Skipping verification.** A migration without post-import health check, page count comparison, and spot-check reads is incomplete.\n\n## Output Format\n\n```\nMIGRATION REPORT -- [source] -> GBrain\n=======================================\n\nSource: [format] ([file count] files, [size])\nMapping: [field mapping summary]\n\nSample Test (N files):\n- Imported: N\u002FN\n- Round-trip verified: N\u002FN\n- Cross-refs converted: N\n\nBulk Import:\n- Total imported: N\n- Skipped (duplicates\u002Ferrors): N\n- Links created: N\n- Tags migrated: N\n\nVerification:\n- Page count match: [yes\u002Fno]\n- Health check: [pass\u002Ffail]\n- Search test: [query] -> [result count] hits\n```\n\n## Tools Used\n\n- Store\u002Fupdate pages in gbrain (put_page)\n- Read pages from gbrain (get_page)\n- Link entities in gbrain (add_link)\n- Tag pages in gbrain (add_tag)\n- Get gbrain statistics (get_stats)\n- Check gbrain health (get_health)\n- Search gbrain (query)\n- Sync brain index (sync_brain)\n\n> **Note:** Graph extraction via `gbrain extract links --source db` is not yet available\n> in the QMD engine. Link extraction during migration is performed inline during import.\n> Future versions will add full graph extraction support.\n","# Migrate Skill\n\nUniversal migration from any wiki, note tool, or brain system into GBrain.\n\n## Contract\n\n- Source data is never modified or deleted; migration is additive only.\n- Every migrated page is verified round-trip: written to gbrain, read back, spot-checked.\n- Cross-references from the source system (wikilinks, block refs, tags) are converted to gbrain equivalents.\n- Migration is tested on a sample (5-10 files) before bulk execution.\n- Post-migration health check confirms page count, link integrity, and embedding coverage.\n\n## Migrating from Postgres GBrain (v1 -> v2)\n\nIf you have an existing GBrain installation using Postgres + pgvector + Supabase,\nuse the built-in migration script:\n\n```bash\nDATABASE_URL=\"postgresql:\u002F\u002F...\" bun run src\u002Fscripts\u002Fmigrate-pg-to-qmd.ts\n```\n\nThe script:\n1. Connects to your old Postgres database\n2. Exports all pages, links, tags, timeline, versions, and raw data\n3. Writes markdown files to `~\u002F.gbrain\u002Fdata\u002Fcontent\u002F`\n4. Imports all domain data into SQLite\n5. Runs QMD indexing and embedding (downloads ~640MB model on first run)\n6. Verifies counts match\n\nOptions:\n- `--dry-run` -- count records without writing\n- `--skip-embed` -- defer embedding to a later `gbrain embed` run\n\n## Supported Sources\n\n| Source | Format | Strategy |\n|--------|--------|----------|\n| Obsidian | Markdown + `[[wikilinks]]` | Direct import, convert wikilinks to gbrain links |\n| Notion | Exported markdown or CSV | Parse Notion's export structure |\n| Logseq | Markdown with `((block refs))` | Convert block refs to page links |\n| Plain markdown | Any .md directory | Import directory into gbrain directly |\n| CSV | Tabular data | Map columns to frontmatter fields |\n| JSON | Structured data | Map keys to page fields |\n| Roam | JSON export | Convert block structure to pages |\n\n## Phases\n\n1. **Assess the source.** What format? How many files? What structure?\n2. **Plan the mapping.** How do source fields map to gbrain fields (type, title, tags, compiled_truth, timeline)?\n3. **Test with a sample.** Import 5-10 files, verify by reading them back from gbrain and exporting.\n4. **Bulk import.** Import the full directory into gbrain.\n5. **Verify.** Check gbrain health and statistics, spot-check pages.\n6. **Build links.** Extract cross-references from content and create typed links in gbrain.\n\n## Obsidian Migration\n\n1. Import the vault directory into gbrain (Obsidian vaults are markdown directories)\n2. Convert `[[wikilinks]]` to gbrain links with ancestor-search resolution:\n   - Read each page from gbrain\n   - For each `[[Name]]` found, resolve to a slug and create a link in gbrain\n   - `[[Name|alias]]` uses the alias for context\n   - Ancestor-search handles wiki KBs where authors omit one or more leading `..\u002F` prefixes\n   - The `.md` suffix is inferred automatically for wikilinks\n3. Use `--dry-run` to preview before committing changes\n\nObsidian-specific:\n- Tags (`#tag`) become gbrain tags\n- Frontmatter properties map to gbrain frontmatter\n- Attachments (images, PDFs) are noted but handled separately via file storage\n- Native wikilink support handles `[[relative\u002Fpath]]` and `[[relative\u002Fpath|Display Text]]`\n  alongside standard `[text](page.md)` markdown syntax\n\n## Notion Migration\n\n1. Export from Notion: Settings > Export > Markdown & CSV\n2. Notion exports nested directories with UUIDs in filenames\n3. Strip UUIDs from filenames for clean slugs\n4. Map Notion's database properties to frontmatter\n5. Import the cleaned directory into gbrain\n\n## CSV Migration\n\nFor tabular data (e.g., CRM exports, contact lists):\n1. For each row in the CSV, create a page with column values as frontmatter\n2. Use a designated column as the slug (e.g., name)\n3. Use another column as compiled_truth (e.g., notes)\n4. Store each page in gbrain\n\n## Verification\n\nAfter any migration:\n1. Check gbrain statistics to verify page count matches source\n2. Check gbrain health for orphans and missing embeddings\n3. Export pages from gbrain for round-trip verification\n4. Spot-check 5-10 pages by reading them from gbrain\n5. Test search: search gbrain for \"someone you know is in the data\"\n\n## Anti-Patterns\n\n- **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.\n- **Destroying source data.** Migration is additive. Never modify, move, or delete the source files.\n- **Ignoring cross-references.** Wikilinks, block refs, and tags from the source system must be converted to gbrain equivalents. Dropping them loses the knowledge graph.\n- **Skipping verification.** A migration without post-import health check, page count comparison, and spot-check reads is incomplete.\n\n## Output Format\n\n```\nMIGRATION REPORT -- [source] -> GBrain\n=======================================\n\nSource: [format] ([file count] files, [size])\nMapping: [field mapping summary]\n\nSample Test (N files):\n- Imported: N\u002FN\n- Round-trip verified: N\u002FN\n- Cross-refs converted: N\n\nBulk Import:\n- Total imported: N\n- Skipped (duplicates\u002Ferrors): N\n- Links created: N\n- Tags migrated: N\n\nVerification:\n- Page count match: [yes\u002Fno]\n- Health check: [pass\u002Ffail]\n- Search test: [query] -> [result count] hits\n```\n\n## Tools Used\n\n- Store\u002Fupdate pages in gbrain (put_page)\n- Read pages from gbrain (get_page)\n- Link entities in gbrain (add_link)\n- Tag pages in gbrain (add_tag)\n- Get gbrain statistics (get_stats)\n- Check gbrain health (get_health)\n- Search gbrain (query)\n- Sync brain index (sync_brain)\n\n> **Note:** Graph extraction via `gbrain extract links --source db` is not yet available\n> in the QMD engine. Link extraction during migration is performed inline during import.\n> Future versions will add full graph extraction support.\n",{"name":5,"tools":46,"version":51,"mutating":52,"triggers":53,"writes_to":61,"description":7},[47,38,48,49,50],"put_page","add_link","add_tag","sync_brain","1.0.0",true,[54,55,56,57,58,59,60],"migrate from","import from obsidian","import from notion","import from logseq","migrate data","import csv","import json",[62,63],"brain.db","content\u002F","master","48f3da67113808a35b3721091cc58290a8c49ab4","skills\u002Fmigrate","https:\u002F\u002Fgithub.com\u002Fsixtycat2000-ctrl\u002Fgbrain-qmd","https:\u002F\u002Fgithub.com\u002Fsixtycat2000-ctrl","2026-04-26 19:27:01",{"source":8,"skillName":5,"commands":71,"prompt":81,"zipAvailable":52},[72,75,78],{"tool":73,"command":74},"npx","npx skills add sixtycat2000-ctrl\u002Fgbrain-qmd --skill migrate",{"tool":76,"command":77},"bunx","bunx skills add sixtycat2000-ctrl\u002Fgbrain-qmd --skill migrate",{"tool":79,"command":80},"pnpm","pnpm dlx skills add sixtycat2000-ctrl\u002Fgbrain-qmd --skill migrate","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fsixtycat2000-ctrl\u002Fgbrain-qmd\u002Fblob\u002Fmaster\u002Fskills\u002Fmigrate\u002FSKILL.md",[],[84,108,143,167,190,213],{"skillNo":85,"name":86,"nameZh":6,"description":87,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":88,"categories":89,"keywords":90,"publishedAt":41},"01M6R33ZFP10GVGJ7FX4GQWVK1","webhook-transforms","Generic framework for converting external events (SMS, meetings, social mentions)\ninto brain-ingestible signals. Define a transform function, register a webhook URL,\nand incoming events get processed through the brain pipeline.","https:\u002F\u002Fgithub.com\u002Fsixtycat2000-ctrl\u002Fgbrain-qmd\u002Fblob\u002Fmaster\u002Fskills\u002Fwebhook-transforms\u002FSKILL.md",[],[91,92,93,38,94,95,32,96,97,98,99,100,101,102,103,104,105,24,106,107],"webhook","transforms","webhook transforms","pipeline","SET","meetings","up","social","signals","get","define","register","sms","event","URL","for","generic",{"skillNo":109,"name":110,"nameZh":6,"description":111,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":112,"categories":113,"keywords":125,"publishedAt":41},"01M6R33SCJAHZHG7HRN0JF29AB","testing","Skill validation framework. Validates every skill has SKILL.md with frontmatter,\nevery reference exists, every env var is declared. The testing contract for the\nskill system itself.","https:\u002F\u002Fgithub.com\u002Fsixtycat2000-ctrl\u002Fgbrain-qmd\u002Fblob\u002Fmaster\u002Fskills\u002Ftesting\u002FSKILL.md",[114,117,120],{"categoryNo":115,"categoryName":116,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":118,"categoryName":119,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":121,"categoryName":122,"taxonomyType":123,"taxonomyTypeDesc":124},"01JBSEEDCAT000000000000037","律师与法务","PROFESSION","适用职业",[110,126,127,128,38,129,130,131,132,133,134,135,136,137,138,139,140,141,142,106],"test","run","validation","health","system","check","health check","skill validation","validate skills","contract","tests","skill health","pages","env","false","test skills","with",{"skillNo":144,"name":145,"nameZh":6,"description":146,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":147,"categories":148,"keywords":150,"publishedAt":41},"01M6R33DCE6RSA4YRCJ5H787E3","soul-audit","6-phase interactive interview that generates the agent's identity (SOUL.md),\nuser profile (USER.md), access control (ACCESS_POLICY.md), and operational\ncadence (HEARTBEAT.md). Re-runnable anytime to update any section.","https:\u002F\u002Fgithub.com\u002Fsixtycat2000-ctrl\u002Fgbrain-qmd\u002Fblob\u002Fmaster\u002Fskills\u002Fsoul-audit\u002FSKILL.md",[149],{"categoryNo":118,"categoryName":119,"taxonomyType":20,"taxonomyTypeDesc":21},[151,152,153,154,155,95,156,32,157,158,97,159,160,161,162,163,164,24,165,166],"audit","soul","soul audit","policy","customize","access","interactive","interview","personality","Access Control","cadence","SOUL.md","re","my agent","section","phase",{"skillNo":168,"name":169,"nameZh":6,"description":170,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":171,"categories":172,"keywords":174,"publishedAt":41},"01M6R338GVZ1B8RCTWCEBG3SFS","smoke-test","Post-restart smoke tests + auto-fix for gbrain and OpenClaw environments.\nTests critical services, auto-fixes known issues, extensible via user-defined\ntest scripts in ~\u002F.gbrain\u002Fsmoke-tests.d\u002F*.sh.","https:\u002F\u002Fgithub.com\u002Fsixtycat2000-ctrl\u002Fgbrain-qmd\u002Fblob\u002Fmaster\u002Fskills\u002Fsmoke-test\u002FSKILL.md",[173],{"categoryNo":115,"categoryName":116,"taxonomyType":20,"taxonomyTypeDesc":21},[126,175,176,177,178,127,179,180,181,182,183,136,184,185,186,24,106,187,188,189],"smoke","smoke test","openclaw","run smoke tests","issues","read","fix","auto","restart","critical","scripts","environments","fixes","break","auto-fix",{"skillNo":191,"name":192,"nameZh":6,"description":193,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":194,"categories":195,"keywords":196,"publishedAt":41},"01M6R32XF94PR8S1G75S1FRZ94","skillpack-check","Run `gbrain skillpack-check` to produce an agent-readable JSON health report\nfor the gbrain install. Wraps `gbrain doctor` + `gbrain apply-migrations\n--list` so a host agent (your OpenClaw's morning-briefing, any OpenClaw cron)\ncan see at a glance whether the skillpack needs attention.\n\nUse when the user asks \"is gbrain healthy?\", when a cron fires a morning\ncheck, or proactively when something seems off (jobs not running, brain\nnot updating, autopilot silent).","https:\u002F\u002Fgithub.com\u002Fsixtycat2000-ctrl\u002Fgbrain-qmd\u002Fblob\u002Fmaster\u002Fskills\u002Fskillpack-check\u002FSKILL.md",[],[131,197,198,199,129,200,201,202,203,140,204,205,206,207,208,106,209,210,211,212],"skillpack check","doctor","produce","use","migrations","glance","attention","gbrain","host","healthy","briefing","can","apply","morning check","when","running",{"skillNo":214,"name":215,"nameZh":6,"description":216,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":217,"categories":218,"keywords":220,"publishedAt":41},"01M6R32RBQXAG40PM35VSA2Y8T","skillify","The meta skill. Turn any raw feature or script into a properly-skilled,\ntested, resolvable, evaled unit of agent-visible capability. Use when\nthe user says \"skillify this\", \"is this a skill?\", \"make this proper\",\nor after a new feature is built without the full skill infrastructure.\n\nPaired with `gbrain check-resolvable`, skillify gives a user-controllable\nequivalent of Hermes' auto-skill-creation: you build, skillify checks the\nchecklist, check-resolvable verifies nothing is orphaned. The human keeps\njudgment; the tooling keeps the checklist honest.","https:\u002F\u002Fgithub.com\u002Fsixtycat2000-ctrl\u002Fgbrain-qmd\u002Fblob\u002Fmaster\u002Fskills\u002Fskillify\u002FSKILL.md",[219],{"categoryNo":118,"categoryName":119,"taxonomyType":20,"taxonomyTypeDesc":21},[215,221,38,222,223,182,224,225,226,227,228,229,140,26,230,231,232,106,233,211],"infrastructure","Meta","list","evals","human","judgment","full","creation","feature","unit","make","you","capability"]