Bump Release
Support for both regular and beta releases.
Parameters
version: Optional explicit version to use (e.g., 2.0.0). When provided, skips automatic version inference
--beta: Create a beta release with -beta.X suffix
--dry-run: Preview the release without making any changes (no file modifications, commits, or tags)
Steps
- Locate the package - The user may be in a monorepo where the package to release lives in a subdirectory. Look for
package.json in the current working directory first; if not found, ask which package to release. All file paths (CHANGELOG.md, package.json, justfile) are relative to the package directory.
- Update the
CHANGELOG.md file with all changes since the last version release (skip this step for beta releases).
- Bump the version in
package.json:
- Regular release: Follow semantic versioning (e.g., 1.2.3)
- Beta release: Add
-beta.X suffix (e.g., 1.2.3-beta.1)
- Format files - If a
justfile exists in the repository, run just full-write to ensure CHANGELOG.md and package.json are properly formatted
- Commit the changes with a message like "docs: release "
- Create a new git tag by running
git tag -a v<version> -m "<version>"
Note: When --dry-run flag is provided, display what would be done without making any actual changes to files, creating commits, or tags.
Tasks
Process
Check for arguments - Determine if version was provided, if this is a beta release (--beta), and/or dry-run (--dry-run)
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 - Examine diffs between the current branch and the previous tag to write 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 current version from package.json
Bump version - If version argument provided, use it directly. Otherwise, if unchanged since last release, increment per Semantic Versioning rules:
- For regular releases:
- PATCH (x.x.X) - Bug fixes, documentation updates
- MINOR (x.X.x) - New features, backward-compatible changes
- MAJOR (X.x.x) - Breaking changes
- For beta releases (
--beta flag):
- If current version has no beta suffix: Add
-beta.1 to the version
- If current version already has beta suffix: Increment beta number (e.g.,
-beta.1 → -beta.2)
- If moving from beta to release: Remove beta suffix and use the base version
Confirm version - When the version was inferred (no explicit version argument), use AskUserQuestion to confirm before proceeding:
- header: "Version"
- question: "Release
<current> → <inferred>?"
- options:
- The inferred version label (e.g., "1.3.0 (minor)") — mark as "(Recommended)"
- One alternative that is one semver level higher (e.g., "2.0.0 (major)")
- One alternative that is one semver level lower when possible (e.g., "1.2.4 (patch)")
- multiSelect: false
If the user picks an alternative, use that version for the remaining steps. Skip this step when --dry-run is active (show the inferred version in the preview instead)
Beta Release Logic
When --beta flag is provided in the $ARGUMENTS
- Check for explicit version - If
version provided:
- If version already has beta suffix → use as-is
- If version has no beta suffix → append
-beta.1
- Otherwise, parse current version from
package.json and determine beta version:
- If current version is
1.2.3: Create 1.2.4-beta.1 (increment patch + beta.1)
- If current version is
1.2.3-beta.1: Create 1.2.3-beta.2 (increment beta number)
- If current version is
1.2.3-beta.5: Create 1.2.3-beta.6 (increment beta number)
- Skip CHANGELOG.md update - Beta releases don't update the changelog
- Commit and tag with beta version (e.g.,
v1.2.4-beta.1)
Output
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.
Inclusion Criteria
For regular releases only (changelog generation is skipped for beta releases):
- Files field constraint - If
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 CHANGELOG
- Production changes only - When no
files field exists, exclude test changes, CI/CD workflows, and development tooling
- Reference pull requests - Link to PRs when available for context
- Net changes only - Examine diffs between the current branch and the previous tag to identify changes
- Only dependencies and peerDependencies changes - Exclude changes to devDependencies
Examples
Regular Release
# Create a regular patch/minor/major release
/bump-release
# Preview what a regular release would do
/bump-release --dry-run
Beta Release
# Create a beta release with -beta.X suffix
/bump-release --beta
# Preview what a beta release would do
/bump-release --beta --dry-run
Explicit Version
# 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
Version Examples
| 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 |
Resources
references/common-changelog.md — Common Changelog format and writing guidelines
1---2name: bump-release-23description: This skill should be used when the user asks to "bump release", "cut a release", "tag a release", "bump version", "create a new release", or mentions release versioning, changelog updates, or version tagging workflows.4---5
6# Bump Release
7
8Support for both regular and beta releases.
9
10## Parameters
11
12- `version`: Optional explicit version to use (e.g., `2.0.0`). When provided, skips automatic version inference
13- `--beta`: Create a beta release with `-beta.X` suffix
14- `--dry-run`: Preview the release without making any changes (no file modifications, commits, or tags)
15
16## Steps
17
180. **Locate the package** - The user may be in a monorepo where the package to release lives in a subdirectory. Look for `package.json` in the current working directory first; if not found, ask which package to release. All file paths (`CHANGELOG.md`, `package.json`, `justfile`) are relative to the package directory.
191. Update the `CHANGELOG.md` file with all changes since the last version release (**skip this step for beta releases**).
202. Bump the version in `package.json`:
21 - **Regular release**: Follow semantic versioning (e.g., 1.2.3)
22 - **Beta release**: Add `-beta.X` suffix (e.g., 1.2.3-beta.1)
233. **Format files** - If a `justfile` exists in the repository, run `just full-write` to ensure `CHANGELOG.md` and `package.json` are properly formatted
244. Commit the changes with a message like "docs: release <version>"
255. Create a new git tag by running `git tag -a v<version> -m "<version>"`
26
27**Note**: When `--dry-run` flag is provided, display what would be done without making any actual changes to files, creating commits, or tags.
28
29## Tasks
30
31## Process
32
331. **Check for arguments** - Determine if `version` was provided, if this is a beta release (`--beta`), and/or dry-run (`--dry-run`)
342. **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
353. **Write Changelog** - Examine diffs between the current branch and the previous tag to write Changelog. Then find
36 relevant PRs by looking at the commit history and add them to each changelog (when available). If `package.json` contains
37 a `files` field, only include changes within those specified files/directories. If no `files` field exists, include all
38 changes except test changes, CI/CD workflows, and development tooling
394. **Follow format** - Consult `references/common-changelog.md` for the Common Changelog specification
405. **Check version** - Get current version from `package.json`
416. **Bump version** - If `version` argument provided, use it directly. Otherwise, if unchanged since last release, increment per Semantic Versioning rules:
42 - **For regular releases**:
43 - **PATCH** (x.x.X) - Bug fixes, documentation updates
44 - **MINOR** (x.X.x) - New features, backward-compatible changes
45 - **MAJOR** (X.x.x) - Breaking changes
46 - **For beta releases** (`--beta` flag):
47 - If current version has no beta suffix: Add `-beta.1` to the version
48 - If current version already has beta suffix: Increment beta number (e.g., `-beta.1` → `-beta.2`)
49 - If moving from beta to release: Remove beta suffix and use the base version
507. **Confirm version** - When the version was inferred (no explicit `version` argument), use `AskUserQuestion` to confirm before proceeding:
51
52 - header: "Version"
53 - question: "Release `<current>` → `<inferred>`?"
54 - options:
55 - The inferred version label (e.g., "1.3.0 (minor)") — mark as "(Recommended)"
56 - One alternative that is one semver level higher (e.g., "2.0.0 (major)")
57 - One alternative that is one semver level lower when possible (e.g., "1.2.4 (patch)")
58 - multiSelect: false
59
60 If the user picks an alternative, use that version for the remaining steps. Skip this step when `--dry-run` is active (show the inferred version in the preview instead)
61
62## Beta Release Logic
63
64When `--beta` flag is provided in the $ARGUMENTS
65
661. **Check for explicit version** - If `version` provided:
67 - If version already has beta suffix → use as-is
68 - If version has no beta suffix → append `-beta.1`
692. **Otherwise, parse current version** from `package.json` and **determine beta version**:
70 - If current version is `1.2.3`: Create `1.2.4-beta.1` (increment patch + beta.1)
71 - If current version is `1.2.3-beta.1`: Create `1.2.3-beta.2` (increment beta number)
72 - If current version is `1.2.3-beta.5`: Create `1.2.3-beta.6` (increment beta number)
733. **Skip CHANGELOG.md update** - Beta releases don't update the changelog
744. **Commit and tag** with beta version (e.g., `v1.2.4-beta.1`)
75
76## Output
77
78For 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.
79
80## Inclusion Criteria
81
82For regular releases only (changelog generation is skipped for beta releases):
83
84- **Files field constraint** - If `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 CHANGELOG
85- **Production changes only** - When no `files` field exists, exclude test changes, CI/CD workflows, and development tooling
86- **Reference pull requests** - Link to PRs when available for context
87- **Net changes only** - Examine diffs between the current branch and the previous tag to identify changes
88- **Only dependencies and peerDependencies changes** - Exclude changes to devDependencies
89
90## Examples
91
92### Regular Release
93
94```bash
95# Create a regular patch/minor/major release
96/bump-release
97
98# Preview what a regular release would do
99/bump-release --dry-run
100```
101
102### Beta Release
103
104```bash
105# Create a beta release with -beta.X suffix
106/bump-release --beta
107
108# Preview what a beta release would do
109/bump-release --beta --dry-run
110```
111
112### Explicit Version
113
114```bash
115# Specify exact version
116/bump-release 2.0.0
117
118# Specify exact beta version
119/bump-release 2.0.0-beta.1
120
121# Combine with flags
122/bump-release 2.0.0 --dry-run
123```
124
125## Version Examples
126
127| Current Version | Release Type | New Version |
128| --------------- | -------------- | --------------- |
129| `1.2.3` | Regular | `1.2.4` (patch) |
130| `1.2.3` | Beta | `1.2.4-beta.1` |
131| `1.2.3-beta.1` | Beta | `1.2.3-beta.2` |
132| `1.2.3-beta.5` | Regular | `1.2.3` |
133| `1.2.3` | `2.0.0` | `2.0.0` |
134| `1.2.3` | `2.0.0` + Beta | `2.0.0-beta.1` |
135
136## Resources
137
138- `references/common-changelog.md` — Common Changelog format and writing guidelines