[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6GXRMEJ2VHD43R9FNPD4910":3,"skill-same:01M6GXRMEJ2VHD43R9FNPD4910":93},{"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":28,"publishedAt":48,"linkOnly":49,"markdownContent":50,"markdownBody":51,"frontMatter":52,"refName":61,"commitSha":62,"skillDirectory":63,"forksCount":64,"repositoryHtmlUrl":65,"repositoryHomepageUrl":66,"ownerHtmlUrl":67,"ownerBlogUrl":66,"ownerDescription":68,"updatedAt":69,"install":70,"resources":82},"01M6GXRMEJ2VHD43R9FNPD4910","triage",null,"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.","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\u002Ftriage\u002FSKILL.md",[18,23],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000007","代码审查","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":26,"taxonomyTypeDesc":27},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[5,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47],"unrelated","true","reviews","investigator","line","false","do","references","general","issue","code review","use","open","issues","github issues","code","pr","review pr","review","2026-11-10 10:12:30",false,"---\nname: triage\nlicense: MIT\ndescription: >-\n  GitHub issue and PR investigator. Pulls open issues\u002FPRs, classifies them, searches\n  the codebase for root cause or reviews contributed code, proposes fixes with file:line\n  references, and optionally implements fixes. Use for investigating GitHub issues and\n  reviewing PRs; do NOT use for general code review unrelated to GitHub issues.\nuser-invocable: true\nauto-trigger: false\ntrigger_keywords:\n  - triage\n  - open issues\n  - unlabeled issues\n  - review pr\n  - review prs\n  - investigate issue\neffort: high\nlast-updated: 2026-03-24\n---\n\n# Triage — GitHub Issue & PR Investigator\n\n## When to Use\n\n**Don't use when:** fixing a specific already-diagnosed issue (use \u002Fmarshal); monitoring a single PR's CI (use \u002Fpr-watch); reviewing code quality outside of GitHub issues (use \u002Freview).\n\n- `\u002Ftriage` — triage all open, unlabeled issues\n- `\u002Ftriage 10` — investigate issue #10 specifically\n- `\u002Ftriage pr 13` — review PR #13\n- `\u002Ftriage prs` — review all open PRs\n- `\u002Ftriage --batch` — pull all open issues, classify, investigate, report\n- `\u002Ftriage --stale` — find issues older than 14 days with no activity\n- After the `issue-monitor` SessionStart hook reports new issues\n\n## Codex PR review integration\n\nFor Codex-visible PRs, decide whether to use native `@codex review`, local Citadel triage, or both:\n\n```bash\nnode scripts\u002Fcodex-pr-review.js plan --repo \u003Cowner\u002Frepo> --pr \u003Cnumber> --risk \u003Clow|medium|high|local-only> --write\n```\n\nUse native `@codex review` when the diff is GitHub-visible and the main need is a focused P0\u002FP1 review. Use local Citadel triage when the answer depends on unpushed files, local generated artifacts, or hands-on edits. Use both for large or risky PRs.\n\nAfter Codex posts a GitHub review, fetch and ingest the review comments before deciding merge readiness:\n\n```bash\nnode scripts\u002Fcodex-review-fetch.js --repo \u003Cowner\u002Frepo> --pr \u003Cnumber> --write\n```\n\nUse `--file \u003Creview-comments.json>` with the same script when working from exported\u002Foffline review data.\n\nTreat ingested P0\u002FP1 findings as blockers until local verification confirms they are fixed or not applicable.\n\n## Inputs\n\n| Input | Source | Required |\n|-------|--------|----------|\n| Issue\u002FPR number | Argument (e.g., `\u002Ftriage 10`, `\u002Ftriage pr 13`) | No — omit to triage all open |\n| Mode | `pr` prefix for PRs | No — defaults to issues |\n| Repo | Auto-detected from git remote | Yes (auto) |\n| gh CLI | `\"\u002Fc\u002FProgram Files\u002FGitHub CLI\u002Fgh.exe\"` on Windows, `gh` elsewhere | Yes (auto) |\n\n## Execution Protocol\n\n### Phase 0 — Environment Setup\n\n1. Detect repo from `git remote get-url origin`, extract `owner\u002Frepo`\n2. Verify `gh` auth status\n3. Set `$GH`: Windows → `\"\u002Fc\u002FProgram Files\u002FGitHub CLI\u002Fgh.exe\"`, other → `gh`\n\n### Phase 1 — Issue Intake\n\n**Single issue** (`\u002Ftriage 10`):\n```\n$GH issue view \u003Cnumber> --repo \u003Cowner\u002Frepo> --json number,title,body,labels,state,comments,createdAt,updatedAt,author,assignees\n```\n\n**Batch** (`\u002Ftriage` or `--batch`):\n```\n$GH issue list --repo \u003Cowner\u002Frepo> --state open --json number,title,labels,createdAt,updatedAt --limit 50\n```\nFilter to untriaged: issues with no labels, or missing priority\u002Ftype label.\n\n**Stale** (`--stale`):\n```\n$GH issue list --repo \u003Cowner\u002Frepo> --state open --json number,title,labels,createdAt,updatedAt --limit 100\n```\nFilter to issues with no activity in 14+ days.\n\n**Single PR** (`\u002Ftriage pr 13`):\n```\n$GH pr view \u003Cnumber> --repo \u003Cowner\u002Frepo> --json number,title,body,author,state,files,commits,comments,createdAt,headRefName,baseRefName,mergeable,reviewDecision\n$GH pr diff \u003Cnumber> --repo \u003Cowner\u002Frepo>\n```\n\n**All PRs** (`\u002Ftriage prs`):\n```\n$GH pr list --repo \u003Cowner\u002Frepo> --state open --json number,title,author,createdAt,labels --limit 50\n```\n\n### Phase 1b — PR Review Protocol\n\n#### PR Classification\n\n| Type | Signal |\n|------|--------|\n| `bugfix` | Fixes a reported issue, closes #N |\n| `feature` | Adds new functionality |\n| `refactor` | Restructures without changing behavior |\n| `docs` | Documentation only |\n| `infra` | CI\u002FCD, build, packaging, installer |\n\n#### PR Review Checklist\n\n1. Read the full diff — not just the PR description.\n2. Check for regressions against closed issues and recent commits.\n3. Check for conflicts with in-flight work (same files as open PRs).\n4. Verify the approach: correct solution, not overly complex.\n5. Check cross-platform: Unix assumptions, Windows path handling.\n6. Check conventions against existing project patterns.\n7. Check for scope creep beyond the PR title.\n\n#### PR Resolution\n\nWrite a per-PR resolution block (full template: docs\u002FTRIAGE.md#pr-resolution-template) with:\n- Author, type, files changed count, mergeable status\n- What it does (1-3 sentences)\n- Review findings, each with a file:line reference\n- Issues found, split into **Critical** (blocks merge) and **Non-critical** (nice to fix, not blocking)\n- Recommendation checkbox: Approve \u002F Request changes (with the specific changes needed) \u002F Close (with reason)\n\n#### PR Actions\n\n**IMPORTANT:** All PR actions are external. Show the user the exact comment text and get approval before posting.\n\n### Phase 2 — Classification\n\n**Type** (exactly one):\n| Type | Signal |\n|------|--------|\n| `bug` | Error messages, \"doesn't work\", stack traces, regression |\n| `feature` | \"Would be nice\", \"add support for\" |\n| `question` | \"How do I\", \"is it possible\" |\n| `docs` | README\u002Fdocumentation issues |\n| `infra` | CI\u002FCD, build, packaging, dependencies |\n\n**Severity** (bugs only):\n| Severity | Criteria |\n|----------|----------|\n| `critical` | Blocks installation or core functionality for all users |\n| `high` | Breaks a major feature or affects many users |\n| `medium` | Breaks a minor feature or has a workaround |\n| `low` | Cosmetic, edge case, or easy workaround |\n\n**Affected Component:**\n- Citadel hooks \u002F skills \u002F agents\n- `.claude\u002Fharness.json` — shared Citadel project configuration for all runtimes, including Codex\n- `.planning\u002F` — planning\u002Fcampaign system\n- `docs\u002F` — documentation\n- Root files — project setup\n\n### Phase 3 — Investigation\n\n#### 3a. Parse the Report\n\nExtract: error messages, environment, reproduction steps, expected vs actual behavior, workarounds.\n\n#### 3b. Search the Codebase\n\n1. Grep for exact error messages \u002F error codes\n2. Read files named in the issue\n3. Find functions named in stack traces\n4. Search for the bug class or anti-pattern\n5. `git log --oneline -20 -- \u003Caffected-files>` for recent changes\n6. Cross-reference similar issues\n\n#### 3c. Root Cause Analysis\n\nFor bugs:\n1. What breaks — the specific code path\n2. Why it breaks — root cause, not symptom\n3. When introduced — git blame \u002F log\n4. Who is affected — scope\n5. The fix — file:line references\n\nFor features\u002Fquestions:\n1. Already possible? Search existing functionality.\n2. Where would it go? Which component\u002Flayer.\n3. Effort: trivial \u002F small \u002F medium \u002F large\n4. Blockers: dependencies, architecture constraints\n\n#### 3d. Reproduce (when possible)\n\nSet up conditions, run the failing command, confirm error matches, verify proposed fix resolves it.\n\n### Phase 4 — Resolution Plan\n\nWrite a per-issue resolution plan (full template: docs\u002FTRIAGE.md#issue-resolution-plan-template) with:\n- Type, severity, component, reproducible (yes \u002F no \u002F not-attempted)\n- Root cause: 1-3 sentences explaining WHY\n- Affected code: `\u003Cfile>:\u003Cline>` entries with what is wrong at each\n- Proposed fix: specific code changes with file:line references\n- Impact: who is affected, whether a workaround exists, whether it is a breaking change\n- Recommended action checkbox: Fix in next release \u002F Needs more info from reporter \u002F Won't fix (with reason) \u002F Duplicate of #N\n\n### Phase 5 — Action\n\n**Auto-fix** when: root cause clear and verified, fix contained to 1-3 files, no breaking changes, no architectural decisions needed.\n\nSteps:\n1. Branch: `fix\u002Fissue-\u003Cnumber>-\u003Cslug>`\n2. Implement fix\n3. Run typecheck\u002Fbuild\n4. Commit: `fix: \u003Cdescription> (closes #\u003Cnumber>)`\n5. Push and open PR linking the issue\n6. Comment on the issue with the PR link\n\n**Comment with findings** when fix needs discussion or user input: post root cause analysis, proposed fix, and questions.\n\n**Label only** for questions\u002Fdocs\u002Ffeatures: add type + priority labels, optionally point to existing docs.\n\n### Phase 6 — Report\n\nOutput a Triage Summary table with columns `# | Title | Type | Severity | Action | Status`, one row per triaged item (example: docs\u002FTRIAGE.md#triage-summary-example).\n\n## Label Taxonomy\n\nApply via `$GH issue edit \u003Cnumber> --add-label \"\u003Clabel>\"`:\n\n**Type:** `bug`, `feature`, `question`, `docs`, `infra`\n**Severity (bugs):** `critical`, `high`, `medium`, `low`\n**Status:** `needs-info`, `confirmed`, `wont-fix`, `duplicate`\n\n## Auto-fix Handoff\n\n```\n---PR READY---\nPR #\u003CN>: \u003Curl>\n\nTo watch this PR automatically:\n  Local  →  \u002Fpr-watch \u003CN>\n  Cloud  →  open in Claude Code web or mobile, toggle \"Auto fix\" ON\n---\n```\n\n## Contextual Gates\n\n**Disclosure:** \"Triaging GitHub issues and PRs. Read-only — no changes made without showing you first.\"\n**Reversibility:** green — investigation is read-only; any GitHub actions (labels, comments, PRs) shown to user for approval before posting\n**Trust gates:**\n- Any: view triage report; all external actions require explicit approval\n\n## Quality Gates\n\n- [ ] Every issue has a classification (type + severity for bugs)\n- [ ] Every bug has root cause with file:line references\n- [ ] Every auto-fix passes typecheck and build\n- [ ] Every PR links to the issue it fixes\n- [ ] Every issue has at least a label or comment\n- [ ] No issue comment is generic or substanceless\n\n## Fringe Cases\n\n**gh not available or not authenticated:** Stop and instruct: \"Run `gh auth login` before using \u002Ftriage.\"\n\n**No open issues or PRs:** Report \"No open issues found.\" and exit cleanly.\n\n**Empty\u002Funparseable issue body:** Classify as `needs-info`, comment requesting reproduction steps.\n\n**`.planning\u002F` missing:** \u002Ftriage reads from GitHub, not local state. Skip .planning\u002F writes if missing.\n\n## Anti-Patterns — Do NOT\n\n- Post generic comments without substance\n- Propose fixes without reading the actual code\n- Label without investigating\n- Auto-fix when root cause is unclear\n- Close issues without explanation\n- Guess at fixes — verify by reading code and running checks\n\n## gh CLI Notes\n\n- Windows: `\"\u002Fc\u002FProgram Files\u002FGitHub CLI\u002Fgh.exe\"` — always pass `--repo \u003Cowner\u002Frepo>`\n- Comments: `$GH issue comment \u003Cnumber> --repo \u003Cowner\u002Frepo> --body \"...\"`\n- Labels: `$GH issue edit \u003Cnumber> --repo \u003Cowner\u002Frepo> --add-label \"bug,high\"`\n\n## Exit Protocol\n\n```\n---HANDOFF---\n- Triaged N issues: X bugs, Y features, Z questions\n- Auto-fixed: \u003Clist of issue numbers with PR links>\n- Needs attention: \u003Clist of issues requiring human decision>\n- New labels applied: \u003Ccount>\n- Reversibility: green — investigation read-only; auto-fix PRs can be closed\u002Freverted if unwanted\n---\n```\n","# Triage — GitHub Issue & PR Investigator\n\n## When to Use\n\n**Don't use when:** fixing a specific already-diagnosed issue (use \u002Fmarshal); monitoring a single PR's CI (use \u002Fpr-watch); reviewing code quality outside of GitHub issues (use \u002Freview).\n\n- `\u002Ftriage` — triage all open, unlabeled issues\n- `\u002Ftriage 10` — investigate issue #10 specifically\n- `\u002Ftriage pr 13` — review PR #13\n- `\u002Ftriage prs` — review all open PRs\n- `\u002Ftriage --batch` — pull all open issues, classify, investigate, report\n- `\u002Ftriage --stale` — find issues older than 14 days with no activity\n- After the `issue-monitor` SessionStart hook reports new issues\n\n## Codex PR review integration\n\nFor Codex-visible PRs, decide whether to use native `@codex review`, local Citadel triage, or both:\n\n```bash\nnode scripts\u002Fcodex-pr-review.js plan --repo \u003Cowner\u002Frepo> --pr \u003Cnumber> --risk \u003Clow|medium|high|local-only> --write\n```\n\nUse native `@codex review` when the diff is GitHub-visible and the main need is a focused P0\u002FP1 review. Use local Citadel triage when the answer depends on unpushed files, local generated artifacts, or hands-on edits. Use both for large or risky PRs.\n\nAfter Codex posts a GitHub review, fetch and ingest the review comments before deciding merge readiness:\n\n```bash\nnode scripts\u002Fcodex-review-fetch.js --repo \u003Cowner\u002Frepo> --pr \u003Cnumber> --write\n```\n\nUse `--file \u003Creview-comments.json>` with the same script when working from exported\u002Foffline review data.\n\nTreat ingested P0\u002FP1 findings as blockers until local verification confirms they are fixed or not applicable.\n\n## Inputs\n\n| Input | Source | Required |\n|-------|--------|----------|\n| Issue\u002FPR number | Argument (e.g., `\u002Ftriage 10`, `\u002Ftriage pr 13`) | No — omit to triage all open |\n| Mode | `pr` prefix for PRs | No — defaults to issues |\n| Repo | Auto-detected from git remote | Yes (auto) |\n| gh CLI | `\"\u002Fc\u002FProgram Files\u002FGitHub CLI\u002Fgh.exe\"` on Windows, `gh` elsewhere | Yes (auto) |\n\n## Execution Protocol\n\n### Phase 0 — Environment Setup\n\n1. Detect repo from `git remote get-url origin`, extract `owner\u002Frepo`\n2. Verify `gh` auth status\n3. Set `$GH`: Windows → `\"\u002Fc\u002FProgram Files\u002FGitHub CLI\u002Fgh.exe\"`, other → `gh`\n\n### Phase 1 — Issue Intake\n\n**Single issue** (`\u002Ftriage 10`):\n```\n$GH issue view \u003Cnumber> --repo \u003Cowner\u002Frepo> --json number,title,body,labels,state,comments,createdAt,updatedAt,author,assignees\n```\n\n**Batch** (`\u002Ftriage` or `--batch`):\n```\n$GH issue list --repo \u003Cowner\u002Frepo> --state open --json number,title,labels,createdAt,updatedAt --limit 50\n```\nFilter to untriaged: issues with no labels, or missing priority\u002Ftype label.\n\n**Stale** (`--stale`):\n```\n$GH issue list --repo \u003Cowner\u002Frepo> --state open --json number,title,labels,createdAt,updatedAt --limit 100\n```\nFilter to issues with no activity in 14+ days.\n\n**Single PR** (`\u002Ftriage pr 13`):\n```\n$GH pr view \u003Cnumber> --repo \u003Cowner\u002Frepo> --json number,title,body,author,state,files,commits,comments,createdAt,headRefName,baseRefName,mergeable,reviewDecision\n$GH pr diff \u003Cnumber> --repo \u003Cowner\u002Frepo>\n```\n\n**All PRs** (`\u002Ftriage prs`):\n```\n$GH pr list --repo \u003Cowner\u002Frepo> --state open --json number,title,author,createdAt,labels --limit 50\n```\n\n### Phase 1b — PR Review Protocol\n\n#### PR Classification\n\n| Type | Signal |\n|------|--------|\n| `bugfix` | Fixes a reported issue, closes #N |\n| `feature` | Adds new functionality |\n| `refactor` | Restructures without changing behavior |\n| `docs` | Documentation only |\n| `infra` | CI\u002FCD, build, packaging, installer |\n\n#### PR Review Checklist\n\n1. Read the full diff — not just the PR description.\n2. Check for regressions against closed issues and recent commits.\n3. Check for conflicts with in-flight work (same files as open PRs).\n4. Verify the approach: correct solution, not overly complex.\n5. Check cross-platform: Unix assumptions, Windows path handling.\n6. Check conventions against existing project patterns.\n7. Check for scope creep beyond the PR title.\n\n#### PR Resolution\n\nWrite a per-PR resolution block (full template: docs\u002FTRIAGE.md#pr-resolution-template) with:\n- Author, type, files changed count, mergeable status\n- What it does (1-3 sentences)\n- Review findings, each with a file:line reference\n- Issues found, split into **Critical** (blocks merge) and **Non-critical** (nice to fix, not blocking)\n- Recommendation checkbox: Approve \u002F Request changes (with the specific changes needed) \u002F Close (with reason)\n\n#### PR Actions\n\n**IMPORTANT:** All PR actions are external. Show the user the exact comment text and get approval before posting.\n\n### Phase 2 — Classification\n\n**Type** (exactly one):\n| Type | Signal |\n|------|--------|\n| `bug` | Error messages, \"doesn't work\", stack traces, regression |\n| `feature` | \"Would be nice\", \"add support for\" |\n| `question` | \"How do I\", \"is it possible\" |\n| `docs` | README\u002Fdocumentation issues |\n| `infra` | CI\u002FCD, build, packaging, dependencies |\n\n**Severity** (bugs only):\n| Severity | Criteria |\n|----------|----------|\n| `critical` | Blocks installation or core functionality for all users |\n| `high` | Breaks a major feature or affects many users |\n| `medium` | Breaks a minor feature or has a workaround |\n| `low` | Cosmetic, edge case, or easy workaround |\n\n**Affected Component:**\n- Citadel hooks \u002F skills \u002F agents\n- `.claude\u002Fharness.json` — shared Citadel project configuration for all runtimes, including Codex\n- `.planning\u002F` — planning\u002Fcampaign system\n- `docs\u002F` — documentation\n- Root files — project setup\n\n### Phase 3 — Investigation\n\n#### 3a. Parse the Report\n\nExtract: error messages, environment, reproduction steps, expected vs actual behavior, workarounds.\n\n#### 3b. Search the Codebase\n\n1. Grep for exact error messages \u002F error codes\n2. Read files named in the issue\n3. Find functions named in stack traces\n4. Search for the bug class or anti-pattern\n5. `git log --oneline -20 -- \u003Caffected-files>` for recent changes\n6. Cross-reference similar issues\n\n#### 3c. Root Cause Analysis\n\nFor bugs:\n1. What breaks — the specific code path\n2. Why it breaks — root cause, not symptom\n3. When introduced — git blame \u002F log\n4. Who is affected — scope\n5. The fix — file:line references\n\nFor features\u002Fquestions:\n1. Already possible? Search existing functionality.\n2. Where would it go? Which component\u002Flayer.\n3. Effort: trivial \u002F small \u002F medium \u002F large\n4. Blockers: dependencies, architecture constraints\n\n#### 3d. Reproduce (when possible)\n\nSet up conditions, run the failing command, confirm error matches, verify proposed fix resolves it.\n\n### Phase 4 — Resolution Plan\n\nWrite a per-issue resolution plan (full template: docs\u002FTRIAGE.md#issue-resolution-plan-template) with:\n- Type, severity, component, reproducible (yes \u002F no \u002F not-attempted)\n- Root cause: 1-3 sentences explaining WHY\n- Affected code: `\u003Cfile>:\u003Cline>` entries with what is wrong at each\n- Proposed fix: specific code changes with file:line references\n- Impact: who is affected, whether a workaround exists, whether it is a breaking change\n- Recommended action checkbox: Fix in next release \u002F Needs more info from reporter \u002F Won't fix (with reason) \u002F Duplicate of #N\n\n### Phase 5 — Action\n\n**Auto-fix** when: root cause clear and verified, fix contained to 1-3 files, no breaking changes, no architectural decisions needed.\n\nSteps:\n1. Branch: `fix\u002Fissue-\u003Cnumber>-\u003Cslug>`\n2. Implement fix\n3. Run typecheck\u002Fbuild\n4. Commit: `fix: \u003Cdescription> (closes #\u003Cnumber>)`\n5. Push and open PR linking the issue\n6. Comment on the issue with the PR link\n\n**Comment with findings** when fix needs discussion or user input: post root cause analysis, proposed fix, and questions.\n\n**Label only** for questions\u002Fdocs\u002Ffeatures: add type + priority labels, optionally point to existing docs.\n\n### Phase 6 — Report\n\nOutput a Triage Summary table with columns `# | Title | Type | Severity | Action | Status`, one row per triaged item (example: docs\u002FTRIAGE.md#triage-summary-example).\n\n## Label Taxonomy\n\nApply via `$GH issue edit \u003Cnumber> --add-label \"\u003Clabel>\"`:\n\n**Type:** `bug`, `feature`, `question`, `docs`, `infra`\n**Severity (bugs):** `critical`, `high`, `medium`, `low`\n**Status:** `needs-info`, `confirmed`, `wont-fix`, `duplicate`\n\n## Auto-fix Handoff\n\n```\n---PR READY---\nPR #\u003CN>: \u003Curl>\n\nTo watch this PR automatically:\n  Local  →  \u002Fpr-watch \u003CN>\n  Cloud  →  open in Claude Code web or mobile, toggle \"Auto fix\" ON\n---\n```\n\n## Contextual Gates\n\n**Disclosure:** \"Triaging GitHub issues and PRs. Read-only — no changes made without showing you first.\"\n**Reversibility:** green — investigation is read-only; any GitHub actions (labels, comments, PRs) shown to user for approval before posting\n**Trust gates:**\n- Any: view triage report; all external actions require explicit approval\n\n## Quality Gates\n\n- [ ] Every issue has a classification (type + severity for bugs)\n- [ ] Every bug has root cause with file:line references\n- [ ] Every auto-fix passes typecheck and build\n- [ ] Every PR links to the issue it fixes\n- [ ] Every issue has at least a label or comment\n- [ ] No issue comment is generic or substanceless\n\n## Fringe Cases\n\n**gh not available or not authenticated:** Stop and instruct: \"Run `gh auth login` before using \u002Ftriage.\"\n\n**No open issues or PRs:** Report \"No open issues found.\" and exit cleanly.\n\n**Empty\u002Funparseable issue body:** Classify as `needs-info`, comment requesting reproduction steps.\n\n**`.planning\u002F` missing:** \u002Ftriage reads from GitHub, not local state. Skip .planning\u002F writes if missing.\n\n## Anti-Patterns — Do NOT\n\n- Post generic comments without substance\n- Propose fixes without reading the actual code\n- Label without investigating\n- Auto-fix when root cause is unclear\n- Close issues without explanation\n- Guess at fixes — verify by reading code and running checks\n\n## gh CLI Notes\n\n- Windows: `\"\u002Fc\u002FProgram Files\u002FGitHub CLI\u002Fgh.exe\"` — always pass `--repo \u003Cowner\u002Frepo>`\n- Comments: `$GH issue comment \u003Cnumber> --repo \u003Cowner\u002Frepo> --body \"...\"`\n- Labels: `$GH issue edit \u003Cnumber> --repo \u003Cowner\u002Frepo> --add-label \"bug,high\"`\n\n## Exit Protocol\n\n```\n---HANDOFF---\n- Triaged N issues: X bugs, Y features, Z questions\n- Auto-fixed: \u003Clist of issue numbers with PR links>\n- Needs attention: \u003Clist of issues requiring human decision>\n- New labels applied: \u003Ccount>\n- Reversibility: green — investigation read-only; auto-fix PRs can be closed\u002Freverted if unwanted\n---\n```\n",{"name":5,"effort":53,"license":15,"description":7,"auto-trigger":49,"last-updated":54,"user-invocable":55,"trigger_keywords":56},"high",1774310400000,true,[5,57,58,46,59,60],"open issues","unlabeled issues","review prs","investigate issue","main","e1a3d45697a0f323aaedcbea0ab6a0387b5fe722","skills\u002Ftriage",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":71,"prompt":81,"zipAvailable":55},[72,75,78],{"tool":73,"command":74},"npx","npx skills add SethGammon\u002FCitadel --skill triage",{"tool":76,"command":77},"bunx","bunx skills add SethGammon\u002FCitadel --skill triage",{"tool":79,"command":80},"pnpm","pnpm dlx skills add SethGammon\u002FCitadel --skill triage","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FSethGammon\u002FCitadel\u002Fblob\u002Fmain\u002Fskills\u002Ftriage\u002FSKILL.md",[83,89],{"path":84,"resourceType":85,"resourceTypeDesc":86,"sizeBytes":87,"sourceHtmlUrl":88},"__benchmarks__\u002Fno-gh-cli.md","REFERENCE","参考文档",805,"https:\u002F\u002Fgithub.com\u002FSethGammon\u002FCitadel\u002Fblob\u002Fmain\u002Fskills\u002Ftriage\u002F__benchmarks__\u002Fno-gh-cli.md",{"path":90,"resourceType":85,"resourceTypeDesc":86,"sizeBytes":91,"sourceHtmlUrl":92},"__benchmarks__\u002Fspecific-issue.md",867,"https:\u002F\u002Fgithub.com\u002FSethGammon\u002FCitadel\u002Fblob\u002Fmain\u002Fskills\u002Ftriage\u002F__benchmarks__\u002Fspecific-issue.md",[94,119,146,169,195,214],{"skillNo":95,"name":96,"nameZh":6,"description":97,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":98,"categories":99,"keywords":100,"publishedAt":48},"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",[],[96,101,102,103,104,105,106,107,108,109,110,111,112,34,113,114,115,116,117,118],"repos","snowflake","multi-repo","work","context","campaign","coordinate","but","across","campaigns","shared","as","scope","add","unit","coordinator","fleet","claims",{"skillNo":120,"name":121,"nameZh":6,"description":122,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":123,"categories":124,"keywords":128,"publishedAt":48},"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",[125],{"categoryNo":126,"categoryName":127,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000021","资料检索与研究",[121,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,112,34,144,145],"vector","embeddings","librarian","markdown","knowledge","karpathy","knowledge management","karpathy wiki","up","files","maintain","self","knowledge base","project","db","sources","native",{"skillNo":147,"name":148,"nameZh":6,"description":149,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":150,"categories":151,"keywords":152,"publishedAt":48},"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",[],[148,153,154,155,156,157,158,159,160,161,162,163,138,35,164,165,166,167,34,168],"directory","commit","tasks","git","batch","actions","start","sentinel","diff","auto","stop","scan","human","judgment","reactions","processing",{"skillNo":170,"name":171,"nameZh":6,"description":172,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":173,"categories":174,"keywords":178,"publishedAt":48},"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",[175],{"categoryNo":176,"categoryName":177,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量",[171,179,180,181,182,183,184,185,186,187,188,189,190,140,191,34,192,193,194,30],"citadel","telemetry","harness","pipeline","Bash","tool","read","write","edit","session","hooks","reports","live","hook","errors","calls",{"skillNo":196,"name":197,"nameZh":6,"description":198,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":199,"categories":200,"keywords":201,"publishedAt":48},"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",[],[197,202,179,181,203,204,205,206,207,137,190,208,209,210,211,212,112,34,213,30],"uninstall","adoption","plan","archive","remove","only","Legacy","surfaces","clean","imported","active","material",{"skillNo":215,"name":216,"nameZh":6,"description":217,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":218,"categories":219,"keywords":221,"publishedAt":48},"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",[220],{"categoryNo":176,"categoryName":177,"taxonomyType":21,"taxonomyTypeDesc":22},[222,223,224,225,226,227,171,186,228,229,142,230,231,114,232,30,233],"test","test gen","write tests","generate","framework","edge","generate tests","patterns","tests","paths","error","path"]