Official agent skill

MAUI Issue Triage Session

by dotnet in dotnet/maui

Runs an interactive triage session over open dotnet/maui GitHub issues, presenting them one at a time and suggesting milestones through bundled PowerShell scripts.

OfficialMITAuto-check passedDevelopment

Install MAUI Issue Triage Session

skills CLI
$ npx skills add dotnet/maui --skill issue-triage -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install dotnet/maui issue-triage --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/dotnet/maui.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.github/skills/issue-triage .claude/skills/issue-triage && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
issue-triage
GitHub stars
23k
Token cost
~2k tokens
SKILL.md length
694 words
Files
4 (incl. scripts)
Skills in repo
27
Repo updated
First seen
Licence
MIT

At a glance

Runs an interactive triage session over open dotnet/maui GitHub issues, presenting them one at a time and suggesting milestones through bundled PowerShell scripts.

  • Works in 6 steps: Initialize Session → Load Issues Into Memory → Present ONE Issue at a Time → …
  • Working through untriaged issues in the dotnet/maui repository
  • SKILL.md covers Prerequisites, When to Use, Triage Workflow and Script Parameters, plus 5 more sections
  • Runs PowerShell scripts from its folder; calls gh, pwsh and winget; reaches cli.github.com

What it does

A session has five parts: initialize with the current milestones and labels, load a batch of issues, present issues one at a time, suggest a milestone from each issue's characteristics, and track progress. The skill insists on its own scripts and forbids ad-hoc GitHub queries. `init-triage-session.ps1` fetches milestones, shows the servicing ones and creates a session file, `query-issues.ps1` loads issues without milestones while excluding labels such as needs-info and needs-repro, and `record-triage.ps1` records decisions. After each issue the agent waits for you to decide.

It needs the GitHub CLI installed and signed in with `gh auth login`, and the scripts exit with install instructions if it is missing. A separate skill, `issue-triage-labels`, backs the hosted maintainer-only label command, while this one keeps the human-approved milestone workflow. Typical requests are to find issues to triage, to grab a batch such as 10 issues, or to triage only Android issues. The excerpt ends where the agent waits for your decision.

When your agent uses it

  • Working through untriaged issues in the dotnet/maui repository
  • Choosing a milestone for each open issue with a human in the loop
  • Triaging a platform-specific batch of issues, such as Android

Example prompts

  • “Find issues to triage in dotnet/maui and start a session.”
  • “Grab me 10 issues to triage and suggest milestones one at a time.”
  • “Let's triage Android issues.”

Requirements

  • GitHub CLI (gh) installed and authenticated
  • PowerShell (pwsh) to run the scripts
  • Compatibility (from SKILL.md): Requires GitHub CLI (gh) installed and authenticated. Run `gh auth login` before using.

Workflow steps

6 steps, taken from the step headings in SKILL.md.

  1. Initialize Session
  2. Load Issues Into Memory
  3. Present ONE Issue at a Time
  4. Wait for User Decision
  5. Move to Next Issue
  6. When Batch is Empty

What it can do on your machine

Read from SKILL.md and the folder at commit b926f05. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Ships 3 files in scripts/ (PowerShell), which the agent can run.

    Shell commands in SKILL.md call:

    • gh
    • pwsh
    • winget
    • brew
    • jq

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Hosts in commands or code, which the agent is likely to contact:

    • cli.github.com

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

  • Compatibility

    Requires GitHub CLI (gh) installed and authenticated. Run `gh auth login` before using.

    From compatibility in the SKILL.md frontmatter.

Context cost

MAUI Issue Triage Session loads about 2k tokens when it runs. Until then it costs about 35 tokens; SKILL.md has 694 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~35
When it runs · the whole SKILL.md, loaded when a task matches
~2k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.

SKILL.md

The full file from dotnet/maui at commit b926f05, republished under its MIT licence (© dotnet). 694 words, ~1,995 tokens.

