Skip to content

/issue-triage

Triage a GitHub issue into something actionable — reproduce the claim, find duplicates, judge severity, and apply labels, milestone, and assignee. Use when the user asks to triage an issue, sort the backlog, deal with new issues, check whether a bug is already reported, or says

From plugin
superset
14k18 skills1 agent1 command
Install
$ npx -y skills add superset-sh/superset --skill issue-triage --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/issue-triage

Context preview

The summary Claude sees to decide when to auto-load this skill.

Triage a GitHub issue into something actionable — reproduce the claim, find duplicates, judge severity, and apply labels, milestone, and assignee. Use when the user asks to triage an issue, sort the backlog, deal with new issues, check whether a bug is already reported, or says

SKILL.md

issue-triage.SKILL.md
name: issue-triage
description: Triage a GitHub issue into something actionable — reproduce the claim, find duplicates, judge severity, and apply labels, milestone, and assignee. Use when the user asks to triage an issue, sort the backlog, deal with new issues, check whether a bug is already reported, or says "what should we do with this issue".
argument-hint: issue URL or number, or a repo to sweep
allowed-tools: mcp__github__*

Triage a GitHub issue

Triage answers three questions in order: **is it real, is it new, and how urgent is it.** Labels and assignees come last. Applying labels without answering the first three is filing, not triage.

1. Read it as written

Fetch the issue and its comments. Separate what the reporter **observed** from what they **concluded**. "The API returns 500 when I pass an empty array" is an observation. "The validation layer is broken" is a conclusion, and it is frequently wrong even when the observation is right. Triage the observation.

Note what is missing: version, environment, reproduction steps, actual vs expected. You need these to judge severity, but ask for them only after step 2 — most issues that look under-specified turn out to be duplicates of a well-specified one.

2. Search for duplicates before anything else

This is the step that gets skipped and the one that saves the most work.

Search the issue's distinctive terms — an error string, a function name, a status code — rather than its title. Titles describe symptoms in the reporter's words; error text is stable across reporters. Search **closed** issues too: a bug closed as fixed and reported again means a regression, which is a different and more urgent finding than a new bug.

When you find a duplicate, comment linking both directions and close the newer one, unless the newer report contains a better reproduction — in which case close the older and carry the good repro forward.

3. Reproduce, or say plainly that you did not

If the repo is checked out and the issue has steps, run them. Record the result in a comment: what you ran, what happened, on what version.

If you cannot reproduce, say which specific step failed and what you saw instead. Never label something `cannot-reproduce` on the strength of not having tried — an unreproduced bug that gets closed and refiled three times costs more than the ten minutes of trying.

4. Judge severity on impact, not volume

Ask what the user cannot do, and how many users are in that position.

  • **Critical** — data loss, security exposure, or the primary flow is broken with no

workaround.

  • **High** — a common flow is broken but has a workaround, or a rare flow is fully broken.
  • **Normal** — a real defect with limited reach.
  • **Low** — cosmetic, or a defect behind a flag nobody has on.

A loud thread is not evidence of severity. Ten reports of a cosmetic issue is still cosmetic; one report of silent data corruption is critical.

5. Label, assign, milestone

Apply the repo's existing labels — read them first rather than inventing new ones. Every issue gets a type (`bug`, `feature`, `docs`) and a severity. Add an area label only if the repo uses them and you are confident which area owns it; a wrong area label routes the issue to people who will ignore it, which is worse than no label.

Assign only when you can name the person by their ownership of the code, not by who last touched the file. Otherwise leave it unassigned and let the owning team pick it up.

Anti-patterns

  • Closing as `works-as-intended` without quoting the documentation or code that intends it.
  • Asking for a reproduction when the issue already has one that you did not run.
  • Labeling `good-first-issue` for anything you have not confirmed is small — that label is

a promise to a newcomer, and breaking it costs a contributor.

  • Bulk-relabeling a backlog in one pass. Triage is per-issue judgment; a sweep that touches

fifty issues in a minute did not judge any of them.

Read more
Ships withsuperset

Superset is an agentic IDE to orchestrate 100+ coding agents in parallel. Run any agent with your own subscription.

Get the whole plugin, auto-invoked
Stats
14,178
Stars
1,268
Forks
Active
Maintenance
TypeScript
Language
1h ago
Last commit
10mo ago
Created

Repo: superset-sh/superset

Other skills on superset.