Cutting A Release
TriliumNext/Trilium
A skill your agent uses when cutting, preparing, or debugging a Trilium release — bumping the monorepo version, tagging, or diagnosing a failed "Release" workflow run.
Procedure for releasing a new version of Matft (decide the version → check tests → write release notes → create and push an annotated tag → publish a GitHub Release).
$ npx skills add jjjkkkjjj/Matft --skill release -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install jjjkkkjjj/Matft 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/jjjkkkjjj/Matft.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/release .claude/skills/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 "release" agent skill from https://github.com/jjjkkkjjj/Matft/tree/main/.claude/skills/release into .claude/skills/release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "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/jjjkkkjjj/Matft/tree/main/.claude/skills/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 jjjkkkjjj/Matft --skill release -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install jjjkkkjjj/Matft release --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jjjkkkjjj/Matft.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/release .agents/skills/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 "release" agent skill from https://github.com/jjjkkkjjj/Matft/tree/main/.claude/skills/release into .agents/skills/release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "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 jjjkkkjjj/Matft --skill release -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install jjjkkkjjj/Matft release --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jjjkkkjjj/Matft.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/release .cursor/skills/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 "release" agent skill from https://github.com/jjjkkkjjj/Matft/tree/main/.claude/skills/release into .cursor/skills/release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "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/jjjkkkjjj/Matft.git --path .claude/skills/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 jjjkkkjjj/Matft --skill release -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install jjjkkkjjj/Matft release --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jjjkkkjjj/Matft.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/release .gemini/skills/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 "release" agent skill from https://github.com/jjjkkkjjj/Matft/tree/main/.claude/skills/release into .gemini/skills/release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "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 jjjkkkjjj/Matft 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 jjjkkkjjj/Matft --skill release -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/jjjkkkjjj/Matft.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/release .github/skills/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 "release" agent skill from https://github.com/jjjkkkjjj/Matft/tree/main/.claude/skills/release into .github/skills/release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "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 jjjkkkjjj/Matft --skill 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 jjjkkkjjj/Matft release --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jjjkkkjjj/Matft.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/release .opencode/skills/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 "release" agent skill from https://github.com/jjjkkkjjj/Matft/tree/main/.claude/skills/release into .opencode/skills/release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "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.
releaseProcedure for releasing a new version of Matft (decide the version → check tests → write release notes → create and push an annotated tag → publish a GitHub Release).
Release is an agent skill from jjjkkkjjj/Matft. Procedure for releasing a new version of Matft (decide the version → check tests → write release notes → create and push an annotated tag → publish a GitHub Release). Use this skill whenever the conversation is about bumping Matft's version, tagging, or creating/updating a GitHub Release — e.g. "bump the version", "cut a release", "ship 0.3.4", "tag it", "create the Release", "publish a new version", or in Japanese「バージョンアップして」「リリースして」「0.3.4 を出して」「タグ打って」「Releases 作って」「新しいバージョン公開」— even if the word "skill" is never…
Its SKILL.md is about 1.8k 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 NumPy. The repository describes itself as: Numpy-like library in swift. (Multi-dimensional Array, ndarray, matrix and vector library). The licence is BSD-3-Clause.
9 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 618dcfc. 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:
gitghswiftFrom 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.
Release loads about 1.8k tokens when it runs. Until then it costs about 134 tokens; SKILL.md has 802 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 jjjkkkjjj/Matft at commit 618dcfc, republished under its BSD-3-Clause licence (© jjjkkkjjj). 802 words, ~1,771 tokens.
.claude/skills/release/SKILL.md (or your agent's skills folder).Matft is distributed via SwiftPM, and users resolve versions from git tags in x.x.x form (no v prefix — SwiftPM would no longer recognize it as a semantic version).
So the core of a release is "put the tag on the right commit, push it, and publish the GitHub Release tied to it".
CocoaPods (Matft.podspec) and Carthage are out of scope for this skill; do not touch them.
Pushing a tag and publishing a Release are public operations that immediately affect users' Package.resolved. They are hard to undo, so always get the user's confirmation before running any publishing command.
A release is defined not by the working tree but by the single commit to be tagged (<commit> below). All subsequent log, test, and CI checks are done against this <commit>. That way the release can proceed even if there are unrelated work-in-progress changes or unpushed operations-only commits locally.
git fetch origin --tags
git branch --show-current
git status --porcelain
git rev-list --left-right --count origin/main...HEAD # "<only on origin> <only local>"
gh auth status<commit> is usually the tip of origin/main (git rev-parse origin/main). Specify it by hash, not branch name, so it does not move if the branch moves later.origin/main. If they are code changes, push them first (after user confirmation) or ask the user.<commit>. Mention "working tree changes are not included" when confirming.gh is not authenticated, or origin has commits you have not pulled and it is unclear which to ship.git tag --sort=-v:refname | head -5 # recent tags
git log --oneline <latest tag>..<commit> # changes since the last releasex.x.x form, does not duplicate an existing tag, and is greater than the latest tag.As CLAUDE.md requires, never release anything whose tests do not all pass. Running swift test in the working tree can fail because of uncommitted TDD-in-progress changes (tests in the Red state, etc.), so check out <commit> cleanly and test that.
git worktree add <scratchpad>/matft-release <commit>
(cd <scratchpad>/matft-release && swift test)
git worktree remove <scratchpad>/matft-release
gh run list --commit <commit> # both the Swift and wasm workflows should be successIf the working tree is clean and HEAD equals <commit>, you may run swift test in place. If tests or CI fail, abort the release and report the cause.
A draft Release with the same name (often without a tag) may already exist on GitHub with release notes written in advance. Reuse it rather than discarding it.
gh api repos/jjjkkkjjj/Matft/releases \
--jq '.[] | select(.draft and .name=="<version>") | {id, name, tag_name, body}'If found, note its id and body.
Base them on git log <latest tag>..<commit> --pretty='%h %s'. If there is a draft body, start from it and add missing changes (things merged after the draft was created are often missing).
Commit subjects often contain only a number, like fixed #47. In that case look up the title to understand the change:
gh api repos/jjjkkkjjj/Matft/issues/<n> --jq '{title, pull_request: (.pull_request != null)}'Follow the format of existing releases (N/A for empty sections):
- New Features
- Add `Matft.foo` (#100)
- Improvement
- N/A
- Bug fixed
- `Matft.bar` returns wrong shape for negative axis (#101)Sources/). Leave out CI/workflow changes, test-only changes, documentation or operations changes such as README and CLAUDE.md, and merge commits.(#57, #58) if several).Present the results so far and get an explicit OK:
git tag -a <version> -m "<version>" <commit>
git push origin <version>Push the tag by name, not with git push --tags, so that stale or experimental tags left locally are not published along with it.
Write the release notes to a temporary file (in the scratchpad) and pass that, to avoid escaping accidents with newlines and backquotes.
If there is a draft (a draft without a tag cannot be looked up by tag name with gh release edit, so update it through the API):
gh api -X PATCH repos/jjjkkkjjj/Matft/releases/<draft-id> \
-f tag_name=<version> -f name=<version> \
-f body="$(cat <notes-file>)" \
-F draft=false -f make_latest=trueIf there is no draft:
gh release create <version> --verify-tag --title <version> --notes-file <notes-file> --latest--verify-tag makes it fail if the pushed tag does not exist, preventing gh from creating a tag on some other commit by itself.
gh release view <version>
gh release list --limit 3 # the new version should be Latest
git ls-remote --tags origin <version>Report the Release URL and that SwiftPM users can get it via File > Packages > Update to Latest Package Versions.
If a mistake is found after publishing, with the user's confirmation:
gh release delete <version> --yes # delete the Release (if needed)
git tag --delete <version>
git push origin :refs/tags/<version>Also tell the user that a published tag may already be cached on the users' side, so re-releasing under the next patch number is often safer than re-tagging the same number.
© jjjkkkjjj, BSD-3-Clause. 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/release of jjjkkkjjj/Matft.
Open the folder on GitHubat commit 618dcfc
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 |
|---|---|---|---|---|---|---|
| Release this skilljjjkkkjjj/Matft | 147 | — | ~1.8k | Automated safety check: Pass | BSD-3-Clause | |
| Cutting A ReleaseTriliumNext/Trilium | 38k | — | ~3.2k | Automated safety check: Pass | AGPL-3.0 | |
| Rea Changelog Updatemorluto/rea | 80k | — | ~1.9k | Automated safety check: Pass | MIT | |
| Mole CLI Release Flowtw93/Mole | 70k | — | ~2.6k | Automated safety check: Pass | GPL-3.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 |
TriliumNext/Trilium
A skill your agent uses when cutting, preparing, or debugging a Trilium release — bumping the monorepo version, tagging, or diagnosing a failed "Release" workflow run.
morluto/rea
Prepare or rewrite REA release changelogs and GitHub release notes from pinned Git history, with verified contributor thanks and Release Please synchronization.
tw93/Mole
Runbook for assessing and executing a Mole CLI release: distribution channels, pre-flight checks, capital-V tags, build artifacts and the handoff to curated 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.
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.
jjjkkkjjj/Matft
Procedure for writing and updating Matft's documentation (the Docusaurus site in website/ and the doc comments on the public API that become the Swift-DocC API reference).
jjjkkkjjj/Matft
Procedure for designing and writing Matft's XCTest cases with high coverage — boundary values, dtypes, memory layouts, NaN/inf, empty arrays, broadcasting, platform differences, performance and…
jjjkkkjjj/Matft
Procedure for benchmarking Matft's PerformanceTests against Numpy and reporting the results (and, when asked, updating the speed comparison table on the docs site, website/docs/performance.md).
jjjkkkjjj/Matft
Procedure for adding tests for Matft's image processing (Matft.image., indexing or channel swapping on images, etc.), generating comparison images that put the result next to an OpenCV reference…
Categories
Procedure for releasing a new version of Matft (decide the version → check tests → write release notes → create and push an annotated tag → publish a GitHub Release). Release is an agent skill from jjjkkkjjj/Matft. Procedure for releasing a new version of Matft (decide the version → check tests → write release notes → create and push an annotated tag → publish a GitHub Release).
Release fits situations like: the conversation is about bumping Matfts version; creating/updating a GitHub Release — e.g.
Run `npx skills add jjjkkkjjj/Matft --skill release -a claude-code`. Or copy the skill folder (.claude/skills/release in jjjkkkjjj/Matft) into .claude/skills/release in your project. Claude Code loads it when a task matches its description.
Run `npx skills add jjjkkkjjj/Matft --skill release -a codex`. Or copy the skill folder (.claude/skills/release in jjjkkkjjj/Matft) into .agents/skills/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 jjjkkkjjj/Matft --skill 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/release, .gemini/skills/release, .github/skills/release and .opencode/skills/release in your project.
Going by SKILL.md and its folder, Release needs the command-line tools its instructions call (git, gh and swift).
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.
Release is published under the BSD-3-Clause licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 1.8k tokens (SKILL.md is roughly 7.1k 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 Release: Cutting A Release (TriliumNext/Trilium, 38k stars), Rea Changelog Update (morluto/rea, 80k stars), Mole CLI Release Flow (tw93/Mole, 70k stars) and Draft Release Notes (jamiepine/voicebox, 57k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
jjjkkkjjj (a GitHub user) maintains it in jjjkkkjjj/Matft, which has 147 GitHub stars. The repository holds 5 skills in this directory. The repository was last updated on September 27, 2026.
Source: jjjkkkjjj/Matft on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.