Issue Triage logo

Issue Triage

Community
decebals
issue-triage

Triage and categorize GitHub issues with priority labels. Use when user says "triage issues", "check issues", "review open issues", or during regular maintenance of GitHub issue backlog.

Overview

Publisherdecebals
Repositoryclaude-code-java
Skill nameissue-triage
Stars
751
Forks
151
Bundled files
Instructions only
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • Self-contained

    Everything the model needs lives in the instructions — no extra files to sync.

  • Open source

    Published by decebals on GitHub. Read the source before you install it.

Installation

Install the Issue Triage AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/decebals/claude-code-java/tree/main/skills/issue-triage
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/decebals/claude-code-java.git /tmp/claude-code-java
mkdir -p .claude/skills
cp -r /tmp/claude-code-java/skills/issue-triage .claude/skills/issue-triage
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Issue Triage in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Issue Triage on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Issue Triage is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

Issue Triage Skill

Efficiently triage GitHub issues for Java projects with categorization and prioritization.

When to Use

  • User says "triage issues" / "check recent issues"
  • Regular maintenance workflow
  • After vacation/break (backlog processing)
  • Weekly/monthly issue review

Prerequisites

Recommended: GitHub MCP server configured for optimal token usage

bash
claude mcp add github --transport http \
  https://api.githubcopilot.com/mcp/

Alternative: Use gh CLI (less token-efficient)

Workflow

1. Fetch Issues

With GitHub MCP (recommended):

Tool: list_issues
Parameters: {
  "state": "open",
  "sort": "updated", 
  "per_page": 10
}

With gh CLI:

bash
gh issue list --state open --limit 10 --json number,title,labels,body,url

2. Categorize Each Issue

Analyze issue content and assign category:

Bug Report ✅

Indicators:

  • Has stack trace or error message
  • Steps to reproduce provided
  • Expected vs actual behavior described
  • Mentions specific version numbers

Actions:

  • Label: bug
  • Verify reproducibility from description
  • Check for duplicate bugs
  • Add to milestone if critical

Example:

Issue #234: "NPE when loading plugin from directory"
- Stack trace: ✅
- Reproduction steps: ✅
- Version info: ✅
→ Label: bug, high-priority
Feature Request 💡

Indicators:

  • Asks for new functionality
  • Use case described
  • "It would be nice if..." / "Could you add..."
  • Rationale provided

Actions:

  • Label: enhancement
  • Assess alignment with project goals
  • Mark for discussion if non-trivial
  • Ask for community feedback
Question/Support ❓

Indicators:

  • "How do I..." / "Can someone help..."
  • Configuration/usage questions
  • Not a bug or feature request

Actions:

  • Label: question
  • Provide answer or link to docs
  • Suggest StackOverflow for complex help
  • Close after answer if resolved
Duplicate 🔄

Search for similar issues:

  • Use GitHub search: is:issue <keywords>
  • Check recently closed issues
  • Look for same error messages

Actions:

  • Link to original: "Duplicate of #123"
  • Close with polite comment
  • Ask reporter to comment on original if they have additional info
Invalid/Unclear ⚠️

Indicators:

  • Missing critical information
  • Off-topic or spam
  • Not enough context to proceed

Actions:

  • Request clarification with template
  • Set "needs-more-info" label
  • Auto-close if no response after 14 days

3. Priority Assessment

Critical (P0) 🔴

Criteria:

  • Security vulnerability
  • Data loss/corruption risk
  • Complete functionality breakdown
  • Affects production systems

Actions:

  • Label: critical
  • Notify maintainers immediately
  • Add to current milestone
  • Consider hotfix release

Examples:

- "SQL injection vulnerability in plugin loader"
- "All plugins fail to load after upgrade"
- "ClassLoader leak causes OutOfMemoryError"
High (P1) 🟠

Criteria:

  • Core feature broken
  • Affects many users
  • Workaround exists but painful
  • Regression from previous version

Actions:

  • Label: high-priority
  • Add to next milestone
  • Include in release notes

Examples:

- "Plugin dependencies not resolved correctly"
- "Hot reload crashes application"
Medium (P2) 🟡

Criteria:

  • Edge case bug
  • Enhancement with clear value
  • Documentation gap
  • Affects some users occasionally

Actions:

  • Label: medium-priority
  • Consider for future milestone
  • Good for contributors

Examples:

- "Improve error message for invalid plugin"
- "Add plugin lifecycle listener"
Low (P3) 🟢

Criteria:

  • Nice-to-have feature
  • Cosmetic issues
  • Very rare edge case
  • Documentation improvements

Actions:

  • Label: low-priority
  • "Contributions welcome" tag
  • Backlog for future

Examples:

- "Add more examples to README"
- "Typo in JavaDoc"

4. Response Templates

Need More Information
markdown
Thanks for reporting this issue! 

To investigate further, could you provide:
- Java version (java -version)
- Library version
- Minimal reproducible example
- Full stack trace (if applicable)
- Configuration files (if relevant)

This will help us diagnose and fix the issue faster.
Duplicate
markdown
Thanks for reporting! This is being tracked in #123.

Closing as duplicate. Feel free to add any additional context 
or information to the original issue.
Won't Fix (with rationale)
markdown
Thank you for the suggestion. After consideration, this doesn't 
align with the project's current direction because [reason].

Consider [alternative approach] instead, which might better 
serve your use case.

