[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6GXQNAA4QQSAQWD3030GTWK":3,"skill-same:01M6GXQNAA4QQSAQWD3030GTWK":86},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":38,"linkOnly":39,"markdownContent":40,"markdownBody":41,"frontMatter":42,"refName":54,"commitSha":55,"skillDirectory":56,"forksCount":57,"repositoryHtmlUrl":58,"repositoryHomepageUrl":59,"ownerHtmlUrl":60,"ownerBlogUrl":59,"ownerDescription":61,"updatedAt":62,"install":63,"resources":75},"01M6GXQNAA4QQSAQWD3030GTWK","scaffold",null,"Project-aware file generation. Reads existing codebase conventions (naming, structure, imports, exports, test patterns) then generates new files that match exactly. Wires generated files into the project's registration points.","SethGammon\u002FCitadel","SethGammon","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F5523585?v=4","01M6GXJ90FD2CE9QF5GQERWN06","Seth Gammon","01M6GXJ94VXYGK5KAW14EYE901",929,"MIT","https:\u002F\u002Fgithub.com\u002FSethGammon\u002FCitadel\u002Fblob\u002Fmain\u002Fskills\u002Fscaffold\u002FSKILL.md",[],[5,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37],"patterns","true","naming","false","module","test patterns","generation","project","structure","route","test","registration","files","generated","file","generate","create","bootstrap","component","2026-11-10 10:12:30",false,"---\nname: scaffold\nlicense: MIT\ndescription: >-\n  Project-aware file generation. Reads existing codebase conventions (naming,\n  structure, imports, exports, test patterns) then generates new files that\n  match exactly. Wires generated files into the project's registration points.\nuser-invocable: true\nauto-trigger: false\ntrigger_keywords:\n  - scaffold\n  - generate component\n  - generate module\n  - generate service\n  - new component\n  - new module\n  - new route\n  - new service\n  - create component\n  - stub out\n  - bootstrap\n---\n\n# \u002Fscaffold — Project-Aware File Generator\n\n## Orientation\n\n**Use when:** Creating a new component, module, service, route, hook, domain, or utility with existing examples in the project.\n\n**Do NOT use when:** The file has no precedent (use `\u002Fmarshal` for unconstrained generation), you're modifying existing files (use `\u002Frefactor`), or the project has no conventions yet.\n\n**Needs:** target type, name, and optional description.\n\n## Protocol\n\n### Step 1: IDENTIFY THE TARGET\n\nParse the user's request into:\n- **type**: component | module | service | route | hook | domain | utility | custom\n- **name**: the name the user gave (e.g., \"UserProfile\", \"auth-service\", \"settings route\")\n- **description**: what it does, if provided (otherwise leave blank for now)\n\nIf the type is ambiguous, ask ONE clarifying question. Do not ask more than one.\n\n### Step 2: FIND EXEMPLARS\n\nSearch the codebase for 2-3 existing files of the same type.\n\n**Search strategy by type:**\n\n| Type | Search Pattern | What to Look For |\n|---|---|---|\n| component | `**\u002F*.tsx` in the same directory or sibling directories | Functional components with similar complexity |\n| module | Same directory as where new module will live | Registration pattern, exports, config shape |\n| service | `**\u002Fservices\u002F**`, `**\u002Flib\u002F**` | Class vs function, singleton vs factory, error handling |\n| route | Router config files, `**\u002Froutes.*`, `**\u002Fpages\u002F**` | Route definition format, lazy loading, guards |\n| hook | `**\u002Fhooks\u002F**`, `**\u002Fuse*.ts` | Naming, parameter patterns, return types, cleanup |\n| domain | Top-level domain\u002Ffeature directories | Manifest structure, entry point, internal layout |\n| utility | `**\u002Futils\u002F**`, `**\u002Fhelpers\u002F**` | Pure function style, type signatures, JSDoc |\n\n**For each exemplar, extract:**\n1. File naming convention (PascalCase, kebab-case, camelCase, snake_case)\n2. Directory placement (co-located with component? separate `hooks\u002F` dir?)\n3. Import style (path aliases? relative? named imports? default exports?)\n4. Export style (named exports? default? re-exported from barrel\u002Findex file?)\n5. Internal patterns (how state is managed, how errors are handled, JSDoc or no)\n6. Test co-location (`.test.ts` next to file? `__tests__\u002F` directory? separate `tests\u002F` tree?)\n7. Types pattern (inline? separate `.types.ts`? shared types file?)\n\n**Output a brief analysis** (3-5 lines) summarizing the conventions you found.\n\n### Step 3: DETERMINE THE FILE SET\n\nBased on the exemplars, determine which files to generate. Not every project\nneeds every file. Only generate what the project's conventions call for.\n\n**Decision matrix:**\n\n| File | Generate IF... |\n|---|---|\n| Main file | Always |\n| Types file (`.types.ts`) | Project separates types into their own files (check exemplars) |\n| Test file (`.test.ts`) | Project has co-located tests for this type of file |\n| Barrel\u002Findex file | Project uses barrel exports AND this file's directory doesn't already have one |\n| Barrel update | Project uses barrel exports AND the directory already has an index file |\n| Style file (`.module.css`, `.styled.ts`) | Project uses co-located styles for this type |\n| Storybook file (`.stories.tsx`) | Project has stories for this type of file |\n\n**Do NOT generate:**\n- Empty placeholder files with only a TODO comment\n- Test files that only contain `describe('...', () => { it.todo('...') })`\n- Types files that only re-export from elsewhere\n- Any file type the project doesn't already use\n\n### Step 4: GENERATE THE FILES\n\nFor each file in the set, generate content by adapting the closest exemplar.\n\n**Rules:**\n1. Match the exemplar's structure exactly — same section order, same patterns\n2. Replace names and specific logic, keep structural patterns\n3. Every generated file must be syntactically valid and importable\n4. No placeholder comments (`\u002F\u002F TODO: implement`, `\u002F\u002F Add logic here`)\n5. No empty function bodies unless the exemplar has them\n6. Minimal but functional — renders something, has at least one real method, returns a typed value\n7. Match the project's TypeScript strictness\n\nMatch the exemplar's props pattern, state management, utility imports, async patterns, and error handling exactly.\n\n### Step 5: WIRE IT IN\n\nFind every registration point the exemplars use and add the new file there.\n\n**Common wiring points (check which ones the project uses):**\n\n| Wiring Point | How to Find It | What to Add |\n|---|---|---|\n| Barrel exports | `index.ts` in the same or parent directory | `export { NewThing } from '.\u002FNewThing'` |\n| Route registration | Router config file (search for exemplar's route) | New route entry matching the pattern |\n| Module registry | Bootstrap\u002Fregistration file | New registration call |\n| Navigation\u002Fsidebar | Nav config array | New nav entry if appropriate |\n| Lazy loading map | Dynamic import map | New lazy import entry |\n| Type unions | Discriminated unions that list all variants | New variant if this is a new \"type\" of thing |\n\n**Rules:**\n1. Only wire into registration points that the exemplars actually use\n2. Match the exact format — same spacing, same trailing commas, same comments\n3. If a registration point uses alphabetical ordering, maintain it\n4. Never create new registration points — only add to existing ones\n\n### Step 6: VERIFY\n\nRun typecheck — every generated file must pass. Fix failures before exiting. If typecheck is unavailable, do a manual read-through for syntax and import correctness.\n\n## Fringe Cases\n\n- **Target directory or file already exists**: Do not silently overwrite. Confirm with the user before proceeding. Output: \"A file at `{path}` already exists. Overwrite it?\" and wait for confirmation.\n- **Template or exemplar not found**: List the available file types in the codebase and ask which one to use as the exemplar. Never scaffold from memory if no exemplar exists.\n- **Language or framework not detected**: Ask the user directly rather than guessing. One question: \"What type of file should this be? (e.g., React component, Express route, utility function)\"\n- **Typecheck fails after generation**: Fix the issue before exiting — do not leave the user with broken generated files.\n- **No wiring point found**: Note the missing registration explicitly in the exit summary rather than silently leaving the file unwired.\n\n## Contextual Gates\n\n**Reversibility:** Amber — creates new files and modifies registration points; `git checkout` to undo.\n**Cost:** No cost actions — file generation only; no agents spawned, no confirmation needed.\n**Trust:** No gates — safe at all trust levels; overwrite confirmation is in Fringe Cases.\n\n## Quality Gates\n\nAll of these must be true before the skill exits:\n\n- [ ] Found 2+ exemplar files of the same type in the project\n- [ ] Generated files match the project's naming convention exactly\n- [ ] Generated files match the project's import\u002Fexport style exactly\n- [ ] No placeholder comments, TODO stubs, or empty function bodies\n- [ ] Every generated file is syntactically valid TypeScript\u002FJavaScript\n- [ ] Main file is wired into the project (barrel export, route, registry, etc.)\n- [ ] Test file exists IF AND ONLY IF the project co-locates tests for this type\n- [ ] Types file exists IF AND ONLY IF the project separates types for this type\n- [ ] Typecheck passes (or manual verification if typecheck unavailable)\n\n## Exit Protocol\n\nOutput a summary in this format:\n\n```\nSCAFFOLD COMPLETE\n\nCreated:\n  - path\u002Fto\u002FMainFile.tsx (component)\n  - path\u002Fto\u002FMainFile.test.tsx (test)\n  - path\u002Fto\u002FMainFile.types.ts (types)\n\nWired into:\n  - path\u002Fto\u002Findex.ts (barrel export)\n  - path\u002Fto\u002Froutes.ts (route registration)\n\nConventions matched from:\n  - path\u002Fto\u002FExemplarA.tsx\n  - path\u002Fto\u002FExemplarB.tsx\n\nTypecheck: PASS\n```\n\n```\n---HANDOFF---\n- Scaffolded: {name} ({type})\n- Created: {N} files, wired into {N} registration points\n- Conventions matched from: {exemplar names}\n- Reversibility: green -- new files only, delete to undo\n---\n```\n","# \u002Fscaffold — Project-Aware File Generator\n\n## Orientation\n\n**Use when:** Creating a new component, module, service, route, hook, domain, or utility with existing examples in the project.\n\n**Do NOT use when:** The file has no precedent (use `\u002Fmarshal` for unconstrained generation), you're modifying existing files (use `\u002Frefactor`), or the project has no conventions yet.\n\n**Needs:** target type, name, and optional description.\n\n## Protocol\n\n### Step 1: IDENTIFY THE TARGET\n\nParse the user's request into:\n- **type**: component | module | service | route | hook | domain | utility | custom\n- **name**: the name the user gave (e.g., \"UserProfile\", \"auth-service\", \"settings route\")\n- **description**: what it does, if provided (otherwise leave blank for now)\n\nIf the type is ambiguous, ask ONE clarifying question. Do not ask more than one.\n\n### Step 2: FIND EXEMPLARS\n\nSearch the codebase for 2-3 existing files of the same type.\n\n**Search strategy by type:**\n\n| Type | Search Pattern | What to Look For |\n|---|---|---|\n| component | `**\u002F*.tsx` in the same directory or sibling directories | Functional components with similar complexity |\n| module | Same directory as where new module will live | Registration pattern, exports, config shape |\n| service | `**\u002Fservices\u002F**`, `**\u002Flib\u002F**` | Class vs function, singleton vs factory, error handling |\n| route | Router config files, `**\u002Froutes.*`, `**\u002Fpages\u002F**` | Route definition format, lazy loading, guards |\n| hook | `**\u002Fhooks\u002F**`, `**\u002Fuse*.ts` | Naming, parameter patterns, return types, cleanup |\n| domain | Top-level domain\u002Ffeature directories | Manifest structure, entry point, internal layout |\n| utility | `**\u002Futils\u002F**`, `**\u002Fhelpers\u002F**` | Pure function style, type signatures, JSDoc |\n\n**For each exemplar, extract:**\n1. File naming convention (PascalCase, kebab-case, camelCase, snake_case)\n2. Directory placement (co-located with component? separate `hooks\u002F` dir?)\n3. Import style (path aliases? relative? named imports? default exports?)\n4. Export style (named exports? default? re-exported from barrel\u002Findex file?)\n5. Internal patterns (how state is managed, how errors are handled, JSDoc or no)\n6. Test co-location (`.test.ts` next to file? `__tests__\u002F` directory? separate `tests\u002F` tree?)\n7. Types pattern (inline? separate `.types.ts`? shared types file?)\n\n**Output a brief analysis** (3-5 lines) summarizing the conventions you found.\n\n### Step 3: DETERMINE THE FILE SET\n\nBased on the exemplars, determine which files to generate. Not every project\nneeds every file. Only generate what the project's conventions call for.\n\n**Decision matrix:**\n\n| File | Generate IF... |\n|---|---|\n| Main file | Always |\n| Types file (`.types.ts`) | Project separates types into their own files (check exemplars) |\n| Test file (`.test.ts`) | Project has co-located tests for this type of file |\n| Barrel\u002Findex file | Project uses barrel exports AND this file's directory doesn't already have one |\n| Barrel update | Project uses barrel exports AND the directory already has an index file |\n| Style file (`.module.css`, `.styled.ts`) | Project uses co-located styles for this type |\n| Storybook file (`.stories.tsx`) | Project has stories for this type of file |\n\n**Do NOT generate:**\n- Empty placeholder files with only a TODO comment\n- Test files that only contain `describe('...', () => { it.todo('...') })`\n- Types files that only re-export from elsewhere\n- Any file type the project doesn't already use\n\n### Step 4: GENERATE THE FILES\n\nFor each file in the set, generate content by adapting the closest exemplar.\n\n**Rules:**\n1. Match the exemplar's structure exactly — same section order, same patterns\n2. Replace names and specific logic, keep structural patterns\n3. Every generated file must be syntactically valid and importable\n4. No placeholder comments (`\u002F\u002F TODO: implement`, `\u002F\u002F Add logic here`)\n5. No empty function bodies unless the exemplar has them\n6. Minimal but functional — renders something, has at least one real method, returns a typed value\n7. Match the project's TypeScript strictness\n\nMatch the exemplar's props pattern, state management, utility imports, async patterns, and error handling exactly.\n\n### Step 5: WIRE IT IN\n\nFind every registration point the exemplars use and add the new file there.\n\n**Common wiring points (check which ones the project uses):**\n\n| Wiring Point | How to Find It | What to Add |\n|---|---|---|\n| Barrel exports | `index.ts` in the same or parent directory | `export { NewThing } from '.\u002FNewThing'` |\n| Route registration | Router config file (search for exemplar's route) | New route entry matching the pattern |\n| Module registry | Bootstrap\u002Fregistration file | New registration call |\n| Navigation\u002Fsidebar | Nav config array | New nav entry if appropriate |\n| Lazy loading map | Dynamic import map | New lazy import entry |\n| Type unions | Discriminated unions that list all variants | New variant if this is a new \"type\" of thing |\n\n**Rules:**\n1. Only wire into registration points that the exemplars actually use\n2. Match the exact format — same spacing, same trailing commas, same comments\n3. If a registration point uses alphabetical ordering, maintain it\n4. Never create new registration points — only add to existing ones\n\n### Step 6: VERIFY\n\nRun typecheck — every generated file must pass. Fix failures before exiting. If typecheck is unavailable, do a manual read-through for syntax and import correctness.\n\n## Fringe Cases\n\n- **Target directory or file already exists**: Do not silently overwrite. Confirm with the user before proceeding. Output: \"A file at `{path}` already exists. Overwrite it?\" and wait for confirmation.\n- **Template or exemplar not found**: List the available file types in the codebase and ask which one to use as the exemplar. Never scaffold from memory if no exemplar exists.\n- **Language or framework not detected**: Ask the user directly rather than guessing. One question: \"What type of file should this be? (e.g., React component, Express route, utility function)\"\n- **Typecheck fails after generation**: Fix the issue before exiting — do not leave the user with broken generated files.\n- **No wiring point found**: Note the missing registration explicitly in the exit summary rather than silently leaving the file unwired.\n\n## Contextual Gates\n\n**Reversibility:** Amber — creates new files and modifies registration points; `git checkout` to undo.\n**Cost:** No cost actions — file generation only; no agents spawned, no confirmation needed.\n**Trust:** No gates — safe at all trust levels; overwrite confirmation is in Fringe Cases.\n\n## Quality Gates\n\nAll of these must be true before the skill exits:\n\n- [ ] Found 2+ exemplar files of the same type in the project\n- [ ] Generated files match the project's naming convention exactly\n- [ ] Generated files match the project's import\u002Fexport style exactly\n- [ ] No placeholder comments, TODO stubs, or empty function bodies\n- [ ] Every generated file is syntactically valid TypeScript\u002FJavaScript\n- [ ] Main file is wired into the project (barrel export, route, registry, etc.)\n- [ ] Test file exists IF AND ONLY IF the project co-locates tests for this type\n- [ ] Types file exists IF AND ONLY IF the project separates types for this type\n- [ ] Typecheck passes (or manual verification if typecheck unavailable)\n\n## Exit Protocol\n\nOutput a summary in this format:\n\n```\nSCAFFOLD COMPLETE\n\nCreated:\n  - path\u002Fto\u002FMainFile.tsx (component)\n  - path\u002Fto\u002FMainFile.test.tsx (test)\n  - path\u002Fto\u002FMainFile.types.ts (types)\n\nWired into:\n  - path\u002Fto\u002Findex.ts (barrel export)\n  - path\u002Fto\u002Froutes.ts (route registration)\n\nConventions matched from:\n  - path\u002Fto\u002FExemplarA.tsx\n  - path\u002Fto\u002FExemplarB.tsx\n\nTypecheck: PASS\n```\n\n```\n---HANDOFF---\n- Scaffolded: {name} ({type})\n- Created: {N} files, wired into {N} registration points\n- Conventions matched from: {exemplar names}\n- Reversibility: green -- new files only, delete to undo\n---\n```\n",{"name":5,"license":15,"description":7,"auto-trigger":39,"user-invocable":43,"trigger_keywords":44},true,[5,45,46,47,48,49,50,51,52,53,36],"generate component","generate module","generate service","new component","new module","new route","new service","create component","stub out","main","e1a3d45697a0f323aaedcbea0ab6a0387b5fe722","skills\u002Fscaffold",84,"https:\u002F\u002Fgithub.com\u002FSethGammon\u002FCitadel","https:\u002F\u002Fsethgammon.github.io\u002FCitadel\u002F","https:\u002F\u002Fgithub.com\u002FSethGammon","Building Citadel, the repo-local operating layer for Claude Code and Codex. Persistent work, routing, verification, and coordinated agent fleets.","2026-11-13 02:05:13",{"source":8,"skillName":5,"commands":64,"prompt":74,"zipAvailable":43},[65,68,71],{"tool":66,"command":67},"npx","npx skills add SethGammon\u002FCitadel --skill scaffold",{"tool":69,"command":70},"bunx","bunx skills add SethGammon\u002FCitadel --skill scaffold",{"tool":72,"command":73},"pnpm","pnpm dlx skills add SethGammon\u002FCitadel --skill scaffold","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FSethGammon\u002FCitadel\u002Fblob\u002Fmain\u002Fskills\u002Fscaffold\u002FSKILL.md",[76,82],{"path":77,"resourceType":78,"resourceTypeDesc":79,"sizeBytes":80,"sourceHtmlUrl":81},"__benchmarks__\u002Fcomponent-from-exemplar.md","REFERENCE","参考文档",1053,"https:\u002F\u002Fgithub.com\u002FSethGammon\u002FCitadel\u002Fblob\u002Fmain\u002Fskills\u002Fscaffold\u002F__benchmarks__\u002Fcomponent-from-exemplar.md",{"path":83,"resourceType":78,"resourceTypeDesc":79,"sizeBytes":84,"sourceHtmlUrl":85},"__benchmarks__\u002Fexisting-dir.md",983,"https:\u002F\u002Fgithub.com\u002FSethGammon\u002FCitadel\u002Fblob\u002Fmain\u002Fskills\u002Fscaffold\u002F__benchmarks__\u002Fexisting-dir.md",[87,112,139,163,189,208],{"skillNo":88,"name":89,"nameZh":6,"description":90,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":91,"categories":92,"keywords":93,"publishedAt":38},"01M6GXSBKE9A2HQWF8QRAZ4WJ5","workspace","Multi-repo campaign coordinator. Same lifecycle as fleet -- scope claims, discovery relay, wave-based execution -- but the unit of work is a repo, not a file. Coordinates campaigns across repositories with shared context.","https:\u002F\u002Fgithub.com\u002FSethGammon\u002FCitadel\u002Fblob\u002Fmain\u002Fskills\u002Fworkspace\u002FSKILL.md",[],[89,94,95,96,97,98,99,100,101,102,103,104,105,22,106,107,108,109,110,111],"repos","snowflake","multi-repo","work","context","campaign","coordinate","but","across","campaigns","shared","as","scope","add","unit","coordinator","fleet","claims",{"skillNo":113,"name":114,"nameZh":6,"description":115,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":116,"categories":117,"keywords":123,"publishedAt":38},"01M6GXS873AD1Y6RTM6GV47F3E","wiki","Markdown-first knowledge base where the LLM acts as librarian. Ingests raw sources, compiles and interlinks topic files, self-maintains an index. No vector DB or embeddings required -- uses LLM-native navigation over structured markdown up to ~400K words.","https:\u002F\u002Fgithub.com\u002FSethGammon\u002FCitadel\u002Fblob\u002Fmain\u002Fskills\u002Fwiki\u002FSKILL.md",[118],{"categoryNo":119,"categoryName":120,"taxonomyType":121,"taxonomyTypeDesc":122},"01JBSEEDCAT000000000000021","资料检索与研究","SCENARIO","使用场景",[114,124,125,126,127,128,129,130,131,132,31,133,134,135,26,136,105,22,137,138],"vector","embeddings","librarian","markdown","knowledge","karpathy","knowledge management","karpathy wiki","up","maintain","self","knowledge base","db","sources","native",{"skillNo":140,"name":141,"nameZh":6,"description":142,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":143,"categories":144,"keywords":145,"publishedAt":38},"01M6GXS2840SJ61285SZ43EJC3","watch","File sentinel that monitors the working directory for changes and marker comments, then auto-triggers appropriate skills. Poll-based via git diff against the last scan commit. Writes intake items for batch processing and routes marker actions through \u002Fdo. Use for automatic reactions to file changes; do NOT use for one-off inspection or tasks needing human judgment per file.","https:\u002F\u002Fgithub.com\u002FSethGammon\u002FCitadel\u002Fblob\u002Fmain\u002Fskills\u002Fwatch\u002FSKILL.md",[],[141,146,147,148,149,150,151,152,153,154,155,156,31,157,158,159,160,161,22,162],"directory","commit","tasks","git","batch","actions","start","sentinel","diff","auto","stop","do","scan","human","judgment","reactions","processing",{"skillNo":164,"name":165,"nameZh":6,"description":166,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":167,"categories":168,"keywords":172,"publishedAt":38},"01M6GXRXHYJ5RD9RZP81S2VFSW","verify","Self-test the Citadel hook pipeline from within a live session. Exercises real tool calls (Write, Edit, Bash, Read) and checks that hooks fired, telemetry accumulated, and no errors occurred. Reports HOOK HEALTH: PASS or HOOK HEALTH: FAIL with a per-hook breakdown.","https:\u002F\u002Fgithub.com\u002FSethGammon\u002FCitadel\u002Fblob\u002Fmain\u002Fskills\u002Fverify\u002FSKILL.md",[169],{"categoryNo":170,"categoryName":171,"taxonomyType":121,"taxonomyTypeDesc":122},"01JBSEEDCAT000000000000008","测试与质量",[165,173,174,175,176,177,178,179,180,181,182,183,184,134,185,22,186,187,188,20],"citadel","telemetry","harness","pipeline","Bash","tool","read","write","edit","session","hooks","reports","live","hook","errors","calls",{"skillNo":190,"name":191,"nameZh":6,"description":192,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":193,"categories":194,"keywords":195,"publishedAt":38},"01M6GXRS9MCJFMQZ917H2XH3AC","unharness","Safely leave Citadel using the active adoption receipt. Produces a no-write, reviewable plan, preserves a portable archive, removes only exact owned material, and reports modified or externally registered surfaces as retained or unknown. Legacy installs must be imported before exact leave is claimed.","https:\u002F\u002Fgithub.com\u002FSethGammon\u002FCitadel\u002Fblob\u002Fmain\u002Fskills\u002Funharness\u002FSKILL.md",[],[191,196,173,175,197,198,199,200,201,132,184,202,203,204,205,206,105,22,207,20],"uninstall","adoption","plan","archive","remove","only","Legacy","surfaces","clean","imported","active","material",{"skillNo":209,"name":210,"nameZh":6,"description":211,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":212,"categories":213,"keywords":222,"publishedAt":38},"01M6GXRMEJ2VHD43R9FNPD4910","triage","GitHub issue and PR investigator. Pulls open issues\u002FPRs, classifies them, searches the codebase for root cause or reviews contributed code, proposes fixes with file:line references, and optionally implements fixes. Use for investigating GitHub issues and reviewing PRs; do NOT use for general code review unrelated to GitHub issues.","https:\u002F\u002Fgithub.com\u002FSethGammon\u002FCitadel\u002Fblob\u002Fmain\u002Fskills\u002Ftriage\u002FSKILL.md",[214,217],{"categoryNo":215,"categoryName":216,"taxonomyType":121,"taxonomyTypeDesc":122},"01JBSEEDCAT000000000000007","代码审查",{"categoryNo":218,"categoryName":219,"taxonomyType":220,"taxonomyTypeDesc":221},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[210,223,224,225,226,227,228,229,230,231,232,233,234,235,157,22,236,237,238,20],"code review","review","review pr","pr","code","github issues","issues","open","use","unrelated","issue","general","references","line","investigator","reviews"]