.NET MAUI Code Review
dotnet/efcore
Deep code-only review of a pull request or candidate patch for correctness, safety and .NET MAUI conventions, judging the code before reading the PR description.
Labels issues and pull requests in the dotnet/maui repository with area- and platform/ labels ONLY, based on technical content and platform-file conventions.
$ npx skills add dotnet/maui --skill agentic-labeler -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install dotnet/maui agentic-labeler --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/dotnet/maui.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.github/skills/agentic-labeler .claude/skills/agentic-labeler && rm -rf skills-srcUse ~/.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/
Install the "agentic-labeler" agent skill from https://github.com/dotnet/maui/tree/main/.github/skills/agentic-labeler into .claude/skills/agentic-labeler/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "agentic-labeler", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/dotnet/maui/tree/main/.github/skills/agentic-labelerType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add dotnet/maui --skill agentic-labeler -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install dotnet/maui agentic-labeler --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/dotnet/maui.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.github/skills/agentic-labeler .agents/skills/agentic-labeler && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "agentic-labeler" agent skill from https://github.com/dotnet/maui/tree/main/.github/skills/agentic-labeler into .agents/skills/agentic-labeler/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "agentic-labeler", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add dotnet/maui --skill agentic-labeler -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install dotnet/maui agentic-labeler --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/dotnet/maui.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.github/skills/agentic-labeler .cursor/skills/agentic-labeler && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "agentic-labeler" agent skill from https://github.com/dotnet/maui/tree/main/.github/skills/agentic-labeler into .cursor/skills/agentic-labeler/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "agentic-labeler", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/dotnet/maui.git --path .github/skills/agentic-labeler--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add dotnet/maui --skill agentic-labeler -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install dotnet/maui agentic-labeler --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/dotnet/maui.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.github/skills/agentic-labeler .gemini/skills/agentic-labeler && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "agentic-labeler" agent skill from https://github.com/dotnet/maui/tree/main/.github/skills/agentic-labeler into .gemini/skills/agentic-labeler/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "agentic-labeler", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install dotnet/maui agentic-labelerInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add dotnet/maui --skill agentic-labeler -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/dotnet/maui.git skills-src && mkdir -p .github/skills && cp -r skills-src/.github/skills/agentic-labeler .github/skills/agentic-labeler && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "agentic-labeler" agent skill from https://github.com/dotnet/maui/tree/main/.github/skills/agentic-labeler into .github/skills/agentic-labeler/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "agentic-labeler", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add dotnet/maui --skill agentic-labeler -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install dotnet/maui agentic-labeler --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/dotnet/maui.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.github/skills/agentic-labeler .opencode/skills/agentic-labeler && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "agentic-labeler" agent skill from https://github.com/dotnet/maui/tree/main/.github/skills/agentic-labeler into .opencode/skills/agentic-labeler/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "agentic-labeler", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
agentic-labelerLabels issues and pull requests in the dotnet/maui repository with area- and platform/ labels ONLY, based on technical content and platform-file conventions.
Agentic Labeler is an agent skill from dotnet/maui, published by the product's own GitHub organization. Labels issues and pull requests in the dotnet/maui repository with area- and platform/ labels ONLY, based on technical content and platform-file conventions. Used by the gh-aw agentic-labeler workflow and available for batch evaluation and interactive Copilot CLI usage.
Its SKILL.md is about 3.5k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files (for example `tests/eval.vally.yaml`).
It sits in Development, covering Pull requests. It works with .NET. The repository describes itself as: .NET MAUI is the .NET Multi-platform App UI, a framework for building native device applications spanning mobile, tablet, and desktop. The licence is MIT.
2 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit b926f05. It shows what the files ask for, not the result of running them.
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.
No scripts in the folder and no shell commands in SKILL.md.
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Agentic Labeler loads about 3.5k tokens when it runs. Until then it costs about 73 tokens; SKILL.md has 1,652 words of instructions outside code blocks.
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.
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); files beside SKILL.md are not scanned.
The full file from dotnet/maui at commit b926f05, republished under its MIT licence (© dotnet). 1,652 words, ~3,457 tokens.
.claude/skills/agentic-labeler/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.Labeling rules for the dotnet/maui repository. These rules are the canonical source of truth for how issues and PRs should be labeled. They are consumed by the agentic-labeler gh-aw workflow and can also be used standalone for batch evaluation or interactive labeling.
area-* and platform/* ONLYThe labeler applies only two label families, and nothing else:
area-* — derived from the subject matter (control name, area like layout / navigation / xaml / infrastructure / etc.). Choose the single most specific match for the dominant subsystem; see the tie-breaking rules below.platform/* — derived from changed-file platform conventions on PRs, or from explicit platform mentions on issues. Apply all that fit. Exception: platform/tizen is never applied by this labeler under any circumstance, even when Tizen files are touched or Tizen is named in an issue (see the platform-label rules below).The labeler must NOT apply any other label, ever. Specifically, do not apply:
t/* (kind: t/bug, t/enhancement ☀️, t/docs 📝, t/breaking 💥, t/native-embedding, t/desktop, t/a11y, etc.) — the issue/PR author or other automation owns these.i/* (indicators: i/regression, etc.) — set during triage based on investigation, not initial content.s/* (status: s/needs-info, s/needs-repro, s/needs-verification, s/needs-attention, s/triaged, s/verified, s/no-repro, s/not-a-bug, s/duplicate 2️⃣, s/pr-needs-author-input, etc.) — managed by dotnet-policy-service[bot] and human triagers.p/* (priority: p/0, p/1, p/2, p/3) — set by maintainers.partner/* (e.g., partner/syncfusion) — set by partner-tracking automation.perf/* (e.g., perf/memory-leak 💦) — set during perf investigation.backport/*, regressed-in-*, version/* — set during triage / release management.untriaged, :watch: Not Triaged — applied by repo automation on issue open.area-* or platform/* label.If the only labels that clearly apply are not area-* or platform/*, noop instead — see the noop section below.
If neither an area-* nor a platform/* label clearly applies, noop.
list_label MCP tool (provided by the labels toolset). Note the singular name — it is list_label, not list_labels.list_label tool only returns the first ~100 labels (no pagination). This repo has ~440 labels, so many area-* and platform/* labels will be missing from the listing. If you have a strong candidate area-* or platform/* label name in mind that isn't in the listing, verify it exists with the get_label tool before adding it.area-* label (issues and PRs) — exactly oneApply exactly one area-* label. Pick the single most specific match for the dominant subsystem:
area-controls-<name> (e.g., CollectionView → area-controls-collectionview, Entry → area-controls-entry, Map / Maps → area-controls-map, Window → area-controls-window, WebView → area-controls-webview, HybridWebView → area-controls-hybridwebview). Always use the area-controls-<name> prefix — never invent shorter aliases (e.g., the Maps area is area-controls-map, not area-maps).area-layout.area-navigation (or area-controls-shell when Shell-specific).area-xaml.area-setup.area-tooling.area-templates.area-blazor.area-essentials.area-drawing.area-gestures.area-core-lifecycle / area-core-hosting.area-core-dispatching.area-localization.area-docs.area-ai-agents. This covers .github/agents/**, .github/skills/**, gh-aw workflow sources and generated locks, and supporting review/test/fix orchestration when the AI-agent behavior is the primary subject.area-infrastructure. This covers:[dnceng-bot] codeflow/branch-mirroring issues (the standard "Branch … can't be mirrored to Azdo" issues) → area-infrastructure (do not noop these — they have a clear area)..github/workflows/*.yml, .github/scripts/, eng/pipelines/, eng/common/, or other CI infrastructure files → area-infrastructure (prefer this over area-tooling, which is for the dev-build/MSBuild/workload surface that ships to users).area-ai-agents when the change primarily alters an agent's behavior, prompt, skill, evaluation, or AI-assisted developer workflow. Command parsing and trigger/dispatch behavior for AI-assisted review count as agent behavior. Choose area-infrastructure when the change primarily alters generic CI execution, authentication, scheduling, or pipeline plumbing without changing the AI-assisted workflow's behavior, even if an agent consumes that infrastructure.area-infrastructure (and omit any product area-*). If the product-code change is the focus and the infra change is incidental (e.g., a small workflow tweak that supports a feature), prefer the product area-* label and omit area-infrastructure.Tie-breaking when multiple areas could apply — pick the single most specific:
area-controls-tabbedpage over area-navigation; area-controls-collectionview over area-layout; area-controls-shell over area-navigation.area-safearea over area-layout; area-core-dispatching over area-core-lifecycle.area-controls-collectionview), not the layout system.If after applying these heuristics there is still no single best fit, noop rather than apply two area labels.
platform/* labelsThis is the most important behavior for PRs.
For pull requests, infer platform/* labels primarily from the changed files, using the rules below. Each rule maps a file pattern to one or more platform labels. Apply a platform/* label if any changed file matches that pattern. The path patterns intentionally target the established MAUI source-layout conventions — match the patterns in the table below (e.g., /Platform/<Name>/, /Platforms/<Name>/, /Handlers/*/<Name>/). Do not match on a bare top-level /Android/, /iOS/, /Windows/, or /MacCatalyst/ segment that is not part of one of the patterns in the table — bare segments occur in templates, docs, and unrelated tooling paths and are not platform-specific source code.
Note on iOS / MacCatalyst: file-extension patterns and directory patterns map differently because of MAUI's compilation conventions — they are split into separate rows below.
| File pattern (changed in the PR) | Label(s) to apply |
|---|---|
*.android.cs, *.Android.cs, paths containing /Platform/Android/, /Platforms/Android/, /AndroidNative/, or handler subdirectories like /Handlers/*/Android/ | platform/android |
*.ios.cs, *.iOS.cs (file-extension pattern — these compile for both iOS and MacCatalyst) | platform/ios and platform/macos |
Paths containing /Platform/iOS/, /Platforms/iOS/, or handler subdirectories like /Handlers/*/iOS/ (directory pattern — these compile only for the iOS TFM) | platform/ios only |
*.maccatalyst.cs, *.MacCatalyst.cs, paths containing /Platform/MacCatalyst/, /Platforms/MacCatalyst/, or handler subdirectories like /Handlers/*/MacCatalyst/ | platform/macos |
*.windows.cs, *.Windows.cs, paths containing /Platform/Windows/, /Platforms/Windows/, or handler subdirectories like /Handlers/*/Windows/ | platform/windows |
Notes:
src/Core/src/*.cs without a platform suffix, or src/Controls/src/Core/), do not apply any platform/* label.platform/* label..ios.cs files compile for both iOS and MacCatalyst (see split table rows above)..maccatalyst.cs files do not compile for iOS — apply only platform/macos for those.*.tizen.cs files and /Platform/Tizen/ or /Platforms/Tizen/ paths exist in the source tree, but platform/tizen is never auto-applied. Treat Tizen files as if they had no platform suffix for labeling purposes: pick an area-* label normally based on the code's subject matter (e.g., TabbedPage.tizen.cs → area-controls-tabbedpage) and apply no platform/* label for the Tizen content. Only noop if the global noop rules below (e.g., no area-* clearly fits) apply on their own merits.For issues, infer platform/* labels only for platforms the reporter explicitly identifies as affected: Android, iOS, macOS / Mac Catalyst, or Windows. This includes the issue-template's "Affected platforms" field, plus clear evidence in the title, body, or attached logs/stack traces. Do not guess.
platform/* label per named platform — even when the list covers every supported platform (e.g., "iOS, Android, Windows, macOS" → apply all four).platform/* label. If a generic phrase is accompanied by an explicit affected-platform list, the named list wins — apply each named platform's label (e.g., "all platforms (iOS, Android, Windows, macOS)" → apply all four).platform/tizen — even when the reporter names Tizen, includes Tizen in an "Affected platforms" enumeration, or attaches Tizen logs. Tizen mentions are silently dropped from the platform set.Some items should not be labeled. If any of the following apply, skip labeling entirely:
[automated] Merge branch 'main' => 'net11.0' or similar bot-created merge PRs. These are infrastructure, not feature/bug work.dependencies and area-infrastructure labels.area-* or platform/* label clearly fits — when the content is too vague or ambiguous to determine area or platform with confidence, or when the only labels that would apply are outside the allowed area-* / platform/* scope.⚠️ Do NOT noop
[dnceng-bot]codeflow/branch-mirroring issues. Despite being bot-authored, they have a clear area (area-infrastructure) and should be labeled, not noop'd. The noop rule for automated PRs above is specifically about[automated] Merge branch …titles.
area-* or platform/*. No t/*, i/*, s/*, p/*, partner/*, perf/*, backport/*, regressed-in-*, version/*, untriaged, :watch: Not Triaged, or anything else. See the "Scope" section at the top for the full prohibition.platform/tizen under any circumstance — Tizen is excluded from this labeler even when Tizen files are touched or Tizen is named in an issue body, title, or affected-platforms field.platform/* labels to PRs that don't touch platform-specific files.area-* or platform/* labels that clearly fit.© dotnet, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 1 other file in .github/skills/agentic-labeler of dotnet/maui.
Open the folder on GitHubat commit b926f05
Agentic Labeler 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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Agentic Labeler this skilldotnet/maui | 23k | — | ~3.5k | Automated safety check: Pass | MIT | |
| .NET MAUI Code Reviewdotnet/efcore | 15k | — | ~2k | Automated safety check: Pass | MIT | |
| Code Reviewjonathanpeppers/dotnes | 780 | — | ~2.1k | Automated safety check: Pass | MIT | |
| Open Pull RequestGremlinq/ExRam.Gremlinq | 187 | — | ~1.5k | Automated safety check: Pass | MIT | |
| Gh Stackdotnet/macios | 2.9k | 3 repos | ~10k | Automated safety check: Pass | Custom licence | |
| Pull RequestOpenCoreMMO/OpenCoreMMO | 481 | — | ~814 | Automated safety check: Pass | GPL-3.0 |
dotnet/efcore
Deep code-only review of a pull request or candidate patch for correctness, safety and .NET MAUI conventions, judging the code before reading the PR description.
jonathanpeppers/dotnes
Review dotnes pull requests against established repository rules.
Gremlinq/ExRam.Gremlinq
A skill your agent uses when opening a pull request for the current branch, or when an existing pull request needs a better description - including when the check-description CI check has failed.
dotnet/macios
Manage stacked branches and pull requests with the gh-stack GitHub CLI extension.
OpenCoreMMO/OpenCoreMMO
Create a pull request for OpenCoreMMO following the project's PR template.
Aiko-IT-Systems/DisCatSharp
Guides changes to the DisCatSharp C# Discord library: tracing a payload field through parsing, serialization and caches, then validating across target frameworks.
dotnet/maui
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.
dotnet/maui
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.
dotnet/maui
Produces evidence-backed ship-readiness verdicts for .NET MAUI Servicing Releases and Previews, and drafts public-safe release handoff pages from the result.
dotnet/maui
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.
dotnet/maui
Checks that a pull request's title and description match its implementation and reviews the code for best practices before merge, without posting anything.
dotnet/maui
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.
Works with
Categories
Labels issues and pull requests in the dotnet/maui repository with area- and platform/ labels ONLY, based on technical content and platform-file conventions. Agentic Labeler is an agent skill from dotnet/maui, published by the product's own GitHub organization. Labels issues and pull requests in the dotnet/maui repository with area- and platform/ labels ONLY, based on technical content and platform-file conventions.
Agentic Labeler fits situations like: tasks that involve Pull requests.
Run `npx skills add dotnet/maui --skill agentic-labeler -a claude-code`. Or copy the skill folder (.github/skills/agentic-labeler in dotnet/maui) into .claude/skills/agentic-labeler in your project. Claude Code loads it when a task matches its description.
Run `npx skills add dotnet/maui --skill agentic-labeler -a codex`. Or copy the skill folder (.github/skills/agentic-labeler in dotnet/maui) into .agents/skills/agentic-labeler in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add dotnet/maui --skill agentic-labeler -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/agentic-labeler, .gemini/skills/agentic-labeler, .github/skills/agentic-labeler and .opencode/skills/agentic-labeler in your project.
SKILL.md names no scripts, command-line tools or credentials: Agentic Labeler is instructions for the agent only.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
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. Review the folder before installing.
Agentic Labeler is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.5k tokens (SKILL.md is roughly 14k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Agentic Labeler: .NET MAUI Code Review (dotnet/efcore, 15k stars), Code Review (jonathanpeppers/dotnes, 780 stars), Open Pull Request (Gremlinq/ExRam.Gremlinq, 187 stars) and Gh Stack (dotnet/macios, 2.9k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
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.