[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6GXRXHYJ5RD9RZP81S2VFSW":3,"skill-same:01M6GXRXHYJ5RD9RZP81S2VFSW":78},{"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":23,"publishedAt":43,"linkOnly":44,"markdownContent":45,"markdownBody":46,"frontMatter":47,"refName":56,"commitSha":57,"skillDirectory":58,"forksCount":59,"repositoryHtmlUrl":60,"repositoryHomepageUrl":61,"ownerHtmlUrl":62,"ownerBlogUrl":61,"ownerDescription":63,"updatedAt":64,"install":65,"resources":77},"01M6GXRXHYJ5RD9RZP81S2VFSW","verify",null,"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.","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\u002Fverify\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",[5,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42],"session","true","calls","errors","hook","false","live","self","reports","hooks","citadel","edit","write","read","tool","Bash","pipeline","harness","telemetry","2026-11-10 10:12:30",false,"---\nname: verify\nlicense: MIT\ndescription: >-\n  Self-test the Citadel hook pipeline from within a live session. Exercises\n  real tool calls (Write, Edit, Bash, Read) and checks that hooks fired,\n  telemetry accumulated, and no errors occurred. Reports HOOK HEALTH: PASS\n  or HOOK HEALTH: FAIL with a per-hook breakdown.\nuser-invocable: true\nauto-trigger: false\ntrigger_keywords:\n  - verify\n  - verify hooks\n  - hook health\n  - self-test\n  - check hooks\n  - harness health\nlast-updated: 2026-03-27\n---\n\n# \u002Fverify — Hook Pipeline Self-Test\n\nUse this when:\n- Hooks were recently updated and you want a live sanity check\n- Something feels wrong (tools seem too slow, quality-gate not firing)\n- After installing Citadel in a new project\n\n## Protocol\n\n### Step 1: Baseline\n\nRead the current telemetry state:\n```\n.planning\u002Ftelemetry\u002Fhook-timing.jsonl  → count lines (baseline_timing)\n.planning\u002Ftelemetry\u002Faudit.jsonl        → count lines (baseline_audit)\n.planning\u002Ftelemetry\u002Fhook-errors.log    → size in bytes (baseline_errors)\n```\n\nIf telemetry directory doesn't exist, note it (init-project may not have run).\n\n### Step 2: Exercise hooks\n\nRun these tool calls in sequence. Each exercises a different hook:\n\n1. **Write** a temp file at `.planning\u002Fverify-temp.ts`:\n   ```typescript\n   \u002F\u002F citadel verify probe\n   export const verifyProbe = true;\n   ```\n   → Exercises: PreToolUse (protect-files, governance), PostToolUse (post-edit)\n\n2. **Edit** the same file — change `true` to `false`:\n   → Exercises: PreToolUse (protect-files, governance), PostToolUse (post-edit)\n\n3. **Bash** a harmless read command: `echo \"verify-probe\"`\n   → Exercises: PreToolUse (governance)\n\n4. **Read** the temp file back\n   → Exercises: PreToolUse (protect-files — should allow, it's not .env)\n\n5. **Delete** the temp file: `rm .planning\u002Fverify-temp.ts` or equivalent\n   → Cleanup\n\n### Step 3: Check side effects\n\nAfter all tool calls complete, read telemetry again:\n\n| Check | Expected | Result |\n|---|---|---|\n| hook-timing.jsonl grew | +2 or more lines (Write + Edit post-hooks) | PASS\u002FFAIL |\n| audit.jsonl grew | +3 or more lines (Write + Edit + Bash pre-hooks) | PASS\u002FFAIL |\n| hook-errors.log unchanged | same size as baseline | PASS\u002FFAIL |\n\n### Step 4: Report\n\nOutput a results block:\n\n```\n=== HOOK HEALTH CHECK ===\n\nhook-timing.jsonl:  +N lines  [PASS \u002F FAIL]\naudit.jsonl:        +N lines  [PASS \u002F FAIL]\nhook-errors.log:    no errors [PASS \u002F FAIL — N new errors]\n\nHOOK HEALTH: PASS\n```\n\nOr if any check fails:\n\n```\nHOOK HEALTH: FAIL\n\nFailing checks:\n- hook-timing.jsonl did not grow: PostToolUse hooks may not be firing\n  → Verify hooks are installed: node scripts\u002Fverify-hooks.js\n  → Check settings.json: cat .claude\u002Fsettings.json | grep PostToolUse\n\n- audit.jsonl did not grow: governance hook may not be firing\n  → Check: node hooks_src\u002Fgovernance.js \u003C\u003C\u003C '{}'\n```\n\n## Edge Cases\n\n**No .planning\u002Ftelemetry\u002F directory**: Init-project may not have run.\nOutput: \"HOOK HEALTH: FAIL — .planning\u002Ftelemetry\u002F not found. Run: node hooks_src\u002Finit-project.js\"\n\n**Hooks installed but telemetry still zero**: The project may have a harness.json\nthat disables telemetry. Check `features.telemetry` in `.claude\u002Fharness.json`, Citadel's shared config path for all runtimes including Codex.\n\n**First-time run (no baseline)**: If the files don't exist before the test,\nthey should be created during the test. Treat \"file created\" as equivalent to \"grew\".\n\n## What This Does NOT Test\n\n- Hook correctness on edge cases (use verify-hooks.js for that)\n- Full PreToolUse → tool → PostToolUse sequence isolation (use integration-test.js)\n- Skill output quality (use skill-bench.js --execute)\n\n## Quality Gates\n\n- All 3 telemetry checks must pass: timing grew, audit grew, no new errors\n- Temp file must be cleaned up regardless of pass\u002Ffail outcome\n- Report must include exact counts (+N lines), not just PASS\u002FFAIL\n- If .planning\u002Ftelemetry\u002F does not exist, FAIL immediately — do not fabricate counts\n\n## Contextual Gates\n\n**Disclosure:** Creates and deletes `.planning\u002Fverify-temp.ts` during the test. No other files modified.\n**Reversibility:** green — temp file deleted on completion; no persistent changes.\n**Trust gates:** Any — no restrictions.\n\n## Exit Protocol\n\n```\n---HANDOFF---\n- Hook pipeline: PASS \u002F FAIL\n- hook-timing.jsonl: +N lines\n- audit.jsonl: +N lines\n- hook-errors.log: N new errors (0 expected)\n- Reversibility: green — no persistent changes; verify-temp.ts cleaned up\n- Next: if FAIL, run node scripts\u002Fverify-hooks.js for deeper diagnostics\n---\n```\n","# \u002Fverify — Hook Pipeline Self-Test\n\nUse this when:\n- Hooks were recently updated and you want a live sanity check\n- Something feels wrong (tools seem too slow, quality-gate not firing)\n- After installing Citadel in a new project\n\n## Protocol\n\n### Step 1: Baseline\n\nRead the current telemetry state:\n```\n.planning\u002Ftelemetry\u002Fhook-timing.jsonl  → count lines (baseline_timing)\n.planning\u002Ftelemetry\u002Faudit.jsonl        → count lines (baseline_audit)\n.planning\u002Ftelemetry\u002Fhook-errors.log    → size in bytes (baseline_errors)\n```\n\nIf telemetry directory doesn't exist, note it (init-project may not have run).\n\n### Step 2: Exercise hooks\n\nRun these tool calls in sequence. Each exercises a different hook:\n\n1. **Write** a temp file at `.planning\u002Fverify-temp.ts`:\n   ```typescript\n   \u002F\u002F citadel verify probe\n   export const verifyProbe = true;\n   ```\n   → Exercises: PreToolUse (protect-files, governance), PostToolUse (post-edit)\n\n2. **Edit** the same file — change `true` to `false`:\n   → Exercises: PreToolUse (protect-files, governance), PostToolUse (post-edit)\n\n3. **Bash** a harmless read command: `echo \"verify-probe\"`\n   → Exercises: PreToolUse (governance)\n\n4. **Read** the temp file back\n   → Exercises: PreToolUse (protect-files — should allow, it's not .env)\n\n5. **Delete** the temp file: `rm .planning\u002Fverify-temp.ts` or equivalent\n   → Cleanup\n\n### Step 3: Check side effects\n\nAfter all tool calls complete, read telemetry again:\n\n| Check | Expected | Result |\n|---|---|---|\n| hook-timing.jsonl grew | +2 or more lines (Write + Edit post-hooks) | PASS\u002FFAIL |\n| audit.jsonl grew | +3 or more lines (Write + Edit + Bash pre-hooks) | PASS\u002FFAIL |\n| hook-errors.log unchanged | same size as baseline | PASS\u002FFAIL |\n\n### Step 4: Report\n\nOutput a results block:\n\n```\n=== HOOK HEALTH CHECK ===\n\nhook-timing.jsonl:  +N lines  [PASS \u002F FAIL]\naudit.jsonl:        +N lines  [PASS \u002F FAIL]\nhook-errors.log:    no errors [PASS \u002F FAIL — N new errors]\n\nHOOK HEALTH: PASS\n```\n\nOr if any check fails:\n\n```\nHOOK HEALTH: FAIL\n\nFailing checks:\n- hook-timing.jsonl did not grow: PostToolUse hooks may not be firing\n  → Verify hooks are installed: node scripts\u002Fverify-hooks.js\n  → Check settings.json: cat .claude\u002Fsettings.json | grep PostToolUse\n\n- audit.jsonl did not grow: governance hook may not be firing\n  → Check: node hooks_src\u002Fgovernance.js \u003C\u003C\u003C '{}'\n```\n\n## Edge Cases\n\n**No .planning\u002Ftelemetry\u002F directory**: Init-project may not have run.\nOutput: \"HOOK HEALTH: FAIL — .planning\u002Ftelemetry\u002F not found. Run: node hooks_src\u002Finit-project.js\"\n\n**Hooks installed but telemetry still zero**: The project may have a harness.json\nthat disables telemetry. Check `features.telemetry` in `.claude\u002Fharness.json`, Citadel's shared config path for all runtimes including Codex.\n\n**First-time run (no baseline)**: If the files don't exist before the test,\nthey should be created during the test. Treat \"file created\" as equivalent to \"grew\".\n\n## What This Does NOT Test\n\n- Hook correctness on edge cases (use verify-hooks.js for that)\n- Full PreToolUse → tool → PostToolUse sequence isolation (use integration-test.js)\n- Skill output quality (use skill-bench.js --execute)\n\n## Quality Gates\n\n- All 3 telemetry checks must pass: timing grew, audit grew, no new errors\n- Temp file must be cleaned up regardless of pass\u002Ffail outcome\n- Report must include exact counts (+N lines), not just PASS\u002FFAIL\n- If .planning\u002Ftelemetry\u002F does not exist, FAIL immediately — do not fabricate counts\n\n## Contextual Gates\n\n**Disclosure:** Creates and deletes `.planning\u002Fverify-temp.ts` during the test. No other files modified.\n**Reversibility:** green — temp file deleted on completion; no persistent changes.\n**Trust gates:** Any — no restrictions.\n\n## Exit Protocol\n\n```\n---HANDOFF---\n- Hook pipeline: PASS \u002F FAIL\n- hook-timing.jsonl: +N lines\n- audit.jsonl: +N lines\n- hook-errors.log: N new errors (0 expected)\n- Reversibility: green — no persistent changes; verify-temp.ts cleaned up\n- Next: if FAIL, run node scripts\u002Fverify-hooks.js for deeper diagnostics\n---\n```\n",{"name":5,"license":15,"description":7,"auto-trigger":44,"last-updated":48,"user-invocable":49,"trigger_keywords":50},1774569600000,true,[5,51,52,53,54,55],"verify hooks","hook health","self-test","check hooks","harness health","main","e1a3d45697a0f323aaedcbea0ab6a0387b5fe722","skills\u002Fverify",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-06 02:04:44",{"source":8,"skillName":5,"commands":66,"prompt":76,"zipAvailable":49},[67,70,73],{"tool":68,"command":69},"npx","npx skills add SethGammon\u002FCitadel --skill verify",{"tool":71,"command":72},"bunx","bunx skills add SethGammon\u002FCitadel --skill verify",{"tool":74,"command":75},"pnpm","pnpm dlx skills add SethGammon\u002FCitadel --skill verify","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FSethGammon\u002FCitadel\u002Fblob\u002Fmain\u002Fskills\u002Fverify\u002FSKILL.md",[],[79,104,130,154,173,204],{"skillNo":80,"name":81,"nameZh":6,"description":82,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":83,"categories":84,"keywords":85,"publishedAt":43},"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",[],[81,86,87,88,89,90,91,92,93,94,95,96,97,29,98,99,100,101,102,103],"repos","snowflake","multi-repo","work","context","campaign","coordinate","but","across","campaigns","shared","as","scope","add","unit","coordinator","fleet","claims",{"skillNo":105,"name":106,"nameZh":6,"description":107,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":108,"categories":109,"keywords":113,"publishedAt":43},"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",[110],{"categoryNo":111,"categoryName":112,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000021","资料检索与研究",[106,114,115,116,117,118,119,120,121,122,123,124,31,125,126,127,97,29,128,129],"vector","embeddings","librarian","markdown","knowledge","karpathy","knowledge management","karpathy wiki","up","files","maintain","knowledge base","project","db","sources","native",{"skillNo":131,"name":132,"nameZh":6,"description":133,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":134,"categories":135,"keywords":136,"publishedAt":43},"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",[],[132,137,138,139,140,141,142,143,144,145,146,147,123,148,149,150,151,152,29,153],"directory","commit","tasks","git","batch","actions","start","sentinel","diff","auto","stop","do","scan","human","judgment","reactions","processing",{"skillNo":155,"name":156,"nameZh":6,"description":157,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":158,"categories":159,"keywords":160,"publishedAt":43},"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",[],[156,161,34,41,162,163,164,165,166,122,32,167,168,169,170,171,97,29,172,25],"uninstall","adoption","plan","archive","remove","only","Legacy","surfaces","clean","imported","active","material",{"skillNo":174,"name":175,"nameZh":6,"description":176,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":177,"categories":178,"keywords":187,"publishedAt":43},"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",[179,182],{"categoryNo":180,"categoryName":181,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000007","代码审查",{"categoryNo":183,"categoryName":184,"taxonomyType":185,"taxonomyTypeDesc":186},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[175,188,189,190,191,192,193,194,195,196,197,198,199,200,148,29,201,202,203,25],"code review","review","review pr","pr","code","github issues","issues","open","use","unrelated","issue","general","references","line","investigator","reviews",{"skillNo":205,"name":206,"nameZh":6,"description":207,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":208,"categories":209,"keywords":211,"publishedAt":43},"01M6GXRG4QPGKHVCJPRCEWBW2S","test-gen","Generate and verify tests — happy path, edge cases, error paths — using the project's own framework and patterns","https:\u002F\u002Fgithub.com\u002FSethGammon\u002FCitadel\u002Fblob\u002Fmain\u002Fskills\u002Ftest-gen\u002FSKILL.md",[210],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[212,213,214,215,216,217,5,36,218,219,126,220,221,99,222,25,223],"test","test gen","write tests","generate","framework","edge","generate tests","patterns","tests","paths","error","path"]