with one click
issue-triage
// Queries and triages open GitHub issues that need attention. Helps identify issues needing milestones, labels, or investigation.
// Queries and triages open GitHub issues that need attention. Helps identify issues needing milestones, labels, or investigation.
| name | issue-triage |
| description | Queries and triages open GitHub issues that need attention. Helps identify issues needing milestones, labels, or investigation. |
| metadata | {"author":"dotnet-maui","version":"2.3"} |
| compatibility | Requires GitHub CLI (gh) installed and authenticated. Run `gh auth login` before using. |
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 login
The 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.ps1
What this does:
MANDATORY: Use query-issues.ps1 - it has the right filters!
pwsh .github/skills/issue-triage/scripts/query-issues.ps1 -Limit 50 -OutputFormat triage
What 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 triage
DO 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'
[HINT] Download the complete skill directory including SKILL.md and all related files