/changeset
Guide for creating and writing proper changesets for Biome PRs. Use when a PR introduces user-visible changes (bug fixes, new features, rule changes, formatter changes, parser changes) that need a changeset entry for the CHANGELOG. Trigger when creating changesets, writing
$ npx -y skills add biomejs/biome --skill changeset --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/changeset
Context preview
The summary Claude sees to decide when to auto-load this skill.
Guide for creating and writing proper changesets for Biome PRs. Use when a PR introduces user-visible changes (bug fixes, new features, rule changes, formatter changes, parser changes) that need a changeset entry for the CHANGELOG. Trigger when creating changesets, writing
SKILL.md
changeset.SKILL.mdname: changeset
description: Guide for creating and writing proper changesets for Biome PRs. Use when a PR introduces user-visible changes (bug fixes, new features, rule changes, formatter changes, parser changes) that need a changeset entry for the CHANGELOG. Trigger when creating changesets, writing changeset descriptions, or choosing the correct change type.
compatibility: Designed for coding agents working on the Biome codebase (github.com/biomejs/biome).
Purpose
Use this skill when a PR introduces user-facing changes that require a changeset. Changesets drive CHANGELOG generation and release automation. Internal-only changes (refactors with no user-visible effect) do not need changesets.
Create a Changeset
**Do not create changeset files manually.** Use:
just new-changeset-empty
The command will create a file in `.changeset/`. Edit it directly to add detail.
Note that the file will *not* be literally empty. It will have this content:
---
---
Do not simply append to the changeset description below the existing content, which creates an invalid changeset.
> Requires `pnpm` — run `pnpm i` from repo root first.
Choose the Correct Change Type
- `patch` — Bug fixes.
- `minor` — New features. PR must target the `next` branch.
- `major` — Breaking user API changes. PR must target the `next` branch. These are rare and strictly controlled.
Refer to the [versioning page](https://biomejs.dev/internals/versioning/) when unsure.
Changeset Format
---
"@biomejs/biome": patch
---
Description here.
If you need headers inside the description, use `####` or `#####` only. Other header levels break the CHANGELOG tooling.
Writing Guidelines
General Rules
- Write about **user-facing changes only**. No changeset needed for pure refactoring. Describe how the change affects the user.
- Be **concise and clear** — 1 to 3 sentences. Longer entries signal to users that the change deserves attention.
- **Past tense** for what you did: "Added", "Fixed", "Changed".
- **Present tense** for Biome behavior: "Biome now supports...", "The rule now detects...".
- End every sentence with a **full stop** (`.`).
Bug Fixes
Start with a link to the issue:
Fixed [#4444](https://github.com/biomejs/biome/issues/4444): [`useOptionalChain`](https://biomejs.dev/linter/rules/use-optional-chain/) now detects negated logical OR chains.
New Lint Rules
Show an example of an invalid case. Use inline code for simple things, a code block for complex ones:
Added a new nursery rule [`noDuplicateSelectors`](https://biomejs.dev/linter/rules/no-duplicate-selectors/), that disallows duplicate selector lists within the same at-rule context.
For example, the following snippet triggers the rule:
` ` `css
.foo {}
.foo {}
` ` `Changes to Existing Rules
Clearly show what is now invalid that was not before (or vice versa). Show both sides if helpful:
Fixed [#7211](https://github.com/biomejs/biome/issues/7211): [`useOptionalChain`](https://biomejs.dev/linter/rules/use-optional-chain/) now detects negated logical OR chains. The following code is now considered invalid:
` ` `js
!foo || !foo.bar
` ` `
Formatter Changes
Show the formatting diff:
Changed formatting of arrow function parameters. Example:
` ` `diff
- const fn = ( a, b ) => {};
+ const fn = (a, b) => {};
` ` `Parser Changes
Brief inline example of what can now be parsed:
Added support for parsing `using` declarations in JavaScript.
Use a code block if multiline clarity helps.
Linking Rules and Assists
Always link to the website, even if the page does not exist yet (it will after merge):
- Rules: `` [`useConst`](https://biomejs.dev/linter/rules/use-const/) ``
- Assists: `` [`organizeImports`](https://biomejs.dev/assist/actions/organize-imports/) ``
Tips
- Create the changeset before opening the PR; you can edit it after.
- Look at existing files in `.changeset/` or recent `CHANGELOG.md` entries for reference.
- One changeset per PR is typical. Multiple changesets are allowed if the PR addresses multiple, distinct bugs.
References
- Contribution guide: `CONTRIBUTING.md` section "Changelog"
- Versioning policy: https://biomejs.dev/internals/versioning/
- Changesets documentation: https://github.com/changesets/changesets
Read more
name: changeset description: Guide for creating and writing proper changesets for Biome PRs. Use when a PR introduces user-visible changes (bug fixes, new features, rule changes, formatter changes, parser changes) that need a changeset entry for the CHANGELOG. Trigger when creating changesets, writing changeset descriptions, or choosing the correct change type. compatibility: Designed for coding agents working on the Biome codebase (github.com/biomejs/biome).
Purpose
Use this skill when a PR introduces user-facing changes that require a changeset. Changesets drive CHANGELOG generation and release automation. Internal-only changes (refactors with no user-visible effect) do not need changesets.
Create a Changeset
**Do not create changeset files manually.** Use:
just new-changeset-empty
The command will create a file in `.changeset/`. Edit it directly to add detail.
Note that the file will *not* be literally empty. It will have this content:
--- ---
Do not simply append to the changeset description below the existing content, which creates an invalid changeset.
> Requires `pnpm` — run `pnpm i` from repo root first.
Choose the Correct Change Type
- `patch` — Bug fixes.
- `minor` — New features. PR must target the `next` branch.
- `major` — Breaking user API changes. PR must target the `next` branch. These are rare and strictly controlled.
Refer to the [versioning page](https://biomejs.dev/internals/versioning/) when unsure.
Changeset Format
--- "@biomejs/biome": patch --- Description here.
If you need headers inside the description, use `####` or `#####` only. Other header levels break the CHANGELOG tooling.
Writing Guidelines
General Rules
- Write about **user-facing changes only**. No changeset needed for pure refactoring. Describe how the change affects the user.
- Be **concise and clear** — 1 to 3 sentences. Longer entries signal to users that the change deserves attention.
- **Past tense** for what you did: "Added", "Fixed", "Changed".
- **Present tense** for Biome behavior: "Biome now supports...", "The rule now detects...".
- End every sentence with a **full stop** (`.`).
Bug Fixes
Start with a link to the issue:
Fixed [#4444](https://github.com/biomejs/biome/issues/4444): [`useOptionalChain`](https://biomejs.dev/linter/rules/use-optional-chain/) now detects negated logical OR chains.
New Lint Rules
Show an example of an invalid case. Use inline code for simple things, a code block for complex ones:
Added a new nursery rule [`noDuplicateSelectors`](https://biomejs.dev/linter/rules/no-duplicate-selectors/), that disallows duplicate selector lists within the same at-rule context.
For example, the following snippet triggers the rule:
` ` `css
.foo {}
.foo {}
` ` `Changes to Existing Rules
Clearly show what is now invalid that was not before (or vice versa). Show both sides if helpful:
Fixed [#7211](https://github.com/biomejs/biome/issues/7211): [`useOptionalChain`](https://biomejs.dev/linter/rules/use-optional-chain/) now detects negated logical OR chains. The following code is now considered invalid: ` ` `js !foo || !foo.bar ` ` `
Formatter Changes
Show the formatting diff:
Changed formatting of arrow function parameters. Example:
` ` `diff
- const fn = ( a, b ) => {};
+ const fn = (a, b) => {};
` ` `Parser Changes
Brief inline example of what can now be parsed:
Added support for parsing `using` declarations in JavaScript.
Use a code block if multiline clarity helps.
Linking Rules and Assists
Always link to the website, even if the page does not exist yet (it will after merge):
- Rules: `` [`useConst`](https://biomejs.dev/linter/rules/use-const/) ``
- Assists: `` [`organizeImports`](https://biomejs.dev/assist/actions/organize-imports/) ``
Tips
- Create the changeset before opening the PR; you can edit it after.
- Look at existing files in `.changeset/` or recent `CHANGELOG.md` entries for reference.
- One changeset per PR is typical. Multiple changesets are allowed if the PR addresses multiple, distinct bugs.
References
- Contribution guide: `CONTRIBUTING.md` section "Changelog"
- Versioning policy: https://biomejs.dev/internals/versioning/
- Changesets documentation: https://github.com/changesets/changesets
A toolchain for web projects, aimed to provide functionalities to maintain them. Biome offers formatter and linter, usable via CLI and LSP.
Repo: biomejs/biome
Other skills on biome.
- /biome-code-review
Static, read-only code review of a Biome (github.com/biomejs/biome) pull request, local branch, commit range, diff, or working tree being prepared as a PR. Applies Biome's own conventions - nursery placement and naming for lint rules, diagnostics quality, allocation and borrow
Open skill - /biome-developer
General development best practices and common gotchas when working on Biome. Use for avoiding common mistakes, understanding Biome-specific patterns (AST, syntax nodes, string extraction, embedded languages), and learning technical tips.
Open skill - /diagnostics-development
Guide for creating high-quality, user-friendly diagnostics in Biome. Use when creating diagnostics for lint rules, adding helpful advice to error messages, implementing code frame displays, or improving diagnostic quality.
Open skill - /doc-comments
How to write inline comments, rustdoc, and module documentation in the Biome codebase. The audience is Biome developers reading the source, not end users. Use whenever writing or editing `//` comments, `///` item docs, or `//!` module docs — including comments added incidentally
Open skill - /eslint-migrate-options
Guide for implementing ESLint-to-Biome rule option migrators inside `biome migrate eslint`. Use whenever you add or update a Biome lint rule that has an ESLint source rule with configurable options, need to deserialize plugin-specific ESLint options, or need custom migration
Open skill - /formatter-development
Guide for implementing formatting rules using Biome's IR-based formatter infrastructure. Use when implementing formatting for new syntax nodes, handling comments in formatted output, writing or debugging formatter snapshot tests, diagnosing idempotency failures, or comparing
Open skill

