bump-release
Skill7 starsChanged 23 days agoMITView on GitHub
Bump the project's version in every manifest at once, then commit, tag, push, and cut a release, so no manifest keeps a stale version.
- Commits and pushes
1 other project uses a version of this.
Adopted by
Most recently taken up by
- MH221B/skillstheir own version, first seen Oct 24, 2026
Other versions1 project uses a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 1
- MH221B/skills★ 2same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository8 other files it gives its agents.
- CLAUDE.mdCLAUDE.md
- exploreSkill
- fix-testsSkill
- readme-pitchSkill
- product-spineSkill
- session-handoffSkill
- session-primerSkill
- session-retroSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
14 rules. About 0 are common, 9 are distinctive, and 5 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈9
Distinctive · estimate
This author's own choices. Worth a look.
5
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- could be automatic: a setting could enforce it
- Very specific: line 39
Before any write, print ## Release preview with the old version, the new version, the tag, the push target (push: <remote> <branch>, or …
- Very specific: line 76
Look for a tool that owns releases: changesets (.changeset/), lerna version (lerna.json with a version command in use), release-please …
- Distinctive: line 83
When one is found, make no edit, name the tool and the file that showed it, and go to the report.
- Distinctive: line 102
If no manifest carries a version, stop and report that nothing was found.
- Distinctive: line 104
Disagreement: If two manifests carry different current versions, stop before any edit, list each manifest with its version, and ask which …
- Very specific: line 125
Default prefix is v. If the target tag already exists, check what it points at: on the current HEAD it is a finished earlier run.
- Very specific: line 148
Create an annotated tag <prefix><version> on the new commit.
- Very specific: line 155
If the current branch has no upstream (git rev-parse --abbrev-ref @{upstream} fails), push with git push --set-upstream origin <branch>.
- Distinctive: line 160
Rejected push: If either push is rejected (for example non-fast-forward), do not force-push and do not rewrite history.
- Distinctive: line 174
If the CLI is missing or not authenticated, skip the release, say which, and print the manual command.
- Distinctive: line 187
No git command before step 4.
- Distinctive: line 190
Never force-push, force-move a tag, or retry a rejected push.
- Distinctive: line 191
Never invent release notes beyond the commit subjects.
- Distinctive: line 193
Never change remote configuration as a side effect of a bump.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Bump a project's version everywhere it lives, then commit, tag, push, and cut a release in one pass.
A version usually lives in more than one file. A bump that only touches the
obvious one (package.json) ships silently wrong: a repo that is also a Claude
Code plugin keeps its real version in .claude-plugin/plugin.json, a Rust crate
in Cargo.toml, a Python package in pyproject.toml, and whichever tool reads
the version (an updater, a registry, a marketplace) may not be the file you
remembered. This skill finds them all before it edits any.
This skill is host-neutral. It runs on Cursor, Copilot, Codex, Claude Code,
and any other Agent Skills host, and it needs only git. Release creation uses
gh or glab when present and is skipped with the manual command printed when
neither is.
Never block on I/O. A denied or failed command is reported once with no retry and no alternate guess. The one exception is the confirmation in step 4: no write happens without it.
Output contract (non-negotiable)
You are running bump-release right now. These instructions are in your context because the skill was invoked, so run the steps in this reply.
Automation greps for fixed headings, so keep these exact:
- Before any write, print
## Release previewwith the old version, the new version, the tag, the push target (push: <remote> <branch>, orpush: skipped (<reason>)), the public release (release: <forge> <tag>, orrelease: skipped (<reason>)), and one line per file to edit (path old -> new). Then ask for confirmation. The one yes covers the edit, commit, tag, push, and release, so the preview must name all of them. Nothing is edited, committed, tagged, or pushed before a yes. - End every run, including a stopped run, with
## Release reportlisting: old and new version (the new version readsnot resolvedwhen the run stopped before step 3), each file edited, the commit, the tag, the push result, and the release URL or the reason the release was skipped. A stopped run says which step stopped it and states that no file was edited (or which were, if the stop came after edits).
Input
| Argument | Meaning |
| (none) | patch bump of the current version |
1.4.0 | Exact version. Must be greater than the current version. |
major / minor / patch | Semver bump of the current version |
prerelease <id> | 1.4.0 becomes 1.5.0-<id>.0; 1.5.0-<id>.0 becomes 1.5.0-<id>.1 |
Natural language works ("cut a minor release", "bump to 2.0.0").
Steps
The order matters. Steps 1 to 3 read files only. No git command runs before step 4, so a repo that uses release automation, or has no manifest, stops before git is touched.
1. Release automation check
Look for a tool that owns releases: changesets (.changeset/), lerna version
(lerna.json with a version command in use), release-please
(release-please-config.json, .release-please-manifest.json, or a workflow
that names it), semantic-release (.releaserc*, a release key in
package.json, or a semantic-release script). Detection list and file names
are in references/manifests.md.
When one is found, make no edit, name the tool and the file that showed it, and go to the report. A hand bump would fight the tool.
2. Discover every version-bearing manifest
Find all manifests before editing any. The table, the field for each, the broader sweep, and the lockfile exclusions are in references/manifests.md.
- A filename match alone does not qualify a file. Confirm the file carries the current version string in the expected field.
- Lockfiles (
package-lock.json,yarn.lock,pnpm-lock.yaml,Cargo.lock,uv.lock,poetry.lock) are never in the manifest list. They are refreshed in step 5. - Any hit from the broader sweep that the table did not name is a candidate the user must confirm or skip. Never silently include or exclude one.
- A
marketplace.jsonplugins[]array is matched by plugin name, not by position.
If no manifest carries a version, stop and report that nothing was found.
Disagreement. If two manifests carry different current versions, stop before any edit, list each manifest with its version, and ask which is authoritative.
3. Resolve the target version
- Exact version: use it as given. If it is not greater than the current version (semver comparison), stop before any edit and name both versions.
- Keyword: apply it to the authoritative current version. No argument means
patch.
4. Starting state, then preview
Now, and only now, use git.
git rev-parse --is-inside-work-tree. If this is not a git repository, stop and edit nothing.git status --porcelain. If it is non-empty, stop before the preview, list the dirty files, and edit nothing. Do not sweep unrelated changes into the release commit.- Detect the tag prefix from existing version tags and the forge from the
originremote (commands in references/forge.md). Default prefix isv. If the target tag already exists, check what it points at: on the currentHEADit is a finished earlier run; on any other commit, stop and ask before moving or replacing it. Never move a tag without that answer. git remote get-url origin. If it fails, the repo has no remote: the preview says push and release will be skipped, and the run still commits and tags locally.- Print
## Release preview(see the output contract) and ask. If the answer is no, change nothing and report what would have been done.
5. Edit, refresh lockfiles, commit
- Apply every edit from the preview, and only those.
- Refresh each lockfile that carried the old version with the ecosystem's own command (references/manifests.md). Never hand-edit a lockfile. If the refresh command is missing or fails, say so and leave that lockfile unstaged.
- Stage the bumped files and any refreshed lockfile by name. Never
git add -Aorgit add .. - Commit with
chore: bump version to <version>.
6. Tag
Create an annotated tag <prefix><version> on the new commit. The message is
the tag name.
7. Push
Skip when there is no remote.
- If the current branch has no upstream (
git rev-parse --abbrev-ref @{upstream}fails), push withgit push --set-upstream origin <branch>. Otherwisegit push. - Push the tag by name:
git push origin <tag>.
Rejected push. If either push is rejected (for example non-fast-forward),
do not force-push and do not rewrite history. Stop, keep the local commit and
tag, skip the release, show the rejection, and print the commands to finish by
hand. If the remote reports the repository moved, show the message verbatim and
ask before changing the origin URL.
8. Release
Skip when there is no remote, when the push failed, or when the forge is
unknown. Otherwise create the release with gh release create (GitHub) or
glab release create (GitLab) against the new tag, with notes built from the
commit subjects since the previous version tag. See
references/forge.md.
If the CLI is missing or not authenticated, skip the release, say which, and print the manual command. The commit, tag, and push stand.
9. Report
Print ## Release report per the output contract. One line per step with its
outcome. Mark skipped steps as skipped with the reason.
Rules
- Discover first, edit second. No edit before the preview is confirmed.
- No git command before step 4. Automation, manifests, and the target version are decided from files alone.
- Stage by name. Never
git add -Aorgit add .. - Never force-push, force-move a tag, or retry a rejected push.
- Never invent release notes beyond the commit subjects. If the user wants curated notes, ask for them.
- Never change remote configuration as a side effect of a bump.
- A missing forge CLI skips the release only. It never undoes the commit, tag, or push.
Related
- Manifest table, lockfile commands, automation list: references/manifests.md
- Forge commands, auth check, tag prefix: references/forge.md
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

