[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6C4Y65GQJC86RRJN64NZ4R5":3,"skill-same:01M6C4Y65GQJC86RRJN64NZ4R5":45},{"skillNo":4,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":19,"linkOnly":20,"markdownContent":21,"markdownBody":21,"frontMatter":22,"refName":23,"commitSha":24,"skillDirectory":25,"forksCount":13,"repositoryHtmlUrl":26,"repositoryHomepageUrl":27,"ownerHtmlUrl":28,"ownerBlogUrl":29,"ownerDescription":6,"updatedAt":30,"install":31,"resources":44},"01M6C4Y65GQJC86RRJN64NZ4R5","magic-links",null,"joshribakoff\u002Ffightingwithai.com","joshribakoff","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F4021306?v=4","01M6C4XRSWK3RV2R7FF1CH2FGA","Josh Ribakoff","01M6C4XRYAPRF3PM6E2VY4MNXM",0,"MIT","https:\u002F\u002Fgithub.com\u002Fjoshribakoff\u002Ffightingwithai.com\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fmagic-links\u002FSKILL.md",[],[18],"magic links","2026-11-10 10:12:30",false,"# Magic Links System\n\nThis project uses a build-time magic link system (adapted from surfdeeper) for semantic document linking.\n\n## Syntax\n\n### Standard Magic Links\n```markdown\n[Display Text](:document-id)\n[Display Text](:document-id|:fallback-id)\n```\n\nExample:\n```markdown\n[Read about context collapse](:context-collapse)\n```\n\n### Learning Links (optional variant)\n```markdown\n[[document-id]]\n[[document-id|Custom Display Text]]\n```\n\nThese render as auto-numbered references.\n\n## How It Works\n\n1. Author writes `[text](:id)` in any markdown file\n2. At build time, the Remark plugin scans all content collections\n3. Builds a map of `id` → `slug` from frontmatter\n4. Rewrites `:id` references to actual routes like `\u002Fconcept\u002F{slug}`\n\n## Document Frontmatter\n\nEach content file needs an `id` in frontmatter:\n\n```yaml\n---\ntitle: Context Collapse\nid: context-collapse           # Used for magic link resolution\naliases: [context-loss]        # Optional alternative IDs\n---\n```\n\n## Collections\n\nMagic links resolve across these collections:\n- `concepts` → `\u002Fconcept\u002F{slug}`\n- `failure-modes` → `\u002Ffailure-mode\u002F{slug}`\n- `patterns` → `\u002Fpattern\u002F{slug}`\n\n## Implementation Files\n\nIf implementing this system, you need:\n\n1. **Remark plugin** (`scripts\u002Fremark-magic-links.mjs`):\n   - `buildIdMap()` - scans content directories, extracts id\u002Fslug\u002Faliases\n   - Plugin function - transforms `:id` links to actual URLs\n\n2. **Astro config** (`astro.config.mjs`):\n   ```javascript\n   import remarkMagicLinks from \".\u002Fscripts\u002Fremark-magic-links.mjs\";\n\n   export default defineConfig({\n     markdown: {\n       remarkPlugins: [remarkMagicLinks],\n     },\n   });\n   ```\n\n3. **Validation script** (`scripts\u002Fvalidate-concept-ids.js`):\n   - Checks for duplicate IDs\n   - Validates all magic link references resolve\n   - Run with `npm run lint:links`\n\n## When Adding New Content\n\n1. Always include a unique `id` in frontmatter\n2. Use kebab-case for IDs: `context-collapse`, not `contextCollapse`\n3. Add `aliases` array if the concept has common alternative names\n4. Run link validation before committing\n\n## Error Handling\n\n- Unresolved magic links are converted to plain text (no broken links)\n- Build-time validation catches broken references\n- Duplicate IDs cause validation failure\n",{},"main","456b6e5999d9613b2065544f7789689d31742769",".claude\u002Fskills\u002Fmagic-links","https:\u002F\u002Fgithub.com\u002Fjoshribakoff\u002Ffightingwithai.com","https:\u002F\u002Ffightingwithai.vercel.app","https:\u002F\u002Fgithub.com\u002Fjoshribakoff","joshribakoff.com","2026-01-22 14:44:35",{"source":7,"skillName":5,"commands":32,"prompt":42,"zipAvailable":43},[33,36,39],{"tool":34,"command":35},"npx","npx skills add joshribakoff\u002Ffightingwithai.com --skill magic-links",{"tool":37,"command":38},"bunx","bunx skills add joshribakoff\u002Ffightingwithai.com --skill magic-links",{"tool":40,"command":41},"pnpm","pnpm dlx skills add joshribakoff\u002Ffightingwithai.com --skill magic-links","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fjoshribakoff\u002Ffightingwithai.com\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fmagic-links\u002FSKILL.md",true,[],[46,53,61,72,85,97],{"skillNo":47,"name":48,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":49,"categories":50,"keywords":51,"publishedAt":19},"01M6C4Y9B23N3BZYDHRRVW13PF","simple-commands","https:\u002F\u002Fgithub.com\u002Fjoshribakoff\u002Ffightingwithai.com\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fsimple-commands\u002FSKILL.md",[],[52],"simple commands",{"skillNo":54,"name":55,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":56,"categories":57,"keywords":58,"publishedAt":19},"01M6C4Y7XQM8QNRMDDFXTDMW7P","meta-skill","https:\u002F\u002Fgithub.com\u002Fjoshribakoff\u002Ffightingwithai.com\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fmeta-skill\u002FSKILL.md",[],[59,60],"Meta","meta skill",{"skillNo":62,"name":63,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":64,"categories":65,"keywords":71,"publishedAt":19},"01M6C4Y508MC06FWACP82JNYMN","copywriting","https:\u002F\u002Fgithub.com\u002Fjoshribakoff\u002Ffightingwithai.com\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fcopywriting\u002FSKILL.md",[66],{"categoryNo":67,"categoryName":68,"taxonomyType":69,"taxonomyTypeDesc":70},"01JBSEEDCAT000000000000018","写作与文案","SCENARIO","使用场景",[63],{"skillNo":73,"name":74,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":75,"categories":76,"keywords":82,"publishedAt":19},"01M6C4Y2QWSAXM4QMZT7B148R7","content-ordering","https:\u002F\u002Fgithub.com\u002Fjoshribakoff\u002Ffightingwithai.com\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fcontent-ordering\u002FSKILL.md",[77],{"categoryNo":78,"categoryName":79,"taxonomyType":80,"taxonomyTypeDesc":81},"01JBSEEDCAT000000000000036","内容创作者","PROFESSION","适用职业",[83,84],"content","content ordering",{"skillNo":86,"name":87,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":88,"categories":89,"keywords":93,"publishedAt":19},"01M6C4Y0W01TCYVVFE4ZSQ8K02","code-cleanup","https:\u002F\u002Fgithub.com\u002Fjoshribakoff\u002Ffightingwithai.com\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fcode-cleanup\u002FSKILL.md",[90],{"categoryNo":91,"categoryName":92,"taxonomyType":80,"taxonomyTypeDesc":81},"01JBSEEDCAT000000000000030","开发工程师",[94,95,96],"cleanup","code","code cleanup",{"skillNo":98,"name":99,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":100,"categories":101,"keywords":102,"publishedAt":19},"01M6C4XYDC6W16Y6KTY347S6ZC","astro-islands","https:\u002F\u002Fgithub.com\u002Fjoshribakoff\u002Ffightingwithai.com\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fastro-islands\u002FSKILL.md",[],[103,104],"astro","astro islands"]