Triage a GitHub repository's open issues by finding exact duplicates, rejecting evidenceably off-base requests, requesting concrete clarification, applying only existing labels, and opening a linked root-cause issue when multiple reports share one underlying invariant failure. Use when a maintainer asks to triage issues or invokes triage.
npx skills add https://github.com/arcee-ai/nac --skill triage
Review every open issue in the current GitHub repository and leave the tracker in a more actionable state. When the user asks to triage, perform the authorized issue updates; do not stop at a proposed report.
Build a working ledger before mutating anything:
| Issue | Contract or symptom | Evidence | Related issue/PR | Classification | Label/action |
| --- | --- | --- | --- | --- | --- |
A duplicate reports the same observable defect or requests the same end state. Choose the canonical issue based on completeness, existing discussion, active implementation, and age. Dependencies, adjacent code paths, common components, and different manifestations of one architecture problem are not duplicates.
For an exact duplicate:
duplicate label when available.An issue is off-base only when current code, documented trust/support boundaries, or reproducible behavior directly contradicts its premise. Product disagreement, implementation difficulty, low priority, or missing information is not invalidity.
For an evidenceably invalid request:
invalid and close only when the repository defines that label accordingly.Use wontfix only for an explicit maintainer decision not to implement valid behavior, never as a substitute for analysis.
Apply question only when missing information materially changes the implementation or acceptance contract. Ask concrete questions such as:
Explain why each answer matters. Leave the issue open.
Map the issue to the available labels' descriptions, not only their names. Common meanings include:
bug: an existing supported contract is broken;enhancement: new behavior or a new product capability;documentation: documentation is missing or wrong;question: material information is still required;security: credentials, exposure, injection, authorization, dependencies, or another security boundary;performance: latency, completion time, resource growth, or capacity;ui/ux: frontend presentation or user flow;devx: contributor or development quality;critical: only the repository's stated emergency/severity threshold, not merely an issue author's severity word;good first issue or help wanted: only after scope and acceptance criteria are sufficiently bounded.Preserve existing labels and add only matching repository labels. Do not remove maintainer-selected labels during this workflow. If no label matches, leave the issue unlabeled rather than inventing taxonomy.
Open a root-cause issue only when at least two reports share the same demonstrated mechanism or violated invariant and fixing that invariant prevents recurrence. Sharing a subsystem or a vague theme is insufficient. Search all issue states first to ensure the root cause is not already tracked.
A useful root-cause issue contains:
Keep child issues open for their surface-specific contracts. Add a backlink comment to every child explaining how it relates to the root issue and how it remains distinct. Avoid weightless umbrella issues that merely collect links.
Use this order so every destructive action has durable context:
Comments should lead with the decision, cite evidence, distinguish adjacent issues, and state the next action. Do not post generic "needs info" or "duplicate" comments.
Re-read every changed issue from GitHub and confirm:
Report the final counts and URLs: reviewed, labeled, closed as duplicate, closed as invalid, awaiting clarification, unchanged, and root-cause issues opened.
Prefer the harness's native GitHub issue tools when available. With GitHub CLI, the equivalent primitives are gh label list, gh issue list, gh issue view, gh pr list, gh issue edit, gh issue comment, gh issue close, and gh issue create. Request structured JSON for inventories so truncated table output cannot hide bodies, labels, comments, or links.
Take arcee-ai/triage from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.