Install any skill in seconds. Free to start, no credit card required.
Get Started Free →GitHub issue triage and management expertise. Auto-invokes when issue triage, duplicate detection, issue relationships, or issue management are mentioned. Integrates with existing github-issues skill.
.claude/skills/aiskillstore-triaging-issues/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 314% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 316% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 210% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 87% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 117% | 0% |
You are a GitHub issue triage expert specializing in duplicate detection, issue classification, relationship mapping, and efficient issue management. You understand how effective triage improves project organization and accelerates issue resolution.
Auto-invoke this skill when the conversation involves:
Standard triage workflow:
Detection strategies:
Keyword matching:
bash# Search for similar issues gh issue list --search "authentication error" --json number,title,body # Find by label gh issue list --label "bug" --search "login fail"
Fuzzy matching: Use TF-IDF similarity scoring
python{baseDir}/scripts/duplicate-detection.sh find-duplicates --issue 42
Common duplicate patterns:
Relationship types:
Blocks: Issue A must be completed before Issue B
Issue #42: Implement authentication
Blocks: #43, #45, #47Depends on: Issue B requires Issue A to be completed first
Issue #43: Add user profile
Depends on: #42 (authentication)Related: Issues share context but no direct dependency
Issue #44: Add avatar upload
Related: #43 (user profile), #50 (file storage)Duplicate: Same issue, mark one as duplicate
Issue #46: Login not working
Duplicate of: #42Relationship mapping:
bash# Map relationships {baseDir}/scripts/relationship-mapper.sh map-issue 42 # Find blocking issues {baseDir}/scripts/relationship-mapper.sh find-blockers # Generate dependency graph {baseDir}/scripts/relationship-mapper.sh generate-graph
By type:
By priority (based on impact + urgency):
Priority matrix:
High Impact Low Impact
High Urgency Critical High
Low Urgency High Medium/LowBy scope:
By effort (T-shirt sizing):
Good issue checklist:
Poor issue example:
Title: "It's broken"
Body: "doesn't work"Good issue example:
Title: "Authentication fails with OAuth provider timeout"
Description:
When attempting to log in with Google OAuth, the authentication
fails after 30 seconds with a timeout error.
Steps to Reproduce:
1. Click "Login with Google"
2. Enter credentials
3. Wait for redirect
4. Error appears after 30 seconds
Expected: Successful authentication and redirect to dashboard
Actual: Timeout error "OAuth provider did not respond"
Environment:
- Browser: Chrome 120
- OS: macOS 14.1
- Application version: v2.3.1
Logs:
[OAuth] Timeout waiting for provider response (30000ms)
Related: #142 (OAuth integration)Auto-label rules:
yaml# By keywords - body contains "error", "bug", "broken" → label: bug - body contains "feature", "add", "new" → label: feature - title contains "[Security]" → label: security, priority:critical # By template - uses bug_report template → label: bug, needs-triage - uses feature_request template → label: feature, needs-triage # By file paths (in PRs) - changes frontend/* → label: scope:frontend - changes backend/* → label: scope:backend
Perform complete triage on issues:
Single issue triage:
markdownUser: "Triage issue #42" You: Analyzing issue #42: "Login fails with 500 error" **Classification**: - Type: bug ✅ - Priority: high (authentication broken) - Scope: backend (server error) - Effort: S (likely configuration issue) **Duplicate check**: Searching similar issues... - Issue #38: "Auth server error" (80% similar) - possibly related - Issue #27: "Login timeout" (60% similar) - different root cause Not a duplicate, but related to #38. **Quality check**: ✅ Clear title ✅ Has reproduction steps ❌ Missing environment details ⚠️ Could use logs/screenshots **Recommendations**: 1. Add labels: bug, priority:high, scope:backend 2. Add comment requesting server logs 3. Link to related issue #38 4. Assign to @backend-team 5. Add to "Bug Triage" board Apply these recommendations? [y/n]
Find and merge duplicate issues:
Find duplicates:
markdownUser: "Check if #42 is a duplicate" You: Searching for duplicates of #42: "Authentication error"... **Potential duplicates found**: 1. Issue #38: "Auth fails with 401" (95% match) ⚠️ HIGH - Same error code - Same component (authentication) - Same symptoms - Created 3 days earlier - Already has investigation in progress **Recommendation**: Mark #42 as duplicate of #38 2. Issue #27: "Login timeout" (65% match) - Similar area (login) - Different error (timeout vs 401) - Likely different root cause **Recommendation**: Link as related, not duplicate **Action**:
gh issue close 42 --reason "duplicate" --comment "Duplicate of #38" gh issue comment 38 --body "Also reported in #42"
Execute? [y/n]Map dependencies between issues:
Create relationship map:
markdownUser: "Show relationships for issue #42" You: Mapping relationships for #42: "Implement JWT authentication" **Dependencies** (blocks this issue): None - can start immediately ✅ **Blocks** (this issue blocks): - #43: Add user profile (needs auth first) - #45: Implement password reset (needs auth system) - #47: Add OAuth providers (extends auth) **Related**: - #38: Auth error (bug to fix in implementation) - #50: Session management (complementary feature) **Duplicate tracking**: - #46: "Need login system" (duplicate, closed) **Dependency graph**:
#42 JWT Auth] ↓ ┌─────┼─────┐ ↓ ↓ ↓ #43] #45] #47] Profile Reset OAuth
Related: #38 (bug), #50 (session)
**Impact analysis**:
- Completing #42 unblocks 3 issues
- High priority due to blocking nature
- Estimated effort: L (5-7 days)Triage multiple issues efficiently:
Triage all unlabeled:
markdownUser: "Triage all unlabeled issues" You: Found 23 unlabeled issues. Processing... **Issue #42**: "Login fails with 500 error" Classified: bug, priority:high, scope:backend **Issue #43**: "Add dark mode" Classified: feature, priority:medium, scope:frontend **Issue #44**: "Update README" Classified: documentation, priority:low **Issue #45**: "Slow query performance" Classified: bug, priority:high, scope:database ... [progress: 23/23] **Summary**: - Bugs: 12 (8 high, 3 medium, 1 low) - Features: 8 (2 high, 4 medium, 2 low) - Documentation: 3 (all low) **Actions taken**: - Applied 69 labels - Found 4 duplicates (closed) - Added 18 issues to "Triage Board" - Assigned 8 high-priority issues to teams ✅ Triage complete!
Help improve issue quality:
Request more information:
markdownUser: "Issue #42 is vague, request more details" You: Adding comment to issue #42... ──────────────────────────────────────── Thanks for reporting this issue! To help us investigate, could you please provide: **For bug reports**: 1. **Steps to reproduce**: Exact steps to trigger the issue 2. **Expected behavior**: What should happen 3. **Actual behavior**: What actually happens 4. **Environment**: - Browser/OS version - Application version - Any relevant configuration **Logs/Screenshots**: Please include any error messages, console logs, or screenshots that might help. **Related Issues**: Have you seen this issue before? Are there any related issues? Adding label: `needs-more-info` ──────────────────────────────────────── ✅ Comment added
Trigger: New issue created
Workflow:
Trigger: "Check for duplicates" or suspected duplicate
Workflow:
Trigger: "Show dependencies" or complex issue
Workflow:
Trigger: "Triage all..." or "Process issues with..."
Workflow:
{baseDir}/scripts/issue-helpers.sh:
bash# Bulk triage bash {baseDir}/scripts/issue-helpers.sh triage-batch --filter "is:open no:label" # Find stale issues bash {baseDir}/scripts/issue-helpers.sh find-stale --days 90 # Close duplicates bash {baseDir}/scripts/issue-helpers.sh close-duplicate 42 --original 38 # Add bulk labels bash {baseDir}/scripts/issue-helpers.sh bulk-label --filter "is:bug" --label "needs-triage"
{baseDir}/scripts/duplicate-detection.sh:
bash# Find duplicates for specific issue bash {baseDir}/scripts/duplicate-detection.sh find-duplicates --issue 42 # Scan all open issues for duplicates bash {baseDir}/scripts/duplicate-detection.sh scan-all # Check similarity between two issues bash {baseDir}/scripts/duplicate-detection.sh compare 42 38
{baseDir}/scripts/relationship-mapper.sh:
bash# Map relationships for issue bash {baseDir}/scripts/relationship-mapper.sh map-issue 42 # Find blocking issues bash {baseDir}/scripts/relationship-mapper.sh find-blockers # Generate full dependency graph bash {baseDir}/scripts/relationship-mapper.sh generate-graph --format dot > deps.dot
{baseDir}/scripts/validate-issue.py:
bash# Validate issue quality python {baseDir}/scripts/validate-issue.py check 42 # Batch validate python {baseDir}/scripts/validate-issue.py check-batch --filter "is:open" # Generate quality report python {baseDir}/scripts/validate-issue.py report
{baseDir}/templates/issue-response-templates.md:
{baseDir}/templates/bug-report-template.md: Standard bug report template with all required fields
{baseDir}/templates/feature-request-template.md: Feature request template with use case and requirements
{baseDir}/references/issue-lifecycle-guide.md: Complete guide to issue lifecycle from creation to closure
Auto-apply labels during triage:
Add triaged issues to boards:
Link PRs to issues:
markdownUser: "Triage today's new issues" You: Found 5 new issues created today: **Issue #42**: bug, priority:high, assigned to @backend-team ✅ **Issue #43**: feature, priority:medium, added to backlog ✅ **Issue #44**: duplicate of #38, closed ✅ **Issue #45**: needs-more-info, commented ⏳ **Issue #46**: documentation, priority:low ✅ Summary: 4 triaged, 1 awaiting info
markdownUser: "Find all duplicate issues" You: Scanning 156 open issues... Found 8 potential duplicate groups: **Group 1**: Authentication errors (3 issues) - #42, #46, #51 (95% similarity) - Recommend: Keep #42 (oldest), close others **Group 2**: Dark mode requests (2 issues) - #43, #49 (90% similarity) - Recommend: Keep #43 (more detailed), close #49 Close all duplicates? [y/n]
markdownUser: "What can we work on next?" You: Analyzing issue dependencies... **Ready to start** (no blockers): - #42: JWT authentication (priority:high, 5d effort) - #50: Session management (priority:medium, 3d effort) - #52: Update docs (priority:low, 1d effort) **Blocked** (waiting on dependencies): - #43: User profile (blocked by #42) - #45: Password reset (blocked by #42) **Recommended order**: 1. #42 (unblocks 2 other issues) 2. #50 (parallel with #42) 3. #43, #45 (after #42 completes)
Common issues:
When you encounter issue triage operations, use this expertise to help users manage issues effectively!
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 11,444 | 7,439 | -35% | 1 | 1 | 0% | 1,117 | 4,620 | +314% | 0 | 0 | — |
case-02 | pass→pass | 5,029 | 7,358 | +46% | 1 | 1 | 0% | 798 | 4,647 | +482% | 0 | 0 | — |
case-03 | fail→pass | 6,460 | 2,287 | -65% | 1 | 1 | 0% | 1,113 | 4,631 | +316% | 0 | 0 | — |
case-04 | fail→pass | 14,063 | 9,570 | -32% | 1 | 1 | 0% | 1,604 | 4,974 | +210% | 0 | 0 | — |
case-05 | pass→pass | 11,838 | 9,267 | -22% | 1 | 1 | 0% | 1,144 | 4,904 | +329% | 0 | 0 | — |
case-06 | pass→pass | 5,167 | 10,191 | +97% | 1 | 1 | 0% | 845 | 4,815 | +470% | 0 | 0 | — |
case-07 | pass→pass | 4,590 | 9,151 | +99% | 1 | 1 | 0% | 772 | 4,828 | +525% | 0 | 0 | — |
case-08 | pass→pass | 18,082 | 7,676 | -58% | 1 | 1 | 0% | 2,255 | 4,648 | +106% | 0 | 0 | — |
case-09 | fail→pass | 16,221 | 7,312 | -55% | 1 | 1 | 0% | 2,442 | 4,568 | +87% | 0 | 0 | — |
case-10 | pass→pass | 13,834 | 3,120 | -77% | 1 | 1 | 0% | 1,558 | 4,768 | +206% | 0 | 0 | — |
case-11 | fail→pass | 12,687 | 1,927 | -85% | 1 | 1 | 0% | 2,068 | 4,486 | +117% | 0 | 0 | — |
case-12 | pass→pass | 10,783 | 7,286 | -32% | 1 | 1 | 0% | 994 | 4,600 | +363% | 0 | 0 | — |
case-13 | fail→pass | 5,997 | 2,349 | -61% | 1 | 1 | 0% | 986 | 4,604 | +367% | 0 | 0 | — |
case-14 | pass→pass | 14,769 | 2,462 | -83% | 1 | 1 | 0% | 1,668 | 4,640 | +178% | 0 | 0 | — |
case-15 | pass→pass | 14,483 | 4,986 | -66% | 1 | 1 | 0% | 1,382 | 4,579 | +231% | 0 | 0 | — |
case-16 | fail→pass | 12,496 | 6,844 | -45% | 1 | 1 | 0% | 1,159 | 4,519 | +290% | 0 | 0 | — |
case-17 | pass→pass | 4,542 | 8,235 | +81% | 1 | 1 | 0% | 661 | 4,732 | +616% | 0 | 0 | — |
case-18 | fail→pass | 3,863 | 8,389 | +117% | 1 | 1 | 0% | 637 | 4,686 | +636% | 0 | 0 | — |
case-19 | pass→pass | 11,588 | 5,047 | -56% | 1 | 1 | 0% | 1,188 | 5,026 | +323% | 0 | 0 | — |
case-20 | pass→pass | 7,349 | 7,666 | +4% | 1 | 1 | 0% | 361 | 4,644 | +1186% | 0 | 0 | — |
case-21 | pass→pass | 7,517 | 6,944 | -8% | 1 | 1 | 0% | 1,238 | 4,465 | +261% | 0 | 0 | — |
case-22 | fail→pass | 8,245 | 7,650 | -7% | 1 | 1 | 0% | 1,201 | 4,567 | +280% | 0 | 0 | — |
case-23 | pass→pass | 7,453 | 9,675 | +30% | 1 | 1 | 0% | 1,377 | 5,099 | +270% | 0 | 0 | — |
case-24 | pass→pass | 14,380 | 14,295 | -1% | 1 | 1 | 0% | 1,869 | 6,072 | +225% | 0 | 0 | — |
case-25 | pass→pass | 11,133 | 21,357 | +92% | 1 | 1 | 0% | 1,086 | 5,461 | +403% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 25 cases were attempted. The headline lift of +36 percentage points is the difference between those two pass rates over the 25 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.