Analyzing .NET Performance
dotnet/skills
Scans C# and .NET code for about 50 performance anti-patterns and reports prioritized findings with concrete fixes, at a scan depth you choose.
Repository-specific code review checks for Microsoft.Build.Locator covering loader, discovery, registration, public API and package changes.
$ npx skills add microsoft/aspire --skill code-review -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install microsoft/aspire code-review --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/microsoft/aspire.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/code-review .claude/skills/code-review && 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 "code-review" agent skill from https://github.com/microsoft/aspire/tree/main/.agents/skills/code-review into .claude/skills/code-review/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "code-review", 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/microsoft/aspire/tree/main/.agents/skills/code-reviewType 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 microsoft/aspire --skill code-review -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install microsoft/aspire code-review --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/microsoft/aspire.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/code-review .agents/skills/code-review && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "code-review" agent skill from https://github.com/microsoft/aspire/tree/main/.agents/skills/code-review into .agents/skills/code-review/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "code-review", 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 microsoft/aspire --skill code-review -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install microsoft/aspire code-review --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/microsoft/aspire.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/code-review .cursor/skills/code-review && 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 "code-review" agent skill from https://github.com/microsoft/aspire/tree/main/.agents/skills/code-review into .cursor/skills/code-review/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "code-review", 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/microsoft/aspire.git --path .agents/skills/code-review--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 microsoft/aspire --skill code-review -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install microsoft/aspire code-review --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/microsoft/aspire.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/code-review .gemini/skills/code-review && 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 "code-review" agent skill from https://github.com/microsoft/aspire/tree/main/.agents/skills/code-review into .gemini/skills/code-review/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "code-review", 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 microsoft/aspire code-reviewInstalls 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 microsoft/aspire --skill code-review -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/microsoft/aspire.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/code-review .github/skills/code-review && 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 "code-review" agent skill from https://github.com/microsoft/aspire/tree/main/.agents/skills/code-review into .github/skills/code-review/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "code-review", 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 microsoft/aspire --skill code-review -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install microsoft/aspire code-review --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/microsoft/aspire.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/code-review .opencode/skills/code-review && 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 "code-review" agent skill from https://github.com/microsoft/aspire/tree/main/.agents/skills/code-review into .opencode/skills/code-review/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "code-review", 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.
code-reviewRepository-specific code review checks for Microsoft.Build.Locator covering loader, discovery, registration, public API and package changes.
A reviewer using this skill starts by reading the repository's AGENTS.md. For changes to the loader, registration or discovery logic it also reads the matching msbuild-loader-netcore or msbuild-loader-netframework skill, or both when the code is common to the two, confirms those skills still describe the code accurately and requires them to be updated whenever behavior changes.
The review then applies a short list of invariants. Common code must work on both net46 and net8.0, with runtime-specific behavior behind the right conditional. Registration must happen before any core Microsoft.Build assembly loads. .NET Framework discovers Visual Studio while .NET 8 and later discover the .NET SDK, and .NET Framework changes must stay compatible across supported Visual Studio versions. Microsoft.Build.Locator.dll keeps minimal, framework-only dependencies, and intentional public API changes need compatibility suppressions plus an appropriate version change.
6 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit a3f44d2. 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.
Shell commands in SKILL.md call:
ghgitFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use gh and git, which can reach the network depending on how they are called.
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.
MSBuildLocator Code Review loads about 6.6k tokens when it runs. Until then it costs about 56 tokens; SKILL.md has 3,452 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 microsoft/aspire at commit a3f44d2, republished under its MIT licence (© microsoft). 3,452 words, ~6,602 tokens.
.claude/skills/code-review/SKILL.md (or your agent's skills folder).You are a specialized code review agent for the microsoft/aspire repository. Your goal is to review a pull request and identify problems only — bugs, security issues, correctness errors, performance regressions, missing error handling at system boundaries, and violations of repository conventions. Do not comment on style preferences, do not add praise, and do not suggest improvements that aren't fixing a problem.
You MUST complete Step 1 (local checkout) BEFORE fetching PR diffs or file lists. Branch-discovery calls (e.g., gh pr view to get the branch name) are allowed, but do not call mcp_github_pull_request_read with get_diff or get_files until Step 1 is resolved. Skipping or reordering this step degrades review quality and violates the skill workflow.
Parse user requests to extract:
7890) or full URL (e.g., https://github.com/microsoft/aspire/pull/7890)microsoft/aspire unless specified otherwiseIf no PR number is given, check if the current branch has an open PR:
gh pr view --json number,title,headRefName 2>/dev/nullCheck whether the PR branch is already checked out locally:
# Get PR branch name
gh pr view <number> --repo microsoft/aspire --json headRefName --jq '.headRefName'# Check if we're already on that branch
git branch --show-currentIf the current branch matches the PR branch, proceed to Step 2.
If the current branch does not match, ask the user how they'd like to proceed:
# Check for uncommitted changes
git status --porcelainIf there are uncommitted changes, warn the user and stash them:
git stash push -m "auto-stash before PR review of #<number>"Then check out the PR branch (this handles both same-repo and fork PRs):
gh pr checkout <number> --repo microsoft/aspireNo local action needed. Proceed to Step 2. Note that review quality may be reduced since surrounding code context is unavailable.
Fetch the PR metadata, diff, and file list. This skill uses the mcp_github_* tools (MCP GitHub integration). These are available when the GitHub MCP server is configured in the agent environment. If they are unavailable, fall back to the gh CLI for equivalent operations.
mcp_github_pull_request_read with method get to get the title, description, base branch, and author.mcp_github_pull_request_read with method get_files to get the list of changed files. Paginate if there are many files.mcp_github_pull_request_read with method get_diff to get the full diff.mcp_github_pull_request_read with method get_review_comments to see what's already been flagged. Don't duplicate existing review comments.Group files by area to guide how deeply to review each:
| Area | Paths | Review focus |
|---|---|---|
| Hosting | src/Aspire.Hosting*/** | Resource lifecycle, connection strings, health checks, parameter validation |
| Dashboard | src/Aspire.Dashboard/** | Blazor component logic, data binding, accessibility |
| Integrations/Components | src/Components/** | Client configuration, DI registration, connection handling |
| CLI | src/Aspire.Cli/** | Command parsing, error handling, exit codes |
| Tests | tests/** | Flaky test patterns (see below), test isolation, assertions |
| Deployment | src/Aspire.Hosting.Azure*/**, src/Aspire.Hosting.Docker/**, src/Aspire.Hosting.Kubernetes/**, tests/Aspire.Hosting.*Kubernetes.Tests/**, tests/Aspire.Cli.EndToEnd.Tests/**/Kubernetes*, tests/Aspire.Deployment.EndToEnd.Tests/** | Kubernetes/Helm, Docker, and Azure artifacts plus real deployment behavior, provisioning, cleanup |
| Build/Infra | eng/**, *.props, *.targets | Unintended side effects, breaking conditional logic |
| API files | src/*/api/*.cs | Should never be manually edited — flag if modified |
| Extension | extension/** | Localization, TypeScript usage |
| Docs/Config | docs/**, *.md, *.json | Accuracy only |
Read the diff carefully. For each changed file, also read surrounding context to understand the impact of the change.
mcp_github_get_file_contents to fetch specific files from the PR branch when additional context is needed.Before deciding whether tests are sufficient, perform a code-based impact analysis. Do not stop at "tests pass" or "there are tests"; map the changed code paths to the behaviors that could regress, then compare that list to the test changes.
For each non-trivial production change, identify:
Use the impact analysis to drive coverage review. A PR can have many tests and still be missing the regression test that matters. Conversely, do not demand every test category when the impact analysis shows the change does not affect that surface.
When the impact analysis is useful to explain a test finding, present it concisely in the finding: identify the impacted code path, the regression risk, and the missing test shape. For example: "This changes DcpExecutor.PrepareServices() port allocation timing, but there is no regression test showing a dependent resource can resolve the endpoint before workload creation."
Apply the repository-wide Conditional Test Selection rules in AGENTS.md.
Trace new test projects, CI jobs, workflows, scripts, and loose inputs to their
actual consumers before deciding whether the map needs to change.
Flag concrete selection gaps:
Aspire.slnx ProjectGraph as Layer 1-owned and
projects outside that graph as Layer 2 blind spots.ALL for broad impact, or
explicitly outside the selector. Do not allow ignore or prefilter entries
to hide a real PR-CI consumer.aspire add, generated AppHost package sets, package filters, templates, and
workspace copies. If a PR adds or removes one of these consumers, require the
corresponding exact affected_project_rules or path_rules entry to change
in the same PR.QuarantinedTest, ActiveIssue, and OuterloopTest on
runtime-consuming E2E scenarios. Regular-PR targets must include only
consumers eligible for regular PR CI; require the exact map edge and focused
regression coverage to change when eligibility changes.path_rules, prefer one stable
directory glob when enumerating individual files or RIDs would let a new
input silently miss its consumers. Accept cross-RID over-selection when that
is the explicit resilience tradeoff, and do not flag that over-selection as a
routing defect. Require focused exclusions only when a split has material
savings and can be maintained safely.reason concise: it should state what the rule covers
or why the target consumes the input. Request more detail only for a
non-obvious relationship or constraint. Do not turn reason into PR prose,
repeat the full rule, or preserve investigation history there. The targets
field owns the target list, so do not request those names again in reason.
Accept a category-level description; do not require the reason to explain
every target or make the rule self-contained. Selection-design rationale,
such as why paths are split or broadened, belongs in the PR or maintenance
documentation.run_* wiring for gated job: targets, advisory classification for
targets outside the regular PR matrix or job gates, and routing from reusable
workflow implementations to the jobs they implement.Selector behavior changes must keep the action, workflow gates, tool, map,
tests, and canonical documentation synchronized. Require real-map tests for
curated routing changes: a representative positive per distinct routing
boundary, focused negatives for deliberately excluded consumers, and a
structural assertion for consumer lists duplicated across rule types. Do not
request an acceptance case per consumer; instead audit the complete curated
list against the consuming workflow. Treat a widened or relaxed negative
expectation as a finding until the workflow's artifacts and execution lane
justify it. Require focused synthetic-map tests for engine or CLI behavior.
See docs/ci/test-trigger-map.md for the complete contract.
Every review must evaluate whether the PR has appropriate tests for the type of behavior being changed. Do not require tests for purely mechanical refactors, comments, or documentation-only changes, but do flag missing or insufficient coverage when production behavior changes and there is no explicit, convincing justification in the PR. Regression coverage is especially important: bug fixes and behavior changes should include tests that would have failed before the fix, not just broad happy-path coverage or regenerated snapshots.
Do not require tests for visual-only styling changes, including CSS selectors, colors, opacity, cursors, hover/focus/active appearance, or theme tokens. In particular, do not request Playwright assertions for computed styles or exact color values. Tests remain appropriate when styling changes also affect functional interaction, DOM or accessibility semantics, state transitions, or whether a user can complete a workflow.
Use this mapping when deciding whether coverage is appropriate:
| Change type | Expected coverage to look for |
|---|---|
| Core logic, resource model, integrations, parsers, validation, error handling, public API behavior | Unit or integration tests in the matching tests/*.*Tests/ project |
| User-visible Aspire CLI commands, prompts, terminal workflows, install/update behavior, or command output contracts | CLI end-to-end coverage under tests/Aspire.Cli.EndToEnd.Tests/, in addition to focused unit tests where practical |
| Dashboard UI logic, browser-only functional behavior, authentication flows, or interactions that bUnit cannot realistically exercise | Dashboard Playwright coverage under tests/Aspire.Dashboard.Tests/Integration/Playwright/, in addition to tests/Aspire.Dashboard.Tests/ or tests/Aspire.Dashboard.Components.Tests/ coverage for logic/components |
| Visual-only CSS, theme, color, opacity, cursor, or interaction-state appearance changes | No automated coverage required; do not request computed-style, exact-color, or screenshot assertions solely for these changes |
| Deployment, publish, provisioning, generated Kubernetes/Helm/Bicep/Docker artifacts, Azure resource wiring, or deployed endpoint behavior | Deployment end-to-end coverage under tests/Aspire.Deployment.EndToEnd.Tests/ when the behavior depends on actual deployment; generated artifact snapshot tests alone are not sufficient for deployment behavior changes |
| VS Code extension commands, tree views, debugger flows, RPC/DCP/MCP integration, extension UI, or CLI integration visible through VS Code | VS Code extension E2E coverage under extension/src/test-e2e/, in addition to Mocha unit tests under extension/src/test/ where practical |
For deployment changes, be especially strict: emitting or updating Helm charts, Kubernetes YAML, Docker Compose, Bicep, JSON manifests, or snapshot files only proves the serializer output. If the PR changes deployment behavior, resource connectivity, provisioning order, infrastructure composition, environment variables, endpoint exposure, health, cleanup, or upgrade behavior, look for a deployment test that actually deploys and verifies the scenario. It is acceptable for the PR to update or refactor an existing deployment E2E test instead of adding a brand-new one, but the resulting test must exercise the changed behavior.
When specialized coverage is missing and the appropriate shape is unclear, use or reference the relevant skill for review context: cli-e2e-testing, dashboard-testing, deployment-e2e-testing, or vscode-extension.
Only flag actual problems. Every comment must identify a concrete issue. Categories:
SingleOrDefault (throws on duplicates) replaced by FirstOrDefault (silently picks first); Debug.Assert guarding a release-relevant invariant that should be an if + throw; precondition checks that were removed.Task.Result, .Wait()).null! with a separate Initialize() method that must be called before use; DI registrations that depend on call ordering; any pattern where forgetting a call causes a runtime NRE with no compile-time safety.IDisposable objects (e.g., CancellationTokenSource, SemaphoreSlim) that are created but never disposed, even if the pattern was moved from elsewhere.ToList() calls with comments like "materialize to check count" where the count is never checked.api/*.cs files*.xlf filesNuGet.config adding unapproved feedsglobal.json== null instead of is null.github/workflows/** without a confirmed matching
update to the repository/enterprise allowed-actions policy. Flag each changed
owner/repo[/path]@<sha> reference as blocking, since the workflow fails with
"actions not allowed" until an admin adds the new SHA (settings live outside git, so the
PR must call out the SHAs to allow). Do not flag unchanged pins.AGENTS.md Code comments guidance when reviewing changed code. Flag only concrete problems, such as comments that contradict the code, workaround comments without a tracking link, parser/protocol/log parsing that omits the raw shape needed to understand edge cases, or comments around privacy/security-sensitive behavior that fail to explain the opt-in, scope, or WHY. Do not flag subjective missing comments or ask for comments on obvious code.WaitForHealthyAsync(), shared timeout budgets, hardcoded ports, Directory.SetCurrentDirectory usage, commented-out tests..editorconfig or formattersapi-review skill; this generic review only checks the stable ATS surface used for polyglot SDK generation.<SuppressFinalPackageVersion>true</SuppressFinalPackageVersion>, or when the affected exported API has [Experimental] or ATS experimental metadata.extension/CHANGELOG.md created by extension-release.yml for bot-authored extension-release/* PRs. It is expected, asynchronously replaced by extension-changelog.md, and merge-gated by extension-changelog-finalized.yml. Continue to flag unrelated placeholders or incomplete release notes outside this exact release flow.When code is moved from one file to another (e.g., extracting a class), treat the moved code as if it were newly written. Specifically:
OldClass is removed and replaced by NewClass<T>, verify that all call sites that depended on OldClass-specific behavior still work correctly.Complete the generic review before considering reviewing-aspire-architecture. Never invoke that specialist first merely because the PR touches hosting core, Azure integrations, dashboard, CLI, components, resource types, the app model, or deployment behavior.
After the generic pass, use a focused architectural escalation when all of these are true:
Do not escalate a concern that is already a concrete generic finding, merely high-risk code, a request for a second opinion, or a broad desire for more confidence. Preserve the completed generic findings, run at most one focused escalation for the change-set revision, and merge only net-new high-confidence specialist findings. Do not rerun the generic review after the specialist returns.
Do not post a review automatically. Instead, present all findings as a numbered list for the user to triage. Order by potential impact.
Then ask the user what to do next. The user may respond with:
Once the user has selected which findings to include:
Before submitting a review with event: "APPROVE", check whether the PR has auto-merge enabled:
gh pr view <number> --repo microsoft/aspire --json autoMergeRequest --jq '.autoMergeRequest'If the result is non-null (auto-merge is enabled) and the review includes comments, warn the user:
Warning: This PR has auto-merge enabled. Approving it will likely trigger an automatic merge before the author has a chance to address your review comments. Would you like to:
- Approve anyway — submit as APPROVE (auto-merge may proceed immediately).
- Downgrade to comment — submit as COMMENT instead so the author can address feedback first.
Wait for the user's response before proceeding. If they choose option 2, use event: "COMMENT" instead of "APPROVE".
Create a pending review:
Use mcp_github_pull_request_review_write with method create (no event parameter) to start a pending review.
Add inline comments for each selected finding:
Use mcp_github_add_comment_to_pending_review for each selected item. Place comments on the specific lines in the diff:
subjectType: LINE for line-specific comments, FILE for file-level commentsside: RIGHT for comments on new codepath: relative file pathline: the line number in the diffbody: concise description of the problem and how to fix itSubmit the review:
Use mcp_github_pull_request_review_write with method submit_pending:
event: "APPROVE" only if auto-merge is not enabled on the PR, or the user confirmed they want to approve after seeing the auto-merge warning.event: "COMMENT"."REQUEST_CHANGES" unless the user explicitly asks for it.© microsoft, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .agents/skills/code-review of microsoft/aspire.
Open the folder on GitHubat commit a3f44d2
MSBuildLocator Code Review 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 |
|---|---|---|---|---|---|---|
| MSBuildLocator Code Review this skillmicrosoft/aspire | 6.3k | — | ~6.6k | Automated safety check: Pass | MIT | |
| Analyzing .NET Performancedotnet/skills | 5.6k | 3 repos | ~3.1k | Automated safety check: Pass | MIT | |
| Code Reviewdotnet/macios | 2.9k | — | ~1.7k | Automated safety check: Pass | Custom licence | |
| MAUI PR Performance Analysisdotnet/maui | 23k | — | ~2.4k | Automated safety check: Pass | MIT | |
| Code Reviewjonathanpeppers/dotnes | 780 | — | ~2.1k | Automated safety check: Pass | MIT | |
| Find Reviewable MAUI PRsdotnet/maui | 23k | — | ~1.7k | Automated safety check: Pass | MIT |
dotnet/skills
Scans C# and .NET code for about 50 performance anti-patterns and reports prioritized findings with concrete fixes, at a scan depth you choose.
dotnet/macios
Review dotnet/macios PRs against established rules. An agent skill from dotnet/macios.
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.
jonathanpeppers/dotnes
Review dotnes pull requests against established repository rules.
dotnet/maui
Lists open pull requests in dotnet/maui and dotnet/docs-maui that are worth reviewing next, ranked by priority labels, milestone and partner or community origin.
sbroenne/mcp-windows
Review pull requests in mcp-windows for concrete bugs in MCP and CLI contracts, Windows UI automation, element identity, snapshots, bounded searches, and service lifetime.
microsoft/aspire
A skill your agent uses when asked to trigger or inspect Aspire internal Azure DevOps builds, source-index runs, or release validation on dnceng/internal; push to the internal mirror; download build…
microsoft/aspire
Backports a merged PR to a release branch by triggering the /backport bot, waiting for the bot-created PR, and filling in the shiproom template (Customer Impact, Testing, Risk, Regression?).
microsoft/aspire
Bumps the Aspire repository product version in eng/Versions.props using previous version-bump commits as guidance.
microsoft/aspire
Guide for diagnosing GitHub Actions test failures, extracting failed tests from runs, and creating or updating failing-test issues.
microsoft/aspire
Create a pull request using the repository PR template. An agent skill from microsoft/aspire.
microsoft/aspire
Guide for writing tests for the Aspire Dashboard. An agent skill from microsoft/aspire.
Works with
Categories
Repository-specific code review checks for Microsoft.Build.Locator covering loader, discovery, registration, public API and package changes. md. For changes to the loader, registration or discovery logic it also reads the matching msbuild-loader-netcore or msbuild-loader-netframework skill, or both when the code is common to the two, confirms those skills still describe the code accurately and requires them to be updated whenever behavior changes.
MSBuildLocator Code Review fits situations like: reviewing a pull request that changes MSBuild discovery or registration; checking that a change keeps both the .NET Framework and .NET 8 paths working; reviewing public API or package changes in Microsoft.Build.Locator.
Run `npx skills add microsoft/aspire --skill code-review -a claude-code`. Or copy the skill folder (.agents/skills/code-review in microsoft/aspire) into .claude/skills/code-review in your project. Claude Code loads it when a task matches its description.
Run `npx skills add microsoft/aspire --skill code-review -a codex`. Or copy the skill folder (.agents/skills/code-review in microsoft/aspire) into .agents/skills/code-review 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 microsoft/aspire --skill code-review -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/code-review, .gemini/skills/code-review, .github/skills/code-review and .opencode/skills/code-review in your project.
Going by SKILL.md and its folder, MSBuildLocator Code Review needs the command-line tools its instructions call (gh and git). Our summary lists: The MSBuildLocator repository, including its AGENTS.md.
SKILL.md contains no URLs. Its commands use gh and git, which can reach the network depending on how they are called. 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.
MSBuildLocator Code Review is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 6.6k tokens (SKILL.md is roughly 26k 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 MSBuildLocator Code Review: Analyzing .NET Performance (dotnet/skills, 5.6k stars), Code Review (dotnet/macios, 2.9k stars), MAUI PR Performance Analysis (dotnet/maui, 23k stars) and Code Review (jonathanpeppers/dotnes, 780 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
microsoft (a GitHub organization, an official publisher) maintains it in microsoft/aspire, which has 6,348 GitHub stars. The repository holds 22 skills in this directory. The repository was last updated on October 8, 2026.
Source: microsoft/aspire on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.