Queries and triages open GitHub issues that need attention. Helps identify issues needing milestones, labels, or investigation.
58
73%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
Low
Low-risk findings worth noting
Fix and improve this skill with Tessl
tessl review fix ./.github/skills/issue-triage/SKILL.mdFor the hosted, maintainer-only /issue triage label command, use
issue-triage-labels and the
command documentation. This interactive skill retains
its human-approved milestone workflow.
This skill helps triage open GitHub issues in the dotnet/maui repository by:
GitHub CLI (gh) must be installed and authenticated:
# Install
# Windows:
winget install --id GitHub.cli
# macOS:
brew install gh
# Linux:
# See https://cli.github.com/manual/installation
# Authenticate (required before first use)
gh auth loginThe scripts will check for gh and exit with installation instructions if not found.
🚨 CRITICAL: ALWAYS use the skill scripts. NEVER use ad-hoc GitHub API queries.
The scripts have proper filters, exclusions, and milestone logic built-in. Don't bypass them.
Start by initializing a session to load current milestones and labels:
pwsh .github/skills/issue-triage/scripts/init-triage-session.ps1What this does:
MANDATORY: Use query-issues.ps1 - it has the right filters!
pwsh .github/skills/issue-triage/scripts/query-issues.ps1 -Limit 50 -OutputFormat triageWhat this does:
-label:s/needs-info -label:s/needs-repro -label:area-blazor -label:s/try-latest-version -label:s/move-to-vs-feedbackDON'T:
github-mcp-server-list_issues directlygithub-mcp-server-search_issues without the same filtersIMPORTANT: When user asks to triage, present only ONE issue at a time in this format:
## Issue #XXXXX
**[Title]**
🔗 [URL]
| Field | Value |
|-------|-------|
| **Author** | username (Syncfusion if applicable) |
| **Platform** | platform |
| **Area** | area |
| **Labels** | labels |
| **Linked PR** | PR info with milestone if available |
| **Regression** | Yes/No |
| **Comments** | count |
**Comment Summary** (if any):
- [Author] Comment preview...
**My Suggestion**: `Milestone` - Reason (based on init session output)
---
What would you like to do with this issue?Wait for user to say:
After user decision, automatically present the NEXT issue.
🚨 CRITICAL: When you run out of issues, AUTOMATICALLY reload more issues.
# Run query again to load next batch
pwsh .github/skills/issue-triage/scripts/query-issues.ps1 -Limit 50 -Skip <current_count> -OutputFormat triageDO NOT:
DO:
query-issues.ps1 again with -Skip parameter| Parameter | Values | Default | Description |
|---|---|---|---|
-Platform | android, ios, windows, maccatalyst, all | all | Filter by platform |
-Area | Any area label (e.g., collectionview, shell) | "" | Filter by area |
-Limit | 1-1000 | 50 | Maximum issues to fetch |
-Skip | 0+ | 0 | Skip first N issues (for pagination) |
-OutputFormat | table, json, markdown, triage | table | Output format |
-RequireAreaLabel | switch | false | Only return issues with area-* labels |
-SkipDetails | switch | false | Skip fetching PRs/comments (faster) |
🚨 CRITICAL: ALWAYS use actual milestone names from init-triage-session.ps1 output. NEVER guess or assume milestone names.
The skill dynamically queries current milestones from dotnet/maui at session initialization. Milestone names change frequently (e.g., SR4, SR5, SR6), so always reference the session output when suggesting milestones.
| Condition | Suggested Milestone | Reason |
|---|---|---|
| Linked PR has milestone | PR's milestone | "PR already has milestone" |
Has i/regression label | Highest numbered SR milestone | "Regression - needs servicing" |
| Has open linked PR | Current servicing milestone | "Has open PR" |
| Default | Backlog | "No PR, not a regression" |
Example Session Output:
Servicing Releases:
- .NET 9 Servicing [246 open]
- .NET 10 Servicing [213 open]
- .NET 10 SR5 [55 open] ← Use this for .NET 10 regressions
- .NET 10.0 SR4 [103 open]
Other:
- .NET 11 Planning [167 open]
- .NET 11.0-preview1 [8 open]
Backlog:
- Backlog [3037 open]How to suggest milestones:
.NET 10 SR5" (from session output).NET 10 SR2" (guessing, might not exist)# Set milestone only
gh issue edit ISSUE_NUMBER --repo dotnet/maui --milestone "Backlog"
# Set milestone and add labels
gh issue edit ISSUE_NUMBER --repo dotnet/maui --milestone "MILESTONE_NAME" --add-label "i/regression"
# Set milestone on both issue AND linked PR
gh issue edit ISSUE_NUMBER --repo dotnet/maui --milestone "MILESTONE_NAME"
gh pr edit PR_NUMBER --repo dotnet/maui --milestone "MILESTONE_NAME"Regression Labels:
i/regression - Confirmed regressionregressed-in-10.0.0 - Specific versionPriority Labels:
p/0 - Criticalp/1 - Highp/2 - Mediump/3 - LowiOS 26 / macOS 26:
version/iOS-26 - iOS 26 specific issue| Mistake | Why It's Wrong | Correct Approach |
|---|---|---|
❌ Using github-mcp-server-list_issues directly | Missing exclusion filters (needs-info, needs-repro, etc.) | ✅ Use query-issues.ps1 script |
| ❌ Stopping when batch is empty | There are likely more issues available | ✅ Automatically run query-issues.ps1 -Skip N |
| ❌ Suggesting milestone names like "SR2" | Milestone doesn't exist, based on assumptions | ✅ Use actual milestone names from init-triage-session.ps1 output |
| ❌ Asking "Load more?" when out of issues | Creates unnecessary interruption | ✅ Just load more automatically |
| ❌ Using ad-hoc API queries with custom filters | Likely to miss or include wrong issues | ✅ Trust the skill's scripts - they have the right logic |
# Record triaged issue
pwsh .github/skills/issue-triage/scripts/record-triage.ps1 -IssueNumber 33272 -Milestone "Backlog"
# View session stats
cat CustomAgentLogsTmp/Triage/triage-*.json | jq '.Stats'dotnet/maui
d158861
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.