release-version
Skill0 starsChanged 8 days agoMITView on GitHub
Bump a project's version, update the changelog, tag the release, and push it, in whatever ecosystem the project uses (Node, Python, Rust, Go, PHP, Ruby, Java, .NET, Dart, Elixir, Claude Code and Codex plugins). Invoke when the user asks to bump, release, or cut a version, tag a release, or prepare a changelog for one. Skip when they only want an ordinary commit (use checkout-commit) or want the package published to a registry.
- Commits and pushes
We split this skill into the rules it gives an agent
8 rules. 0 are common, 6 are distinctive, and 2 are very specific to this project.
0
Common
Most of the 7 edited versions we read keep these.
6
Distinctive
This author's own choices. Worth a look.
2
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
- Distinctive: line 46
Read the real changes since the last tag, not the last commit alone:
- Distinctive: line 67
Run the native command, then verify nothing stale is left:
- Very specific: line 77
If the project has a CHANGELOG.md, add an entry in the format already there — match it exactly rather than importing Keep a Changelog into …
- Distinctive: line 81
Write entries for the user of the package, from the diff, not from commit subjects.
- Distinctive: line 85
No changelog in the repo? Don't create one uninvited — mention it as an option.
- Distinctive: line 89
Run the test suite before tagging.
- Very specific: line 115
Never --force, and never move a tag that is already on the remote — a version someone may have installed does not get redefined.
- Distinctive: line 127
If the working tree was dirty with unrelated work when you started, say so and stop before committing — a release commit that sweeps in …
“Common” is measured: kept by at least 6 in 10 of the 7 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Release Version
Bump the version everywhere it lives, record what changed, tag it. Stop before publishing.
1. Find where the version lives
Detect the ecosystem rather than assuming one. Use the native tool where there is one — it keeps lockfiles and metadata in sync, which hand-editing does not.
| Ecosystem | Version lives in | Native bump |
| Node | package.json + lockfile | npm version <bump> --no-git-tag-version |
| Python | pyproject.toml, often also __init__.py / _version.py | uv version --bump <bump>, poetry version <bump>, hatch version <bump> |
| Rust | Cargo.toml + Cargo.lock | cargo set-version <version> |
| Go | nothing in-tree — the git tag is the version | tag vX.Y.Z; major ≥ 2 also needs /vN on the module path |
| PHP | composer.json (often absent by design; the tag is canonical) | tag |
| Ruby | lib/**/version.rb or the gemspec | edit, then bundle install to refresh Gemfile.lock |
| Java | <version> in pom.xml, or build.gradle | mvn versions:set -DnewVersion=<version> |
| .NET | <Version> in *.csproj | edit |
| Dart / Flutter | pubspec.yaml | edit |
| Elixir | mix.exs | edit |
| Claude Code plugin | .claude-plugin/plugin.json | claude plugin tag --push |
| Codex plugin | .codex-plugin/plugin.json (or a root plugin.json) | edit; keep it equal to .claude-plugin/plugin.json when both exist, and commit it before claude plugin tag runs |
Not listed, or a project that keeps the version in several places? Grep the current version string across tracked files and treat every hit as a candidate:
git grep -nF 1.2.3 -- . ':!*.lock' ':!CHANGELOG*' # the current versionDocs, README badges, Helm Chart.yaml, CITATION.cff, Dockerfiles, and constants files
all hide copies. A release that updates the manifest and misses __version__ ships a
package that lies about itself.
Monorepo with several packages? Bump only what actually changed, and say which. Ask before bumping them all in lockstep unless the repo clearly already does that.
2. Choose the bump
Read the real changes since the last tag, not the last commit alone:
git describe --tags --abbrev=0 && git log $(git describe --tags --abbrev=0)..HEAD --onelineSemver, decided by what a consumer experiences:
- major — a breaking change: removed or renamed public API, changed defaults, changed output format, raised the minimum runtime.
- minor — new capability, backwards compatible.
- patch — fix, docs, internals; nothing a caller must react to.
Below 1.0.0, breaking changes conventionally land in minor (0.4.0 → 0.5.0).
Say which rule you applied and why, in one line — a bump the user disagrees with is
cheap to fix before the tag and expensive after.
Pre-release? 1.2.0-rc.1, and remember most registries treat it as non-default.
3. Apply it
Run the native command, then verify nothing stale is left:
git grep -nF "<old version>" -- . ':!CHANGELOG*'Lockfiles must be regenerated by their own tool, never edited by hand.
4. Changelog
If the project has a CHANGELOG.md, add an entry in the format already there — match it
exactly rather than importing Keep a Changelog into a repo that doesn't use it. New
section at the top, version and ISO date, grouped by Added / Changed / Fixed / Removed.
Write entries for the user of the package, from the diff, not from commit subjects. "Bump deps" is not an entry; "requires Node 20" is. Breaking changes get their own callout with the migration step.
No changelog in the repo? Don't create one uninvited — mention it as an option.
5. Verify, then tag
Run the test suite before tagging. A pushed tag is effectively permanent; a broken one gets re-cut as a new version, never moved.
git commit -am "chore(release): v1.2.0" # or the repo's existing convention
git tag -a v1.2.0 -m "v1.2.0"Match the repo's existing tag style — check git tag --list | tail. Common forms are
v1.2.0, bare 1.2.0, and package@1.2.0 in monorepos. Go requires the v. Claude
Code plugins use claude plugin tag, which writes {name}--v{version} and checks that
plugin.json and the marketplace entry agree. It tags HEAD, so every other version
file — a .codex-plugin/plugin.json included — must already be in the release commit.
Without the claude CLI (in Codex, say), check that agreement yourself and create the
same {name}--v{version} tag with git tag -a.
6. Push
Push the release commit and the tag — in a sandbox without network (Codex's default), with network access approved:
git push origin HEAD
git push origin v1.2.0 # or: git push --follow-tagsNever --force, and never move a tag that is already on the remote — a version someone
may have installed does not get redefined. If the tag exists, cut the next version.
Pushing a tag often triggers release CI that builds and publishes. Say so in the report so the user knows what the push set in motion.
Publishing directly to a registry is a separate ask: no npm publish, cargo publish,
twine upload, or gh release create unless the user requests it by name.
Report the new version, the files changed, the tag, the commit SHA, and where it was pushed.
If the working tree was dirty with unrelated work when you started, say so and stop before committing — a release commit that sweeps in someone's half-finished change is worse than a delayed release.
Other versions8 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 8
- corvo007/Gemini-Subtitle-Pro★ 822same name
- corvo007/MioSub★ 822same name
- Byte-n/larkDocx2md★ 34same name
- hhhyyyy99/prot-skills★ 7same name
- Vochsel/dump.page★ 3same name
- ngthluu/my-dev-skills★ 2same name
- Nucs/Agentmaster★ 1same name
- crux-cli/crux★ 0same 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 repository11 other files it gives its agents.
- add-designpatternSkill
- add-owasptoptenSkill
- add-spring-structureSkill
- askSkill
- checkout-commitSkill
- check-performanceSkill
- check-securitySkill
- design-uiSkill
- discussSkill
- generate-api-docsSkill
- testingSkill
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
Reviews can't be read right now.
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.

