Agent skill

Version Release

by muutot in muutot/Clipboard

Automated version bumping and release workflow for Clipboard Desktop.

AGPL-3.0Auto-check passedDevelopment

Install Version Release

skills CLI
$ npx skills add muutot/Clipboard --skill version-release -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install muutot/Clipboard version-release --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/muutot/Clipboard.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/version-release .claude/skills/version-release && rm -rf skills-src

Use ~/.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/

Facts

Skill name
version-release
GitHub stars
117
Token cost
~3.4k tokens
SKILL.md length
1,522 words
Files
7 (incl. scripts)
Skills in repo
2
Repo updated
First seen
Licence
AGPL-3.0

At a glance

Automated version bumping and release workflow for Clipboard Desktop.

  • Works in 4 steps: The release script creates the tag at… → When reordering, rebase-rebuilding, or… → Before pushing, verify the binding: git… → …
  • The user asks to bump the version
  • SKILL.md covers Trigger patterns, 🚨 HARD RULE — the tag points…, Release workflow (single… and Standalone tools, plus 6 more sections
  • Runs JavaScript scripts from its folder; calls node, git and npm; needs GITCODE_TOKEN and GITHUB_TOKEN

What it does

Version Release is an agent skill from muutot/Clipboard. Automated version bumping and release workflow for Clipboard Desktop. Use when the user asks to bump the version, release a new version, or regenerate a release. Supports semantic version bumping (patch/minor/major) and specific version targets.

Its SKILL.md is about 3.4k tokens, which your agent loads only when the skill is triggered. The skill folder holds 8 other files, including scripts (for example `agents/openai.yaml` and `release_template.md`).

It sits in Development. It works with GitHub Actions and npm. The repository describes itself as: High performance·Local first·Full platform clipboard manager. The licence is AGPL-3.0.

When your agent uses it

  • The user asks to bump the version
  • Release a new version
  • Regenerate a release

Example prompts

  • “/version-release”

Requirements

  • Node.js

Workflow steps

4 steps, taken from the first numbered list in SKILL.md.

  1. The release script creates the tag at HEAD right after the release commit, and
  2. When reordering, rebase-rebuilding, or manually moving a tag: **rewrite the
  3. Before pushing, verify the binding: git rev-parse ^{} must resolve to a
  4. Push the branch first, the tag last.

What it can do on your machine

Read from SKILL.md and the folder at commit 0b01b6c. It shows what the files ask for, not the result of running them.

  • Tool permissions

    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.

  • Runs code

    Ships 4 files in scripts/ (JavaScript), which the agent can run.

    Shell commands in SKILL.md call:

    • node
    • git
    • npm
    • pip
    • npx

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use git, npm, pip and npx, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • GITCODE_TOKEN
    • GITHUB_TOKEN

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Version Release loads about 3.4k tokens when it runs. Until then it costs about 65 tokens; SKILL.md has 1,522 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~65
When it runs · the whole SKILL.md, loaded when a task matches
~3.4k

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.

Safety

Auto-check passed

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); the scripts in this folder are not scanned.

SKILL.md

The full file from muutot/Clipboard at commit 0b01b6c, republished under its AGPL-3.0 licence (© muutot). 1,522 words, ~3,431 tokens.

