release
tobi/qmd
Cut releases with validated changelogs, git hooks, and CI verification.
What is release?
Manage releases for your project by validating the changelog, installing git hooks, and cutting versioned releases. Use this skill when you need to release a new version, validate release readiness, or understand the release process. It is NOT automatically invoked by the model.
- Gather release context including version info, working directory status, commits since last release, and current changelog state
- Validate changelog follows Keep a Changelog conventions with proper version headings and structured entries
- Install and enforce git pre-push hooks that verify package.json version, changelog entries, and CI status before pushing tags
- Cut releases by renaming [Unreleased] to [X.Y.Z] with date, bumping package.json, creating commits and tags
- Check for outdated dependencies (sqlite-vec, node-llama-cpp, better-sqlite3) and pin exact versions before release
- Watch CI/publish workflows and report results after pushing to origin
How to install release
npx skills add null --skill release- Git repository with git hooks support
- package.json with version field
- CHANGELOG.md following Keep a Changelog format
- GitHub CLI (gh) installed for workflow monitoring
- pnpm for dependency checking (or equivalent package manager)
How to use release
- 1.Trigger the skill with `/release <version>` (e.g., `/release 1.0.5` or `/release patch`)
- 2.Review the context output showing version info, working directory status, commits, and current [Unreleased] content
- 3.Commit any outstanding work that belongs in this release using the /commit skill or direct commits
- 4.Write or update the [Unreleased] section in CHANGELOG.md following the changelog standard (highlights + Changes/Fixes sections)
- 5.Run the release script which renames [Unreleased] to [X.Y.Z] - date, bumps package.json, and creates a tag
- 6.Review the extracted changelog output and confirm before pushing
- 7.After confirmation, the skill pushes to origin main with tags and watches the CI/publish workflow
- 8.Monitor the background CI dispatch and wait for the skill to report the final result
Use cases
- Release a new version with `/release 1.0.5` or `/release patch` to auto-bump from current version
- Validate changelog completeness and format before cutting a release
- Ensure all dependencies are pinned to exact versions (no ^ or ~ ranges) and up-to-date before release
- Review commits and file changes since last release to inform changelog writing
- Verify CI passes on the published release before considering it complete
- Project maintainers managing version releases
- Teams using Keep a Changelog conventions
- Projects with automated CI/publish workflows
- Developers enforcing strict dependency pinning policies
release FAQ
You can use semantic version numbers like `1.0.5` or version shortcuts like `patch`, `minor`, or `major` which bump from the current version in package.json.
The skill gathers context first and shows you what's staged, modified, or untracked. You should commit outstanding work before cutting the release using the /commit skill or direct commits.
Before cutting a release, the skill checks for updates to sqlite-vec, node-llama-cpp, and better-sqlite3 using `pnpm outdated`. Any updates are pinned to exact versions (no ^ or ~ ranges) and tests are re-run before proceeding.
The hook verifies that package.json version matches the tag, CHANGELOG.md has a corresponding [X.Y.Z] - date entry, and CI passed on GitHub before allowing the tag push.
No. The skill never skips validation or force-pushes. If any step fails, it stops and explains the issue.
Full instructions (SKILL.md)
Source of truth, from tobi/qmd.
name: release description: 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", or asks about the release process. NOT auto-invoked by the model. disable-model-invocation: true
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], bumpspackage.json, commits, and tags. -
Show the final changelog — print the full
[Unreleased]+ minor series rollup viascripts/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_shellin dispatch mode with:gh run watch $(gh run list --workflow=publish.yml --limit=1 --json databaseId --jq '.[0].databaseId') --exit-statusThe 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, andbetter-sqlite3. Runpnpm outdatedand 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.jsonversion matches the tagCHANGELOG.mdhas a## [X.Y.Z] - dateentry 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).
Related skills
More from tobi/qmd and the wider catalog.
qmd
Search local markdown knowledge bases, notes, docs, and wikis with semantic and lexical queries.

zimage-generation
Generate high-quality images using ModelScope's Z-Image API. Use this skill when the user wants to generate images using the specific Z-Image model or ModelScope API they provided. Trigger words: 'Zimage', 'ModelScope', 'generate zimage'.

maestro-mobile-testing
Maestro mobile E2E testing patterns for React Native/Expo apps: YAML test flows, testID selectors, adaptive auth state, optimistic update verification, GraalJS scripting, cross-platform stability, CI/CD integration, Maestro Cloud, and MCP server integration

backtest-expert
Expert guidance for systematic backtesting of trading strategies. Use when developing, testing, stress-testing, or validating quantitative trading strategies. Covers "beating ideas to death" methodology, parameter robustness testing, slippage modeling, bias prevention, and interpreting backtest results. Applicable when user asks about backtesting, strategy validation, robustness testing, avoiding overfitting, or systematic trading development.

breadth-chart-analyst
This skill should be used when analyzing market breadth charts, specifically the S&P 500 Breadth Index (200-Day MA based) and the US Stock Market Uptrend Stock Ratio charts. Use this skill when the user provides breadth chart images for analysis, requests market breadth assessment, positioning strategy recommendations, or wants to understand medium-term strategic and short-term tactical market outlook based on breadth indicators. Also works WITHOUT chart images by fetching CSV data directly from public sources. All analysis and output are conducted in English.

canslim-screener
Screen US stocks using William O'Neil's CANSLIM growth stock methodology. Use when user requests CANSLIM stock screening, growth stock analysis, momentum stock identification, or wants to find stocks with strong earnings and price momentum following O'Neil's investment system.