Cuts new releases by bumping versions, refreshing lockfiles, and regenerating changelogs in a release branch.
Install
mkdir -p .claude/skills/release-ably && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/13413" && unzip -o skill.zip -d .claude/skills/release-ably && rm skill.zipInstalls to .claude/skills/release-ably
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
Cut a new release - create release branch, bump version in package.json and src/version.ts, refresh root and demo lockfiles, regenerate CHANGELOG, and stage for review. Usage: /release patch|minor|major or /release <exact-version>.Key capabilities
- →Create a new release branch with a specified version
- →Bump version in package.json and src/version.ts
- →Refresh root and demo lockfiles
- →Regenerate CHANGELOG.md entry for the new version
- →Stage all changes for review
How it works
The skill performs pre-flight checks, computes the new version, creates a release branch, updates version numbers in relevant files, refreshes lockfiles, and regenerates the changelog, staging all changes.
Inputs & outputs
When to use release
- →Create release branch
- →Bump package version
- →Regenerate changelog
- →Refresh demo lockfiles
About this skill
Release: Cut a New Release Branch
A release PR is an ordinary PR. It changes exactly three files —
package.json, src/version.ts, CHANGELOG.md — and nothing else. Treat it
as the small, boring change it is: no extra validation ceremony, no CI
babysitting, no narrative.
Step 1: Pre-flight checks
git status --porcelain— must be empty (clean working tree).git rev-parse main origin/main— the release must be cut from the currentorigin/maintip. If the localmainis behind, branch fromorigin/mainand say so in one line.
If the working tree is dirty, stop and say what to fix. If the current branch
is already a release/* branch, stop — this skill only cuts new releases.
Step 2: Read the current version
Read package.json and extract the version field. Record it as
OLD_VERSION.
Step 3: Compute the new version
Interpret $ARGUMENTS:
patch— increment third component, e.g.1.2.3→1.2.4.minor— increment second component, reset patch, e.g.1.2.3→1.3.0.major— increment first component, reset minor and patch, e.g.1.2.3→2.0.0.- A literal semver string (e.g.
0.2.0) — use it as-is. Validate it matches^\d+\.\d+\.\d+(-[\w.]+)?$. - Empty — use AskUserQuestion with options "patch", "minor", "major", "Cancel".
Per CONTRIBUTING.md:
- Major: breaking changes requiring consumer action.
- Minor: new functionality or features.
- Patch: bug fixes requiring no consumer action.
Step 4: Create the release branch
git checkout -b release/NEW_VERSION <base>, where <base> is the
origin/main tip from Step 1.
If release/NEW_VERSION already exists, stop and ask the user to delete it or
pick a different version. Never --force over it and never reuse it blindly:
it may hold work in progress — a worktree checked out on it, uncommitted edits,
an earlier attempt at this release.
Step 5: Bump the version
Use Edit on:
package.json— theversionfield. Do NOT usepnpm version; it creates a tag and a commit, and the human controls both.src/version.ts— theVERSIONconstant, same string. It is theai-transport-jsagent identifier sent to Ably for SDK usage tracking and must stay in lockstep withpackage.json.
No lockfile work. pnpm-lock.yaml does not record the package's own
version, and every demo app depends on the SDK through a link: specifier
rather than a version range, so no root or demo lockfile changes. Do not run
pnpm install, do not delete node_modules, and do not stage any lockfile.
Step 6: Regenerate the CHANGELOG entry
Invoke the changelog skill via the Skill tool with
skill: "changelog" and args: "NEW_VERSION invoked-by-release".
It finds the previous tag, collects the PRs merged since it, and inserts a new
## [NEW_VERSION] block above the existing entries. Keep its "Skipped PRs"
output — Step 8 reuses it verbatim for the PR description.
If it reports no PRs found (placeholder - bullet), say so and fill the
bullets in before committing.
Step 7: Commit
Run pnpm run format (prettier over the repo — it is EOL-safe on this
checkout even though format:check is noisy locally), then stage only the
three release files:
git add package.json src/version.ts CHANGELOG.md
Verify with git diff --cached --stat that exactly those three appear, then
commit.
The commit message is one line:
Release vNEW_VERSION
No body. Nothing to explain — the CHANGELOG entry in the same commit is the
explanation. This matches every prior release commit; the repo does not use
conventional-commit prefixes for releases. The only additional line is the
Co-Authored-By: trailer.
Never put any of the following in a release commit message: a summary of the changelog, a list of PRs, or a note that some PR still has to merge or that the branch has to be rebased. That text becomes permanent history and is wrong the moment it lands.
Step 8: Push and open the PR
Push the branch and open the PR against main, titled Release vNEW_VERSION.
Open it as a draft if the changelog documents a PR that has not merged yet —
silently; the draft state is the signal, no explanatory note in the body.
The body is short. Four paragraphs, in this order:
-
What the PR changes: the version bump in
package.json/src/version.tsand the newCHANGELOG.mdentry. One or two sentences. -
The headline change in this release. One or two sentences.
-
PRs included since OLD_VERSION, split into two labelled lists:- User-facing (in changelog) — every PR that produced a
CHANGELOG.mdbullet. One#numberper line; add a two-or-three-word parenthetical only for the headline and for breaking changes. - Not user-facing (not in changelog) — every other PR in the window,
each with a one-word reason (
CI,demo,docs,test-only,internal tooling,internal refactor). This is the changelog skill's "Skipped PRs" output.
The union of the two lists is every PR in the window, so nothing is silently dropped.
- User-facing (in changelog) — every PR that produced a
-
Optional, only when true: any change this PR makes beyond the three release files — for example an edit to this skill. One or two sentences.
Nothing else goes in the body. No validation report, no test counts, no merge-order or rebase notes, no "worth your attention" section.
Step 9: What is left for a human
Report the PR link, then this list, and stop. Do not summarise the diff back — not the version numbers, not the file list, not what validation ran.
- Merge the PR.
- Create a GitHub release:
tag
NEW_VERSION(novprefix), titlevNEW_VERSION, description from "Generate release notes". - The npm (
release.yml) and CDN (publish.cdn.yml) publish workflows fire on release publication. - Update the Ably Changelog via Headway.
Do not
- Do not watch, poll, or wait for CI — not on
main, not on the release PR. A version bump plus a markdown edit cannot break the build; if a check does fail, a human sees it on the PR and deals with it separately. - Do not touch lockfiles or
node_modules(see Step 5). - Do not run the test suite, typecheck, or lint for a release.
prettieron the changelog is the only formatting that matters. - Do not write memory entries about the release — not the version, not the PR number, not which PRs still need to merge. A release is routine work with no durable lesson in it.
- Do not restate what the user already told you — if they asked for a specific PR to be included, they know it is not merged yet.
When not to use it
- →When the user intends to commit and push changes directly from the skill
Limitations
- →Does not commit or push changes.
- →Does not check CI status on 'main'.
- →Only cuts new releases from 'main'.
How it compares
This skill automates the version bumping, lockfile refreshing, and changelog generation for a release, unlike manually performing each step and ensuring consistency.
Compared to similar skills
release side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| release (this skill) | 0 | 2mo | Review | Intermediate |
| flow-nexus-platform | 6 | 4mo | Review | Beginner |
| netlify-deploy | 7 | 6mo | Review | Beginner |
| azure-static-web-apps | 4 | 7mo | Review | Intermediate |
Try saying
Example prompts that trigger this skill in your AI assistant.
You might also like
flow-nexus-platform
ruvnet
Comprehensive Flow Nexus platform management - authentication, sandboxes, app deployment, payments, and challenges
netlify-deploy
openai
Deploy web projects to Netlify using the Netlify CLI (`npx netlify`). Use when the user asks to deploy, host, publish, or link a site/repo on Netlify, including preview and production deploys.
azure-static-web-apps
github
Helps create, configure, and deploy Azure Static Web Apps using the SWA CLI. Use when deploying static sites to Azure, setting up SWA local development, configuring staticwebapp.config.json, adding Azure Functions APIs to SWA, or setting up GitHub Actions CI/CD for Static Web Apps.
web-development
TencentCloudBase
Web frontend project development rules. Use this skill when developing web frontend pages, deploying static hosting, and integrating CloudBase Web SDK.
apollo-deploy-integration
jeremylongshore
Deploy Apollo.io integrations to production. Use when deploying Apollo integrations, configuring production environments, or setting up deployment pipelines. Trigger with phrases like "deploy apollo", "apollo production deploy", "apollo deployment pipeline", "apollo to production".
cloud-functions
TencentCloudBase
Complete guide for CloudBase cloud functions development - runtime selection, deployment, logging, invocation, and HTTP access configuration.