Download SKILL.mdSave it as .claude/skills/version-release/SKILL.md (or your agent's skills folder). This skill also uses 6 other files; get the full folder from GitHub.
name
version-release
description
Automated version bumping and release workflow for Clipboard Desktop. Use when the user asks to bump the version, release a new version, or regenerate a release. Supports semantic version bumping (patch/minor/major) and specific version targets.

Version Release

Trigger patterns

Start this skill when the user says any of:

  • "升级版本到 x.x.x" / "bump version to x.x.x"
  • "发布版本 x.x.x" / "release version x.x.x"
  • "重新发布版本 x.x.x" / "regenerate release x.x.x"
  • "升级 patch/minor/major 版本"
  • "release" combined with a version number or bump type

🚨 HARD RULE — the tag points at the release commit and nothing else

The version tag vx.x.x may ONLY ever be bound to the release commit 🔖 chore[release]: bump version to x.x.x. Never bind it to any other commit — not a fix, not a chore, not a merge. The tag is what triggers the GitHub Actions release build, so a tag on a non-release commit ships an unversioned, unverified tree and can publish broken artifacts.

Every release, every re-tag, every regenerate — this rule is non-negotiable:

  1. The release script creates the tag at HEAD right after the release commit, and its hard-rule guard refuses to tag if HEAD's subject is not exactly 🔖 chore[release]: bump version to x.x.x.
  2. When reordering, rebase-rebuilding, or manually moving a tag: rewrite the history first so the release commit is the tip, then tag that commit.
  3. Before pushing, verify the binding: git rev-parse <tag>^{} must resolve to a commit whose subject is 🔖 chore[release]: bump version to x.x.x (git log -1 --pretty=%s <tag>^{}).
  4. Push the branch first, the tag last.

Release workflow (single script, two passes for RELEASE.md)

Pre-release Check Gate

Before any version bump or release (including --regenerate), apply the release gate to the final tree, and commit any formatting-only changes as a separate, prior 🎨 style commit.

The release flow does not build anything locally — building is performed remotely by the GitHub Actions release.yml workflow when the v* tag is pushed. The local gate therefore runs format + check + lint (no build):

  1. npm run format:check — prettier (format:prettier:check) + rustfmt (format:rust:check)
  2. npm run check — svelte-check type checking
  3. npm run lint:rust — cargo clippy -D warnings

⚠️ The extreme-release build (fat LTO, opt-level 3, codegen-units 1) is GitHub Actions-only and must NEVER be run locally. It is enabled solely by the environment variables CARGO_PROFILE_RELEASE_LTO, CARGO_PROFILE_RELEASE_OPT_LEVEL, and CARGO_PROFILE_RELEASE_CODEGEN_UNITS set in .github/workflows/release.yml when the v* tag is pushed. The local [profile.release] in src-tauri/Cargo.toml is intentionally fast and unoptimized (opt-level 0, codegen-units 256) — do not override it locally, and never run the extreme build by hand.

If any diffs appear, apply them (npm run format:prettier / npm run format:rust), then re-run the gate. Commit all formatting-only changes in a single 🎨 style[...]: apply formatting commit before the release commit.

The release script bumps the version first (Pass 1), so run the gate on the code before starting, then re-check RELEASE.md after curating it (see Pass 2 note below).

Prerequisite: only version files in the release commit

Before running the release script, ensure that every other change has already been committed separately.

The release commit (🔖 chore[release]: bump version to x.x.x) must only contain:

  • package.json
  • src-tauri/tauri.conf.json
  • src-tauri/Cargo.toml
  • src-tauri/Cargo.lock
  • CHANGELOG.md
  • RELEASE.md

Any change to scripts, skills, references, tests, or other source files must be committed before the release. The release script's git diff --name-only may pick up unrelated dirty files — verify the staged diff before allowing the commit.

Run:

node skills/version-release/scripts/release.mjs <version>

The script does the following:

StepWhat
1Bump version in package.json, tauri.conf.json, Cargo.toml
2Generate CHANGELOG.md from commits since last tag
3Check RELEASE.md — if stale, prints instructions and exits cleanly
4Commit version files + CHANGELOG.md + RELEASE.md
5Create git tag vx.x.x
6Local-only: no remote push. Print the git push commands for the user to run manually

The script is idempotent: re-running with the same version skips already-done steps, and changelog.mjs replaces this version's existing ## <version> ( section instead of prepending a second copy of it, so running both passes leaves exactly one section. It also accepts both [scope] and (scope) commit subjects and warns on a subject or type it cannot map, rather than dropping the commit silently.

Pass 1 — Script bumps + generates changelog
node skills/version-release/scripts/release.mjs <version>

Steps 1–2 run, then Step 3 detects stale RELEASE.md and exits.

Between passes — LLM generates RELEASE.md

Read CHANGELOG.md and use skills/version-release/release_template.md as a format reference:

  1. Group related commits into feature areas
  2. Attach commit hash links:
    - **Feature description** — detail | [`hash`](https://github.com/muutot/Clipboard/commit/hash)
  3. Write the curated body to RELEASE.md

Do NOT commit — Pass 2 will include RELEASE.md in the release commit automatically.

Pass 2 — Script commits + tags + pushes

Re-run the same command — already-bumped steps skip, RELEASE.md check passes:

node skills/version-release/scripts/release.mjs <version>

Steps 3–6 run: check, commit, tag. Remote push is the user's manual step (the script never pushes).

Re-check formatting after curation. RELEASE.md is written after the pre-release gate. Before Pass 2, run npm run format:prettier:check (or npm run format:prettier -- RELEASE.md to fix) so the freshly curated RELEASE.md is prettier-clean. Fix any diff (npx prettier --write RELEASE.md), then commit it either as a separate 🎨 style[release] commit or folded into the release commit — do not push a release whose RELEASE.md fails the format gate.

Semantic bump
node skills/version-release/scripts/release.mjs patch    # 0.1.0 → 0.1.1
node skills/version-release/scripts/release.mjs minor    # 0.1.0 → 0.2.0
node skills/version-release/scripts/release.mjs major    # 0.1.0 → 1.0.0

Same two-pass flow applies.

Show full SKILL.md (721 more words)Show less
Regenerate mode

Re-releases the current version. The first step must delete the old release commit + tag for that version before re-running the normal flow:

node skills/version-release/scripts/release.mjs --regenerate <version>

The script locates the old release commit by the local tag or by scanning history (including remote-tracking refs) for bump version to <version>, then:

  • if it is an ancestor of HEAD, drops it with the standard single-commit removal git rebase --committer-date-is-author-date --onto <parent> <commit> <branch>, which replays later commits onto the old release commit's parent while --committer-date-is-author-date preserves every surviving commit's original timestamp. Before rewriting, it requires a clean working tree, backs the branch tip up to refs/backup/pre-release-delete-<sha>, warns when a replayed commit's author date differs from its committer date, and on failure aborts the rebase and restores the previous tip;
  • otherwise (old release commit exists only on a remote ref), notes that you must force-push / delete the remote tag manually to drop it;
  • deletes the old tag locally (you must also delete the remote tag manually), and records that history was rewritten so the printed push instructions include --force-with-lease.

The normal flow then creates a fresh changelog, commit, and tag. Verify the deletion actually happened before Pass 1: git log --oneline <branch> | findstr "bump version to <version>" should show nothing, and the old tag should be gone. The pre-delete tip is kept as a recovery backup at refs/backup/pre-release-delete-<sha> (so the old release commit may still appear under git log --all); the script's own history scan excludes refs/backup/*, which is why re-running --regenerate for Pass 2 reports no old release commit.

Dry run
node skills/version-release/scripts/release.mjs --dry-run <version>

Previews the process without committing, tagging, or pushing (the script never pushes anyway).

Standalone tools

These can be run independently:

sh
node skills/version-release/scripts/version.mjs <version>        # bump version only
node skills/version-release/scripts/version.mjs patch|minor|major  # semantic bump
node skills/version-release/scripts/version.mjs --current         # show current version

node skills/version-release/scripts/changelog.mjs                # generate changelog since last tag
node skills/version-release/scripts/changelog.mjs --all           # full history changelog
node skills/version-release/scripts/changelog.mjs --from v0.1.0   # from specific tag
node skills/version-release/scripts/changelog.mjs --preview       # preview without writing
Delete a commit

skills/version-release/scripts/delete-commit.mjs drops a single commit from the current branch by rewriting history locally (the same mechanism --regenerate uses internally). It is local-only — it never touches the remote.

sh
node skills/version-release/scripts/delete-commit.mjs <commit>          # delete <commit> (rewrites history)
node skills/version-release/scripts/delete-commit.mjs --dry-run <commit> # preview replay range; no changes
node skills/version-release/scripts/delete-commit.mjs <commit> --branch <name>  # target a non-current branch

Behavior:

  • Requires a clean working tree; exits safely if <commit> does not exist or is not an ancestor of the branch tip.
  • Backs the branch tip up to refs/backup/pre-delete-<sha> before rewriting, so it can be restored with git update-ref refs/heads/<branch> refs/backup/pre-delete-<sha>.
  • Replays commits after <commit> with --committer-date-is-author-date (timestamps preserved when author date == committer date; warns otherwise).
  • On conflict it aborts the rebase and restores the previous tip automatically.
  • Only use this when the branch has not been pushed (or you will force-push afterward) — like --regenerate, it changes SHAs.

Release body (RELEASE.md)

RELEASE.md is the canonical release body for GitHub Releases. It is manually curated by the LLM during each release, following the format in skills/version-release/release_template.md.

Pushing the tag (done manually by the user) triggers CI/CD which reads RELEASE.md automatically as the GitHub Release body.

Post-release

The release script is local-only — it performs no remote operations. After a successful run, report:

  1. New version number
  2. Tag created locally (vx.x.x)
  3. Release commit + tag exist only locally; the user pushes to origin manually to trigger GitHub Actions (which builds artifacts automatically)

CI/CD

When the release commit is pushed to the main branch (manually, by the user), it does not trigger the CI workflow: ci.yml ignores pushes that only touch release files (package.json, src-tauri/tauri.conf.json, src-tauri/Cargo.toml, src-tauri/Cargo.lock, CHANGELOG.md, RELEASE.md).

Pushing a v* tag triggers .github/workflows/release.yml which:

  • Builds for Windows (x64), macOS (arm64), Linux (x64)
  • Intel macOS (x86_64-apple-darwin) is excluded: ort-sys ships no prebuilt ONNX Runtime for it
  • Publishes the GitHub Release directly (releaseDraft: false) with artifacts using RELEASE.md as the release body

The separate .github/workflows/sync-gitcode.yml workflow mirrors the published release body + assets to GitCode via scripts/sync_release.py. It is decoupled from release.yml and is triggered manually (workflow_dispatch with the release tag) after a release is published, so it can be run once all assets are attached. It requires repo secret GITCODE_TOKEN (rotate immediately if ever committed in plaintext); optional GITCODE_OWNER overrides the default owner. All actions are pinned to commit SHAs and its Python dependencies come from the pinned scripts/requirements-sync.txt (installed with pip install -r) rather than an unpinned pip install, because this job holds GITCODE_TOKEN and GITHUB_TOKEN.

Version source files

FileKey
package.json.version
src-tauri/tauri.conf.json.version
src-tauri/Cargo.tomlversion

All three are updated atomically by skills/version-release/scripts/version.mjs.

Error recovery

If the release script fails mid-way:

  • If version was already bumped: run git checkout -- . to revert config files
  • If commit was created but tag failed: git reset --soft HEAD~1 then re-run

Commit message format

Release commits use the gitmoji convention:

🔖 chore[release]: bump version to x.x.x

© muutot, AGPL-3.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 6 other files (scripts) in skills/version-release of muutot/Clipboard.

  • SKILL.md
  • agents/openai.yaml
  • release_template.md
  • scripts/changelog.mjs
  • scripts/delete-commit.mjs
  • scripts/release.mjs
  • scripts/version.mjs

Open the folder on GitHubat commit 0b01b6c

Compare with similar skills

Version 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.

Version Release compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Version Release this skillmuutot/Clipboard117—~3.4kAutomated safety check: PassAGPL-3.0
Ccb GitHubSeemSeam/claude_codex_bridge3.6k—~4.9kAutomated safety check: PassCustom licence
ZCF Release AutomationUfoMiao/zcf6.1k—~3.4kAutomated safety check: PassMIT
Cline CLI Release Publishercline/cline70k—~3.4kAutomated safety check: WarnApache-2.0
Linea Dependency MaintenanceConsensys-Incorporated/linea-attestation-registry1771 repos~3.7kAutomated safety check: WarnMIT
Codexhost ReleaseBytePioneer-AI/codex-host2.7k—~998Automated safety check: PassLGPL-3.0

Similar skills

  • Ccb GitHub

    SeemSeam/claude_codex_bridge

    Maintain this CCB project's GitHub-facing release and npm publication surface.

    3.6k GitHub stars~4.9k tokensUpdated today
    DevelopmentAuto-check passed
  • Automates a version release with changesets: analyzes code changes, writes a bilingual CHANGELOG, bumps the version and commits through a release branch and pull request.

    6.1k GitHub stars~3.4k tokensUpdated 1 mo ago
    DevelopmentAuto-check passed
  • Walks through releasing the Cline CLI package to npm: release notes, version bump, matching git tag, and either the GitHub workflow or a local publish.

    70k GitHub stars~3.4k tokensUpdated today
    DevelopmentAuto-check: warnings
  • Linea Dependency Maintenance

    Consensys-Incorporated/linea-attestation-registry

    Safely plan and execute dependency maintenance for JavaScript/TypeScript (npm, pnpm) and GitHub Actions, including npm lockfiles, pnpm workspaces, catalogs, overrides, SHA-pinned action versions…

    177 GitHub starsUsed in 1 repo~3.7k tokens
    DevelopmentAuto-check: warnings
  • Codexhost Release

    BytePioneer-AI/codex-host

    发布 codexhost 正式版、预览版,编写或确认 Release Notes,检查发布 CI,暂停、恢复或排查发布。支持正常正式发布,以及 npm latest + GitHub Prerelease、不给现有用户更新提示的预览发行。不用于普通代码提交或 Harness CLI 更新。

    2.7k GitHub stars~998 tokensUpdated today
    DevelopmentAuto-check passed
  • npm Package Publisher

    klaudworks/universal-skills

    Releases an npm package by committing changes, bumping the version with npm version, pushing the tag and checking the GitHub Actions publish.

    181 GitHub stars~923 tokensUpdated 8 mo ago
    DevelopmentAuto-check passed

More from muutot/Clipboard

  • Clipboard Dev

    muutot/Clipboard

    Develop and maintain the Clipboard Desktop repository. An agent skill from muutot/Clipboard.

    117 GitHub stars~3.5k tokensUpdated today
    Auto-check passed

Categories

Questions about Version Release

What does Version Release do?

Automated version bumping and release workflow for Clipboard Desktop. Version Release is an agent skill from muutot/Clipboard. Automated version bumping and release workflow for Clipboard Desktop.

When should I use Version Release?

Version Release fits situations like: the user asks to bump the version; release a new version; regenerate a release.

How do I install Version Release in Claude Code?

Run `npx skills add muutot/Clipboard --skill version-release -a claude-code`. Or copy the skill folder (skills/version-release in muutot/Clipboard) into .claude/skills/version-release in your project. Claude Code loads it when a task matches its description.

How do I install Version Release in Codex?

Run `npx skills add muutot/Clipboard --skill version-release -a codex`. Or copy the skill folder (skills/version-release in muutot/Clipboard) into .agents/skills/version-release in your project. Codex loads it when a task matches its description.

Can I use Version Release in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add muutot/Clipboard --skill version-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/version-release, .gemini/skills/version-release, .github/skills/version-release and .opencode/skills/version-release in your project.

What does Version Release need to run?

Going by SKILL.md and its folder, Version Release needs JavaScript for the scripts in its folder, the command-line tools its instructions call (node, git, npm, pip and npx) and credentials named GITCODE_TOKEN and GITHUB_TOKEN. Our summary lists: Node.js.

Does Version Release access the network?

SKILL.md contains no URLs. Its commands use git, npm, pip and npx, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Version Release safe to install?

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. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.

What licence does Version Release use?

Version Release is published under the AGPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Version Release use?

About 3.4k tokens (SKILL.md is roughly 14k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Version Release?

Skills that share tags, products or a category with Version Release: Ccb GitHub (SeemSeam/claude_codex_bridge, 3.6k stars), ZCF Release Automation (UfoMiao/zcf, 6.1k stars), Cline CLI Release Publisher (cline/cline, 70k stars) and Linea Dependency Maintenance (Consensys-Incorporated/linea-attestation-registry, 177 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Version Release?

muutot (a GitHub user) maintains it in muutot/Clipboard, which has 117 GitHub stars. The repository holds 2 skills in this directory. The repository was last updated on October 8, 2026.

Source: muutot/Clipboard on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.