Manage releases for this project. Validates changelog, installs git hooks, and cuts releases. Use when user says "/release", "release 1.0.5", "cut a release",…
Release Cut a release, validate the changelog, and ensure git hooks are installed. Usage /release 1.0.5 or /release patch (bumps patch from current version). Process When the user triggers /release <version>: Gather context — run skills/release/scripts/release-context.sh <version>. This silently installs git hooks and prints everything needed: version info, working directory status, commits since last release, files changed, current [Unreleased] content, and the previous release entry for style reference. Commit outstanding work — if the context shows staged, modified, or untracked files that belong in this release, commit them first. Use the /commit skill or make well-formed commits directly. Write the changelog — if [Unreleased] is empty, write it now using the commits and file changes from the context output. Follow the changelog standard below. Re-run the context script after committing if needed. Cut the release — run scripts/release.sh <version>. This renames [Unreleased] → [X.Y.Z] - date, inserts a fresh [Unreleased], bumps package.json, commits, and tags. Show the final changelog — print the full [Unreleased] + minor series rollup via scripts/extract-changelog.sh <version>. Ask the user to confirm before pushing. Push — after explicit confirmation, run git push origin main --tags. Watch CI — after the push, start a background dispatch to watch the publish workflow. Use interactive_shell in dispatch mode with: gh run watch $(gh run list --workflow=publish.yml --limit=1 --json databaseId --jq '.[0].databaseId') --exit-status The agent will be notified when CI completes and should report the result. Check dependency updates — before cutting the release, check for updates to sqlite-vec (and platform packages), node-llama-cpp, and better-sqlite3. Run pnpm outdated and report any available updates for these packages. If updates exist, bump them (pinned, no ^ ranges) and re-run tests before proceeding. If any step fails, stop and explain. Never force-push or skip validation. Dependency Policy All dependencies must be pinned to exact versions (no ^ or ~ ranges). The lockfile ensures reproducible installs. When adding or updating any dependency, always use the exact version string (e.g. "3.18.1" not "^3.18.1"). Changelog Standard The changelog lives in CHANGELOG.md and follows Keep a Changelog conventions. Heading format ## [Unreleased] — accumulates entries between releases ## [X.Y.Z] - YYYY-MM-DD — released versions Structure of a release entry Each version entry has two parts: 1. Highlights (optional, 1-4 sentences of prose) Immediately after the version heading, before any ### section. The elevator pitch — what would you tell someone in 30 seconds? Only for significant releases; skip for small patches. ## [1.1.0] - 2026-03-01 QMD now runs on both Node.js and Bun, with up to 2.7x faster reranking through parallel contexts. GPU auto-detection replaces the unreliable `gpu: "auto"` with explicit CUDA/Metal/Vulkan probing. 2. Detailed changelog (### Changes and ### Fixes) ### Changes - Runtime: support Node.js (>=22) alongside Bun. The `qmd` wrapper auto-detects a suitable install via PATH. #149 (thanks @igrigorik) - Performance: parallel embedding & reranking — up to 2.7x faster on multi-core machines. ### Fixes - Prevent VRAM waste from duplicate context creation during concurrent `embedBatch` calls. #152 (thanks @jkrems) Writing guidelines Explain the why, not just the what. The changelog is for users. Include numbers. "2.7x faster", "17x less memory". Group by theme, not by file. "Performance" not "Changes to llm.ts". Don't list every commit. Aggregate related changes. Credit contributors: end bullets with #NNN (thanks @username) for external PRs. No need to credit the repo owner. What not to include Internal refactors with no user-visible effect Dependency bumps (unless fixing a user-facing bug) CI/tooling changes (unless affecting the release artifact) Test additions (unless validating a fix worth mentioning) GitHub Release Notes Each GitHub release includes the full changelog for the minor series back to x.x.0. The scripts/extract-changelog.sh script handles this, and the publish workflow (publish.yml) calls it to populate the GitHub release. Git Hooks The pre-push hook (scripts/pre-push) blocks v* tag pushes unless: package.json version matches the tag CHANGELOG.md has a ## [X.Y.Z] - date entry for the version CI passed on GitHub (warns in non-interactive shells, blocks in terminals) Hooks are installed silently by the context script. They can also be installed manually via skills/release/scripts/install-hooks.sh or automatically via bun install (prepare script).
don't have the plugin yet? install it then click "run inline in claude" again.
added explicit inputs section documenting github token and git config, expanded procedure with input/output for each step, formalized decision points for dry-run/check/error cases, specified output contract with file locations and urls, clarified outcome signals for each mode.
this skill takes a project from "code is ready" to "tagged, pushed by the operator, and verified green on the exact tagged SHA." it handles pre-flight validation, changelog generation from git history, version bumps across package files, release commits, annotated tags, curated release notes, and post-push SHA verification. use it when you need to cut a release with confidence that every artifact is in sync and CI has signed off on the exact commit you tagged.
GITHUB_TOKEN environment variable with repo scope (required for GitHub Release creation and tag pushes)user.name and user.email configured locally (git config user.name, git config user.email)pre-flight validation
GITHUB_TOKEN env var is set and validversion determination
changelog generation
version bump
release commit
annotated tag
publish to remote
GITHUB_TOKENCI verification trigger
--dry-run flag provided: execute steps 1-6 (pre-flight, version, changelog, bump, commit, tag) but do not execute step 7 (publish). show operator what would be created. allow rollback by discarding local commits and tags.--check flag provided: execute step 1 (pre-flight validation) only. return GO (all checks pass) or NO-GO (blocking issues). do not modify any files or git state.GITHUB_TOKEN invalid or missing: fail at step 7 pre-push validation. do not push commit or tag. operator must set valid token and retry (local commit and tag are preserved for reuse)./release 1.7.0 to proceed."/release 1.7.0 to publish."