cut-release
Skill2 starsChanged 6 months agoMITView on GitHub
Cut a release on GitHub or Gitea — the forge-level Release object (notes + assets) that sits on top of a git tag, NOT just the tag itself. Use this skill whenever the user says "cut a release", "cut a tag", "tag a release", "ship it", "publish v1.2.0", "do a release", or "draft release notes", and especially right after a PR is merged to the default branch when it's time to ship. The skill auto-discovers the forge from the git remote (github.com → GitHub, anything else → probe for Gitea/Forgejo), verifies CI is green on the merge commit before publishing, figures out the next semver tag from the repo's existing tag convention and the commits since the last tag, then creates an annotated tag and a Release with notes. Works for single-version repos and monorepos with per-component tags (like this one: `<skill-name>-vX.Y.Z`). Reach for this even if the user only says "tag" — confirm whether they want a bare tag or a full release.
- Commits and pushes
36 other projects use a version of this.
Adopted by
Most recently taken up by
- GLinnik21/plx-nativetheir own version, first seen Nov 8, 2026
- mediajunkie/piper-morgan-producttheir own version, first seen Nov 8, 2026
- delexw/motion-graphics-agenttheir own version, first seen Nov 8, 2026
- V-Songbird/foundrytheir own version, first seen Nov 4, 2026
- tansu-io/tansutheir own version, first seen Nov 1, 2026
- rpraharaj/ai-sdlctheir own version, first seen Nov 1, 2026
Used with
Projects with it also use quota-axi, iterate-pr and 6 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.
layer5ioSkillquota-axi
Report local Claude, Codex, Cursor, GitHub Copilot, and Grok quota windows via the quota-axi CLI - remaining percentages, reset times, and provider status read from local auth sources, with no routing, recommendation, or provider mutation. Use before deciding whether it is safe to keep spending a provider's quota, when the user asks about usage, rate limits, or remaining quota, or when comparing local provider headroom.
Also in 4 projects that use this
SentrySkilliterate-pr
Iterate on a PR until actionable CI passes and high/medium review feedback is addressed. Use for PR CI failures, review feedback, or green-check loops; do not wait for human approval, draft status, or merge gates.
Also in 4 projects that use this
layer5ioSkillgh-axi
Operate GitHub through the gh-axi CLI - issues, pull requests, workflow runs, workflows, releases, repositories, labels, Projects (v2), Actions secrets and variables, search, and raw API access. Use whenever a task touches GitHub: listing or filing issues, reviewing or merging PRs, checking CI runs, triggering workflows, cutting releases, managing Projects boards, or managing Actions secrets/variables.
Also in 4 projects that use this
kunchenguidSkillchrome-devtools-axi
Control a Chrome browser session through the chrome-devtools-axi CLI - navigate, snapshot, click, fill forms, run JavaScript, inspect console and network, take screenshots, audit performance. Use whenever a task needs a real browser: opening or testing a web page, clicking through a flow, extracting page content, or debugging a website.
Also in 4 projects that use this
kunchenguidSkilllavish
Turn complex or visual agent responses into rich, reviewable HTML artifacts (HTML files) the user can annotate and send feedback on, using the lavish-axi CLI. Use when about to give a plan, comparison, diagram, table, code diff, report, or anything easier to grasp visually than as prose.
Also in 4 projects that use this
ThisIsSadeghiSkillverify-ui
Verify UI implementation against Stitch design via a token audit (HTML ↔ Code, with X-component default-render checks) and an X-components compliance check.
Also in 3 projects that use this
Other versions36 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 36
- ToolJet/ToolJet★ 41ksame name
- meshery/meshery★ 12ksame name
- danielmeppiel/apm★ 4.2ksame name
- microsoft/apm★ 4.2ksame name
- Screenly/Anthias★ 3.7ksame name
- Netflix/bpftop★ 2.7ksame name
- tansu-io/tansu★ 1.9ksame name
- fim-ai/fim-agent★ 1.6ksame name
- fim-ai/fim-one★ 1.6ksame name
- libredb/libredb-studio★ 1.3ksame name
26 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 repository7 other files it gives its agents.
- CLAUDE.mdCLAUDE.md
- gemini-mockupSkill
- outline-runbook-curatorSkill
- pr-sweepSkill
- refresh-miatrix-tokenSkill
- retirement-planSkill
- self-reportSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
13 rules. 0 are common, 9 are distinctive, and 4 are very specific to this project.
0
Common
Most of the 36 edited versions we read keep these.
9
Distinctive
This author's own choices. Worth a look.
4
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 35
Only the last-mile API differs between GitHub and Gitea.
- Very specific: line 42
Never assume GitHub. Run discovery first — it tells you which reference file to read and gives you the owner, repo, and API base the rest …
- Very specific: line 59
If the probe fails, it's unknown: ask the user which forge this host is, or whether it's GitHub Enterprise (in which case set GH_HOST and …
- Very specific: line 68
If discovery returns unknown and the user can't clarify, stop — don't guess a host or push tags into the dark.
- Distinctive: line 75
Tag vs. release: If the user said "tag", ask whether they want a bare annotated tag or a full release with notes.
- Distinctive: line 86
If the user wants to release a different commit/branch, use that SHA instead throughout.
- Distinctive: line 107
If the repo genuinely has no CI configured, say so explicitly and ask the user to confirm they want to release without a green signal — …
- Distinctive: line 113
Follow the repo's existing convention rather than inventing one.
- Distinctive: line 142
If commits aren't conventional, read the diff and judge by impact.
- Very specific: line 149
Before cutting anything by hand, check whether the repo already automates releases on tag push — many do (this repo's …
- Distinctive: line 162
Create an annotated tag on the target SHA and push it:
- Distinctive: line 198
If automation cut the release, say so and link it once it appears (it may take a few seconds for the workflow to run — check the …
- Distinctive: line 214
Always confirm the version bump before publishing — the verify-green gate and the version confirmation are the two non-negotiable …
“Common” is measured: kept by at least 6 in 10 of the 36 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
Cut a Release
A tag is a git ref — a name pointing at a commit. A release is a forge-level object (GitHub Release / Gitea Release) that references a tag and adds human-facing notes, a title, and optional binary assets. They are not the same thing, and the user's "cut a release" almost always means the second: publish something installable/downloadable with notes, anchored to a tag.
This skill runs one arc regardless of forge:
discover the forge → verify CI is green → determine the next tag → create the tag → cut the release → verify & report.
Only the last-mile API differs between GitHub and Gitea. The decision-making — which version, is it green, what goes in the notes — is identical, and lives here in the main file. Forge-specific commands live in the references; read the one that matches what discovery finds.
Step 0: Discover the forge and repo
Never assume GitHub. Run discovery first — it tells you which reference file to
read and gives you the owner, repo, and API base the rest of the steps need.
scripts/detect-forge.shIt prints forge (github | gitea | unknown), host, owner, repo,
api_base, and default_branch. How it decides:
- Parse
git remote get-url origin(fall back to the first remote) into host/owner/repo, handling bothgit@host:owner/repo.gitandhttps://host/owner/repo.gitforms. host == github.com(orgh auth statusknows the host) → GitHub.- Otherwise probe
https://<host>/api/v1/version. Gitea and Forgejo both answer with{"version":"…"}→ Gitea (the Gitea reference covers Forgejo too; the API is compatible). - If the probe fails, it's
unknown: ask the user which forge this host is, or whether it's GitHub Enterprise (in which case setGH_HOSTand use the GitHub path).
Then read the matching reference and keep it open for Steps 2 and 4:
- GitHub →
references/github.md(ghCLI only;gh apifor raw calls) - Gitea / Forgejo →
references/gitea.md(teaCLI only;tea apifor raw calls)
If discovery returns unknown and the user can't clarify, stop — don't guess a
host or push tags into the dark.
Step 1: Confirm it's a release, and on which commit
Pin down two things before touching versions:
- Tag vs. release. If the user said "tag", ask whether they want a bare annotated tag or a full release with notes. Default to a release — that's what "cut a release" means and it's the higher-value action. A release always implies a tag; a tag does not imply a release.
- The target commit. Releases ship the tip of the default branch by
default (the just-merged commit). Confirm the branch is the one to release
from and that local is in sync:
If the user wants to release a different commit/branch, use that SHA instead throughout.git fetch origin git rev-parse origin/<default_branch> # the SHA you'll verify and tag
Step 2: Verify CI is green — gate the release on it
Do not cut a release on a red or pending commit. The whole point of tying releases to merges is that you only ship what passed. Check the combined status and check-runs for the target SHA — a commit can have passing legacy statuses but a failing check-run, or vice versa.
The exact commands are in the forge reference (references/github.md →
"Verify CI", references/gitea.md → "Verify CI"). The decision rule is the same:
- All green → proceed.
- Pending / in-progress → wait and re-check; don't release mid-run. Tell the
user it's still running rather than pushing ahead. Do not block with
sleeploops indefinitely — re-check a couple of times, then report status and let the user decide whether to wait. - Failing → stop. Report which check failed with a link. A failing default branch is a bug to fix, not a release to cut.
If the repo genuinely has no CI configured, say so explicitly and ask the user to confirm they want to release without a green signal — don't silently skip the gate.
Step 3: Determine the next tag
Follow the repo's existing convention rather than inventing one. Inspect what's already there:
git tag --sort=-v:refname | head -20Identify the pattern and pick the next version:
- Plain semver (
v1.4.2or1.4.2) — single-version repo. Match the existingv-prefix-or-not exactly. - Per-component / monorepo (
<component>-vX.Y.Z, e.g. this repo'sretirement-plan-v1.1.0) — releases are scoped to one component. Determine which component changed since its last tag (look at the paths ingit diff --name-only <last-tag>..origin/<default_branch>) and bump only that component's tag. One component per release — never bundle two into one tag. Seereferences/versioning.mdfor the monorepo walkthrough.
Choose MAJOR/MINOR/PATCH from the commits since the last matching tag:
git log <last-tag>..origin/<default_branch> --pretty=format:'%s%n%b'- Breaking change (a
!in the type, aBREAKING CHANGE:footer, or a removed/ renamed public contract) → MAJOR. - New feature (
feat:, an added capability) → MINOR. - Fixes / docs / internal only (
fix:,chore:,docs:) → PATCH.
If commits aren't conventional, read the diff and judge by impact. Propose the
computed version and one-line reasoning, and get the user's confirmation before
tagging — a version bump is a public, hard-to-walk-back claim about
compatibility. Details and edge cases in references/versioning.md.
Step 4: Check for release automation, then create tag + release
Before cutting anything by hand, check whether the repo already automates
releases on tag push — many do (this repo's .github/workflows/release-skill.yml
fires on *-v*.*.* tags and builds the Release itself).
ls .github/workflows .gitea/workflows .forgejo/workflows 2>/dev/nullGrep any workflow for a tag trigger (on: push: tags:) that creates a release.
If release automation exists, the correct move is to only push the tag and
let the pipeline cut the release — doing it by hand would double-create or fight
the automation. In that case:
- Create an annotated tag on the target SHA and push it:
git tag -a "<tag>" <sha> -m "<tag>" git push origin "<tag>" - Then jump to Step 5 and verify the automation produced the Release.
If there's no automation, create the tag and the release yourself using the
forge reference's "Create the release" section. Prefer letting the release
command create the tag from the target commit when it can (both gh release
create and the Gitea API do), so the tag and release are atomic — or push an
annotated tag first if you want the tag to exist independently. Either way:
- Title: the tag, or
<component> <version>for monorepos. - Notes: auto-generate from commits/PRs where the forge supports it
(
--generate-noteson GitHub, the changelog from Step 3 on Gitea), then tidy into a short human summary. Lead with what changed and how to install/upgrade if relevant. prerelease: truefor-rc/-beta/-alphatags;draft: trueonly if the user wants to review notes before it goes public.- Attach assets only if the repo ships build artifacts; the reference shows how.
Step 5: Verify and report
Confirm the Release actually exists on the forge (not just the tag) and report its URL — the reference's "Verify" section has the exact command. Then summarize:
✓ Forge: GitHub (github.com/joestump/claude-skills)
✓ CI green on a1b2c3d (default branch: main)
✓ Tagged retirement-plan-v1.2.0 (annotated) and pushed
✓ Release cut: retirement-plan v1.2.0
→ https://github.com/joestump/claude-skills/releases/tag/retirement-plan-v1.2.0
→ notes: 3 PRs, 1 feature, 2 fixesIf automation cut the release, say so and link it once it appears (it may take a few seconds for the workflow to run — check the Actions/run list if it's not up yet). On any failure, name the exact step and the error, and do not leave a dangling tag without a release without telling the user — either finish cutting the release or call out that the tag exists but the release didn't get made.
Triggers worth acting on
Beyond an explicit "cut a release", proactively offer to run this skill when:
- A PR was just merged to the default branch and CI is green ("want me to cut a release for this?").
- The user says "ship it", "publish", "tag a release", "draft release notes".
- There are unreleased commits on the default branch past the last tag and the user is wrapping up work.
Always confirm the version bump before publishing — the verify-green gate and the version confirmation are the two non-negotiable checkpoints.
Reference files
references/github.md— GitHub viaghandgh api: verify CI, create tag + release, generate notes, attach assets, GitHub Enterprise notes.references/gitea.md— Gitea/Forgejo viateaandtea api: auth, verify CI, create tag + release, attach assets.references/versioning.md— semver decisions, monorepo per-component tags, changelog generation, prerelease handling, and what to do when commits aren't conventional.scripts/detect-forge.sh— forge/owner/repo discovery from the git remote.
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.

