React Router Release Notes Prep
remix-run/react-router
Polishes pending React Router change files before the versioning scripts run, and decides whether a long-form What's Changed section is warranted.
Curate a pending release page - merging entries that describe one change, dropping notes for defects that never shipped, ordering by importance, and checking the version the intents ask for.
$ npx skills add pnpm/pnpm --skill release-notes -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install pnpm/pnpm release-notes --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/pnpm/pnpm.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/release-notes .claude/skills/release-notes && 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 "release-notes" agent skill from https://github.com/pnpm/pnpm/tree/main/.agents/skills/release-notes into .claude/skills/release-notes/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release-notes", 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/pnpm/pnpm/tree/main/.agents/skills/release-notesType 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 pnpm/pnpm --skill release-notes -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install pnpm/pnpm release-notes --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/pnpm/pnpm.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/release-notes .agents/skills/release-notes && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "release-notes" agent skill from https://github.com/pnpm/pnpm/tree/main/.agents/skills/release-notes into .agents/skills/release-notes/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release-notes", 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 pnpm/pnpm --skill release-notes -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install pnpm/pnpm release-notes --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/pnpm/pnpm.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/release-notes .cursor/skills/release-notes && 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 "release-notes" agent skill from https://github.com/pnpm/pnpm/tree/main/.agents/skills/release-notes into .cursor/skills/release-notes/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release-notes", 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/pnpm/pnpm.git --path .agents/skills/release-notes--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 pnpm/pnpm --skill release-notes -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install pnpm/pnpm release-notes --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/pnpm/pnpm.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/release-notes .gemini/skills/release-notes && 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 "release-notes" agent skill from https://github.com/pnpm/pnpm/tree/main/.agents/skills/release-notes into .gemini/skills/release-notes/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release-notes", 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 pnpm/pnpm release-notesInstalls 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 pnpm/pnpm --skill release-notes -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/pnpm/pnpm.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/release-notes .github/skills/release-notes && 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 "release-notes" agent skill from https://github.com/pnpm/pnpm/tree/main/.agents/skills/release-notes into .github/skills/release-notes/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release-notes", 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 pnpm/pnpm --skill release-notes -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install pnpm/pnpm release-notes --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/pnpm/pnpm.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/release-notes .opencode/skills/release-notes && 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 "release-notes" agent skill from https://github.com/pnpm/pnpm/tree/main/.agents/skills/release-notes into .opencode/skills/release-notes/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release-notes", 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.
release-notesCurate a pending release page - merging entries that describe one change, dropping notes for defects that never shipped, ordering by importance, and checking the version the intents ask for.
Release Notes is an agent skill from pnpm/pnpm. Curate a pending release page - merging entries that describe one change, dropping notes for defects that never shipped, ordering by importance, and checking the version the intents ask for. Use when reviewing a release PR, a generated changelog, or the notes for a specific version.
Its SKILL.md is about 2.8k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Development, covering Changelog and release notes. It works with pnpm. The repository describes itself as: Fast, disk space efficient package manager. The licence is MIT.
3 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 3da5bd3. 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:
pnpmgitFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use pnpm 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.
Release Notes loads about 2.8k tokens when it runs. Until then it costs about 74 tokens; SKILL.md has 1,750 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 pnpm/pnpm at commit 3da5bd3, republished under its MIT licence (© pnpm). 1,750 words, ~2,833 tokens.
.claude/skills/release-notes/SKILL.md (or your agent's skills folder).A release page is read by pnpm users, most of them skimming for the one entry that affects them. It is not a log of the pull requests that landed. Every entry has to earn its line.
The wording rules for a single entry live in the "Changeset style" section of
CLAUDE.md. This skill is about the set: which entries exist at all, how they are
grouped, what order they appear in, and how the page reads end to end.
.changeset/<id>.md intent: a frontmatter map
of package to bump type, then the prose.pnpm run bump on the release branch consumes the pending intents, deletes
them, and composes them into .changeset/changelogs/<package>@<version>.md,
one section per released package, grouped into Major, Minor, and Patch changes.tail -n +2 .changeset/changelogs/pacquet@<version>.md plus the sponsors
fragment (.github/workflows/release.yml), and the same section is composed into
the published CHANGELOG.md. For a stable v11 or v12 release, it also becomes the pnpm.io release page
(DOCUMENTATION.md).So curate .changeset/changelogs/<package>@<version>.md directly, on the release PR
branch, after the bump has written it. The intents are gone by then, so the composed
section is the only surviving copy - there is nothing to keep in sync. Editing it is
also the only way to reorder or merge entries: the composer emits them in
alphabetical order of the intent filename and offers no other lever.
Two things this does not cover:
confirmed_published_versions garbage
collects a parked section only when the published changelog contains it verbatim,
so editing one after release breaks the match forever. Before publish, it is the
right place to edit; after, corrections go in a new changeset.Curation lives on release-pr/<target>, which the Create Release PR workflow rebuilds
from the target branch on every dispatch. A re-dispatch discards it. Curate when the
release is actually going out.
Defects introduced and fixed between two releases. If the bug never existed in a
published version, no user can recognise it, and the entry only advertises that the
feature arrived broken. To decide, find the release commit for the package's previous
version (git log --grep 'chore(release)') and check whether the code the fix touches
predates it. A follow-up to a feature shipping in this same release is the usual case.
Internals with no observable consequence. Refactors, renamed modules, "now uses X internally". If you cannot finish the sentence "so you can ..." or "so it no longer ...", drop it.
Mechanism the reader will not act on. Keep the sentence that names the command, setting, or symptom. Cut the one explaining which cache, tier, or syscall changed, unless the reader has to configure around it.
Merge entries that describe one change as the user experiences it, even when they came from different pull requests:
pnpm dedupe selection bugs).Sped up repeat installs. then the
specifics).Two entries that mention the same setting from different angles are duplication even when both are accurate. Say it once, in the entry the reader will find first.
Deno opens a release post with one sentence naming the top few changes: "Deno 1.28 ships with stabilized npm modules, auto-discovered lock file, a new subprocess API, and more." A reader decides from that line whether to read on.
Write that line as a paragraph directly under the ## <version> heading, before the
first ### section. tail -n +2 keeps it, so it becomes the opening line of the
GitHub release body, and it sits under the version heading in CHANGELOG.md. Name
three or four things at most, in the words the entries below use.
The published page has no headings other than Major, Minor, and Patch. Thirty patch bullets arrive as one undifferentiated list, so the order is the whole of the page's structure. Projects that categorise explicitly publish the ranking you want: Gitea orders BREAKING, SECURITY, FEATURES, PERFORMANCE, ENHANCEMENTS, API, BUGFIXES; uv splits Enhancements, Performance, Bug fixes, Preview features, Breaking changes. pnpm's composer emits no such headings, so build those blocks out of the order:
The Major, Minor, and Patch headings cut across that ranking and you cannot reorder past them, so a security fix carrying a patch bump still lands below every feature. That is what the lead paragraph is for.
Within a section, group: all the speedups together, all the pnpm dedupe fixes
together, the Windows items together. A reader who hits three consecutive entries
about output messages knows the interesting part is over.
Past about a dozen entries in one section, name the groups. Add #### subject
headings under the ### bump heading, ordered by the ranking above:
### Patch Changes
#### Installing packages
- ...
#### Resolving and linking dependenciesAim for four to eight groups and at least two entries in each; a group of one is noise, so fold it into its neighbour. Name them for what the reader was doing when they hit the bug (Installing packages, Running scripts and tasks, Windows), not for the subsystem that changed. Leave a section of a dozen or fewer flat - the headings cost more than they save.
Both consumers tolerate the extra level: release.yml writes the Rust release body
with tail -n +2, and getChangelogEntry (pnpm11/__utils__/get-release-text)
slices between headings of the same depth as ## <version>, so a #### heading
neither ends the slice nor is dropped. It does scan every heading for
major|minor|patch, so avoid a group literally named "Patching" - call it "Patched
dependencies".
In the Minor section of a feature release, lead with the three to five entries that change how people work, the way Playwright leads with a handful of highlights before its flat API list. Largest diff is not the same as most important. For the one or two biggest, TypeScript's shape is worth copying: open with the problem the reader recognises, then the new capability, then the code.
Do not ship the raw composed list. Yarn's release pages are the conventional-commit log with the PR appended - "fix(nm): prefer direct dependency binaries by @user in #1234". Every entry is accurate and the page tells a user nothing: it is indexed by the change's author, not by the reader's problem. pnpm's uncurated output has the same shape, one entry per pull request in filename order. That is the thing being fixed here.
The first sentence is the title. esbuild gives every entry a bold heading; uv
makes each bullet short enough to be one. pnpm's format has no title slot, so the
opening clause carries it: name the command, setting, or platform in the first three
words, then the outcome. "pnpm install no longer fails with ..." works. "Fixed an
issue where, under certain conditions, ..." does not.
Default to one sentence. uv's bullets run 80 to 120 characters and hold exactly one idea; Gitea's run 60 to 90. SQLite states a whole behavior change in one clause and no adjectives: "Fix the count-of-view optimization so that it does not give an incorrect answer for a DISTINCT query." Add a second sentence when the reader needs the old behavior to recognise the bug, and a second paragraph only when they must act: a migration, an opt-out, an exception to what the first paragraph promised.
Show the literal change when output changes. esbuild pairs almost every entry
with before and after. Where a change rewrites a manifest range, a lockfile field, or
a timestamp, print both: pnpm update react@19.3.0 on "react": "^19.2.8" writes
"react": "^19.3.0". Naming the shape beats describing it.
Name what the reader can act on. Every uv bullet names a flag, a file, or a platform. If an entry mentions no command, setting, file, error code, or platform, the reader cannot tell whether it applies to them.
Link the issue, not the pull request. The issue shows the reader the report they
may have filed. Use [#14722](https://github.com/pnpm/pnpm/issues/14722) and put it
at the end of the sentence it belongs to, not the end of the entry. Keep the link
style identical across every entry in a release.
pnpm change status prints the planned version for every package before anything is
written. Read the line for each released package and ask whether it matches the
entries you are about to curate. Read the packages that carry no intent of their own
too: @pnpm/napi rides pacquet's versioning.fixed group, and release.yml fails
the build if the two versions have drifted apart.
The release engine applies plain semver: a major intent on a 0.x package moves it
to 1.0.0, and on a prerelease lane that resets the counter (0.1.0-alpha.10 to
1.0.0-alpha.0). There is no "0.x majors are minors" rule. Before accepting a major
bump, check that the breaking change breaks something a published version could do. A
new URL layout for a capability that ships in the same release breaks nothing.
Read the curated section top to bottom, as a user would. It is done when:
## <version> section is not being shipped for a package that only bumped
because it rides a fixed group. Give it an entry or accept the blank heading
knowingly.© pnpm, 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/release-notes of pnpm/pnpm.
Open the folder on GitHubat commit 3da5bd3
Release Notes 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 |
|---|---|---|---|---|---|---|
| Release Notes this skillpnpm/pnpm | 37k | — | ~2.8k | Automated safety check: Pass | MIT | |
| React Router Release Notes Prepremix-run/react-router | 57k | — | ~1.1k | Automated safety check: Pass | MIT | |
| Verdaccio Pull Request Workflowverdaccio/verdaccio | 18k | — | ~1.9k | Automated safety check: Pass | MIT | |
| ZCF Release AutomationUfoMiao/zcf | 6.1k | — | ~3.4k | Automated safety check: Pass | MIT | |
| Release Clawpatchopenclaw/clawpatch | 813 | — | ~1.1k | Automated safety check: Pass | MIT | |
| Optique Releasedahlia/hongdown | 196 | — | ~2.6k | Automated safety check: Pass | GPL-3.0 |
remix-run/react-router
Polishes pending React Router change files before the versioning scripts run, and decides whether a long-form What's Changed section is warranted.
verdaccio/verdaccio
Takes a change through a verdaccio pull request: branch, local checks, changeset, title and body, labels, CI and review rounds, and ports to other release lines.
UfoMiao/zcf
Automates a version release with changesets: analyzes code changes, writes a bilingual CHANGELOG, bumps the version and commits through a release branch and pull request.
openclaw/clawpatch
clawpatch release: version/changelog, CI, npm publish, GitHub release, verify.
dahlia/hongdown
Walks through cutting an Optique patch, minor or major release: branch choice, Sacho changelog fragments, version bump, tags and maintenance-branch merges.
breaking-brake/cc-wf-studio
Opens a pull request to main in a pnpm and Changesets monorepo, after working out which packages changed and making sure a changeset file exists.
pnpm/pnpm
Take a change through a pull request in the pnpm repository — opening it, then staying with it after every push until CI is green and the review round is quiet.
pnpm/pnpm
Run the tests that cover a change in the pnpm repository, in the Rust workspace (pnpm/, pnpr/) or the TypeScript CLI (pnpm11/), and recognize the cases where a scoped run passes without testing…
pnpm/pnpm
Review a pnpm diff or pull request against the repository review guide and product conventions, verify findings, and report actionable issues.
pnpm/pnpm
Implement a pnpm feature, bug fix, or refactor by checking existing capabilities, prioritizing code reuse and deduplication, assessing architecture impact, and validating the final change.
pnpm/pnpm
Review and fix an existing pnpm pull request, rebase it, commit and push fixes, then follow CI and review to completion.
pnpm/pnpm
Triage an incoming GitHub issue against the pnpm codebase and related open issues, then apply exactly one implementation-readiness label using pnpm's state: taxonomy.
Works with
Categories
Curate a pending release page - merging entries that describe one change, dropping notes for defects that never shipped, ordering by importance, and checking the version the intents ask for. Release Notes is an agent skill from pnpm/pnpm. Curate a pending release page - merging entries that describe one change, dropping notes for defects that never shipped, ordering by importance, and checking the version the intents ask for.
Release Notes fits situations like: reviewing a release PR; A generated changelog; the notes for a specific version.
Run `npx skills add pnpm/pnpm --skill release-notes -a claude-code`. Or copy the skill folder (.agents/skills/release-notes in pnpm/pnpm) into .claude/skills/release-notes in your project. Claude Code loads it when a task matches its description.
Run `npx skills add pnpm/pnpm --skill release-notes -a codex`. Or copy the skill folder (.agents/skills/release-notes in pnpm/pnpm) into .agents/skills/release-notes 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 pnpm/pnpm --skill release-notes -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/release-notes, .gemini/skills/release-notes, .github/skills/release-notes and .opencode/skills/release-notes in your project.
Going by SKILL.md and its folder, Release Notes needs the command-line tools its instructions call (pnpm and git).
SKILL.md contains no URLs. Its commands use 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.
Release Notes is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.8k tokens (SKILL.md is roughly 11k 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 Release Notes: React Router Release Notes Prep (remix-run/react-router, 57k stars), Verdaccio Pull Request Workflow (verdaccio/verdaccio, 18k stars), ZCF Release Automation (UfoMiao/zcf, 6.1k stars) and Release Clawpatch (openclaw/clawpatch, 813 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
pnpm (a GitHub organization) maintains it in pnpm/pnpm, which has 36,755 GitHub stars. The repository holds 7 skills in this directory. The repository was last updated on October 7, 2026.
Source: pnpm/pnpm on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.