release
Skill3 starsChanged 35 days agoMITView on GitHub
Cut a production release by promoting canary to main. Use when asked to cut, ship, or publish a release, tag a version, or push canary to production.
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 repository21 other files it gives its agents.
- AGENTS.mdAGENTS.md
- add-packageSkill
- agent-browserSkill
- api-endpointSkill
- auditSkill
- codebase-mapSkill
- db-migrationSkill
- designSkill
- devSkill
- docker-testSkill
- doc-syncSkill
- fontsSkill
- gh-commitSkill
- iceboxSkill
- ignore-syncSkill
- portlessSkill
- runtime-apisSkill
- shadcn-syncSkill
- shipSkill
- skills-managerSkill
- ui-verifySkill
The file
We split this skill into the rules it gives an agent
3 rules. 0 are common, 2 are distinctive, and 1 is very specific to this project.
0
Common
Most of the 186 edited versions we read keep these.
2
Distinctive
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 37
Every PR meant for this release is squash-merged into canary.
- Distinctive: line 53
If it is missing (canary just became ahead, or the workflow has not run yet), trigger it and re-list:
- Distinctive: line 91
Backfill is automatic: If a prior run pushed the commit and tag but died before publishing, the next run recreates the missing GitHub …
“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
[!CAUTION] Synced from https://github.com/nrjdalal/zerostarter. Customize this skill or remove this note to stop syncing.
Release
Releases ship by promoting canary to main. The release number is decided before the merge by .github/workflows/auto-canary-into-main.yml; everything after it (changelog, tag, GitHub release) is automated by .github/workflows/auto-release.yml, and .github/workflows/cli-release.yml publishes the CLI, from the tag once the release is cut and as a canary prerelease on pushes before it; cutting a release is one deliberate merge, because main deploys to production.
How it works
- Work reaches
canarythrough squash-merged PRs (canaryis the default branch). - Every push to
canaryrunsauto-canary-into-main.yml, which opens (or reuses) a draft PRcanary -> maintitledci(release): 🚀 merge canary into main, and then moves the rootpackage.jsonversion forward to what the window has earned so far (bun run release:version --write: changelogen's bump applied to the last tag's version, kept if the tree is already ahead), committingci(version): bump to vX.Y.Zwhen it moves. It skips whenmainis missing orcanaryis not ahead of it. - Merging that PR into
mainwith a merge commit firesauto-release.yml(trigger: a PR intomainwhose head branch iscanary, merged). It then, working oncanary:- takes the version from the tree (
bun run release:versionprints the decision: the larger of the tree and what the window earned from the last tag) and runschangelogenfrom the lastv*tag for the changelog section, - regenerates
.github/assets/graph-build.svgfrom a fresh production build, - commits
ci(changelog): update changelog and bump versiondirectly tocanary, - tags
vX.Y.Zat the merge boundary and pushes branch + tag atomically, - publishes a GitHub release whose notes mirror the changelog section.
- takes the version from the tree (
The notes are derived after the merge; the version is already in the tree, so main and production carry the released number on the merge itself.
Versioning
- Default: the bump
changelogencomputes from the window's commits, applied to the last tag's version: at 0.x a feature is a patch (0.1.7 -> 0.1.8) and a breaking commit a minor; past 1.0 the usual semver. The draft-PR workflow writes it intopackage.jsonon every human push tocanary(ci(version): bump to vX.Y.Z), so previews show the upcoming number and production shows it on the release merge. A missing tag counts asv0.0.0, which is a fresh fork's first window. - To ship a chosen version (for example a minor
0.2.0): hand-setversionin the rootpackage.jsononcanarybefore cutting the release. It stays as long as it is ahead of what the window earns; a breaking window lifts a smaller pin to the minor it earns. A tree below the last tag stops both workflows loudly (package.json is at X, below the last release vY), and a version equal to the last tag is treated as untouched. - The changelog drops
ci-type commits (changelog.config.json). A release needs at least one commit that is neitherci(changelog)norci(version)and at least one-entry in the new section, orauto-releaseno-ops (No releasable changelog content).
Cutting a release
1. Confirm the content is on canary
Every PR meant for this release is squash-merged into canary. Check nothing that should ship is still open:
gh pr list --base canary --state open2. (Optional) Pin the version
For anything bigger than the window earns, set version in the root package.json on canary first, via a normal PR, ahead of the last v* tag. Otherwise skip this: the tree already holds the number the window has earned.
3. Find the release PR
gh pr list --head canary --base main --state openIf it is missing (canary just became ahead, or the workflow has not run yet), trigger it and re-list:
gh workflow run auto-canary-into-main.yml --ref canary4. Merge to production
Mark it ready, let its build run, and merge with a merge commit (never squash). This is the production action; do it only on the user's explicit go-ahead.
gh pr ready <n>
# the head was pushed by the workflow, so GitHub holds that commit's build for approval instead of running it
RUN=$(gh run list --branch canary --workflow auto-check-build.yml --json databaseId,conclusion,headSha \
--jq "[.[] | select(.headSha == \"$(gh pr view <n> --json headRefOid --jq .headRefOid)\")][0] | select(.conclusion == \"action_required\") | .databaseId")
[ -n "$RUN" ] && gh api -X POST "repos/{owner}/{repo}/actions/runs/$RUN/approve" && gh run watch "$RUN" --exit-status
gh pr review <n> --approve
gh pr merge <n> --mergeWhen the release PR's head is a commit the workflow pushed, the ci(version) bump or the changelog commit, its pull_request build lands as action_required and never runs on its own, and without it the PR merges with no build check at all. Approving the run starts it. When the last push was a human merge that moved no version, the head is that merge, the build runs by itself, and the lookup above finds nothing to approve. Wait for it to pass before merging: the merge state reads CLEAN once it does. If canary moves while the release PR is open, the new head brings a new held run and a stale approval, so approve both again.
5. Verify
gh run list --workflow=auto-release.yml -L 1 # wait for success
gh release list -L 1 # new vX.Y.Z, marked LatestThe ci(changelog): ... commit and the new tag land on canary, so pull canary to pick them up. Production deploys from main. Done when the vX.Y.Z tag exists, the GitHub release is published as latest, and production serves the new build.
Notes
- Merge method is load-bearing.
canaryPRs squash; thecanary -> mainrelease PR merges with a merge commit somainkeeps shared history withcanaryand future release diffs stay clean. Themainruleset enforces this. - The version bump is a token push. The draft-PR workflow pushes
ci(version)with the workflow token, which starts no further workflows: no loop, and the bump commit carries no checks of its own until the next human merge.main's ruleset asks for a review, not status checks, so a window with a single PR still releases; a fork that requires status checks onmainsees its release PR wait for one more merge. - The CLI publishes through npm Trusted Publishing. npm trusts
cli-release.ymlin this repo throughid-token: write(OIDC); there is noNPM_TOKENsecret, so never add one back. When a release's publish leg fails,gh workflow run cli-release.yml --ref canarypublishes the latest tag's version; a re-run of the failed run replays the workflow file it started with. - Never tag or push a release by hand.
auto-releaseowns tagging and the atomic branch + tag push; a hand-cut tag collides and fails the next run. - The changelog commit lands on
canarydirectly, not through a PR (it is mechanical, generated from already-reviewed PR titles). Pullcanaryafter a release. - Backfill is automatic. If a prior run pushed the commit and tag but died before publishing, the next run recreates the missing GitHub release instead of double-bumping.
- A window of only
chore(deps)commits cannot release. changelogen hardcodes dropping non-breakingchore(deps)from the changelog (beyond whatchangelog.config.jsoncan override), so the new section has no entries andauto-releaseno-ops withNo releasable changelog content. Title dependency refreshesbuild(deps)(thegh-commitskill carries the rule), or land a releasable commit in the same window and re-run.
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.

