[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6GXQ37XBJEZFHWN5Q5Q4SC3":3,"skill-same:01M6GXQ37XBJEZFHWN5Q5Q4SC3":89},{"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":26,"publishedAt":46,"linkOnly":47,"markdownContent":48,"markdownBody":49,"frontMatter":50,"refName":57,"commitSha":58,"skillDirectory":59,"forksCount":60,"repositoryHtmlUrl":61,"repositoryHomepageUrl":62,"ownerHtmlUrl":63,"ownerBlogUrl":62,"ownerDescription":64,"updatedAt":65,"install":66,"resources":78},"01M6GXQ37XBJEZFHWN5Q5Q4SC3","qa",null,"Browser-based QA verification. Launches a real browser, navigates the app, clicks buttons, fills forms, and tests user flows. Works as a standalone skill or as a phase end condition in campaigns. Requires Playwright (optional dependency, graceful skip if not installed).","SethGammon\u002FCitadel","SethGammon","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F5523585?v=4","01M6GXJ90FD2CE9QF5GQERWN06","Seth Gammon","01M6GXJ94VXYGK5KAW14EYE901",930,"MIT","https:\u002F\u002Fgithub.com\u002FSethGammon\u002FCitadel\u002Fblob\u002Fmain\u002Fskills\u002Fqa\u002FSKILL.md",[18,23],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[5,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],"standalone","playwright","true","flows","condition","false","click","app","as","end","tests","campaigns","real browser","forms","browser test","dependency","work","verification","browser","2026-11-10 10:12:30",false,"---\nname: qa\nlicense: MIT\ndescription: >-\n  Browser-based QA verification. Launches a real browser, navigates the app,\n  clicks buttons, fills forms, and tests user flows. Works as a standalone\n  skill or as a phase end condition in campaigns. Requires Playwright\n  (optional dependency, graceful skip if not installed).\nuser-invocable: true\nauto-trigger: false\ntrigger_keywords:\n  - qa\n  - test the app\n  - click through\n  - does it work\n  - browser test\neffort: high\n---\n\n# \u002Fqa — Browser QA Verification\n\n## Dependency: Playwright\n\n\u002Fqa requires Playwright. It's an optional dependency.\n\n**If Playwright is installed:** full browser QA works.\n**If Playwright is NOT installed:** the skill offers to install it, or falls\nback to \u002Flive-preview (screenshot-only verification).\n\nDetection:\n```bash\nnpx playwright --version 2>\u002Fdev\u002Fnull\n```\n\nInstallation (if user agrees):\n```bash\nnpm install -D playwright\nnpx playwright install chromium\n```\n\nOnly installs Chromium (smallest download, ~150MB). Not Firefox or WebKit\nunless the user asks for cross-browser testing.\n\n**\u002Fdo setup integration:** During setup, if the project is a web app (has\nReact, Next.js, Vue, Svelte, or HTML files), offer to install Playwright:\n\"I see this is a web project. Want to enable browser QA testing? This installs\nPlaywright (~150MB) for interaction testing. (y\u002Fn)\"\n\nIf they say no, \u002Fqa falls back to \u002Flive-preview. No pressure.\n\n## When to Use\n\n- After building a feature (verify it actually works in a browser)\n- As a phase end condition: \"QA verification passes for [flow]\"\n- When \u002Fdo routes \"qa\", \"test the app\", \"does it work\", \"click through it\"\n- When \u002Fcreate-app campaigns reach the verification phase\n- After \u002Flive-preview shows something renders but you need to verify interactions\n\n## Protocol\n\n### Step 1: DISCOVER\n\nBefore testing, understand what to test:\n\n1. Read the project's routes\u002Fpages (from file tree, router config, or package.json scripts)\n2. Read the PRD or campaign file (if exists) for expected user flows\n3. Identify testable flows:\n   - Page loads and renders (baseline)\n   - Navigation between pages\n   - Form submissions\n   - Button click handlers\n   - Auth flows (login, logout, protected routes)\n   - CRUD operations (create, read, update, delete)\n   - Error states (invalid input, network errors)\n\nIf no PRD or campaign exists, ask: \"What should I test? Give me 1-3 user flows.\"\n\n### Step 2: START THE APP\n\nBefore testing, the app needs to be running:\n\n1. Check if a dev server is already running (try curl localhost:3000, 5173, 8080)\n2. If not running, check package.json for start\u002Fdev scripts\n3. Start it: `npm run dev` or equivalent, in background\n4. Wait for the server to be ready (poll the health endpoint or main URL)\n5. If the app won't start, report the error and stop. Don't test a broken app.\n\nTrack whether the agent started the server. If so, kill it on completion.\n\n### Step 3: TEST\n\nFor each flow identified in Step 1, write and run a Playwright script:\n\n```javascript\nconst { chromium } = require('playwright');\n\n(async () => {\n  const browser = await chromium.launch({ headless: true });\n  const page = await browser.newPage();\n\n  \u002F\u002F Navigate\n  await page.goto('http:\u002F\u002Flocalhost:3000');\n\n  \u002F\u002F Verify page loaded\n  const title = await page.title();\n\n  \u002F\u002F Test interactions\n  await page.click('button[data-testid=\"add-todo\"]');\n  await page.fill('input[name=\"title\"]', 'Test todo');\n  await page.click('button[type=\"submit\"]');\n\n  \u002F\u002F Verify result\n  const todoText = await page.textContent('.todo-item:last-child');\n\n  \u002F\u002F Screenshot for evidence\n  await page.screenshot({ path: '.planning\u002Fscreenshots\u002Fqa-flow-1.png' });\n\n  await browser.close();\n})();\n```\n\nFor each test:\n- Navigate to the relevant page\n- Perform the user action (click, fill, submit)\n- Verify the expected outcome (element appears, text changes, navigation occurs)\n- Take a screenshot as evidence\n- Log: PASS or FAIL with description\n\n### Step 4: REPORT\n\nWrite results to `.planning\u002Fqa-report-{date}.md`:\n\n```markdown\n# QA Report: {App Name or Feature}\n\n> Date: {ISO date}\n> Flows tested: {N}\n> Passed: {N}\n> Failed: {N}\n> Screenshots: .planning\u002Fscreenshots\u002Fqa-*.png\n\n## Results\n\n### Flow 1: {description}\n- Steps: {what was done}\n- Expected: {what should happen}\n- Actual: {what did happen}\n- Result: PASS \u002F FAIL\n- Screenshot: {path}\n- Notes: {any observations}\n\n### Flow 2: ...\n```\n\n### Step 5: CAMPAIGN INTEGRATION\n\nWhen running as a phase end condition:\n\nThe campaign file can specify QA conditions:\n```\n| 3 | qa_verify | \u002Fqa passes for: add todo, complete todo, delete todo |\n```\n\n\u002Fqa reads the condition, runs those specific flows, and reports pass\u002Ffail.\nThe phase is complete only if all specified flows pass.\n\n## Cookie and Auth Support\n\nFor apps with authentication:\n\n1. First run the auth flow: navigate to login, fill credentials, submit\n2. Save the browser context (cookies + localStorage state)\n3. Use the saved context for all subsequent tests\n4. This means authenticated flows work without re-logging-in per test\n\nTest credentials should come from `.env.example` or the campaign file.\nNEVER read from `.env` (protected by the hook). Use test accounts only.\n\n## Fallback: No Playwright\n\nIf Playwright isn't installed and the user declines installation:\n\n1. Fall back to \u002Flive-preview (screenshot-only)\n2. Report: \"Browser QA unavailable (Playwright not installed). Visual verification only.\"\n3. Take screenshots of each page that would have been tested\n4. Mark interaction tests as SKIPPED, visual tests as PASS\u002FFAIL\n\n## What \u002Fqa Does NOT Do\n\n- Install Playwright without asking\n- Test in production (localhost only, unless user explicitly provides a URL)\n- Replace unit\u002Fintegration tests (this is user-flow testing, not code testing)\n- Run on every edit (too expensive — invoked explicitly or as phase end condition)\n- Access .env files (uses .env.example or test credentials from campaign)\n\n## Quality Gates\n\n- Every tested flow has all fields filled (steps, expected, actual, result)\n- Screenshots are taken for every flow (pass or fail)\n- Failed flows have enough detail to reproduce the issue\n- The app is actually running before tests execute (not testing a dead server)\n\n## Fringe Cases\n\n**Playwright not installed and user declines**: Fall back to \u002Flive-preview. Mark all interaction tests as SKIPPED in the report. Visual-only verification still runs.\n\n**Dev server won't start**: Report the startup error and stop. Do not attempt to test a server that isn't running. Suggest the user fix the startup error first.\n\n**No routes or pages discoverable**: Ask the user for 1-3 flows to test. Do not guess at routes.\n\n**No UI (API-only project)**: Report \"No UI detected — \u002Fqa requires a browser-accessible interface. Use typecheck and unit tests for API verification.\" Then stop gracefully.\n\n**If .planning\u002Fscreenshots\u002F does not exist**: Create it before saving screenshots. If `.planning\u002F` doesn't exist, save screenshots to a `qa-screenshots\u002F` directory in the project root and note the path in the report.\n\n## Codex App Artifact Manifest\n\nAfter saving screenshots, videos, rendered PDFs, or QA reports in Codex, register each durable artifact so the Codex app\u002Fbrowser workflow can find it later:\n\n```bash\nnode scripts\u002Fcodex-app-artifacts.js record --workflow qa --kind screenshot --path \".planning\u002Fscreenshots\u002Fqa-flow-1.png\" --status pass\n```\n\nThe manifest lives at `.planning\u002Fartifacts\u002Fcodex-app-evidence.jsonl`.\n\nBefore reporting QA as complete in Codex, verify the manifest points at real files:\n\n```bash\nnode scripts\u002Fcodex-app-artifacts.js verify --require-artifacts\n```\n\n## Contextual Gates\n\n**Disclosure:** May start a dev server; saves screenshots and report to `.planning\u002F`. States server ownership before starting.\n**Reversibility:** amber — creates report and screenshots; dev server stopped only if this skill started it. Delete generated files to undo.\n**Trust gates:** Any. Familiar (5+) to run against external\u002Fproduction URLs.\n\n## Exit Protocol\n\n```\n---HANDOFF---\n- QA Report: .planning\u002Fqa-report-{date}.md\n- Flows tested: {N}\n- Passed: {N} | Failed: {N} | Skipped: {N}\n- Screenshots: .planning\u002Fscreenshots\u002Fqa-*.png\n- Server: {started by agent (killed) | was already running (left running)}\n- Reversibility: amber — delete `.planning\u002Fqa-report-{date}.md` and `screenshots\u002Fqa-*.png` to undo\n---\n```\n","# \u002Fqa — Browser QA Verification\n\n## Dependency: Playwright\n\n\u002Fqa requires Playwright. It's an optional dependency.\n\n**If Playwright is installed:** full browser QA works.\n**If Playwright is NOT installed:** the skill offers to install it, or falls\nback to \u002Flive-preview (screenshot-only verification).\n\nDetection:\n```bash\nnpx playwright --version 2>\u002Fdev\u002Fnull\n```\n\nInstallation (if user agrees):\n```bash\nnpm install -D playwright\nnpx playwright install chromium\n```\n\nOnly installs Chromium (smallest download, ~150MB). Not Firefox or WebKit\nunless the user asks for cross-browser testing.\n\n**\u002Fdo setup integration:** During setup, if the project is a web app (has\nReact, Next.js, Vue, Svelte, or HTML files), offer to install Playwright:\n\"I see this is a web project. Want to enable browser QA testing? This installs\nPlaywright (~150MB) for interaction testing. (y\u002Fn)\"\n\nIf they say no, \u002Fqa falls back to \u002Flive-preview. No pressure.\n\n## When to Use\n\n- After building a feature (verify it actually works in a browser)\n- As a phase end condition: \"QA verification passes for [flow]\"\n- When \u002Fdo routes \"qa\", \"test the app\", \"does it work\", \"click through it\"\n- When \u002Fcreate-app campaigns reach the verification phase\n- After \u002Flive-preview shows something renders but you need to verify interactions\n\n## Protocol\n\n### Step 1: DISCOVER\n\nBefore testing, understand what to test:\n\n1. Read the project's routes\u002Fpages (from file tree, router config, or package.json scripts)\n2. Read the PRD or campaign file (if exists) for expected user flows\n3. Identify testable flows:\n   - Page loads and renders (baseline)\n   - Navigation between pages\n   - Form submissions\n   - Button click handlers\n   - Auth flows (login, logout, protected routes)\n   - CRUD operations (create, read, update, delete)\n   - Error states (invalid input, network errors)\n\nIf no PRD or campaign exists, ask: \"What should I test? Give me 1-3 user flows.\"\n\n### Step 2: START THE APP\n\nBefore testing, the app needs to be running:\n\n1. Check if a dev server is already running (try curl localhost:3000, 5173, 8080)\n2. If not running, check package.json for start\u002Fdev scripts\n3. Start it: `npm run dev` or equivalent, in background\n4. Wait for the server to be ready (poll the health endpoint or main URL)\n5. If the app won't start, report the error and stop. Don't test a broken app.\n\nTrack whether the agent started the server. If so, kill it on completion.\n\n### Step 3: TEST\n\nFor each flow identified in Step 1, write and run a Playwright script:\n\n```javascript\nconst { chromium } = require('playwright');\n\n(async () => {\n  const browser = await chromium.launch({ headless: true });\n  const page = await browser.newPage();\n\n  \u002F\u002F Navigate\n  await page.goto('http:\u002F\u002Flocalhost:3000');\n\n  \u002F\u002F Verify page loaded\n  const title = await page.title();\n\n  \u002F\u002F Test interactions\n  await page.click('button[data-testid=\"add-todo\"]');\n  await page.fill('input[name=\"title\"]', 'Test todo');\n  await page.click('button[type=\"submit\"]');\n\n  \u002F\u002F Verify result\n  const todoText = await page.textContent('.todo-item:last-child');\n\n  \u002F\u002F Screenshot for evidence\n  await page.screenshot({ path: '.planning\u002Fscreenshots\u002Fqa-flow-1.png' });\n\n  await browser.close();\n})();\n```\n\nFor each test:\n- Navigate to the relevant page\n- Perform the user action (click, fill, submit)\n- Verify the expected outcome (element appears, text changes, navigation occurs)\n- Take a screenshot as evidence\n- Log: PASS or FAIL with description\n\n### Step 4: REPORT\n\nWrite results to `.planning\u002Fqa-report-{date}.md`:\n\n```markdown\n# QA Report: {App Name or Feature}\n\n> Date: {ISO date}\n> Flows tested: {N}\n> Passed: {N}\n> Failed: {N}\n> Screenshots: .planning\u002Fscreenshots\u002Fqa-*.png\n\n## Results\n\n### Flow 1: {description}\n- Steps: {what was done}\n- Expected: {what should happen}\n- Actual: {what did happen}\n- Result: PASS \u002F FAIL\n- Screenshot: {path}\n- Notes: {any observations}\n\n### Flow 2: ...\n```\n\n### Step 5: CAMPAIGN INTEGRATION\n\nWhen running as a phase end condition:\n\nThe campaign file can specify QA conditions:\n```\n| 3 | qa_verify | \u002Fqa passes for: add todo, complete todo, delete todo |\n```\n\n\u002Fqa reads the condition, runs those specific flows, and reports pass\u002Ffail.\nThe phase is complete only if all specified flows pass.\n\n## Cookie and Auth Support\n\nFor apps with authentication:\n\n1. First run the auth flow: navigate to login, fill credentials, submit\n2. Save the browser context (cookies + localStorage state)\n3. Use the saved context for all subsequent tests\n4. This means authenticated flows work without re-logging-in per test\n\nTest credentials should come from `.env.example` or the campaign file.\nNEVER read from `.env` (protected by the hook). Use test accounts only.\n\n## Fallback: No Playwright\n\nIf Playwright isn't installed and the user declines installation:\n\n1. Fall back to \u002Flive-preview (screenshot-only)\n2. Report: \"Browser QA unavailable (Playwright not installed). Visual verification only.\"\n3. Take screenshots of each page that would have been tested\n4. Mark interaction tests as SKIPPED, visual tests as PASS\u002FFAIL\n\n## What \u002Fqa Does NOT Do\n\n- Install Playwright without asking\n- Test in production (localhost only, unless user explicitly provides a URL)\n- Replace unit\u002Fintegration tests (this is user-flow testing, not code testing)\n- Run on every edit (too expensive — invoked explicitly or as phase end condition)\n- Access .env files (uses .env.example or test credentials from campaign)\n\n## Quality Gates\n\n- Every tested flow has all fields filled (steps, expected, actual, result)\n- Screenshots are taken for every flow (pass or fail)\n- Failed flows have enough detail to reproduce the issue\n- The app is actually running before tests execute (not testing a dead server)\n\n## Fringe Cases\n\n**Playwright not installed and user declines**: Fall back to \u002Flive-preview. Mark all interaction tests as SKIPPED in the report. Visual-only verification still runs.\n\n**Dev server won't start**: Report the startup error and stop. Do not attempt to test a server that isn't running. Suggest the user fix the startup error first.\n\n**No routes or pages discoverable**: Ask the user for 1-3 flows to test. Do not guess at routes.\n\n**No UI (API-only project)**: Report \"No UI detected — \u002Fqa requires a browser-accessible interface. Use typecheck and unit tests for API verification.\" Then stop gracefully.\n\n**If .planning\u002Fscreenshots\u002F does not exist**: Create it before saving screenshots. If `.planning\u002F` doesn't exist, save screenshots to a `qa-screenshots\u002F` directory in the project root and note the path in the report.\n\n## Codex App Artifact Manifest\n\nAfter saving screenshots, videos, rendered PDFs, or QA reports in Codex, register each durable artifact so the Codex app\u002Fbrowser workflow can find it later:\n\n```bash\nnode scripts\u002Fcodex-app-artifacts.js record --workflow qa --kind screenshot --path \".planning\u002Fscreenshots\u002Fqa-flow-1.png\" --status pass\n```\n\nThe manifest lives at `.planning\u002Fartifacts\u002Fcodex-app-evidence.jsonl`.\n\nBefore reporting QA as complete in Codex, verify the manifest points at real files:\n\n```bash\nnode scripts\u002Fcodex-app-artifacts.js verify --require-artifacts\n```\n\n## Contextual Gates\n\n**Disclosure:** May start a dev server; saves screenshots and report to `.planning\u002F`. States server ownership before starting.\n**Reversibility:** amber — creates report and screenshots; dev server stopped only if this skill started it. Delete generated files to undo.\n**Trust gates:** Any. Familiar (5+) to run against external\u002Fproduction URLs.\n\n## Exit Protocol\n\n```\n---HANDOFF---\n- QA Report: .planning\u002Fqa-report-{date}.md\n- Flows tested: {N}\n- Passed: {N} | Failed: {N} | Skipped: {N}\n- Screenshots: .planning\u002Fscreenshots\u002Fqa-*.png\n- Server: {started by agent (killed) | was already running (left running)}\n- Reversibility: amber — delete `.planning\u002Fqa-report-{date}.md` and `screenshots\u002Fqa-*.png` to undo\n---\n```\n",{"name":5,"effort":51,"license":15,"description":7,"auto-trigger":47,"user-invocable":52,"trigger_keywords":53},"high",true,[5,54,55,56,41],"test the app","click through","does it work","main","e1a3d45697a0f323aaedcbea0ab6a0387b5fe722","skills\u002Fqa",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":67,"prompt":77,"zipAvailable":52},[68,71,74],{"tool":69,"command":70},"npx","npx skills add SethGammon\u002FCitadel --skill qa",{"tool":72,"command":73},"bunx","bunx skills add SethGammon\u002FCitadel --skill qa",{"tool":75,"command":76},"pnpm","pnpm dlx skills add SethGammon\u002FCitadel --skill qa","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FSethGammon\u002FCitadel\u002Fblob\u002Fmain\u002Fskills\u002Fqa\u002FSKILL.md",[79,85],{"path":80,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":83,"sourceHtmlUrl":84},"__benchmarks__\u002Fno-playwright.md","REFERENCE","参考文档",797,"https:\u002F\u002Fgithub.com\u002FSethGammon\u002FCitadel\u002Fblob\u002Fmain\u002Fskills\u002Fqa\u002F__benchmarks__\u002Fno-playwright.md",{"path":86,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":87,"sourceHtmlUrl":88},"__benchmarks__\u002Fno-server.md",826,"https:\u002F\u002Fgithub.com\u002FSethGammon\u002FCitadel\u002Fblob\u002Fmain\u002Fskills\u002Fqa\u002F__benchmarks__\u002Fno-server.md",[90,112,139,163,187,206],{"skillNo":91,"name":92,"nameZh":6,"description":93,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":94,"categories":95,"keywords":96,"publishedAt":46},"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",[],[92,97,98,99,43,100,101,102,103,104,38,105,35,32,106,107,108,109,110,111],"repos","snowflake","multi-repo","context","campaign","coordinate","but","across","shared","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":121,"publishedAt":46},"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":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000021","资料检索与研究",[114,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,35,32,137,138],"vector","embeddings","librarian","markdown","knowledge","karpathy","knowledge management","karpathy wiki","up","files","maintain","self","knowledge base","project","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":46},"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,131,157,158,159,160,161,32,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":170,"publishedAt":46},"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":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[165,171,172,173,174,175,176,177,178,179,180,181,182,133,183,32,184,185,186,29],"citadel","telemetry","harness","pipeline","Bash","tool","read","write","edit","session","hooks","reports","live","hook","errors","calls",{"skillNo":188,"name":189,"nameZh":6,"description":190,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":191,"categories":192,"keywords":193,"publishedAt":46},"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",[],[189,194,171,173,195,196,197,198,199,130,182,200,201,202,203,204,35,32,205,29],"uninstall","adoption","plan","archive","remove","only","Legacy","surfaces","clean","imported","active","material",{"skillNo":207,"name":208,"nameZh":6,"description":209,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":210,"categories":211,"keywords":220,"publishedAt":46},"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",[212,215],{"categoryNo":213,"categoryName":214,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000007","代码审查",{"categoryNo":216,"categoryName":217,"taxonomyType":218,"taxonomyTypeDesc":219},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[208,221,222,223,224,225,226,227,228,229,230,231,232,233,157,32,234,235,236,29],"code review","review","review pr","pr","code","github issues","issues","open","use","unrelated","issue","general","references","line","investigator","reviews"]