From citadel
Investigates GitHub issues and PRs: pulls, classifies, searches codebase for root cause, reviews contributed code, proposes fixes with file:line references, and optionally implements fixes.
How this skill is triggered — by the user, by Claude, or both
Slash command
/citadel:triageThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
**Don't use when:** fixing a specific already-diagnosed issue (use /marshal); monitoring a single PR's CI (use /pr-watch); reviewing code quality outside of GitHub issues (use /review).
Don't use when: fixing a specific already-diagnosed issue (use /marshal); monitoring a single PR's CI (use /pr-watch); reviewing code quality outside of GitHub issues (use /review).
/triage — triage all open, unlabeled issues/triage 10 — investigate issue #10 specifically/triage pr 13 — review PR #13/triage prs — review all open PRs/triage --batch — pull all open issues, classify, investigate, report/triage --stale — find issues older than 14 days with no activityissue-monitor SessionStart hook reports new issuesFor Codex-visible PRs, decide whether to use native @codex review, local Citadel triage, or both:
node scripts/codex-pr-review.js plan --repo <owner/repo> --pr <number> --risk <low|medium|high|local-only> --write
Use native @codex review when the diff is GitHub-visible and the main need is a focused P0/P1 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.
After Codex posts a GitHub review, fetch and ingest the review comments before deciding merge readiness:
node scripts/codex-review-fetch.js --repo <owner/repo> --pr <number> --write
Use --file <review-comments.json> with the same script when working from exported/offline review data.
Treat ingested P0/P1 findings as blockers until local verification confirms they are fixed or not applicable.
| Input | Source | Required |
|---|---|---|
| Issue/PR number | Argument (e.g., /triage 10, /triage pr 13) | No — omit to triage all open |
| Mode | pr prefix for PRs | No — defaults to issues |
| Repo | Auto-detected from git remote | Yes (auto) |
| gh CLI | "/c/Program Files/GitHub CLI/gh.exe" on Windows, gh elsewhere | Yes (auto) |
git remote get-url origin, extract owner/repogh auth status$GH: Windows → "/c/Program Files/GitHub CLI/gh.exe", other → ghSingle issue (/triage 10):
$GH issue view <number> --repo <owner/repo> --json number,title,body,labels,state,comments,createdAt,updatedAt,author,assignees
Batch (/triage or --batch):
$GH issue list --repo <owner/repo> --state open --json number,title,labels,createdAt,updatedAt --limit 50
Filter to untriaged: issues with no labels, or missing priority/type label.
Stale (--stale):
$GH issue list --repo <owner/repo> --state open --json number,title,labels,createdAt,updatedAt --limit 100
Filter to issues with no activity in 14+ days.
Single PR (/triage pr 13):
$GH pr view <number> --repo <owner/repo> --json number,title,body,author,state,files,commits,comments,createdAt,headRefName,baseRefName,mergeable,reviewDecision
$GH pr diff <number> --repo <owner/repo>
All PRs (/triage prs):
$GH pr list --repo <owner/repo> --state open --json number,title,author,createdAt,labels --limit 50
| Type | Signal |
|---|---|
bugfix | Fixes a reported issue, closes #N |
feature | Adds new functionality |
refactor | Restructures without changing behavior |
docs | Documentation only |
infra | CI/CD, build, packaging, installer |
Write a per-PR resolution block (full template: docs/TRIAGE.md#pr-resolution-template) with:
IMPORTANT: All PR actions are external. Show the user the exact comment text and get approval before posting.
Type (exactly one):
| Type | Signal |
|---|---|
bug | Error messages, "doesn't work", stack traces, regression |
feature | "Would be nice", "add support for" |
question | "How do I", "is it possible" |
docs | README/documentation issues |
infra | CI/CD, build, packaging, dependencies |
Severity (bugs only):
| Severity | Criteria |
|---|---|
critical | Blocks installation or core functionality for all users |
high | Breaks a major feature or affects many users |
medium | Breaks a minor feature or has a workaround |
low | Cosmetic, edge case, or easy workaround |
Affected Component:
.claude/harness.json — project configuration.planning/ — planning/campaign systemdocs/ — documentationExtract: error messages, environment, reproduction steps, expected vs actual behavior, workarounds.
git log --oneline -20 -- <affected-files> for recent changesFor bugs:
For features/questions:
Set up conditions, run the failing command, confirm error matches, verify proposed fix resolves it.
Write a per-issue resolution plan (full template: docs/TRIAGE.md#issue-resolution-plan-template) with:
<file>:<line> entries with what is wrong at eachAuto-fix when: root cause clear and verified, fix contained to 1-3 files, no breaking changes, no architectural decisions needed.
Steps:
fix/issue-<number>-<slug>fix: <description> (closes #<number>)Comment with findings when fix needs discussion or user input: post root cause analysis, proposed fix, and questions.
Label only for questions/docs/features: add type + priority labels, optionally point to existing docs.
Output a Triage Summary table with columns # | Title | Type | Severity | Action | Status, one row per triaged item (example: docs/TRIAGE.md#triage-summary-example).
Apply via $GH issue edit <number> --add-label "<label>":
Type: bug, feature, question, docs, infra
Severity (bugs): critical, high, medium, low
Status: needs-info, confirmed, wont-fix, duplicate
---PR READY---
PR #<N>: <url>
To watch this PR automatically:
Local → /pr-watch <N>
Cloud → open in Claude Code web or mobile, toggle "Auto fix" ON
---
Disclosure: "Triaging GitHub issues and PRs. Read-only — no changes made without showing you first." Reversibility: green — investigation is read-only; any GitHub actions (labels, comments, PRs) shown to user for approval before posting Trust gates:
gh not available or not authenticated: Stop and instruct: "Run gh auth login before using /triage."
No open issues or PRs: Report "No open issues found." and exit cleanly.
Empty/unparseable issue body: Classify as needs-info, comment requesting reproduction steps.
.planning/ missing: /triage reads from GitHub, not local state. Skip .planning/ writes if missing.
"/c/Program Files/GitHub CLI/gh.exe" — always pass --repo <owner/repo>$GH issue comment <number> --repo <owner/repo> --body "..."$GH issue edit <number> --repo <owner/repo> --add-label "bug,high"---HANDOFF---
- Triaged N issues: X bugs, Y features, Z questions
- Auto-fixed: <list of issue numbers with PR links>
- Needs attention: <list of issues requiring human decision>
- New labels applied: <count>
- Reversibility: green — investigation read-only; auto-fix PRs can be closed/reverted if unwanted
---
npx claudepluginhub sethgammon/citadel --plugin citadelTriages new GitHub issues — classifies, reproduces bugs, attempts conservative fixes, and comments. Use when a new issue is opened and needs automated triage.
Executes GitHub operations (PRs, issues, milestones, labels, comments, merges) using Python scripts with structured output and error handling. Use for pull requests, issues, review comments, CI checks, milestones instead of raw gh.
Fixes GitHub issues end-to-end with GitHub CLI: views issue, researches context, plans fix, creates branch, implements/tests changes, submits PR.