skills/triage/SKILL.md
GitHub issue and PR investigator. Pulls open issues/PRs, 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.
npx skillsauth add SethGammon/Citadel triageInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
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 |
## PR #<N>: <title>
**Author:** <username>
**Type:** bugfix | feature | refactor | docs | infra
**Files changed:** <count>
**Mergeable:** yes | no
### What it does
<1-3 sentences>
### Review findings
- <finding with file:line reference>
### Issues found
- **Critical:** <blocks merge>
- **Non-critical:** <nice to fix but not blocking>
### Recommendation
- [ ] Approve
- [ ] Request changes: <specific changes needed>
- [ ] Close: <reason>
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.
## Issue #<N>: <title>
**Type:** bug | feature | question | docs | infra
**Severity:** critical | high | medium | low
**Component:** <affected directory/file>
**Reproducible:** yes | no | not-attempted
### Root Cause
<1-3 sentences explaining WHY>
### Affected Code
- `<file>:<line>` — <what's wrong here>
### Proposed Fix
<Specific code changes with file:line references>
### Impact
- Who is affected: <scope>
- Workaround exists: yes/no
- Breaking change: yes/no
### Recommended Action
- [ ] Fix in next release
- [ ] Needs more info from reporter
- [ ] Won't fix — <reason>
- [ ] Duplicate of #<N>
Auto-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.
## Triage Summary
| # | Title | Type | Severity | Action | Status |
|---|-------|------|----------|--------|--------|
| 10 | Cannot find module | bug | high | Auto-fixed → PR #11 | Done |
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
---
development
First-run experience for the harness. Three modes: Recommended (guided, ~3 min), Full Tour (guided + skill walkthrough, ~8 min), and Express (zero questions, ~30 sec). Installs hooks first, detects stack, configures harness.json, runs a live demo on real code, and prints a reference card.
development
Knowledge compiler. Extracts patterns, decisions, and anti-patterns from completed campaigns and evolve cycles, then compiles them into structured wiki pages that integrate with existing knowledge rather than appending isolated files. Implements flush→compile→lint pipeline. Auto-triggered by /postmortem and /evolve Phase 6.
tools
Unified router that auto-routes user intent to the right orchestrator or skill. Classifies input by scope, complexity, persistence needs, and parallelism, then dispatches to the cheapest path that can handle it: direct command, skill, marshal, archon, or fleet. Single entry point for all work.
data-ai
Real-time harness observability dashboard. Reads campaigns, fleet sessions, telemetry, and pending queues to present a snapshot of harness state at a glance. Invoked by /dashboard, /do status, or phrases like "what's happening" and "show activity".