Download SKILL.mdSave it as .claude/skills/issue-triage/SKILL.md (or your agent's skills folder). This skill also uses 3 other files; get the full folder from GitHub.
name
issue-triage
description
Queries and triages open GitHub issues that need attention. Helps identify issues needing milestones, labels, or investigation.
compatibility
Requires GitHub CLI (gh) installed and authenticated. Run `gh auth login` before using.
metadata.author
dotnet-maui
metadata.version
2.3

Issue Triage Skill

For 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:

  1. Initializing a session with current milestones and labels
  2. Loading a batch of issues into memory
  3. Presenting issues ONE AT A TIME for triage decisions
  4. Suggesting milestones based on issue characteristics
  5. Tracking progress through a triage session

Prerequisites

GitHub CLI (gh) must be installed and authenticated:

bash
# 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.

When to Use

  • "Find issues to triage"
  • "Let's triage issues"
  • "Grab me 10 issues to triage"
  • "Triage Android issues"

Triage Workflow

🚨 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.

Step 1: Initialize Session

Start by initializing a session to load current milestones and labels:

bash
pwsh .github/skills/issue-triage/scripts/init-triage-session.ps1

What this does:

  • Fetches current milestones (SR4, SR5, etc.) from GitHub API
  • Displays servicing milestones for reference during triage
  • Creates session file to track progress
Step 2: Load Issues Into Memory

MANDATORY: Use query-issues.ps1 - it has the right filters!

bash
pwsh .github/skills/issue-triage/scripts/query-issues.ps1 -Limit 50 -OutputFormat triage

What this does:

  • Queries GitHub with exclusion filters: -label:s/needs-info -label:s/needs-repro -label:area-blazor -label:s/try-latest-version -label:s/move-to-vs-feedback
  • Returns issues without milestones
  • Stores results for one-at-a-time presentation

DON'T:

  • ❌ Use github-mcp-server-list_issues directly
  • ❌ Use github-mcp-server-search_issues without the same filters
  • ❌ Try to replicate the logic yourself - use the script!
Step 3: Present ONE Issue at a Time

IMPORTANT: When user asks to triage, present only ONE issue at a time in this format:

markdown
## 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?
Step 4: Wait for User Decision

Wait for user to say:

  • A milestone name (e.g., "Backlog", ".NET 10 SR5", ".NET 10 Servicing")
  • "yes" to accept suggestion
  • "skip" or "next" to move on without changes
  • Specific instructions (e.g., "next SR and add regression label")
Step 5: Move to Next Issue

After user decision, automatically present the NEXT issue.

Step 6: When Batch is Empty

🚨 CRITICAL: When you run out of issues, AUTOMATICALLY reload more issues.

bash
# 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:

  • ❌ Stop and ask "Load more?"
  • ❌ Say "No more issues found"
  • ❌ Use different GitHub queries

DO:

  • ✅ Automatically run query-issues.ps1 again with -Skip parameter
  • ✅ Continue presenting issues one at a time
  • ✅ Only stop when query returns zero issues

Script Parameters

query-issues.ps1
ParameterValuesDefaultDescription
-Platformandroid, ios, windows, maccatalyst, allallFilter by platform
-AreaAny area label (e.g., collectionview, shell)""Filter by area
-Limit1-100050Maximum issues to fetch
-Skip0+0Skip first N issues (for pagination)
-OutputFormattable, json, markdown, triagetableOutput format
-RequireAreaLabelswitchfalseOnly return issues with area-* labels
-SkipDetailsswitchfalseSkip fetching PRs/comments (faster)
Show full SKILL.md (249 more words)Show less

Milestone Suggestion Logic

🚨 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.

Suggestion Guidelines
ConditionSuggested MilestoneReason
Linked PR has milestonePR's milestone"PR already has milestone"
Has i/regression labelHighest numbered SR milestone"Regression - needs servicing"
Has open linked PRCurrent servicing milestone"Has open PR"
DefaultBacklog"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:

  • ✅ "Assign to .NET 10 SR5" (from session output)
  • ❌ "Assign to .NET 10 SR2" (guessing, might not exist)
  • ❌ "Assign to current SR" (ambiguous, multiple active)

Applying Triage Decisions

bash
# 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"

Label Quick Reference

Regression Labels:

  • i/regression - Confirmed regression
  • regressed-in-10.0.0 - Specific version

Priority Labels:

  • p/0 - Critical
  • p/1 - High
  • p/2 - Medium
  • p/3 - Low

iOS 26 / macOS 26:

  • version/iOS-26 - iOS 26 specific issue

Common Mistakes to Avoid

MistakeWhy It's WrongCorrect Approach
❌ Using github-mcp-server-list_issues directlyMissing exclusion filters (needs-info, needs-repro, etc.)✅ Use query-issues.ps1 script
❌ Stopping when batch is emptyThere 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 issuesCreates unnecessary interruption✅ Just load more automatically
❌ Using ad-hoc API queries with custom filtersLikely to miss or include wrong issues✅ Trust the skill's scripts - they have the right logic

Session Tracking (Optional)

bash
# 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, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 3 other files (scripts) in .github/skills/issue-triage of dotnet/maui.

  • SKILL.md
  • scripts/init-triage-session.ps1
  • scripts/query-issues.ps1
  • scripts/record-triage.ps1

Open the folder on GitHubat commit b926f05

Compare with similar skills

MAUI Issue Triage Session next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

MAUI Issue Triage Session compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
MAUI Issue Triage Session this skilldotnet/maui23k—~2kAutomated safety check: PassMIT
Codewhale Issue Filingcodewhale-hq/Codewhale41k—~1.3kAutomated safety check: PassMIT
Windows App SDK Issue Triage Reportmicrosoft/WindowsAppSDK4.7k—~3.4kAutomated safety check: PassApache-2.0
Pre-Release PR Triagejamiepine/voicebox57k—~3.1kAutomated safety check: PassMIT
WinAppSDK Triage Meeting Prepmicrosoft/WindowsAppSDK4.7k—~2.8kAutomated safety check: PassApache-2.0
Ouroboros Maintainer TriageQ00/ouroboros6.2k—~1.7kAutomated safety check: PassMIT

Similar skills

  • Codewhale Issue Filing

    codewhale-hq/Codewhale

    Turns a bug or idea into a single actionable Codewhale GitHub issue with evidence, a gap-naming title, acceptance criteria and related links.

    41k GitHub stars~1.3k tokensUpdated today
    DevelopmentAuto-check passed
  • Official

    Generates GitHub Feature Area Status reports for the Windows App SDK repository, scoring issues so teams can see what needs attention in each area.

    4.7k GitHub stars~3.4k tokensUpdated today
    DevelopmentAuto-check passed
  • Pre-Release PR Triage

    jamiepine/voicebox

    Sorts a backlog of open pull requests into must-merge, candidate, superseded and deferred, writes a triage doc and works the merge loop before a release.

    57k GitHub stars~3.1k tokensUpdated yesterday
    DevelopmentAuto-check passed
  • WinAppSDK Triage Meeting Prep

    microsoft/WindowsAppSDK

    Official

    Prepares the triage meeting summary for WinAppSDK Needs-Triage issues, with research-backed area suggestions, draft replies and a diff since the last triage.

    4.7k GitHub stars~2.8k tokensUpdated today
    DevelopmentAuto-check passed
  • Triages and works through GitHub issues and pull requests in the Q00/ouroboros repo as a maintainer, within a stated review boundary and clear limits on what it may change.

    6.2k GitHub stars~1.7k tokensUpdated today
    DevelopmentAuto-check passed
  • Audits open GitHub issues, categorizes them, flags duplicates and linked PRs in three phases, with optional deep analysis and comments posted only after validation.

    83k GitHub stars~3k tokensUpdated today
    DevelopmentAuto-check: notes

More from dotnet/maui

All 27 skills in this repo
  • Mines local Copilot CLI session logs for dotnet/maui to rank costly or failing runs, tag recurring failure modes, propose repo edits and emit guard evals.

    23k GitHub stars~3.4k tokensUpdated today
    Auto-check passed
  • Official

    Reviews the tests added in a pull request for fix coverage, quality, edge cases and test type, and recommends lighter test types where they would do.

    23k GitHub stars~2.9k tokensUpdated today
    Auto-check passed
  • Official

    Produces evidence-backed ship-readiness verdicts for .NET MAUI Servicing Releases and Previews, and drafts public-safe release handoff pages from the result.

    23k GitHub stars~15k tokensUpdated today
    Auto-check passed
  • Official

    Interprets pinned managed benchmark evidence for a dotnet/maui pull request and writes a narrative for the performance review workflow, without running or publishing anything.

    23k GitHub stars~2.4k tokensUpdated today
    Auto-check passed
  • PR Finalize

    dotnet/maui

    Official

    Checks that a pull request's title and description match its implementation and reviews the code for best practices before merge, without posting anything.

    23k GitHub stars~3.1k tokensUpdated today
    Auto-check passed
  • Official

    Adds MAUI-specific guardrails on top of the maestro-cli skill and Maestro MCP tools for darc, BAR, and channel or feed lookups in dotnet/maui.

    23k GitHub stars~10k tokensUpdated today
    Auto-check passed

Questions about MAUI Issue Triage Session

What does MAUI Issue Triage Session do?

Runs an interactive triage session over open dotnet/maui GitHub issues, presenting them one at a time and suggesting milestones through bundled PowerShell scripts. A session has five parts: initialize with the current milestones and labels, load a batch of issues, present issues one at a time, suggest a milestone from each issue's characteristics, and track progress. The skill insists on its own scripts and forbids ad-hoc GitHub queries.

When should I use MAUI Issue Triage Session?

MAUI Issue Triage Session fits situations like: working through untriaged issues in the dotnet/maui repository; choosing a milestone for each open issue with a human in the loop; triaging a platform-specific batch of issues, such as Android.

How do I install MAUI Issue Triage Session in Claude Code?

Run `npx skills add dotnet/maui --skill issue-triage -a claude-code`. Or copy the skill folder (.github/skills/issue-triage in dotnet/maui) into .claude/skills/issue-triage in your project. Claude Code loads it when a task matches its description.

How do I install MAUI Issue Triage Session in Codex?

Run `npx skills add dotnet/maui --skill issue-triage -a codex`. Or copy the skill folder (.github/skills/issue-triage in dotnet/maui) into .agents/skills/issue-triage in your project. Codex loads it when a task matches its description.

Can I use MAUI Issue Triage Session in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add dotnet/maui --skill issue-triage -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/issue-triage, .gemini/skills/issue-triage, .github/skills/issue-triage and .opencode/skills/issue-triage in your project.

What does MAUI Issue Triage Session need to run?

Going by SKILL.md and its folder, MAUI Issue Triage Session needs PowerShell for the scripts in its folder and the command-line tools its instructions call (gh, pwsh, winget, brew and jq). Our summary lists: GitHub CLI (gh) installed and authenticated; PowerShell (pwsh) to run the scripts. Compatibility (from SKILL.md): Requires GitHub CLI (gh) installed and authenticated. Run `gh auth login` before using..

Does MAUI Issue Triage Session access the network?

SKILL.md names 1 domain. In commands or code: cli.github.com; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.

Is MAUI Issue Triage Session safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.

What licence does MAUI Issue Triage Session use?

MAUI Issue Triage Session is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does MAUI Issue Triage Session use?

About 2k tokens (SKILL.md is roughly 8k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to MAUI Issue Triage Session?

Skills that share tags, products or a category with MAUI Issue Triage Session: Codewhale Issue Filing (codewhale-hq/Codewhale, 41k stars), Windows App SDK Issue Triage Report (microsoft/WindowsAppSDK, 4.7k stars), Pre-Release PR Triage (jamiepine/voicebox, 57k stars) and WinAppSDK Triage Meeting Prep (microsoft/WindowsAppSDK, 4.7k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains MAUI Issue Triage Session?

dotnet (a GitHub organization, an official publisher) maintains it in dotnet/maui, which has 23,321 GitHub stars. The repository holds 27 skills in this directory. The repository was last updated on October 8, 2026.

Source: dotnet/maui on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.