skills/bump-release/SKILL.md
Use for release versioning: bump/cut/tag a release, bump version, create a release, changelog updates, or version tagging.
npx skillsauth add paulrberg/dot-agents bump-releaseInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Support for both regular and beta releases, in single-package repos and monorepos. A single invocation may release one package or several.
packages: Optional list of monorepo package directories or names to release (e.g., evm evm-safe). Omit in single-package reposversion: Optional explicit version to use (e.g., 2.0.0). When provided, skips automatic version inference. Only valid when releasing a single package--beta: Create a beta release with -beta.X suffix--dry-run: Preview the release without making any changes (no file modifications, commits, or tags)The user may run this skill in a single-package repo or in a monorepo (e.g., ~/projects/prb-effect, whose workspaces include evm, evm-safe, next, solana, xstate), and may request releases for multiple packages at once (e.g., "bump evm and evm-safe").
workspaces in the root package.json or ships a pnpm-workspace.yaml. Otherwise, treat the repo root as the only packagepackages arguments or package names in the user's promptAskUserQuestion (multiSelect: true) listing the workspace packages so the user confirms which to releaseCHANGELOG.md, package.json) are relative to each package directory. Compute changelog diffs against that package's own previous tag, restricted to files under the package directory. The justfile usually lives at the repo rootBumping one workspace package can force releases of others. After deciding the new version for each requested package:
dependencies and peerDependencies for the bumped package (e.g., @prb/effect-evm-safe declares "@prb/effect-evm": "^2.0.0")evm goes 2.x → 3.0.0 against ^2.0.0), update the range and release the dependent too — even when the user did not name itdependencies range is usually a patch. Raising a peerDependencies major is breaking for the dependent's consumers and usually warrants a major; confirm with AskUserQuestion when in doubtRun these steps once per target package, in dependency order:
CHANGELOG.md file with all changes since its last version release (skip this step for beta releases).package.json:
-beta.X suffix (e.g., 1.2.3-beta.1)justfile exists in the repository, run just full-write to ensure CHANGELOG.md and package.json are properly formattedgit tag -a v<version> -m "<version>"git tag); default to <package-dir>@<version> (e.g., [email protected]) when none exists. One tag per package, pointing at that package's release commitNote: When --dry-run flag is provided, display what would be done without making any actual changes to files, creating commits, or tags.
Check for arguments - Determine which packages were named (monorepo), if version was provided, if this is a beta release (--beta), and/or dry-run (--dry-run)
Resolve target packages - Follow "Repo Layout and Package Selection" above. In a monorepo, ask via AskUserQuestion unless the user's prompt or working directory makes the target packages unambiguous
Check for clean working tree - Run git status --porcelain to verify there are no uncommitted changes unrelated to this release. If there are, run the commit skill to commit them before proceeding
Write Changelog - For each target package, examine diffs between the current branch and that package's previous tag (scoped to the package directory in a monorepo) to write its Changelog. Then find
relevant PRs by looking at the commit history and add them to each changelog (when available). If package.json contains
a files field, only include changes within those specified files/directories. If no files field exists, include all
changes except test changes, CI/CD workflows, and development tooling
Follow format - Consult references/common-changelog.md for the Common Changelog specification
Check version - Get the current version from each target package's package.json
Bump version - If version argument provided (single-package release only), use it directly. Otherwise, for each target package, if unchanged since its last release, increment per Semantic Versioning rules:
For regular releases:
For beta releases (--beta flag):
-beta.1 to the version-beta.1 → -beta.2)When unsure — If the changes are ambiguous (e.g., a new feature that may also break consumers, or a mix of fixes and features), use AskUserQuestion to let the user decide the semver level:
<summary>. Which release level?"Use the user's choice and skip step 9 for that package
Cascade to dependents - Follow "Dependent Packages" above: scan the other workspace packages for dependencies/peerDependencies ranges that the new versions no longer satisfy, and add those packages to the release plan with updated ranges
Confirm version - When the version was confidently inferred (no explicit version argument), use AskUserQuestion to confirm before proceeding:
<current> → <inferred>?"For multi-package releases, confirm the full plan instead: one question per package (max 4 per AskUserQuestion call), covering requested packages and cascaded dependents alike, so the user sees every package that will be released. If the user picks an alternative, use that version for the remaining steps. Skip this step when --dry-run is active (show the inferred versions in the preview instead)
When --beta flag is provided in the $ARGUMENTS
version provided:
-beta.1package.json and determine beta version:
1.2.3: Create 1.2.4-beta.1 (increment patch + beta.1)1.2.3-beta.1: Create 1.2.3-beta.2 (increment beta number)1.2.3-beta.5: Create 1.2.3-beta.6 (increment beta number)v1.2.4-beta.1)For regular releases only, generate changelog entries in CHANGELOG.md following the format and writing guidelines in references/common-changelog.md. Use the Changed, Added, Removed, Fixed categories (in that order). Every entry must begin with a present-tense verb in imperative mood.
For regular releases only (changelog generation is skipped for beta releases):
package.json contains a files field, only include changes to files/directories specified in that array. All other codebase changes should be excluded from the CHANGELOGfiles field exists, exclude test changes, CI/CD workflows, and development tooling# Create a regular patch/minor/major release
/bump-release
# Preview what a regular release would do
/bump-release --dry-run
# Create a beta release with -beta.X suffix
/bump-release --beta
# Preview what a beta release would do
/bump-release --beta --dry-run
# Release two workspace packages (e.g., in ~/projects/prb-effect)
/bump-release evm evm-safe
# Release one workspace package; cascade to dependents if their ranges break
/bump-release evm
# Preview a multi-package release
/bump-release evm evm-safe --dry-run
# Specify exact version
/bump-release 2.0.0
# Specify exact beta version
/bump-release 2.0.0-beta.1
# Combine with flags
/bump-release 2.0.0 --dry-run
| Current Version | Release Type | New Version |
| --------------- | -------------- | --------------- |
| 1.2.3 | Regular | 1.2.4 (patch) |
| 1.2.3 | Beta | 1.2.4-beta.1 |
| 1.2.3-beta.1 | Beta | 1.2.3-beta.2 |
| 1.2.3-beta.5 | Regular | 1.2.3 |
| 1.2.3 | 2.0.0 | 2.0.0 |
| 1.2.3 | 2.0.0 + Beta | 2.0.0-beta.1 |
references/common-changelog.md — Read when generating changelog entries: Common Changelog format and writing guidelinestesting
Use ONLY to check or update the project-scoped agent skills installed under .agents/skills so they match the current state of the repo. Do not trigger for creating, finding, or installing skills, or for README/AGENTS.md updates.
testing
Use when CSV, TSV, or Excel (.xlsx) is the primary input/output: inspect, clean, transform, dedupe, merge, validate, convert, recalc formulas, or create/fix spreadsheets. Do not trigger when tabular data is incidental.
testing
Use only when explicitly asked to archive/prune/compact/roll over checked tasks from TODO.md into `.ai/todos/TODO_UNTIL_YYYY_MM_DD.md`, leaving unchecked tasks.
development
Use this skill any time a spreadsheet file is the primary input or output. This means any task where the user wants to: open, read, edit, or fix an existing .xlsx, .xlsm, .csv, or .tsv file (e.g., adding columns, computing formulas, formatting, charting, cleaning messy data); create a new spreadsheet from scratch or from other data sources; or convert between tabular file formats. Trigger especially when the user references a spreadsheet file by name or path — even casually (like "the xlsx in my downloads") — and wants something done to it or produced from it. Also trigger for cleaning or restructuring messy tabular data files (malformed rows, misplaced headers, junk data) into proper spreadsheets. The deliverable must be a spreadsheet file. Do NOT trigger when the primary deliverable is a Word document, HTML report, standalone Python script, database pipeline, or Google Sheets API integration, even if tabular data is involved.