[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6R79FS7GD89AP6MBZ89Z6KC":3,"skill-same:01M6R79FS7GD89AP6MBZ89Z6KC":44},{"skillNo":4,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":14,"categories":15,"keywords":16,"publishedAt":20,"linkOnly":21,"markdownContent":22,"markdownBody":22,"frontMatter":23,"refName":24,"commitSha":25,"skillDirectory":26,"forksCount":12,"repositoryHtmlUrl":27,"repositoryHomepageUrl":6,"ownerHtmlUrl":28,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":29,"install":30,"resources":43},"01M6R79FS7GD89AP6MBZ89Z6KC","cli-wiring",null,"barichter\u002Fsquad","barichter","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F96797186?v=4","01M6R712K8ESMDF089BFENBR16","01M6R712R74BSQQSG2GTXBWR8P",0,"MIT","https:\u002F\u002Fgithub.com\u002Fbarichter\u002Fsquad\u002Fblob\u002Fdev\u002Fpackages\u002Fsquad-cli\u002Ftemplates\u002Fskills\u002Fcli-wiring\u002FSKILL.md",[],[17,18,19],"cli","cli wiring","wiring","2026-11-10 10:12:30",false,"# Skill: CLI Command Wiring\n\n**Bug class:** Commands implemented in `packages\u002Fsquad-cli\u002Fsrc\u002Fcli\u002Fcommands\u002F` but never routed in `cli-entry.ts`.\n\n## Checklist — Adding a New CLI Command\n\n1. **Create command file** in `packages\u002Fsquad-cli\u002Fsrc\u002Fcli\u002Fcommands\u002F\u003Cname>.ts`\n   - Export a `run\u003CName>(cwd, options)` async function (or class with static methods for utility modules)\n\n2. **Add routing block** in `packages\u002Fsquad-cli\u002Fsrc\u002Fcli-entry.ts` inside `main()`:\n   ```ts\n   if (cmd === '\u003Cname>') {\n     const { run\u003CName> } = await import('.\u002Fcli\u002Fcommands\u002F\u003Cname>.js');\n     \u002F\u002F parse args, call function\n     await run\u003CName>(process.cwd(), options);\n     return;\n   }\n   ```\n\n3. **Add help text** in the help section of `cli-entry.ts` (search for `Commands:`):\n   ```ts\n   console.log(`  ${BOLD}\u003Cname>${RESET}     \u003Cdescription>`);\n   console.log(`             Usage: \u003Cname> [flags]`);\n   ```\n\n4. **Verify both exist** — the recurring bug is doing step 1 but missing steps 2-3.\n\n## Wiring Patterns by Command Type\n\n| Type | Example | How to wire |\n|------|---------|-------------|\n| Standard command | `export.ts`, `build.ts` | `run*()` function, parse flags from `args` |\n| Placeholder command | `loop`, `hire` | Inline in cli-entry.ts, prints pending message |\n| Utility\u002Fcheck module | `rc-tunnel.ts`, `copilot-bridge.ts` | Wire as diagnostic check (e.g., `isDevtunnelAvailable()`) |\n| Subcommand of another | `init-remote.ts` | Already used inside parent + standalone alias |\n\n## Common Import Pattern\n\n```ts\nimport { BOLD, RESET, DIM, RED, GREEN, YELLOW } from '.\u002Fcli\u002Fcore\u002Foutput.js';\n```\n\nUse dynamic `await import()` for command modules to keep startup fast (lazy loading).\n\n## History\n\n- **#237 \u002F PR #244:** 4 commands wired (rc, copilot-bridge, init-remote, rc-tunnel). aspire, link, loop, hire were already present.\n",{},"dev","ec19f5e92325e634e3c6eff500e3cefa56131cc9","packages\u002Fsquad-cli\u002Ftemplates\u002Fskills\u002Fcli-wiring","https:\u002F\u002Fgithub.com\u002Fbarichter\u002Fsquad","https:\u002F\u002Fgithub.com\u002Fbarichter","2026-04-13 22:53:46",{"source":7,"skillName":5,"commands":31,"prompt":41,"zipAvailable":42},[32,35,38],{"tool":33,"command":34},"npx","npx skills add barichter\u002Fsquad --skill cli-wiring",{"tool":36,"command":37},"bunx","bunx skills add barichter\u002Fsquad --skill cli-wiring",{"tool":39,"command":40},"pnpm","pnpm dlx skills add barichter\u002Fsquad --skill cli-wiring","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fbarichter\u002Fsquad\u002Fblob\u002Fdev\u002Fpackages\u002Fsquad-cli\u002Ftemplates\u002Fskills\u002Fcli-wiring\u002FSKILL.md",true,[],[45,61,69,86,109,115],{"skillNo":46,"name":47,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":48,"categories":49,"keywords":55,"publishedAt":20},"01M6R7VE8SZD1E37WWJN4ZFPWB","My Skill","https:\u002F\u002Fgithub.com\u002Fbarichter\u002Fsquad\u002Fblob\u002Fdev\u002Ftest-fixtures\u002Fskills-test-abb30454\u002Fmy-skill\u002FSKILL.md",[50],{"categoryNo":51,"categoryName":52,"taxonomyType":53,"taxonomyTypeDesc":54},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[56,57,58,59,60],"my","my skill","tester","vitest","testing",{"skillNo":62,"name":63,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":64,"categories":65,"keywords":66,"publishedAt":20},"01M6R7VD19M4TMAA74XGD6QSZX","bad-skill","https:\u002F\u002Fgithub.com\u002Fbarichter\u002Fsquad\u002Fblob\u002Fdev\u002Ftest-fixtures\u002Fskills-test-abb30454\u002Fbad-skill\u002FSKILL.md",[],[67,68],"bad skill","bad",{"skillNo":70,"name":71,"nameZh":6,"description":72,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":73,"categories":74,"keywords":75,"publishedAt":20},"01M6R7V9TYTX6Z621V6RWA51G6","squad-conventions","Core conventions and patterns used in the Squad codebase","https:\u002F\u002Fgithub.com\u002Fbarichter\u002Fsquad\u002Fblob\u002Fdev\u002Ftemplates\u002Fskills\u002Fsquad-conventions\u002FSKILL.md",[],[76,77,78,79,80,81,82,83,84,85],"squad conventions","squad","conventions","project-conventions","core","patterns","project","manual","high","codebase",{"skillNo":87,"name":88,"nameZh":6,"description":89,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":90,"categories":91,"keywords":92,"publishedAt":20},"01M6R7TTF0ABMGSVWASVYF6D51","rework-rate","Measure and interpret PR rework rate — the emerging 5th DORA metric","https:\u002F\u002Fgithub.com\u002Fbarichter\u002Fsquad\u002Fblob\u002Fdev\u002Ftemplates\u002Fskills\u002Frework-rate\u002FSKILL.md",[],[93,94,95,96,97,98,99,100,101,84,77,102,103,104,105,106,107,108,83],"rate","rework rate","metric","efficiency","prs","when","pr","review","code quality","code","code-review","metrics","health","team","analyze","quality",{"skillNo":110,"name":111,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":112,"categories":113,"keywords":114,"publishedAt":20},"01M6R7TRZPET44JRCSQF08EEA8","nap","https:\u002F\u002Fgithub.com\u002Fbarichter\u002Fsquad\u002Fblob\u002Fdev\u002Ftemplates\u002Fskills\u002Fnap\u002FSKILL.md",[],[111],{"skillNo":116,"name":117,"nameZh":6,"description":118,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":119,"categories":120,"keywords":122,"publishedAt":20},"01M6R7TK10WCT77A52E27GR5R3","{skill-name}","{what this skill teaches agents}","https:\u002F\u002Fgithub.com\u002Fbarichter\u002Fsquad\u002Fblob\u002Fdev\u002Ftemplates\u002Fskill.md",[121],{"categoryNo":51,"categoryName":52,"taxonomyType":53,"taxonomyTypeDesc":54},[123,124,125,126,127,128,129,130,131,132,83,84,60],"{skill name}","skill name","name","design","api","how","error-handling","learned","error","api-design"]