Use when discovering and confirming the next version from a project's own release scheme before cutting the release.
Scanned 9/19/2026
npx -y skills add tony/skills --skill bump --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Bump?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/tony-bump)More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.
---
name: bump
description: "Use when discovering and confirming the next version from a project's own release scheme before cutting the release."
allowed-tools: ["Bash", "Read", "Grep", "Glob", "Edit", "AskUserQuestion"]
argument-hint: "[patch|minor|major|prerelease|final|<version>] [--push] [--tag] [--push-tag]"
user-invocable: true
disable-model-invocation: true
---
# Bump to the Next Version
Discover the project's current version and versioning scheme, work out
what "next" means, get the user's explicit choice, then run the full
`/release:cut` procedure at the chosen version.
Arguments: $ARGUMENTS
First, read `../../references/release-conventions.md`.
The safety contract in `../cut/SKILL.md` applies
here unchanged: no push, no tag, no tag push without the explicit
flags.
---
## Phase 1: Discover the Current Position
Gather three signals and check they agree:
1. **Manifest version** — from the version-bearing files (conventions
reference).
2. **Latest tag** — `git tag --sort=-creatordate | head -20`, noting
the prefix convention and the increment vocabulary the project has
actually used (aN, bN, rcN, postN, devN, `-next.N`, plain semver).
3. **CHANGES unreleased header** — the version it already targets.
A stable-track header like `## <project> 0.63.x (unreleased)`
constrains the next release to the `0.63` series unless the user
overrides; a prerelease-track header names the next version
outright.
If the signals disagree (manifest ahead of tags, CHANGES targeting a
different series), surface the discrepancy before proposing anything.
## Phase 2: Enumerate Candidates
Build the candidate list from the project's scheme — concrete
versions, not abstract bump names:
- **Prerelease track** (e.g. current `0.1.9a1`):
- Next prerelease: `0.1.9a2` — the routine increment
- Graduate to final: `0.1.9`
- Promote the segment (`a` → `b` → `rc`) — only if the project's
tag history uses those segments
- **Stable track** (e.g. current `0.1.9`):
- Patch: `0.1.10`
- Minor: `0.2.0`
- Major: `1.0.0`
- Start a prerelease series: `0.2.0a0` (PEP 440) or the npm
equivalent (`0.2.0-next.0`) — matching the project's vocabulary
- **npm prerelease track** (e.g. `0.1.0-next.11`): next prerelease
`0.1.0-next.12`, or graduate to `0.1.0`.
Do not offer `post`/`dev` releases unless the user asks or the
argument names one.
## Phase 3: Resolve the Version
- **Explicit version argument** (e.g. `0.2.0a0`) — validate it sorts
after the current version and fits the scheme, then proceed. If it
breaks the scheme (a `-next.N` version in a PEP 440 project),
stop and ask.
- **Bump-type argument** (`patch`, `minor`, `major`, `prerelease`,
`final`) — map it to the concrete candidate. If the mapping is
ambiguous for this scheme (`prerelease` on a stable track could
mean `0.1.10a0` or `0.2.0a0`; `patch` on a prerelease track could
mean the next prerelease or the graduated final), do not guess —
present the interpretations via `AskUserQuestion`.
- **No argument** — present the Phase 2 candidates via
`AskUserQuestion`. Recommend the increment the project performed
most recently (its last two tags show the habitual step). Label
each option with the concrete version and a one-line description of
when it is the right choice.
Never proceed on an inferred version. The user picks; the panel
selection is the confirmation.
## Phase 4: Cut
Run the complete `/release:cut` procedure
(`../cut/SKILL.md`, Phase 1 onward) with the
chosen version, forwarding any `--push` / `--tag` / `--push-tag`
flags the user passed.
The CHANGES step must leave the **next** unreleased header in
`MAJOR.MINOR.x` form on stable-track projects. The typical precedent
is the next minor series — after cutting `1.70.1` the fresh
placeholder reads `## <project> 1.71.x (unreleased)` — but the file's
own past release-to-placeholder transitions are the specification;
mirror them. Prerelease-track projects instead name the full next
prerelease (after `0.0.1a35`, the placeholder is
`## <project> 0.0.1a36 (unreleased)`).
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!