to-release
Skill19 starsChanged 32 days agoMITView on GitHub
Prepare a library release on its PR (version, changelog, draft GitHub release) for review, then tag and publish it after you merge.
- Commits and pushes
In this repository42 other files it gives its agents.
- AGENTS.mdAGENTS.md
- a11y-auditSkill
- architecture-auditSkill
- buildSkill
- checkSkill
- codebase-designSkill
- code-reviewSkill
- commitSkill
- create-skillSkill
- debateSkill
- debugSkill
- deps-auditSkill
- domain-modelingSkill
- feedbackSkill
- frontend-ui-engineeringSkill
- grillSkill
- guideSkill
- handoffSkill
- hardenSkill
- i18nSkill
- perf-auditSkill
- prototypeSkill
- refactorSkill
- researchSkill
- retroSkill
- reviewSkill
- reviseSkill
- safe-repoSkill
- setupSkill
- source-drivenSkill
- tddSkill
- teachSkill
- to-adrSkill
- to-docSkill
- to-prSkill
- to-specSkill
- to-stackSkill
- to-ticketsSkill
- triageSkill
- visual-reviewSkill
- wait-whatSkill
- zoom-outSkill
The file
We split this skill into the rules it gives an agent
1 rule. About 0 are common, 0 are distinctive, and 1 is very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈0
Distinctive · estimate
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 31
Stop with the version, the PR URL, and the draft URL: "Review the PR and the draft release, merge, then /hb:to-release <PR> again."
≈ “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
To Release
For libraries and other versioned packages. One command, two runs; the PR's state picks the phase: open → prepare, merged → publish. You review and merge in between. This skill never merges.
1. Resolve
gh auth status fails → stop: "Run gh auth login, then /hb:to-release again." PR from $ARGUMENTS, else the current branch's: gh pr view <PR> --json number,state,headRefName,baseRefName,mergeCommit,title,body. Closed unmerged → stop.
Versions follow semver: MAJOR.MINOR.PATCH, pre-releases X.Y.Z-<id>.N with alpha < beta < rc < the release. git fetch origin --tags, then sort with git -c versionsort.suffix=- tag --sort=-v:refname: plain v:refname ranks 1.0.0 below its own -rc. The first line is the previous tag; the first without a - suffix is the previous stable. New tags match their format (v1.2.3 or 1.2.3). No tag yet → first release at the manifest version.
Prepare (PR open)
- Checks:
gh pr checks <PR>red or pending → stop and report. Version: a manifest in the PR (
package.json,.claude-plugin/plugin.json,Cargo.toml,pyproject.toml, …) is ahead of the previous tag → use it. Otherwise:- Base bump from the commits since the previous stable:
!orBREAKING CHANGE→ major,feat→ minor, else patch. Below1.0.0, major becomes minor. --pre <id>: previous tag is a pre-release of the same base → same<id>incrementsN, a later<id>restarts at.0, an earlier one stops and reports. Otherwise apply the base bump, then-<id>.0.- No
--preand the previous tag is a pre-release → promote its base (1.0.0-rc.2→1.0.0).
Bump every file that carries the version, including copies the repo's docs require, in each file's own syntax (PEP 440 writes
1.0.0a0; the tag stays semver), and commitchore(release): <tag>. Done when every version-bearing file reads the new version.- Base bump from the commits since the previous stable:
- Changelog:
CHANGELOG.mdexists without an entry for this version → prepend one in its format and commit. No file → the release notes are the changelog; don't create one. - Notes: shaped like the previous release (
gh release view <previous> --json name,body): its title, sections, voice, and closing PR ref. Write them from the PR body and the commits since the previous tag; a stable release spans everything since the previous stable, pre-releases included. No previous release →## Added/## Changed/## Fixed, empty ones omitted. - Draft:
gh release create <tag> --draft --title <title> --notes-file <file>, plus--prereleasefor a pre-release so it never becomes Latest; a draft for this tag exists →gh release edit <tag> --notes-file <file>. A draft creates no tag. Push the branch.
Stop with the version, the PR URL, and the draft URL: "Review the PR and the draft release, merge, then /hb:to-release <PR> again."
Publish (PR merged)
The tag is the version the files carry at mergeCommit. Not ahead of the previous tag → stop: the bump never merged. No draft for it → write the notes per step 5 first.
- Automation: find who publishes. A workflow on
release: published→ publish below; it runs after. A workflow that creates the release onpush: tags, or release-please, changesets, semantic-release, or goreleaser config → it owns the release: delete the draft, push the tag only, watch its run. - Confirm once: the tag, the merge commit (sha + title), and the draft's notes re-read with
gh release view <tag> --json body, so your edits survive. This is the only question. - Tag: annotated, on
mergeCommit, one line per change the notes span:git tag -a <tag> <sha> -F <file>, thengit push origin <tag>. The tag already exists on that commit → skip. On another commit → stop and report; never move a pushed tag. - Publish:
gh release edit <tag> --draft=false --verify-tag. Already published → skip. - Watch: a workflow the tag or release triggered →
gh run watch. Red → report the failing job; don't retry.
Return the release URL.
Next: /hb:retro in this session, before /clear.
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.

