Agent skill

Release Notes

by pnpm in 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.

MITAuto-check passedDevelopment

Install Release Notes

skills CLI
$ npx skills add pnpm/pnpm --skill release-notes -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install pnpm/pnpm release-notes --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ 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-src

Use ~/.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/

Facts

Skill name
release-notes
GitHub stars
37k
Token cost
~2.8k tokens
SKILL.md length
1,750 words
Files
1
Skills in repo
7
Repo updated
First seen
Licence
MIT

At a glance

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.

  • Works in 3 steps: Each merged pull request leaves a… → pnpm run bump on the release branch… → That file is the release page. The Rust…
  • Reviewing a release PR
  • SKILL.md covers Edit the composed section, not…, What to cut, What to merge and Lead the page, plus 4 more sections
  • Calls pnpm and git

What it does

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.

When your agent uses it

  • Reviewing a release PR
  • A generated changelog
  • The notes for a specific version

Example prompts

  • “/release-notes”

Workflow steps

3 steps, taken from the first numbered list in SKILL.md.

  1. Each merged pull request leaves a .changeset/.md intent: a frontmatter map
  2. pnpm run bump on the release branch consumes the pending intents, **deletes
  3. That file is the release page. The Rust CLI's GitHub release body is literally

What it can do on your machine

Read from SKILL.md and the folder at commit 3da5bd3. It shows what the files ask for, not the result of running them.

  • Tool permissions

    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.

  • Runs code

    Shell commands in SKILL.md call:

    • pnpm
    • git

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    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.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

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.

Always · name and description, kept in context so the agent knows when to use it
~74
When it runs · the whole SKILL.md, loaded when a task matches
~2.8k

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.

Safety

Auto-check passed

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.

SKILL.md

The full file from pnpm/pnpm at commit 3da5bd3, republished under its MIT licence (© pnpm). 1,750 words, ~2,833 tokens.

Download SKILL.mdSave it as .claude/skills/release-notes/SKILL.md (or your agent's skills folder).
name
release-notes
description
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.

Release notes

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.

Edit the composed section, not the intents

  1. Each merged pull request leaves a .changeset/<id>.md intent: a frontmatter map of package to bump type, then the prose.
  2. 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.
  3. That file is the release page. The Rust CLI's GitHub release body is literally 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:

  • Bump types still live in the intents. If the planned version is wrong, fix the intent's frontmatter and re-run the bump. That is the only reason to touch an intent at this stage.
  • A published version's section is frozen. 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.

What to cut

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.

What to merge

Merge entries that describe one change as the user experiences it, even when they came from different pull requests:

  • Same command or setting, same defect (two pnpm dedupe selection bugs).
  • One symptom with several causes (install failing on Android for a TLS reason and a permissions reason).
  • A feature and the follow-ups that completed it (a container registry plus its size limits, token scopes, and blob deletion).
  • A cluster of speedups with one headline (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.

Lead the page

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.

Ordering

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:

  1. Breaking changes and anything the reader must act on.
  2. Security fixes. Gitea puts these second for a reason; a reader who stops after two entries must not have missed one. Lead the section they fall in, and say in the lead paragraph that the release carries one.
  3. Installs or commands that fail outright, and anything that damaged files.
  4. Wrong results: a dependency resolved, linked, or skipped incorrectly.
  5. Speed and resource use.
  6. Behavior corrections in one command or setting.
  7. Output: messages, warnings, help text.

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:

markdown
### Patch Changes

#### Installing packages

- ...

#### Resolving and linking dependencies

Aim 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.

Show full SKILL.md (590 more words)Show less

How one entry should read

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.

Check the version the intents ask for

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.

Finish

Read the curated section top to bottom, as a user would. It is done when:

  • No two entries make you check whether they are the same change.
  • Every entry's first line tells you whether it applies to you.
  • The order stops surprising you: you can tell where the important part ended.
  • Nothing describes a bug that no published version ever had.
  • An empty ## <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

Files

Just SKILL.md in .agents/skills/release-notes of pnpm/pnpm.

Open the folder on GitHubat commit 3da5bd3

Compare with similar skills

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.

Release Notes compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Release Notes this skillpnpm/pnpm37k—~2.8kAutomated safety check: PassMIT
React Router Release Notes Prepremix-run/react-router57k—~1.1kAutomated safety check: PassMIT
Verdaccio Pull Request Workflowverdaccio/verdaccio18k—~1.9kAutomated safety check: PassMIT
ZCF Release AutomationUfoMiao/zcf6.1k—~3.4kAutomated safety check: PassMIT
Release Clawpatchopenclaw/clawpatch813—~1.1kAutomated safety check: PassMIT
Optique Releasedahlia/hongdown196—~2.6kAutomated safety check: PassGPL-3.0

Similar skills

  • 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.

    57k GitHub stars~1.1k tokensUpdated yesterday
    DevelopmentAuto-check passed
  • 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.

    18k GitHub stars~1.9k tokensUpdated yesterday
    DevelopmentAuto-check passed
  • 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.

    6.1k GitHub stars~3.4k tokensUpdated 1 mo ago
    DevelopmentAuto-check passed
  • Release Clawpatch

    openclaw/clawpatch

    clawpatch release: version/changelog, CI, npm publish, GitHub release, verify.

    813 GitHub stars~1.1k tokensUpdated 2 days ago
    DevelopmentAuto-check passed
  • Optique Release

    dahlia/hongdown

    Walks through cutting an Optique patch, minor or major release: branch choice, Sacho changelog fragments, version bump, tags and maintenance-branch merges.

    196 GitHub stars~2.6k tokensUpdated 2 mo ago
    DevelopmentAuto-check passed
  • Changesets Pull Request to Main

    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.

    5.4k GitHub stars~1.4k tokensUpdated yesterday
    DevelopmentAuto-check passed

More from pnpm/pnpm

  • Pull Requests

    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.

    37k GitHub stars~2.2k tokensUpdated today
    Auto-check passed
  • 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…

    37k GitHub stars~1.1k tokensUpdated today
    Auto-check passed
  • Review Code

    pnpm/pnpm

    Review a pnpm diff or pull request against the repository review guide and product conventions, verify findings, and report actionable issues.

    37k GitHub stars~648 tokensUpdated today
    Auto-check passed
  • 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.

    37k GitHub stars~1.1k tokensUpdated today
    Auto-check passed
  • Review and fix an existing pnpm pull request, rebase it, commit and push fixes, then follow CI and review to completion.

    37k GitHub stars~796 tokensUpdated today
    Auto-check passed
  • Triage

    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.

    37k GitHub stars~2.9k tokensUpdated today
    Auto-check passed

Works with

Categories

Questions about Release Notes

What does Release Notes do?

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.

When should I use Release Notes?

Release Notes fits situations like: reviewing a release PR; A generated changelog; the notes for a specific version.

How do I install Release Notes in Claude Code?

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.

How do I install Release Notes in Codex?

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.

Can I use Release Notes in Cursor, Gemini CLI or GitHub Copilot?

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.

What does Release Notes need to run?

Going by SKILL.md and its folder, Release Notes needs the command-line tools its instructions call (pnpm and git).

Does Release Notes access the network?

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.

Is Release Notes safe to install?

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.

What licence does Release Notes use?

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.

How many tokens does Release Notes use?

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.

What are the alternatives to Release Notes?

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.

Who maintains Release Notes?

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.