Draft Release Notes
jamiepine/voicebox
Writes or refreshes the Unreleased section of CHANGELOG.md as a themed narrative built from the commits, PRs and diff since the last version tag.
Cut a new TMDb release — work out the next SemVer version from the evidence, do the pre-tag housekeeping a tag would otherwise freeze in place, draft release notes, then tag and publish the GitHub…
$ npx skills add adamayoung/TMDb --skill cut-release -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install adamayoung/TMDb cut-release --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/adamayoung/TMDb.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/cut-release .claude/skills/cut-release && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "cut-release" agent skill from https://github.com/adamayoung/TMDb/tree/main/.claude/skills/cut-release into .claude/skills/cut-release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "cut-release", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/adamayoung/TMDb/tree/main/.claude/skills/cut-releaseType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add adamayoung/TMDb --skill cut-release -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install adamayoung/TMDb cut-release --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/adamayoung/TMDb.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/cut-release .agents/skills/cut-release && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "cut-release" agent skill from https://github.com/adamayoung/TMDb/tree/main/.claude/skills/cut-release into .agents/skills/cut-release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "cut-release", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add adamayoung/TMDb --skill cut-release -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install adamayoung/TMDb cut-release --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/adamayoung/TMDb.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/cut-release .cursor/skills/cut-release && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "cut-release" agent skill from https://github.com/adamayoung/TMDb/tree/main/.claude/skills/cut-release into .cursor/skills/cut-release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "cut-release", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/adamayoung/TMDb.git --path .claude/skills/cut-release--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add adamayoung/TMDb --skill cut-release -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install adamayoung/TMDb cut-release --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/adamayoung/TMDb.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/cut-release .gemini/skills/cut-release && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "cut-release" agent skill from https://github.com/adamayoung/TMDb/tree/main/.claude/skills/cut-release into .gemini/skills/cut-release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "cut-release", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install adamayoung/TMDb cut-releaseInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add adamayoung/TMDb --skill cut-release -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/adamayoung/TMDb.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/cut-release .github/skills/cut-release && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "cut-release" agent skill from https://github.com/adamayoung/TMDb/tree/main/.claude/skills/cut-release into .github/skills/cut-release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "cut-release", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add adamayoung/TMDb --skill cut-release -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install adamayoung/TMDb cut-release --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/adamayoung/TMDb.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/cut-release .opencode/skills/cut-release && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "cut-release" agent skill from https://github.com/adamayoung/TMDb/tree/main/.claude/skills/cut-release into .opencode/skills/cut-release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "cut-release", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
cut-releaseCut a new TMDb release — work out the next SemVer version from the evidence, do the pre-tag housekeeping a tag would otherwise freeze in place, draft release notes, then tag and publish the GitHub…
Cut Release is an agent skill from adamayoung/TMDb. Cut a new TMDb release — work out the next SemVer version from the evidence, do the pre-tag housekeeping a tag would otherwise freeze in place, draft release notes, then tag and publish the GitHub release. Presents the version (with its reasoning) and the full notes for approval and STOPS; nothing is tagged or published until you say go.
Its SKILL.md is about 3k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Development, covering Changelog and release notes. It works with GitHub and Git. The repository describes itself as: The Movie Database Swift Package. The licence is Apache-2.0.
9 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit a3f1311. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
gitghmakeFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use git and gh, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Cut Release loads about 3k tokens when it runs. Until then it costs about 88 tokens; SKILL.md has 1,751 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from adamayoung/TMDb at commit a3f1311, republished under its Apache-2.0 licence (© adamayoung). 1,751 words, ~3,014 tokens.
.claude/skills/cut-release/SKILL.md (or your agent's skills folder).Takes main from "a pile of merged PRs" to "a tagged, published release".
This skill is never headless. Every other skill in this repo may decide for
itself; this one may not. A tag is the one artifact consumers resolve against,
and publishing one is effectively irreversible: SwiftPM hands a new minor or
patch to everyone inside the current from: range the moment it exists, a new
major reaches everyone who has since bumped, and deleting a tag does not
un-fetch it from anyone who already resolved. Phases 1–5 are read-only and local.
Phase 6 is a hard stop. Phases 7–9 run only on an explicit go-ahead.
If invoked with no human able to answer, run to the hard stop, print the summary, and exit. Do not tag.
Stop on any failure; report which one and what to do.
main, clean tree, in sync with origin/main
(git status --porcelain, git rev-list --count main..origin/main).git fetch --tags; establish the last release:
git tag --sort=-v:refname | head -1.main tip:
gh api repos/adamayoung/TMDb/commits/<sha>/check-runs. This is the entry
check — the commit that actually gets tagged does not exist yet (Phase 7
creates it), and Phase 7 re-checks that one. Starting from a red main just
means finding out later.Two independent signals. They must agree, or you stop.
Signal A — the CHANGELOG (authoritative). The open ## [X.Y.Z] section at
the top (no date = unreleased) is the proposal. Count **Breaking:** markers
inside it, and read the section headings:
**Breaking:** → major### Added content → minor### Fixed / ### Changed only) → patchSignal B — the commits (cross-check). git log <lasttag>..HEAD, bucketed by
gitmoji. Consumer-visible: ✨ feature, 🐛 fix, ♻️ refactor, 🔒 security,
⚡️ perf. Not consumer-visible: 🔧 chore, 📝 docs, 👷 CI, ✅ tests,
📦 build. Count multibyte-safely — sort | uniq -c over emoji collapses
distinct ones in a non-UTF-8 locale and will hand you a confidently wrong tally.
Gitmoji alone is not enough to pick a version in this repo, and you must not
try. A 🐛 here is routinely source-breaking: "🐛 Surface task cancellation as
TMDbError.cancelled" (PR #433) was filed as a fix and added an enum case, which
breaks every exhaustive switch downstream. Signal B exists to catch omissions
from the CHANGELOG, not to compute the bump.
Then reconcile:
[20.0.0] containing no **Breaking:** is a
mis-labelled release — stop and report, do not silently downgrade it.knowledge/next-major.md's status line names the open window. If it disagrees
with the CHANGELOG heading, stop.Coverage check. Every commit since the last tag that touches Sources/ and
carries a consumer-visible gitmoji should be represented somewhere in the open
CHANGELOG section. List any that are not. This is the check that catches a real
change shipping invisibly; the not-consumer-visible buckets legitimately have no
CHANGELOG entry and are not flagged.
Branch first. git checkout -b chore/prepare-<version>-release. Phase 1 put
you on a clean main, and CLAUDE.md forbids editing there — but the practical
reason is re-entrancy: if the run is abandoned at the Phase 6 stop, edits made on
main leave a dirty tree that fails this skill's own Phase 1 preflight on the
next attempt. Branching now costs nothing and makes an abort free.
A tag snapshots the tree, so anything that says "unreleased" is frozen saying it, forever, inside the very release it describes. These four are not optional, and all of them were needed for 19.0.0 (PR #406):
README.md install snippet. from: "<previous major>" resolves to
>=prev, <prev+1 — on a major, readers following the README would never
resolve to the new version at all. Bump it. (This is the one with real user
impact; the other three are hygiene.)
Scripts/check-readme-version.py enforces this from make lint and CI: the
snippet must match either the newest dated CHANGELOG section (the last
release) or the newest undated one (the release being prepared). That
second arm exists so this housekeeping PR is not blocked by the tag it is
preparing — bump the snippet and date the section in the same commit and both
arms stay satisfied. Forget the bump entirely and the check goes red on the
next PR after the release.
CHANGELOG.md. Date the section — ## [X.Y.Z] - YYYY-MM-DD — and add
the link definition at the foot:
[X.Y.Z]: https://github.com/adamayoung/TMDb/releases/tag/X.Y.Z. Check the
previous version's definition is there too; they have been missed before.
knowledge/next-major.md. Rewrite the status line: this version has
shipped, and the next major's window is now open. Remove every backlog entry
that shipped in this release (the file's own rule). An entry left behind
claiming to await a window that just closed is invisible exactly when it
should fire.
ADR statuses. Every knowledge/decisions/*.md reading
Accepted (in X.Y.Z, unreleased) becomes Accepted (shipped in X.Y.Z) — in
the file and in the decisions/README.md index. Leave
unreleased — tooling only ADRs alone; they describe .claude/ machinery
with no library impact and no version to ship in.
Make these edits on the branch but do not commit yet — they are shown at the
hard stop, and they go up as a PR, never straight to main.
Structure, in this order:
**Breaking:** entry. What
breaks, and the one-line fix for each. This sits above the feature list.<details> block: every commit since the last tag, one
line each — <sha> <subject>. Collapsed, because it is a reference, not a
read.https://github.com/adamayoung/TMDb/compare/<lasttag>...<newtag>.Slack's iOS notes are the reference: they open with something human, and they never pretend a bugfix release is a moon landing. Aim for a colleague writing to other developers — dry, specific, occasionally silly, never markety.
Length: the opener is 2–3 sentences. If it needs a fourth, it is a paragraph, and paragraphs are what section 3 is for.
Put together, for one message:
**Breaking:** entries, including four public enums gaining cases"
beats "there were breaking changes".Present the summary and wait. Do not tag, push, or publish anything.
Ask plainly whether to go ahead. Treat anything short of a clear yes as a no — "looks good" about the notes is not approval to publish. If the answer is a change request, apply it and return to this phase; the gate re-arms every time.
Only after approval. The branch already exists from Phase 3.
Commit the Phase 3 edits as 🔧 Prepare the <version> release, open the PR via
/pr, and let its CI run. The narrowed docs/config gate usually applies here —
the diff is Markdown only — but /pr owns that call; do not pre-empt it.
Merge once green.
Then wait for main's own run. ci.yml triggers on push to main with
**/*.md among its paths, so the squashed merge commit gets a CI run of its
own — a different commit from the PR head, and the one the tag will point at.
Phase 1's "green on the exact commit being tagged" means this run, not the PR's.
Poll it:
gh api repos/adamayoung/TMDb/commits/$(git rev-parse HEAD)/check-runs \
--jq '[.check_runs[] | {name, status, conclusion}]'Red or still running → do not tag. This is the cheapest place in the whole skill to be patient.
On the merged main, at the housekeeping commit:
git checkout main && git pull
git tag -a <version> -m "<version>"
git push origin <version>Annotated, not lightweight — a release tag should carry an author and a date.
Regenerate the commit list before publishing. The notes were drafted in
Phase 4, before the housekeeping merge existed — so their <details> list is
short by exactly the commit being tagged, while the compare link below it
includes it. Re-run the log against the new tag and refresh that block.
gh release create <version> --repo adamayoung/TMDb \
--title "<version>" --notes-file <path> --verify-tag --latest--verify-tag refuses to invent a tag that does not exist, which is what turns a
typo into a failed command instead of a phantom release.
Then confirm: print the release URL, and re-read the published notes once to check nothing was mangled in transit.
Report the tag, the release URL, and what the next window is now open for. If any
knowledge/next-major.md entries were deliberately carried forward rather than
shipped, name them — that is the moment someone can still object.
~ALL
tags with creation, update and deletion rules. The repository-role bypass
means the owner can force it, but nothing here is a casual git push --delete
— and SwiftPM consumers who already resolved the version are unaffected by any
of it. Get it right going in.next-major.md
that insist, inside the release, that the release has not happened.from: bump is invisible in testing and
breaks discovery for every new consumer on a major.© adamayoung, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .claude/skills/cut-release of adamayoung/TMDb.
Open the folder on GitHubat commit a3f1311
Cut Release next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Cut Release this skilladamayoung/TMDb | 178 | — | ~3k | Automated safety check: Pass | Apache-2.0 | |
| Draft Release Notesjamiepine/voicebox | 57k | — | ~941 | Automated safety check: Pass | MIT | |
| Mole Release Notes Publishertw93/Mole | 70k | — | ~1.9k | Automated safety check: Pass | GPL-3.0 | |
| Release Bumpjamiepine/voicebox | 57k | — | ~1.1k | Automated safety check: Pass | MIT | |
| Verdaccio Pull Request Workflowverdaccio/verdaccio | 18k | — | ~1.9k | Automated safety check: Pass | MIT | |
| Go-Redis Release Preparationredis/go-redis | 22k | — | ~1.1k | Automated safety check: Pass | BSD-2-Clause |
jamiepine/voicebox
Writes or refreshes the Unreleased section of CHANGELOG.md as a themed narrative built from the commits, PRs and diff since the last version tag.
tw93/Mole
Publishes curated, bilingual release notes for an existing Mole version tag with gh release edit, including contributor thanks and reactions, after the release workflow finishes.
jamiepine/voicebox
Ends a release cycle by moving the Unreleased changelog notes under a dated version heading, bumping version files with bumpversion and tagging the commit.
verdaccio/verdaccio
Takes a change through a verdaccio pull request: branch, local checks, changeset, title and body, labels, CI and review rounds, and ports to other release lines.
redis/go-redis
Prepares a go-redis release locally: picks the next semver, gathers merged PRs, writes the RELEASE-NOTES entry and bumps versions, without publishing.
modem-dev/hunk
Maintainer workflow for preparing, publishing, verifying and curating Hunk releases, with confirmation gates before tags, publishes and public edits.
adamayoung/TMDb
Writes and maintains DocC /// comments for the public API of the TMDb Swift package, following the project's summary patterns and comment structure.
adamayoung/TMDb
Diagnoses a failing scheduled TMDb Integration run, re-runs transient failures, and fixes real API drift on its own branch with a PR, merging it only when told to.
adamayoung/TMDb
Drives an approved plan to completion test-first, deriving a Canon TDD test list, showing it before any code and stopping only when every item is written, passing and green.
adamayoung/TMDb
Grooms the Backlog column of a GitHub project board by re-verifying each issue against current main, closing dead ones, promoting actionable ones to Ready and naming the decision the rest need.
adamayoung/TMDb
Has your agent build features and fix bugs in Canon TDD order: write a test list, then one failing test, make it pass, refactor, and repeat until the list is empty.
adamayoung/TMDb
Records non-obvious lessons from a finished task, such as gotchas, API quirks and design decisions, into a project's knowledge folder before a pull request opens.
Categories
Cut a new TMDb release — work out the next SemVer version from the evidence, do the pre-tag housekeeping a tag would otherwise freeze in place, draft release notes, then tag and publish the GitHub…. Cut Release is an agent skill from adamayoung/TMDb. Cut a new TMDb release — work out the next SemVer version from the evidence, do the pre-tag housekeeping a tag would otherwise freeze in place, draft release notes, then tag and publish the GitHub release.
Cut Release fits situations like: tasks that involve Changelog and release notes.
Run `npx skills add adamayoung/TMDb --skill cut-release -a claude-code`. Or copy the skill folder (.claude/skills/cut-release in adamayoung/TMDb) into .claude/skills/cut-release in your project. Claude Code loads it when a task matches its description.
Run `npx skills add adamayoung/TMDb --skill cut-release -a codex`. Or copy the skill folder (.claude/skills/cut-release in adamayoung/TMDb) into .agents/skills/cut-release in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add adamayoung/TMDb --skill cut-release -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/cut-release, .gemini/skills/cut-release, .github/skills/cut-release and .opencode/skills/cut-release in your project.
Going by SKILL.md and its folder, Cut Release needs the command-line tools its instructions call (git, gh and make).
SKILL.md contains no URLs. Its commands use git and gh, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Cut Release is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3k tokens (SKILL.md is roughly 12k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Cut Release: Draft Release Notes (jamiepine/voicebox, 57k stars), Mole Release Notes Publisher (tw93/Mole, 70k stars), Release Bump (jamiepine/voicebox, 57k stars) and Verdaccio Pull Request Workflow (verdaccio/verdaccio, 18k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
adamayoung (a GitHub user) maintains it in adamayoung/TMDb, which has 178 GitHub stars. The repository holds 18 skills in this directory. The repository was last updated on October 3, 2026.
Source: adamayoung/TMDb on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.