release
Skill0 starsChanged 4 months agoMITView on GitHub
Turn merged PRs and conventional commits since the last tag into a versioned changelog entry and a tagged release — semver bump derived automatically from commit types
- Commits and pushes
193 other projects use a version of this.
Adopted by
Most recently taken up by
- yicheng47/runnertheir own version, first seen Nov 13, 2026
- eugene1g/agent-safehousetheir own version, first seen Nov 12, 2026
- BlockRunAI/ClawRoutertheir own version, first seen Nov 11, 2026
- cubeplexai/cubeplextheir own version, first seen Nov 10, 2026
- bex-co/bextheir own version, first seen Nov 10, 2026
- Yeachan-Heo/oh-my-claudecodetheir own version, first seen Nov 9, 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 versions193 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 193
- paperclipai/paperclip★ 114ksame name
- modelcontextprotocol/servers★ 92ksame name
- remotion-dev/remotion★ 73ksame name
- traefik/traefik★ 66ksame name
- usememos/memos★ 64ksame name
- tw93/Pake★ 64ksame name
- amruthpillai/reactive-resume★ 46ksame name
- reactive-resume/reactive-resume★ 46ksame name
- AmruthPillai/Reactive-Resume★ 45ksame name
- Yeachan-Heo/oh-my-claudecode★ 41ksame name
183 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 repository29 other files it gives its agents.
- adopt-existing-projectSkill
- adrSkill
- branch-conflict-checkSkill
- ci-watchSkill
- compound-learningsSkill
- config-auditSkill
- cost-checkSkill
- coverage-ratchetSkill
- doc-syncSkill
- eval-harnessSkill
- flaky-triageSkill
- followup-trackingSkill
- incident-captureSkill
- kit-doctorSkill
- kit-updateSkill
- logging-initSkill
- migration-checkSkill
- new-project-bootstrapSkill
- nightly-auditSkill
- observability-checkSkill
- parallel-workSkill
- perf-budgetSkill
- pr-babysitterSkill
- pre-prSkill
- prompt-regressionSkill
- session-handoffSkill
- sync-healthSkill
- using-the-kitSkill
- writing-kit-skillsSkill
The file
We split this skill into the rules it gives an agent
10 rules. 0 are common, 5 are distinctive, and 5 are very specific to this project.
0
Common
Most of the 183 edited versions we read keep these.
5
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
- could be automatic: a setting could enforce it
- Very specific: line 13
Run this when you are ready to cut a release from trunk_branch.
- Distinctive: line 31
Never tag on a dirty tree: If git status --porcelain is non-empty, abort.
- Distinctive: line 32
Never overwrite an existing tag: If the computed tag already exists locally or on the remote, abort with a clear message — do not …
- Distinctive: line 49
If either check fails, stop immediately.
- Very specific: line 58
If the output is NO_PRIOR_TAG, collect all commits in the repository:
- Very specific: line 87
If no commit warrants a version bump (only docs, chore, refactor, test, perf, revert), warn the human: *"No feat or fix commits found — …
- Very specific: line 108
PR number: look for (#NNN) in the subject or Fixes: #NNN / Closes: #NNN in the body.
- Very specific: line 110
Spec citation: look for Ref: lines containing § (the section marker from capabilities.spec.section_marker in kit.yaml, default §).
- Distinctive: line 138
If false, skip and mark N/A.
- Distinctive: line 176
Use today's date (ISO 8601).
“Common” is measured: kept by at least 6 in 10 of the 183 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
Run this when you are ready to cut a release from trunk_branch. It collects
every commit since the last tag, derives the semver bump from conventional-commit
types, groups entries into a changelog section, and — after a dry-run review —
tags and optionally drafts a GitHub release.
Profile-driven. Steps tagged # kit.yaml → <key> read that value from
.claude/kit.yaml; defaults shown are for a conventional repository. The keys
release.changelog_file, release.auto_tag, and release.require_spec_citations
must be present (they are added by the coordinator when this skill is wired in);
trunk_branch is the shared root key.
Default: dry-run. Steps 1–6 are always safe to run — they read only. No file is written and no tag is created until you confirm at Step 7. Stop at Step 6, review the output block, and proceed only when the computed version and changelog diff look correct.
Guardrails
- Never tag on a dirty tree. If
git status --porcelainis non-empty, abort. - Never overwrite an existing tag. If the computed tag already exists locally or on the remote, abort with a clear message — do not force-push or delete.
- Never run on a non-trunk branch. Confirm
HEADis ontrunk_branchbefore doing anything that writes.
Steps
1. Guard — working tree and branch
# kit.yaml → trunk_branch
git status --porcelain # must be empty; abort if not
git branch --show-current # must equal trunk_branch value; abort if notIf either check fails, stop immediately. Print the exact failure (dirty files listed, or current branch vs. expected) and do not proceed.
2. Find the last release tag and collect commits since
git describe --tags --abbrev=0 2>/dev/null || echo "NO_PRIOR_TAG"If the output is NO_PRIOR_TAG, collect all commits in the repository:
git log --format="%H %s" --reverseOtherwise collect only commits after the last tag:
git log <last_tag>..HEAD --format="%H %s" --reverseRecord: last tag (or (none)), commit count, raw commit list.
3. Parse conventional commits and derive the semver bump
For each commit subject, match against type(scope)!: subject or
type(scope): subject using the allowed types from docs/COMMIT_CONVENTION.md:
feat, fix, docs, refactor, test, perf, chore, revert.
Bump rules (highest wins across all commits):
| Signal | Bump |
feat!: / BREAKING CHANGE: in commit body footer | major |
feat: or feat(scope): | minor |
fix: or fix(scope): | patch |
| anything else parseable | no version bump on its own |
If no commit warrants a version bump (only docs, chore, refactor, test,
perf, revert), warn the human: "No feat or fix commits found — this release
would be a no-op version bump. Confirm you still want to proceed." Do not abort;
let them decide.
4. Compute the next semver and check for tag collision
Parse the last tag as vMAJOR.MINOR.PATCH (strip a leading v if present).
Apply the bump to get next_version. Re-attach the v prefix:
git tag --list "v${next_version}" # must return nothing; abort if tag exists
git ls-remote --tags origin "refs/tags/v${next_version}" # same check on remoteRecord: last_tag → next_tag, bump reason.
5. Fetch PR numbers and spec citations for each commit
For each commit hash collected in Step 2, pull its full message to extract:
- PR number: look for
(#NNN)in the subject orFixes: #NNN/Closes: #NNNin the body. - Spec citation: look for
Ref:lines containing§(the section marker fromcapabilities.spec.section_markerin kit.yaml, default§).
git log -1 --format="%B" <commit_hash>6. Group entries and emit warnings
Group the parsed commits into four sections (omit a section entirely if empty):
- Breaking Changes — any commit with
!type orBREAKING CHANGE:footer - Features —
featcommits - Fixes —
fixcommits - Other — all remaining parseable commits (
docs,chore,refactor, etc.)
For each entry, format:
- <short subject> (<PR #NNN if found>) [§X.Y if found]Warn on unparseable commits. Any commit whose subject does not match
type(scope)?: subject is unparseable. Do not silently drop it. Collect all such
commits into a WARNINGS block and list them (hash + raw subject) for the human to
triage. They may belong in Other or indicate a convention violation.
Spec citation check.
Applies when release.require_spec_citations is true in .claude/kit.yaml.
If false, skip and mark N/A.
For every feat or fix commit that has no § citation, emit a warning:
"Release-worthy commit with no spec citation: <hash> <subject>." The release
is not blocked, but the warnings must be visible in the output.
Stop here for dry-run review. Print the full Output block (see below). Do not write any file or create any tag until the human confirms the version and changelog diff are correct.
7. Write the changelog entry
# kit.yaml → release.changelog_file (default: docs/changelog.md)Prepend a new section to the changelog file using this format:
## [v<next_version>] — YYYY-MM-DD
### Breaking Changes
- ...
### Features
- ...
### Fixes
- ...
### Other
- ...Use today's date (ISO 8601). Omit sections that are empty. After writing, show the diff:
git diff -- <changelog_file>8. Tag the release
Applies when release.auto_tag is true in .claude/kit.yaml. If false, stop
here: report the computed version, show the changelog diff, and instruct the human
to run git tag v<next_version> && git push origin v<next_version> manually.
git tag -a "v${next_version}" -m "Release v${next_version}"
git push origin "v${next_version}"Confirm the push succeeded before proceeding to Step 9.
9. Draft a GitHub release
Applies when release.auto_tag is true (tag was just created in Step 8).
gh release create "v${next_version}" \
--draft \
--title "v${next_version}" \
--notes-file <(echo "<changelog section text>")The release is always created as --draft. A human promotes it to published.
Print the URL returned by gh release create.
Output
Fill this in with real results after every run. In dry-run mode, all write-path
lines show (dry-run — not applied).
## Release
Last tag: v<X.Y.Z> (or "(none)")
Next version: v<X.Y.Z>
Bump reason: <major — BREAKING CHANGE in <hash> | minor — feat in <hash> | patch — fix in <hash> | none — no feat/fix commits>
### Changelog preview
## [v<X.Y.Z>] — YYYY-MM-DD
#### Breaking Changes
- <subject> (#NNN) [§X.Y]
#### Features
- <subject> (#NNN) [§X.Y]
#### Fixes
- <subject> (#NNN)
#### Other
- <subject>
### Warnings
- Unparseable commits (not in conventional-commit format):
- <hash> <raw subject>
- ...
- Spec citations missing on release-worthy commits (release.require_spec_citations=true):
- <hash> <subject>
- ...
- <none>
### Actions
- [ ] Changelog written to <release.changelog_file>: <done / dry-run — not applied>
- [ ] Tag created and pushed: <v<X.Y.Z> / dry-run — not applied / N/A — auto_tag=false>
- [ ] GitHub draft release: <<URL> / dry-run — not applied / N/A — auto_tag=false>
Blocked: <YES — <reason> | NO>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.

