release
Skill1 starsChanged 27 days agoMITView on GitHub
Create a GitHub release with a version tag and LLM-authored release notes. Takes an optional version and source branch; --pre-release marks it a pre-release, --fasttrack (-y / --yes) skips the confirmation prompt. Final step of the release workflow.
- Commits and pushes
196 other projects use a version of this.
Adopted by
Most recently taken up by
- zxcvbn-ts/zxcvbntheir own version, first seen Nov 9, 2026
- TechbeeAT/jtxBoardtheir own version, first seen Nov 9, 2026
- ddnexus/pagytheir own version, first seen Nov 9, 2026
- zerx-lab/FluxDowntheir own version, first seen Nov 9, 2026
- orioledb/orioledbtheir own version, first seen Nov 9, 2026
- AmruthPillai/Reactive-Resumetheir own version, first seen Nov 8, 2026
Used with
Projects with it also use create-agent-adapter, changelog-style and 10 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
MicrosoftSkillcreate-agent-adapter
Technical guide for creating a new Paperclip agent adapter. Use when building a new adapter package, adding support for a new AI coding tool (e.g. a new CLI agent, API-based agent, or custom process), or when modifying the adapter system. Covers the required interfaces, module structure, registration points, and conventions derived from the existing claude-local and codex-local adapters.
Also in 5 projects that use this
GrinvSkillchangelog-style
Turn a commit range into CHANGELOG.md entries following common-changelog style. Use when finishing a PR or cutting a release, to write/fix the [Unreleased] section's entries — moving [Unreleased] under a new dated version heading is a separate, automated step (see the release skill / scripts/sync-version.ts), not this skill's job.
Also in 4 projects that use this
GrinvSkilldocs-consistency-check
Check README/manifest.json/server.json/CHANGELOG.md/AGENTS.md and docs/*.md for drift against the actual registered tools and source. Use after adding, renaming, or removing a tool, or as part of a live-audit pass.
Also in 4 projects that use this
Microsoft AzureSkillcomponent-release
Prepares a verifiable Agent Landing Zone UI release. Use for release branches, VERSION, changelog entries, tags, release notes, and compatibility evidence; never publish without explicit human approval.
Also in 4 projects that use this
Microsoft AzureSkilldocumentation-consistency
Keeps AI Landing Zone contributor, user, and operator documentation aligned with shipped Bicep behavior. Use for parameters, defaults, outputs, topology, deployment flow, operations, or releases.
Also in 8 projects that use this
rivet-devSkilllaunch-graphics
Generate agentOS marketing/launch graphics (launch & social heroes, code-snippet cards) from the committed generators in docs-internal/graphics. Use when asked to make, update, or render an agentOS launch image, social image, "agentOS Apps" graphic, or technical code-snippet image.
Also in 3 projects that use this
- +3 more from Grinv
Other versions196 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 196
- paperclipai/paperclip★ 112ksame name
- modelcontextprotocol/servers★ 92ksame name
- remotion-dev/remotion★ 72ksame name
- traefik/traefik★ 65ksame name
- usememos/memos★ 64ksame name
- tw93/Pake★ 63ksame name
- AmruthPillai/Reactive-Resume★ 45ksame name
- amruthpillai/reactive-resume★ 45ksame name
- reactive-resume/reactive-resume★ 45ksame name
- Yeachan-Heo/oh-my-claude-sisyphus★ 41ksame name
186 more not listed
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 repository37 other files it gives its agents.
- CLAUDE.mdCLAUDE.md
- add-product-knowledgeSkill
- archive-requirementsSkill
- brainstormSkill
- bug-stubSkill
- commitSkill
- configuration-initSkill
- create-proposalSkill
- create-release-branchSkill
- create-releaseSkill
- create-requirementsSkill
- epicSkill
- explainSkill
- feedbackSkill
- implementSkill
- jiraSkill
- load-contextSkill
- load-requirementsSkill
- meetingSkill
- merge-releaseSkill
- monitor-prSkill
- pr-reviewSkill
- rebuild-indexSkill
- rebuild-requirements-indexSkill
- refactorSkill
- report-issueSkill
- resume-workSkill
- review-planSkill
- search-requirementsSkill
- second-opinionSkill
- standupSkill
- todoSkill
- todo-workSkill
- troubleshootSkill
- update-contextSkill
- update-documentationSkill
- work-statusSkill
The file
We split this skill into the rules it gives an agent
6 rules. 0 are common, 1 is distinctive, and 5 are very specific to this project.
0
Common
Most of the 186 edited versions we read keep these.
1
Distinctive
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
- Very specific: line 60
If non-zero, stop with the standard "not in a git repository" message instructing the user to cd into a service repo.
- Very specific: line 93
Use AskUserQuestion to confirm the bump (skip if fasttrack and the bump is unambiguous.
- Very specific: line 161
If has_breaking_change == true, surface a ⚠️ Breaking Changes section at the top.
- Very specific: line 163
Write the notes to a tempfile under .claude/session-state/ (or /tmp/ if the workspace path isn't available):
- Very specific: line 172
Use AskUserQuestion to confirm: Create release <version> from <branch> now?
- Distinctive: line 191
If apply exits non-zero, surface stderr verbatim and stop.
“Common” is measured: kept by at least 6 in 10 of the 186 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 Command
Workflow:
/create-release-branch→/create-release→/merge-release→/release
Usage
/release # interactive — suggests the version bump
/release v1.0.2 # stable release from the default branch
/release v1.0.2 develop # stable release from another branch
/release v1.2.0-rc.1 --pre-release # explicit pre-release
/release v1.2.0-rc.1 release/v1.2.0 # a release/* branch implies --pre-release
/release v1.0.2 -y # skip the confirmation prompt--prerelease is accepted as an alias of --pre-release, and --yes /
--fasttrack as aliases of -y. Fasttrack still aborts rather than
auto-routing when the workflow case needs a decision — see Important Notes.
Context
Working directory: !pwd
Current branch: !git branch --show-current 2>/dev/null || echo "(not in a git repository)"
Remote tags: !bash "${CLAUDE_PLUGIN_ROOT}/shared/release/fetch-tags.sh" 2>/dev/null || echo "(fetch unavailable)"
Latest release: !bash "${CLAUDE_PLUGIN_ROOT}/shared/resolve-latest-release.sh" 2>/dev/null || echo "(resolver unavailable)"
Available branches: !git branch -a --list 'master' 'main' 'release/*' 'origin/master' 'origin/main' 'origin/release/*' 2>/dev/null || echo "(no branches)"
Recent tags: !git for-each-ref --count=10 --sort=-v:refname --format='%(refname:short)' refs/tags 2>/dev/null || echo "(no tags)"
Arguments provided: $ARGUMENTS
Release terminology — see ${CLAUDE_PLUGIN_ROOT}/shared/release-concepts.md.
Your Task
Thin dispatcher over ${CLAUDE_PLUGIN_ROOT}/shared/release/. Use parallel tool calls where steps are independent; pause only for the confirmations the steps below ask for. Do not re-derive parsing, version normalization, RC bumping, tag-existence checks, or workflow-case detection — call the scripts and surface their structured output.
The default release source is origin/<repo default branch> (resolved from origin/HEAD via _default_branch(), falling back to master). Users can override by passing a branch as the second argument (e.g. /release v1.2.0-rc.1 release/v1.2.0 for an RC off a release branch). Note: passing a release/* branch as the target automatically implies --pre-release; stable releases must target the default branch. When no branch arg is given and the user appears to want something other than the default branch, hint that they can pass one explicitly.
Step 0 — Pre-flight: verify git repo
git rev-parse --is-inside-work-tree 2>/dev/nullIf non-zero, stop with the standard "not in a git repository" message instructing the user to cd into a service repo.
Step 1 — Parse arguments
bash "${CLAUDE_PLUGIN_ROOT}/shared/release/parse-args.sh" \
--skill=release-create --json -- $ARGUMENTSOutcomes:
- Exit 0 —
versionpopulated;target(branch) populated;prereleasemay betrue/false/null;fasttrackis bool. - Exit 10 —
missingcontainsversion. See Resolving the version below. - Exit 20 — surface errors and stop.
Resolving the version
When version is missing, suggest a concrete version. The Context block above fetches remote tags first (Remote tags:), then resolves Latest release (from resolve-latest-release.sh) and Recent tags (top 10) against that fresh tag set. Use those values directly — do not re-shell resolve-latest-release.sh or git tag --sort=-version:refname | head -10. If the Remote tags: line shows a [stale-tags] or [no-remote] marker, the fetch failed or was skipped — surface that to the user before presenting the recommendation, since Latest release may then be based on stale local tags.
Then propose a bump based on conventional-commit scope using commits-data.sh against the resolved branch:
bash "${CLAUDE_PLUGIN_ROOT}/shared/release/commits-data.sh" \
--base=<latest-tag> --head=<branch> --jsonThe JSON gives breakdown.feat / fix / chore / … and has_breaking_change. Map to a bump:
| Signal | Bump | Example |
has_breaking_change == true | major | v1.2.3 → v2.0.0 |
breakdown.feat > 0 (no breaking) | minor | v1.2.3 → v1.3.0 |
only fix / chore / docs / refactor | patch | v1.2.3 → v1.2.4 |
Use AskUserQuestion to confirm the bump (skip if fasttrack and the bump is unambiguous; abort fasttrack if has_breaking_change is true and the user did not pass an explicit version). Then re-run the parser with the chosen version.
For RC bumps (prerelease == true): scan the Recent tags Context value above for vX.Y.Z-rc.* matches and propose -rc.<N+1>. If the ladder doesn't go deep enough (rare — would need >10 RCs of the same X.Y.Z), only then re-run git tag --sort=-version:refname | grep "^v<X.Y.Z>-rc" for that specific stem.
Step 2 — Plan: validate + detect workflow case
bash "${CLAUDE_PLUGIN_ROOT}/shared/release/release-create.sh" \
--version=<version> --branch=<branch> [--prerelease] \
--plan --jsonThe output reports:
workflow_case— one of:none-no-release-branch,prerelease,merged,no-pr,open-pr,closed-not-mergedrelease_branch—{name, exists}existing_pr— non-null when a PR forrelease/<version>existsapply_blocked— non-null if apply would refusesuggested_skill—create-releaseormerge-releasewhen routing is required
Show a concise summary to the user. Then route based on workflow_case:
workflow_case | What to do |
none-no-release-branch | OK — proceed to Step 3 |
prerelease | OK — proceed to Step 3 |
merged | OK — proceed to Step 3 |
no-pr | Use AskUserQuestion: "Run /create-release now?" → if yes, invoke Skill(skill: "create-release") then exit; otherwise stop. Fasttrack: abort. |
open-pr | Use AskUserQuestion: "Run /merge-release now?" → if yes, invoke Skill(skill: "merge-release", args: "release/<version>") then exit; otherwise stop. Fasttrack: abort. |
closed-not-merged | Use AskUserQuestion to confirm proceeding; if yes, re-plan with --allow-unmerged-pr for Step 4. Fasttrack: abort. |
Step 3 — Author release notes
The shell library does not generate release-note prose. That is your job.
Gather commit data from the previous tag → release branch:
# Find the previous stable tag (or the previous RC if --prerelease).
prev_tag="$(git tag --sort=-version:refname \
| grep -E '^v[0-9]+\.[0-9]+\.[0-9]+$' | head -1)"
bash "${CLAUDE_PLUGIN_ROOT}/shared/release/commits-data.sh" \
--base="$prev_tag" --head=<branch> --jsonAuthor a markdown release-notes file. A good shape:
## What's Changed
<one-paragraph summary derived from breakdown — e.g. "12 commits: 4 feat, 6 fix, 1 chore. No breaking changes.">
### Features
- **api**: <subject from a feat commit> — JIRA-123
- ...
### Bug Fixes
- **ui**: <subject from a fix commit> — JIRA-456
- ...
### Other Changes
- <docs / chore / refactor commits>
**Full Changelog**: https://github.com/OWNER/REPO/compare/<prev-tag>...<version>If has_breaking_change == true, surface a ⚠️ Breaking Changes section at the top.
Write the notes to a tempfile under .claude/session-state/ (or /tmp/ if the workspace path isn't available):
# Use the Write tool to create the file at e.g.
# .claude/session-state/release-notes-<version>.mdStep 4 — Confirm and apply
Use AskUserQuestion to confirm: Create release <version> from <branch> now?
Skip the prompt if fasttrack == true; print a one-line auto-confirm marker instead.
Then record the audit gate. gh release create is not covered by git-mutation-guard.sh (the hook only matches git push), but this skill mutates remote state — recording the audit keeps the trail consistent with the other release skills:
bash "${CLAUDE_PLUGIN_ROOT}/hooks/record-audit.sh"Immediately followed by apply:
bash "${CLAUDE_PLUGIN_ROOT}/shared/release/release-create.sh" \
--version=<version> --branch=<branch> [--prerelease] \
--notes-file=<tempfile> [--allow-unmerged-pr] \
--apply --jsonIf apply exits non-zero, surface stderr verbatim and stop.
Step 5 — Report
On success:
✓ Release <created>
version: <version>
branch: <branch>
url: <url>
<For pre-releases:>
⚠️ This is a pre-release and is marked as such on GitHub.Important Notes
- No extra round-trips — run the steps straight through, pausing only for the confirmations they ask for.
- No re-derived gh/git logic in prose — every gh/git operation goes through the shared scripts.
- Default source is
origin/<repo default branch>— if the user appears to want a different source (e.g. an RC off a release branch), ask them to pass it as the second argument:/release <version> <branch>. - Workflow gate — when
release/<version>exists, the action script enforces "no-pr → /create-release", "open-pr → /merge-release", "closed-not-merged → confirm with --allow-unmerged-pr". Do not bypass. - Fasttrack (
--fasttrack | -y | --yes) — auto-confirm the recommended version/branch/prerelease and skip the final confirmation. Abort (do not auto-route) if the workflow case isno-pr,open-pr, orclosed-not-merged, or ifhas_breaking_changeis true and no explicit version was supplied. - Notes authoring is your job — the shell scripts deliberately don't template prose; the JSON from
commits-data.shis what you have to work with. Keep it factual and grouped, no marketing voice. - Title format — the GitHub release title MUST be the bare version (e.g.
v1.4.0). The script handles this; do not pass--titleunless the user explicitly asked for a custom title.
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.

