with one click
issue-triage
Queries and triages open GitHub issues that need attention. Helps identify issues needing milestones, labels, or investigation.
Menu
Queries and triages open GitHub issues that need attention. Helps identify issues needing milestones, labels, or investigation.
Classifies PR CI/test failures as likely PR-caused, likely unrelated, needing investigation, or insufficient data. Uses gathered GitHub/AzDO/Helix context and MAUI-specific CI conventions.
Deep code review of PR changes for correctness, safety, and MAUI conventions. Uses independence-first assessment (code before narrative) and delegates to the maui-expert-reviewer agent for per-dimension sub-agent evaluation. Triggers on: "review code for PR", "code review PR", "analyze code changes", "check PR code quality". Do NOT use for: summarizing PRs, describing what changed, general PR questions, running tests, or fixing code.
MAUI-specific dependency flow rules, channel conventions, and feed lookup workflows. Use when asked about darc, BAR, Maestro, feeds for .NET MAUI, build promotion, asset lookup, channel mappings, or dependency flow for dotnet/maui. Wraps the maestro-cli skill and maestro MCP tools with MAUI-specific guardrails.
Finalizes any PR for merge by verifying title/description match implementation AND performing code review for best practices. Use when asked to "finalize PR", "check PR description", "review commit message", before merging any PR, or when PR implementation changed during review. Do NOT use for extracting lessons (use learn-from-pr), writing tests (use write-tests-agent), or investigating build failures (use azdo-build-investigator and ci-analysis).
Build and run .NET MAUI device tests locally with category filtering. Supports iOS, MacCatalyst, Android on macOS; Android, Windows on Windows. Use TestFilter to run specific test categories.
Finds open PRs in the dotnet/maui and dotnet/docs-maui repositories that are good candidates for review, prioritizing by milestone, priority labels, partner/community status.
| 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'