Triage
Canonical aggregation point for Claude Code skills authored by the deessejs org
npx -y skills add deessejs/skills --skill triageAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Triage a GitHub issue — verify, deduplicate, assess, categorize, prioritize, escalate if needed, post a structured review comment.
SKILL.md
10.4 KB, ~2.6k tokens by cl100k_base, as published. Nobody here has run it
triage Skill
Triage a GitHub issue: verify, deduplicate, assess completeness, categorize, prioritize, escalate if needed, and post a structured review comment.
Definition of "Triaged"
An issue is triaged when all of the following are true:
- Understood — the problem or request is clear, not ambiguous
- Verified — the issue matches the current state of the codebase
- Categorized — type, area, and cross-cutting labels are applied
- Prioritized — Priority and Effort are assessed and set
- Actionable — the next step is clear (ready, blocked, needs-info, closed)
If any of these is missing, the issue is only partially triaged.
Source of truth
Org-level fields (Priority, Effort, Type) are the single source of truth for these values. Labels do NOT represent Priority or Effort in this workflow — use org-fields only.
When to use
Use this skill when the user asks to triage or review an issue. Usually runs on newly opened issues.
Trigger phrases: "triage #N", "review this issue", "/triage #N".
Prerequisites
The gh CLI must be authenticated:
gh auth status
Step-by-step workflow
Step 1 — Fetch issue details
gh issue view <issueNumber> --json title,body,labels,state,author
gh api "https://api.github.com/repos/<org>/<repo>/issues/<issueNumber>"
Read: title, body, labels[], state, author.login.
Also fetch the org's issue fields to know what's available:
gh api "https://api.github.com/orgs/<org>/issue-fields"
Parse to build a map of { fieldName → { id, options: { optionName → id } } }.
Step 2 — Identify what's already present
From the labels array, note:
- Does it have an
area:*label? - Does it have a
status:*label? - Does it have a
regressionlabel?
From the issue API response, note the existing org-field values (Priority, Effort, Type).
Step 3 — Search for duplicates
# Search for open issues with similar titles
gh search issues --repo <org>/<repo> "<title keywords>" --state open --limit 10
If similar issues are found:
- Present them to the user
- Ask if the new issue is a duplicate of an existing one
- If yes → apply
duplicatelabel and link to the existing issue (see closure template) - If no → continue
Step 4 — Verify against codebase
Read the codebase to confirm the issue is real, not based on incorrect assumptions.
Bug report (bug label present):
- Locate the relevant code mentioned in the issue
- Attempt to reproduce the bug. If reproduction steps are provided, follow them exactly.
- If the bug cannot be reproduced → note this in the triage comment. It may be environment-specific or already fixed.
- If the bug exists → continue
Feature request (enhancement label present):
- Check if the requested feature or equivalent already exists in the codebase
- If the feature exists → note it in triage comment
- If partial → note what's missing
Refactor request:
- Locate the code referenced in the issue
- Confirm the problematic pattern exists
- If the code looks fine → flag it
Task / chore:
- Identify the files or areas mentioned
- Confirm the task is applicable and not already done
If the issue describes something that doesn't match reality → mark as needs-info with explanation. Do not apply status:ready on an unverified issue.
Step 5 — Check for regression
For bug reports, check if the issue might be a regression (a bug introduced by a recent change):
# Check git history for recent changes to the affected area
git log --oneline -10 -- <file>
git log --oneline -10 --since="2 weeks ago"
If recent changes are found in the affected area:
- This may be a regression
- Apply the
regressionlabel if present - Set Priority higher than you normally would (a regression is more urgent than a pre-existing bug)
- Note in the triage comment that this appears to be a regression
Regression detection is important because regressions signal that recent work broke something. They warrant higher urgency and direct notification to the contributor responsible.
Step 6 — Assess completeness
Based on the template type, check for required fields:
Bug report (bug label present):
- ✅ Required:
📝 Bug Descriptionfilled? - ✅ Required:
📋 Steps to Reproducefilled? - ✅ Required:
🎯 Areaselected? - ℹ️
❌ Actual Behaviorand✅ Expected Behavior— strongly recommended but not hard-required
Feature request (enhancement label present):
- ✅ Required:
📝 Feature Summaryfilled? - ✅ Required:
📖 Detailed Descriptionfilled? - ✅ Required:
🎯 Areaselected?
Any other issue (no template used):
- ✅ Is the body substantive (not just a title)?
- ✅ Is the intent clear enough to act on?
Step 7 — Triage decision
Apply the decision tree:
1. Is it a duplicate of an existing issue?
YES → label: duplicate + link to existing issue
2. Is it complete?
NO → label: needs-info
YES → continue
3. Is it a valid task? (not question/invalid/wontfix)
wontfix → label: wontfix
question → label: question
invalid → label: invalid
YES → continue
4. Is it blocked by another issue? (mentioned in body or comments)
YES → label: status:blocked + link blocking issue
5. Does the issue match reality? (codebase verified)
NO → label: needs-info with explanation
YES → continue
6. Otherwise → status:ready
Step 8 — Set org-fields and labels
Org-fields (Priority, Effort, Type)
If any org-field is missing or incorrect, set or correct it via PATCH:
MSYS_NO_PATHCONV=1 MSYS2_ARG_CONV_EXCL='*' \
gh api -X PATCH "https://api.github.com/repos/<org>/<repo>/issues/<issueNumber>" \
-H "X-GitHub-Api-Version: 2026-03-10" \
--input - <<EOF
{
"type": "Task",
"issue_field_values": [
{"field_id": <field_id>, "value": "<value>"}
]
}
EOF
- Use the option name as a string (e.g.,
"Medium","High","Low") — NOT the numeric option ID. - Both
typeandissue_field_valuescan be set in the same PATCH call. - Regression bugs → set Priority one level higher than the assessed severity (e.g., assessed Medium → set High).
Labels
gh issue edit <issueNumber> --add-label "label1,label2"
Labels to add if missing (do NOT remove existing labels):
area: (required — always add if absent)
area:auth,area:ui,area:web,area:app,area:docs,area:database,area:email,area:ci,area:build,area:deploy- Infer from body content if the dropdown was not used
status: (override template default only when justified)
status:ready— complete + valid + unblocked + verifiedstatus:needs-triage— keep as-is, already set by templateneeds-info— incomplete or unverifiable, ask for morestatus:in-progress— someone is already working itstatus:blocked— depends on another issue
cross-cutting (add when applicable)
regression— bug introduced by recent changebreaking-change— affects public API surfacegithub_actions— related to CI/CDdependencies— dependency update request
Step 9 — Escalate if needed
Some issues warrant immediate stakeholder notification. After labeling and setting org-fields, escalate directly:
| Trigger | Action |
|---|---|
| Security vulnerability | Do not file a public issue. Follow the security disclosure process. |
| Data loss or corruption | Notify the engineering lead and data team immediately. |
| Critical feature broken for all users | Notify the product manager and engineering lead directly. |
| Regression in active development | Notify the contributor responsible for the recent change (via @mention or DM). |
Escalation is not a substitute for proper triage. Always triage first, then escalate.
If escalation is triggered, note it in the triage comment and include who was notified.
Step 10 — Post triage comment
Read the relevant template from comments-templates/<status>.md and fill in the placeholders:
# Read the template
cat comments-templates/<status>.md
# Post the comment
gh issue comment create <issueNumber> --body "$(cat comments-templates/<status>.md)"
Available templates:
| Decision | Template |
|---|---|
status:ready | comments-templates/status-ready.md |
needs-info | comments-templates/needs-info.md |
status:blocked | comments-templates/status-blocked.md |
duplicate | comments-templates/duplicate.md |
wontfix | comments-templates/wontfix.md |
question | comments-templates/question.md |
invalid | comments-templates/invalid.md |
Label Handling Rules
- Always check existing labels before adding — don't double-apply
- Add missing labels only — never remove user-added labels
- Preserve user intent — keep labels even if they seem slightly off
- Keep
status:needs-triage— it's the template default; only change if justified - Infer
area:*from body when the template dropdown wasn't used - Verify before marking
status:ready— an issue that describes non-existent code should not be marked ready - Regression bumps priority — set Priority one level higher than assessed
Error Handling
| Situation | Action |
|---|---|
| Org-field GET returns 404 | Report to user — org may not have Issue Fields enabled |
| Org-field value rejected | Verify option name matches the org-field definition; re-fetch if needed |
Missing area:* label | Always add if absent; infer from issue body |
| Codebase check inconclusive | Default to needs-info |
| Bug cannot be reproduced | Note in comment; do not assume it's fixed — flag as environment-specific or needs-info |
Constraints
- Prefix every
gh apicall withMSYS_NO_PATHCONV=1 MSYS2_ARG_CONV_EXCL='*'(Windows Git Bash path-rewrite bug). - Use
--input -forissue_field_valuesarray — not-for-F. - Priority values:
Urgent,High,Medium,Low. Effort values:High,Medium,Low. Type values:Task,Bug,Feature. - Priority, Effort, Type are set via org-fields (API), NOT via labels.
- Never remove existing labels added by the user.
- Do not mark an issue
status:readyunless the codebase has been verified. - Always triage before escalating. Escalation is not triage.
What ships with it: 7 files
2.1 KB alongside SKILL.md
comments-templates/
- duplicate.md303 B
- invalid.md108 B
- needs-info.md583 B
- question.md178 B
- status-blocked.md312 B
- status-ready.md600 B
- wontfix.md108 B