npx skills add ...
npx skills add paulrberg/agent-skills --skill bump-release
Cut a release: bump versions, write changelogs, commit, tag.
npx skills add paulrberg/agent-skills --skill bump-release
Release one package or several packages with version bumps, changelog entries, commits, and tags. Supports single-package repositories, workspace monorepos, stable releases, beta releases, and dry runs.
packages: optional package names or directories. Omit in a single-package repository.version: optional explicit semver. Valid only for one user-selected package.--beta: create or advance a -beta.X prerelease.--dry-run: preview without modifying files, committing, or tagging.Resolve <skill-dir> from this SKILL.md. Keep helper stdout as JSON and diagnostics on stderr.
The read-only discovery output has schemaVersion: 2. It reports package identity, complete per-package changedFiles,
workspace edges and declared ranges, previous-tag facts, selected targets, and worktree state. changeHints are
filename-based, explicitly non-authoritative navigation hints. Never use them to decide release relevance or changelog
inclusion.
After the agent decides every stable patch/minor/major version, write discovery JSON to a temporary file and run:
The finalizer performs beta and explicit-version transitions, stable prerelease promotion, npm-range satisfaction,
simple dependency-range suggestions, and dependency ordering. It reports complex ranges, peer ranges, dependency cycles,
and stable versions not supplied by the agent as unresolved decisions. When an unsatisfied edge adds a dependent, choose
that package's release version and rerun with another --version assignment. The finalizer never chooses a regular
release magnitude or dependency policy.
For every stable changelog written, validate its deterministic structure:
This checks the expected release and date, heading/category order, allowed categories, list structure, and release-link tag. It does not judge importance, wording, or semantic category.
2 means the target is not a releasable Git/package
repository; exit 64 means invalid input. Stop on either.workingTree.clean. Do not absorb unrelated work.changedFiles and the net diff from its previous tag. Decide whether the surviving
changes warrant a release. Runtime environments, refactors, documentation, tests, and tooling can all be relevant in
context; filenames never decide this.references/common-changelog.md and write consumer-facing entries from the bounded net
diff. The agent owns entry selection, wording, importance, and category. Beta releases do not update changelogs.docs: release <version>;docs: release <package> <version>;v<version> or bare-semver facts;<package-dir>@<version>.git push origin --tags command after success.Helper failures mean malformed input, violated invariants, or failed validation; an agent decision remaining unresolved is data in the JSON, not a helper failure. Discovery and dry-run are read-only. Do not write changelogs before the final stable package set is known, and do not infer a tag convention when discovery reports observed facts.
Dry-run completion requires a discovery-backed, agent-reviewed action preview with zero writes. Release completion requires validated manifests and stable changelogs, formatting, one commit and annotated tag per package in dependency order, and a report of created commits/tags and agent-decided skips.
Use ### ⛔ Release stopped — working tree is not clean, ### ⚠️ Confirm release plan,
### 🔎 Release preview — no files, commits, or tags written, or ### 🏁 Release complete as applicable. Keep helper
JSON, versions, hashes, tags, commands, and changelog text exact and undecorated.
uv run "<skill-dir>/scripts/finalize-release-plan.py" \
--discovery <discovery.json> \
[--version <package>=<semver>]...uv run "<skill-dir>/scripts/validate-changelog.py" \
--file <CHANGELOG.md> --version <semver> --date <YYYY-MM-DD> [--tag <tag>]