Release Roslynator
dotnet/roslynator
A skill your agent uses when shipping a roslynator release, rolling CHANGELOG.md [Unreleased], updating the VS Code extension changelog, creating a GitHub v release, or optionally tagging cli-v.
Verifies that APIs listed in a generated .NET API diff exist in the shipped build and trace to real pull requests, before release notes are written.
$ npx skills add dotnet/core --skill api-diff-validation -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install dotnet/core api-diff-validation --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/core.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.github/skills/api-diff-validation .claude/skills/api-diff-validation && 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 "api-diff-validation" agent skill from https://github.com/dotnet/core/tree/main/.github/skills/api-diff-validation into .claude/skills/api-diff-validation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "api-diff-validation", 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/core/tree/main/.github/skills/api-diff-validationType 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/core --skill api-diff-validation -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install dotnet/core api-diff-validation --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/dotnet/core.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.github/skills/api-diff-validation .agents/skills/api-diff-validation && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "api-diff-validation" agent skill from https://github.com/dotnet/core/tree/main/.github/skills/api-diff-validation into .agents/skills/api-diff-validation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "api-diff-validation", 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/core --skill api-diff-validation -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install dotnet/core api-diff-validation --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/dotnet/core.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.github/skills/api-diff-validation .cursor/skills/api-diff-validation && 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 "api-diff-validation" agent skill from https://github.com/dotnet/core/tree/main/.github/skills/api-diff-validation into .cursor/skills/api-diff-validation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "api-diff-validation", 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/core.git --path .github/skills/api-diff-validation--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/core --skill api-diff-validation -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install dotnet/core api-diff-validation --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/dotnet/core.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.github/skills/api-diff-validation .gemini/skills/api-diff-validation && 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 "api-diff-validation" agent skill from https://github.com/dotnet/core/tree/main/.github/skills/api-diff-validation into .gemini/skills/api-diff-validation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "api-diff-validation", 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/core api-diff-validationInstalls 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/core --skill api-diff-validation -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/dotnet/core.git skills-src && mkdir -p .github/skills && cp -r skills-src/.github/skills/api-diff-validation .github/skills/api-diff-validation && 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 "api-diff-validation" agent skill from https://github.com/dotnet/core/tree/main/.github/skills/api-diff-validation into .github/skills/api-diff-validation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "api-diff-validation", 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/core --skill api-diff-validation -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/core api-diff-validation --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/dotnet/core.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.github/skills/api-diff-validation .opencode/skills/api-diff-validation && 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 "api-diff-validation" agent skill from https://github.com/dotnet/core/tree/main/.github/skills/api-diff-validation into .opencode/skills/api-diff-validation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "api-diff-validation", 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.
api-diff-validationVerifies that APIs listed in a generated .NET API diff exist in the shipped build and trace to real pull requests, before release notes are written.
This is the verification layer above a skill that only produces API diff reports. It takes the generated diff, a `build-metadata.json` giving the NuGet feed and ref-pack versions of the exact build, and the milestone's candidate PRs. The agent points at that build rather than any locally installed SDK, then uses `dotnet-inspect` through `dnx` to look up each claimed type or member in the ref pack. An API missing from the build is flagged for exclusion because it may have been renamed, kept internal or reverted.
Each new API is then cross-referenced against candidate PRs from `changes.json`. If none matches, the agent searches merged PRs with `gh search prs`, and if no implementing PR is found and the inspection tool cannot confirm the API, it is not documented. A further step on detecting missed reverts is cut off in the excerpt.
5 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 44927bc. 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:
ghFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use gh, 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.
.NET API Diff Validation loads about 992 tokens when it runs. Until then it costs about 106 tokens; SKILL.md has 409 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/core at commit 44927bc, republished under its MIT licence (© dotnet). 409 words, ~992 tokens.
.claude/skills/api-diff-validation/SKILL.md (or your agent's skills folder).Confirm that the public APIs claimed by an API diff actually shipped in the
target build, and that each new API traces to a real PR. This is the verification
layer on top of the pure api-diff skill (which only produces the diff reports).
Use it to catch, before release notes are written:
api-diff/ reports), or the target
release identity.build-metadata.json — nuget.source (the dnceng dotnet<major> feed) and
the ref-pack package versions for the exact build.changes.json / candidate PRs (for cross-referencing).dotnet-inspect is used here as a tool, not a separate skill: it reflects over
the real ref packs from the build's feed, so it answers "does this API exist in
this build?" authoritatively.
Read build-metadata.json for the target. Use its nuget.source as $FEED and
the ref-pack versions (e.g. Microsoft.NETCore.App.Ref@<version>) as $VER. For
behavior that requires the SDK (rare here), install it side-by-side and scoped —
see the validate-code-samples skill. Do
not trust a machine-wide SDK for preview work.
# Does a new type/member exist in the build's ref pack?
dnx dotnet-inspect -y -- find "*AnyNewLine*" \
--package "Microsoft.NETCore.App.Ref@${VER}" --source "$FEED"
# Enumerate a type's members to confirm a signature.
dnx dotnet-inspect -y -- member RegexOptions \
--package "Microsoft.NETCore.App.Ref@${VER}" --source "$FEED" -k field
# Diff the public API between two builds (sanity-check the generated diff).
dnx dotnet-inspect -y -- diff \
--package "Microsoft.NETCore.App.Ref@${PREV}..${VER}" --source "$FEED"For each API the diff claims is new, confirm it is present. If an API is missing from the build, treat it as a serious signal: it may have been renamed, kept internal, or reverted after the diff was captured — flag it for exclusion.
For each new API/namespace in the diff, verify at least one candidate PR (from
changes.json) covers it. If an API has no matching PR, search for the
implementing PR explicitly before trusting it:
gh search prs --repo dotnet/<repo> --merged "<distinctive API name>" \
--json number,title,mergedAt,urlIf no implementing PR can be found and dotnet-inspect cannot confirm the API,
do not document it.
An API may appear in the diff yet have been backed out later. Confirm presence
in the build with dotnet-inspect (step 2) and check for a follow-up revert PR:
gh search prs --repo dotnet/<repo> --state merged \
"\"This reverts\" <pr-number>" --json number,title,urlIf the API is absent from the build or a merged revert exists, mark the feature as
reverted (suppress it / score it down in features.json).
Emit a concise verdict per checked API: present (with PR), missing (rename/internal/revert — exclude), or unverified (describe without naming the type). Scope the report to the documented/announced surface; do not surface undocumented deltas.
© dotnet, 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 .github/skills/api-diff-validation of dotnet/core.
Open the folder on GitHubat commit 44927bc
.NET API Diff Validation 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 |
|---|---|---|---|---|---|---|
| .NET API Diff Validation this skilldotnet/core | 22k | — | ~992 | Automated safety check: Pass | MIT | |
| Release Roslynatordotnet/roslynator | 3.5k | — | ~1k | Automated safety check: Pass | Custom licence | |
| Cutting A ReleaseTriliumNext/Trilium | 38k | — | ~3.2k | Automated safety check: Pass | AGPL-3.0 | |
| Mole CLI Release Flowtw93/Mole | 69k | — | ~2.5k | Automated safety check: Pass | GPL-3.0 | |
| Draft Release Notesjamiepine/voicebox | 57k | — | ~941 | Automated safety check: Pass | MIT | |
| Mole Release Notes Publishertw93/Mole | 69k | — | ~1.9k | Automated safety check: Pass | GPL-3.0 |
dotnet/roslynator
A skill your agent uses when shipping a roslynator release, rolling CHANGELOG.md [Unreleased], updating the VS Code extension changelog, creating a GitHub v release, or optionally tagging cli-v.
TriliumNext/Trilium
A skill your agent uses when cutting, preparing, or debugging a Trilium release — bumping the monorepo version, tagging, or diagnosing a failed "Release" workflow run.
tw93/Mole
Runbook for assessing and executing a Mole CLI release: distribution channels, pre-flight checks, capital-V tags, build artifacts and the handoff to curated release notes.
jamiepine/voicebox
Writes or refreshes the Unreleased section of CHANGELOG.md as a themed narrative built from the commits, PRs and diff since the last version tag.
tw93/Mole
Publishes curated, bilingual release notes for an existing Mole version tag with gh release edit, including contributor thanks and reactions, after the release workflow finishes.
jamiepine/voicebox
Ends a release cycle by moving the Unreleased changelog notes under a dated version heading, bumping version files with bumpversion and tagging the commit.
dotnet/core
Audits and updates os-packages.json files listing the Linux packages each .NET release needs per distro, then regenerates the Markdown from the JSON.
dotnet/core
Audits and updates the supported-os.json files for .NET releases, checking them against upstream lifecycle data and regenerating the markdown with the release-notes tool.
dotnet/core
Validates .NET release data with the release-notes CLI: download URL liveness, SHA512 hashes, CDN latest.version files and aka.ms redirects.
dotnet/core
Produces the changes.json manifest for a .NET preview, RC or GA milestone by choosing the right VMR base and head refs and running release-notes generate changes.
dotnet/core
Ranks the changes in a release manifest and writes a scored features file that release notes, docs and blog posts can each cut at their own threshold.
dotnet/core
Audits a scored features.json file and its draft release notes against editorial examples to catch over-scored, under-scored, or missing entries.
Categories
Verifies that APIs listed in a generated .NET API diff exist in the shipped build and trace to real pull requests, before release notes are written. This is the verification layer above a skill that only produces API diff reports.json` giving the NuGet feed and ref-pack versions of the exact build, and the milestone's candidate PRs.
.NET API Diff Validation fits situations like: checking an API diff against the actual preview or release build before writing release notes; finding APIs that were reverted, renamed or kept internal after the diff was captured; tracing a suspicious new API back to the PR that implemented it.
Run `npx skills add dotnet/core --skill api-diff-validation -a claude-code`. Or copy the skill folder (.github/skills/api-diff-validation in dotnet/core) into .claude/skills/api-diff-validation in your project. Claude Code loads it when a task matches its description.
Run `npx skills add dotnet/core --skill api-diff-validation -a codex`. Or copy the skill folder (.github/skills/api-diff-validation in dotnet/core) into .agents/skills/api-diff-validation 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/core --skill api-diff-validation -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/api-diff-validation, .gemini/skills/api-diff-validation, .github/skills/api-diff-validation and .opencode/skills/api-diff-validation in your project.
Going by SKILL.md and its folder, .NET API Diff Validation needs the command-line tools its instructions call (gh). Our summary lists: `dotnet-inspect`, run through `dnx`; GitHub CLI (`gh`); `build-metadata.json` and `changes.json` for the target milestone.
SKILL.md contains no URLs. Its commands use gh, 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.
.NET API Diff Validation is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 992 tokens (SKILL.md is roughly 4k 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 .NET API Diff Validation: Release Roslynator (dotnet/roslynator, 3.5k stars), Cutting A Release (TriliumNext/Trilium, 38k stars), Mole CLI Release Flow (tw93/Mole, 69k stars) and Draft Release Notes (jamiepine/voicebox, 57k 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/core, which has 22,038 GitHub stars. The repository holds 15 skills in this directory. The repository was last updated on October 5, 2026.
Source: dotnet/core on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.