If you feel strongly about this, please open a discussion in 
our [forum/discussions] to gather community feedback.
Acknowledged Bug
markdown
Confirmed! This is a valid bug. 

I've added it to milestone X.Y and labeled it as [priority].
Contributions welcome if anyone wants to tackle it!

Reproduction verified with:
- Java 17
- Version 3.10.0
- Ubuntu 22.04
Feature Request - Under Consideration
markdown
Interesting idea! This aligns with our goal of [project goal].

I've labeled this as 'enhancement' for further discussion.
Community feedback welcome - upvote with 👍 if you'd find 
this useful.

Some questions to consider:
- [question 1]
- [question 2]
Question Answered
markdown
To achieve this, you can [solution].

Example:
\`\`\`java
[code example]
\`\`\`

Also check our documentation: [link]

Let me know if this solves your issue!

Token Optimization Strategies

Batch Processing

bash
# Process multiple issues in one prompt
"Triage issues #234-243, categorize and prioritize"

Savings: ~60% fewer tokens vs one-by-one

Use Structured GitHub MCP Calls

  • One call to list issues → cache results
  • Targeted calls for details only when needed
  • Batch label updates

Savings: ~40% fewer tokens vs repeated bash calls

Cache Issue List

bash
# First prompt
"Fetch the last 20 issues, save list in memory"

# Subsequent prompts
"Analyze issue #5 from cached list"
"Mark #7-#9 as duplicate"

Focus on First Post + Recent Comments

  • Don't read entire 50-comment threads
  • Skim first post for context
  • Check last 2-3 comments for updates

Anti-patterns

❌ Avoid:

# One-by-one processing
"Check issue #234"
"Now check issue #235"
"Now check issue #236"
→ Wastes tokens on repeated context loading

# Over-analyzing
Reading entire 100-comment thread
Checking all related PRs
Deep diving into code for each issue
→ Diminishing returns after certain point

# Premature closing
Closing issues without proper investigation
Missing duplicates due to poor search
→ Frustrates users, creates duplicate work

✅ Prefer:

# Batch operations
"Triage issues #234-250, categorize, prioritize"

# Quick triage decisions
Fast categorization → Can revisit if needed
Surface-level analysis for most issues
Deep dive only for critical/complex ones

# Thorough duplicate search
Quick keyword search before marking duplicate
Link to specific comment if clarification exists

Automation Opportunities

Auto-close stale issues

bash
# Issues with no activity for 90 days and "needs-more-info" label
"Find stale issues (>90 days, needs-more-info label), 
suggest closing with polite message"

Label by keywords

bash
# Auto-label based on content
"java.lang.NullPointerException" → bug
"add support for" → enhancement
"how do I" → question

Weekly summary

bash
# Generate triage summary
"Summarize issues from last week:
- New bugs: X
- Feature requests: Y
- Questions: Z
- Closed: W"

Integration with GitHub

With GitHub MCP

javascript
// Structured workflow
1. list_issues → get open issues
2. get_issue → details for each
3. add_labels → categorize
4. create_comment → respond
5. close_issue → if needed

With gh CLI

bash
# List issues
gh issue list --json number,title,labels,body

# View specific issue
gh issue view 234

# Add labels
gh issue edit 234 --add-label "bug,high-priority"

# Comment
gh issue comment 234 --body "Thanks for reporting..."

# Close
gh issue close 234 --comment "Fixed in v2.1"

Metrics to Track

After each triage session, report:

📊 Triage Summary
─────────────────
Issues processed: 15
├─ Bugs: 5 (2 critical, 3 high)
├─ Enhancements: 4
├─ Questions: 3
├─ Duplicates: 2
└─ Invalid: 1

Actions taken:
├─ Labeled: 15
├─ Responded: 12
├─ Closed: 3
└─ Milestoned: 5

Time saved: ~45 minutes (vs manual)
Token usage: 3,200 tokens

Best Practices

  1. Regular cadence - Weekly triage prevents backlog
  2. Be respectful - Users took time to report
  3. Link resources - Docs, related issues, examples
  4. Ask questions - Better to clarify than assume
  5. Welcome contributions - Encourage community involvement
  6. Track patterns - Common issues suggest documentation gaps
  7. Celebrate reporters - Thank users for good bug reports
  8. Close decisively - Don't let issues linger indefinitely

Example Workflow

bash
# Monday morning triage
claude code ~/projects/pf4j

> view .claude/skills/issue-triage/SKILL.md
> "Triage the last 15 issues from pf4j/pf4j,
   categorize, prioritize and suggest responses"

[Claude analyzes and presents summary]

> "Apply labels and post the suggested responses"

[Claude executes actions]

> "Generate summary for release notes"

Result: 15 issues triaged in ~10 minutes vs ~45 minutes manual

Frequently asked questions

What does the Issue Triage AI skill do?

Triage and categorize GitHub issues with priority labels. Use when user says "triage issues", "check issues", "review open issues", or during regular maintenance of GitHub issue backlog.

Why use Issue Triage on TypingMind?

Because you install it once and use it with any model. Issue Triage is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Issue Triage in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/decebals/claude-code-java/tree/main/skills/issue-triage. TypingMind reads its SKILL.md and installs it as a skill you can enable per chat.

Which AI models can use Issue Triage?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Issue Triage?

As many as you like. As long as a model supports skills, you can use Issue Triage with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Issue Triage AI skill free?

Yes. It is published on GitHub by decebals under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