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.
Creates the GitHub release discussion in dotnet/core and the locked mirror issue in dotnet/announcements for a .NET release, safely re-runnable after interruptions.
$ npx skills add dotnet/core --skill publish-release-announcements -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install dotnet/core publish-release-announcements --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/publish-release-announcements .claude/skills/publish-release-announcements && 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 "publish-release-announcements" agent skill from https://github.com/dotnet/core/tree/main/.github/skills/publish-release-announcements into .claude/skills/publish-release-announcements/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "publish-release-announcements", 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/publish-release-announcementsType 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 publish-release-announcements -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install dotnet/core publish-release-announcements --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/publish-release-announcements .agents/skills/publish-release-announcements && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "publish-release-announcements" agent skill from https://github.com/dotnet/core/tree/main/.github/skills/publish-release-announcements into .agents/skills/publish-release-announcements/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "publish-release-announcements", 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 publish-release-announcements -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install dotnet/core publish-release-announcements --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/publish-release-announcements .cursor/skills/publish-release-announcements && 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 "publish-release-announcements" agent skill from https://github.com/dotnet/core/tree/main/.github/skills/publish-release-announcements into .cursor/skills/publish-release-announcements/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "publish-release-announcements", 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/publish-release-announcements--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 publish-release-announcements -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install dotnet/core publish-release-announcements --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/publish-release-announcements .gemini/skills/publish-release-announcements && 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 "publish-release-announcements" agent skill from https://github.com/dotnet/core/tree/main/.github/skills/publish-release-announcements into .gemini/skills/publish-release-announcements/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "publish-release-announcements", 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 publish-release-announcementsInstalls 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 publish-release-announcements -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/publish-release-announcements .github/skills/publish-release-announcements && 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 "publish-release-announcements" agent skill from https://github.com/dotnet/core/tree/main/.github/skills/publish-release-announcements into .github/skills/publish-release-announcements/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "publish-release-announcements", 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 publish-release-announcements -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 publish-release-announcements --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/publish-release-announcements .opencode/skills/publish-release-announcements && 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 "publish-release-announcements" agent skill from https://github.com/dotnet/core/tree/main/.github/skills/publish-release-announcements into .opencode/skills/publish-release-announcements/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "publish-release-announcements", 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.
publish-release-announcementsCreates the GitHub release discussion in dotnet/core and the locked mirror issue in dotnet/announcements for a .NET release, safely re-runnable after interruptions.
Built around the fact that GitHub create mutations are not idempotent: creating a discussion or issue twice makes duplicates, and a canceled tool call does not prove the create failed. The goal is at most one new discussion in dotnet/core and at most one mirror issue in dotnet/announcements that links to it, with title, body, labels and lock state verified after each write.
Inputs are the release identifier, the release notes directory, the prior discussion and mirror issue, and the blog announcement URL if one exists. Preflight reads the local release notes, fetches the previous posts as a formatting template, searches for existing posts before creating anything, and treats cancellations as ambiguous success. It is not for writing release notes or generating features.json, and it needs the gh CLI with permission to create discussions and issues in both repositories.
11 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.
Hosts in commands or code, which the agent is likely to contact:
github.comFrom 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.
Requires gh CLI with permission to query and create discussions and issues across dotnet/core and dotnet/announcements.
From compatibility in the SKILL.md frontmatter.
Publish .NET Release Announcements loads about 1.6k tokens when it runs. Until then it costs about 133 tokens; SKILL.md has 810 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). 810 words, ~1,565 tokens.
.claude/skills/publish-release-announcements/SKILL.md (or your agent's skills folder).Use this skill when the release notes are already published in this repository and you need to publish the corresponding GitHub discussion and announcements mirror.
This skill exists because GitHub create mutations are not idempotent. Creating a discussion or issue twice creates duplicates. A canceled tool call or partial terminal result does not prove the create failed.
The goal is to:
dotnet/core discussion for the releasedotnet/announcements mirror issue that links to the
discussionCollect these before creating anything:
.NET 11 Preview 3release-notes/11.0/preview/preview3/dotnet/coredotnet/announcementsBefore any create mutation, perform these checks in order.
Read the target release directory and README.md to confirm:
Do not copy links from the previous discussion without checking that the new files exist.
Fetch:
dotnet/core discussion bodydotnet/announcements issue bodyPreserve the established wording and structure unless the current release notes or publishing pattern changed.
This step is mandatory.
Search dotnet/core for an existing discussion matching the target title or
blog/release link. Search dotnet/announcements for an existing issue matching
the same release title.
If a matching discussion or issue already exists:
If a terminal run, tool call, or agent step was canceled after sending a create command, assume the create may already have succeeded.
The next action must be a search or direct fetch for the expected title, not a second create attempt.
Update only the release-specific fields:
.NET 11 Preview 3Use gh api graphql or another non-interactive gh command to create the
discussion.
Capture and report:
Fetch the created discussion and confirm:
Example verification target:
.NET 11 Preview 3 discussion:
https://github.com/dotnet/core/discussions/10363If verification succeeds, use that discussion URL as the source of truth for the announcement mirror.
The mirror issue should start with the locked-mirror sentence that points to the new discussion URL.
Reuse the previous release issue as the template for:
For the current .NET 11 preview pattern, the mirror issue uses the Preview
and .NET 11.0 labels and is locked with reason resolved.
Even if the discussion is new, the issue might already exist because of a prior
attempt. Search dotnet/announcements by exact title before creating.
After creation, verify:
active_lock_reasonExample verification target:
.NET 11 Preview 3 announcement issue:
https://github.com/dotnet/announcements/issues/393Do not assume the lock succeeded just because the command returned. Query the
issue API and verify locked: true and the expected reason.
Follow these rules on every rerun:
createDiscussion or gh issue create until you have searched
for an existing item with the target titleFor a normal release publication run:
This keeps the publication workflow repeatable without producing duplicate discussions or mirror issues.
© 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/publish-release-announcements of dotnet/core.
Open the folder on GitHubat commit 44927bc
Publish .NET Release Announcements 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 |
|---|---|---|---|---|---|---|
| Publish .NET Release Announcements this skilldotnet/core | 22k | — | ~1.6k | 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 | 70k | — | ~2.6k | Automated safety check: Pass | GPL-3.0 | |
| Draft Release Notesjamiepine/voicebox | 57k | — | ~941 | Automated safety check: Pass | MIT | |
| Mole Release Notes Publishertw93/Mole | 70k | — | ~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
Creates the GitHub release discussion in dotnet/core and the locked mirror issue in dotnet/announcements for a .NET release, safely re-runnable after interruptions. Built around the fact that GitHub create mutations are not idempotent: creating a discussion or issue twice makes duplicates, and a canceled tool call does not prove the create failed. The goal is at most one new discussion in dotnet/core and at most one mirror issue in dotnet/announcements that links to it, with title, body, labels and lock state verified after each write.
Publish .NET Release Announcements fits situations like: publishing the discussion after release notes are merged; mirroring a new discussion into dotnet/announcements; verifying an existing release post; re-running a partly completed publication safely.
Run `npx skills add dotnet/core --skill publish-release-announcements -a claude-code`. Or copy the skill folder (.github/skills/publish-release-announcements in dotnet/core) into .claude/skills/publish-release-announcements in your project. Claude Code loads it when a task matches its description.
Run `npx skills add dotnet/core --skill publish-release-announcements -a codex`. Or copy the skill folder (.github/skills/publish-release-announcements in dotnet/core) into .agents/skills/publish-release-announcements 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 publish-release-announcements -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/publish-release-announcements, .gemini/skills/publish-release-announcements, .github/skills/publish-release-announcements and .opencode/skills/publish-release-announcements in your project.
Going by SKILL.md and its folder, Publish .NET Release Announcements needs the command-line tools its instructions call (gh). Our summary lists: gh CLI with permission to create discussions and issues in dotnet/core and dotnet/announcements. Compatibility (from SKILL.md): Requires gh CLI with permission to query and create discussions and issues across dotnet/core and dotnet/announcements..
SKILL.md names 1 domain. In commands or code: github.com; the agent is likely to contact it when it follows the instructions. 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.
Publish .NET Release Announcements is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 1.6k tokens (SKILL.md is roughly 6.3k 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 Publish .NET Release Announcements: Release Roslynator (dotnet/roslynator, 3.5k stars), Cutting A Release (TriliumNext/Trilium, 38k stars), Mole CLI Release Flow (tw93/Mole, 70k 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,037 GitHub stars. The repository holds 15 skills in this directory. The repository was last updated on October 9, 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.