triage-issues — Claude Code skill: label GitHub issues automatically
Walks open GitHub issues that carry no labels, reads each one, and applies fitting labels from your repository's own set. Handy once the backlog gets noisy and nobody knows where to start.
npx skills add dyoshikawa/rulesync --skill triage-issues -a claude-codeWhat triage-issues does
The skill first pulls every label defined in the repository, so it picks only from vocabulary that already exists. Then it asks gh for open issues with no labels attached. If there are none, it says so and stops.
For each hit it reads the body and the comment thread, sometimes several issues at once, and chooses labels from that content. Type labels — bug, enhancement, documentation, refactoring, improvement, question — get combined with modifiers such as good first issue, considering, security or codex. One to three labels is the target. high priority and help wanted require an explicit signal in the issue, and maintainer-scrap stays untouched unless the author asks for it.
Labels go on through gh issue edit, and only additions happen — nothing is stripped. The run ends with a compact report: labeled issues, close calls, and the rare skip. You need an authenticated gh pointed at the repository, otherwise nothing moves. Where an issue fits two types, the skill takes the closer one and flags it as ambiguous instead of piling on labels.
What it helps with
- label incoming issues by what they actually say
- surface open issues that have no labels yet
- separate bug reports from feature requests
- mark approachable tasks for newcomers
- get a summary of what was triaged and what was not
Example prompts for the agent
- Triage the open issues that have no labels
- Go through unlabeled issues and assign labels from
gh label list - Report which issues you labeled and which were ambiguous
How to install triage-issues
1Skills CLI (Vercel)
npx skills add dyoshikawa/rulesync --skill triage-issues -a claude-code2Manually: put the files in place
~/.claude/skills/triage-issues/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/triage-issues/
1Skills CLI (Vercel)
npx skills add dyoshikawa/rulesync --skill triage-issues -a codex2Manually: put the files in place
.agents/skills/triage-issues/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add dyoshikawa/rulesync --skill triage-issues -a cursor2Manually: put the files in place
.cursor/skills/triage-issues/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install dyoshikawa/rulesync triage-issues2Manually: put the files in place
.github/skills/triage-issues/SKILL.md1Skills CLI (Vercel)
npx skills add dyoshikawa/rulesync --skill triage-issues -a gemini-cli2Platform CLI
gemini skills install https://github.com/dyoshikawa/rulesync --path .rulesync/skills/triage-issuesManually: put the files in place
.devin/skills/triage-issues/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add dyoshikawa/rulesync --skill triage-issues -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about triage-issues
How do I install triage-issues for Claude Code?
Run npx skills add dyoshikawa/rulesync --skill triage-issues -a claude-code. The skill lands at ~/.claude/skills/triage-issues/SKILL.md.
What does triage-issues do?
It finds open issues without labels, reads their descriptions and comments, and applies labels chosen from the repository's existing set. Afterwards it prints a short per-issue report.
What does the skill need to run?
An installed and authenticated gh with access to the repository. The skill uses it to list labels, view issues and add labels via gh issue edit.
Source text
SKILL.md · MIT
--- name: triage-issues description: >- Triage open GitHub issues by reviewing unlabeled ones and applying the most appropriate labels based on their content targets: - "*" --- # Triage Open Issues Review all open GitHub issues that currently have no labels and apply the most appropriate labels based on their content. ## Step 1: List Available Labels Fetch the full list of labels defined in this repository so the triage stays within the known label set: ```bash gh label list --limit 100 ``` Treat this list as the authoritative vocabulary. Do not invent new labels. ## Step 2: Find Unlabeled Open Issues Fetch all open issues that have no labels attached: ```bash gh issue list --state open --search "no:label" --limit 100 --json number,title,author,url ``` If the result is empty, report that nothing needs triage and stop. ## Step 3: Gather Context per Issue For each unlabeled issue, read the description and the discussion so the label choice is grounded in the actual content: ```bash gh issue view <issue_number> gh issue view <issue_number> --comments ``` Run these in parallel across issues where practical. ## Step 4: Decide the Labels For each issue, pick the labels that best describe it. Typical signals: - `bug` — something is broken or behaves incorrectly. - `enhancement` — a new feature, new tool/feature support, or a capability request. - `documentation` — docs, README, or `docs/**/*.md` changes. - `refactoring` — internal restructuring without behavior change. - `improvement` — quality, DX, or polish work that isn't a bug or a new feature. - `question` — the author is asking for clarification or usage help. - `duplicate` — already tracked by another issue (link it in a comment if you apply this). - `invalid` / `wontfix` — only if the issue itself states this or the content clearly indicates it; otherwise skip. - `good first issue` — small, well-scoped, approachable for newcomers. - `help wanted` — maintainer explicitly wants external contribution; do not apply speculatively. - `considering` — proposals that are worth discussing but not yet accepted. - `high priority` — explicit urgency signals (regression, blocking users, security). Be conservative. - `security` — security-relevant reports or hardening work. - `codex` — specific to the Codex CLI integration. - `maintainer-scrap` — do NOT add this unless the issue body explicitly says so; it's reserved for maintainer-only scratch notes. Guidelines: - Prefer a small, precise set of labels (usually 1–3). Do not over-label. - Combine a type label (`bug` / `enhancement` / `documentation` / `refactoring` / `improvement` / `question`) with optional modifiers (`good first issue`, `considering`, `security`, `codex`) when they clearly apply. - If the issue is ambiguous, still apply the best-fitting type label rather than skipping it, and note the ambiguity in the final report. Skip only when the issue is empty or unreadable. ## Step 5: Apply the Labels Apply the chosen labels using `gh issue edit`. Example: ```bash gh issue edit <issue_number> --add-label "bug" --add-label "good first issue" ``` Only add labels; do not remove existing ones (these issues have none by definition, but be defensive). ## Step 6: Report Output a concise summary grouped by action: - `Labeled`: `#<number> <title>` → `label1, label2` (one line per issue) - `Labeled (ambiguous)`: `#<number> <title>` → `label` — why it was a close call - `Skipped`: `#<number> <title>` → short reason (empty or unreadable only) Keep the report compact; do not repeat the full issue bodies.
© dyoshikawa · MIT · dyoshikawa/rulesync