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.
Publish this plugin to npm - a production release, a pre-release, or an experimental build from a branch.
$ npx skills add strapi-community/plugin-rest-cache --skill cut-a-release -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install strapi-community/plugin-rest-cache cut-a-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/strapi-community/plugin-rest-cache.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/cut-a-release .claude/skills/cut-a-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-a-release" agent skill from https://github.com/strapi-community/plugin-rest-cache/tree/main/.claude/skills/cut-a-release into .claude/skills/cut-a-release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "cut-a-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/strapi-community/plugin-rest-cache/tree/main/.claude/skills/cut-a-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 strapi-community/plugin-rest-cache --skill cut-a-release -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install strapi-community/plugin-rest-cache cut-a-release --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/strapi-community/plugin-rest-cache.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/cut-a-release .agents/skills/cut-a-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-a-release" agent skill from https://github.com/strapi-community/plugin-rest-cache/tree/main/.claude/skills/cut-a-release into .agents/skills/cut-a-release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "cut-a-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 strapi-community/plugin-rest-cache --skill cut-a-release -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install strapi-community/plugin-rest-cache cut-a-release --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/strapi-community/plugin-rest-cache.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/cut-a-release .cursor/skills/cut-a-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-a-release" agent skill from https://github.com/strapi-community/plugin-rest-cache/tree/main/.claude/skills/cut-a-release into .cursor/skills/cut-a-release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "cut-a-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/strapi-community/plugin-rest-cache.git --path .claude/skills/cut-a-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 strapi-community/plugin-rest-cache --skill cut-a-release -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install strapi-community/plugin-rest-cache cut-a-release --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/strapi-community/plugin-rest-cache.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/cut-a-release .gemini/skills/cut-a-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-a-release" agent skill from https://github.com/strapi-community/plugin-rest-cache/tree/main/.claude/skills/cut-a-release into .gemini/skills/cut-a-release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "cut-a-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 strapi-community/plugin-rest-cache cut-a-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 strapi-community/plugin-rest-cache --skill cut-a-release -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/strapi-community/plugin-rest-cache.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/cut-a-release .github/skills/cut-a-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-a-release" agent skill from https://github.com/strapi-community/plugin-rest-cache/tree/main/.claude/skills/cut-a-release into .github/skills/cut-a-release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "cut-a-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 strapi-community/plugin-rest-cache --skill cut-a-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 strapi-community/plugin-rest-cache cut-a-release --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/strapi-community/plugin-rest-cache.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/cut-a-release .opencode/skills/cut-a-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-a-release" agent skill from https://github.com/strapi-community/plugin-rest-cache/tree/main/.claude/skills/cut-a-release into .opencode/skills/cut-a-release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "cut-a-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-a-releasePublish this plugin to npm - a production release, a pre-release, or an experimental build from a branch.
Cut A Release is an agent skill from strapi-community/plugin-rest-cache. Publish this plugin to npm - a production release, a pre-release, or an experimental build from a branch. Use when preparing or shipping a release, updating the changelog, or debugging the publish workflow.
Its SKILL.md is about 2.2k 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 npm. The repository describes itself as: Speed-up HTTP requests with LRU cache. The licence is MIT.
5 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit af0e7d8. 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:
npmpnpmFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use npm and pnpm, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
GITHUB_TOKENFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Cut A Release loads about 2.2k tokens when it runs. Until then it costs about 55 tokens; SKILL.md has 1,253 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 strapi-community/plugin-rest-cache at commit af0e7d8, republished under its MIT licence (© strapi-community). 1,253 words, ~2,204 tokens.
.claude/skills/cut-a-release/SKILL.md (or your agent's skills folder).Publishing is always manual. There is no trigger that publishes on merge, and there must never be one. Two humans gates stand in front of npm: pressing "Publish release" on a draft, and approving the deployment environment.
release-please.yml | Watches main, maintains one rolling release PR, and creates draft GitHub Releases. Publishes nothing. |
publish.yml | The only thing that talks to npm. Never fires on merge. |
release-please-config.json | Changelog sections, package list, draft: true. |
.release-please-manifest.json | Current version per package. release-please owns this; do not hand-edit. |
main using conventional commits. release-please keeps a
chore: release X.Y.Z PR up to date, with the changelog grouped by change
type.feat gives a minor, fix a patch, ! or a BREAKING CHANGE:
footer a major. If the proposed version is wrong, the commit messages are
wrong; fix them rather than editing the version.publish.yml starts and waits on the npm-latest environment. A maintainer
approves. It packs and publishes to the latest tag.The draft step is not ceremony: a Release created by GITHUB_TOKEN does not
trigger other workflows, so an auto-published one would silently never reach
npm.
release-please only ever proposes stable versions. A beta is not something
it produces, and there is deliberately no prerelease mode in its config - that
made every ordinary release a beta and left the repository unable to reach a
stable version without a Release-As: override.
So a beta is a manual dispatch. Run the publish workflow from the Actions tab, with the branch selector on main:
mode: nextversion: the exact version, e.g. 5.2.0-beta.0target_branch: the branch to build, defaults to mainIt stamps that version across all three packages, builds, and publishes to the
next dist-tag through the npm-prerelease environment. Users install it with
npm install @strapi-community/plugin-rest-cache@next.
version must carry a prerelease suffix. scripts/stamp-version.mjs refuses a
stable version, so no dispatch can put one on npm - stable versions come only
from release-please and the version already committed to package.json.
Nothing is tagged and no GitHub Release is created: a dispatched beta is a build of a branch, not a point in the release history. The run summary records the commit.
If a GitHub Release is marked as a pre-release and published, that also routes
to next - publish.yml reads github.event.release.prerelease. That path
publishes the version release-please committed, and never stamps over it.
If the last release was a prerelease, release-please will not graduate on its
own. The default versioning strategy keeps the suffix, so 5.1.0-beta plus a
fix: becomes 5.1.1-beta, not 5.1.0.
Land a commit on main whose message carries the version as a footer:
chore: graduate to a stable release
Release-As: 5.1.0It applies to that one release and leaves nothing behind in the config.
Note where the footer has to be. GitHub builds a squash commit from the pull request title and body only when the branch has more than one commit; with a single commit it uses that commit's own message. A footer written in the pull request description is silently dropped in that case, and the next release comes out as another prerelease.
The easy path. Add the publish-experimental label to a pull request. It
publishes 0.0.0-experimental.<pr head sha> to the experimental dist-tag and
comments on the PR with the exact install command.
The workflow then removes the label again, including when the publish
failed. The label is a one-shot request, not a mode: to cut another build after
pushing more commits, add it back. It deliberately no longer fires on
synchronize, which used to republish silently on every push for as long as
the label happened to still be attached.
Same-repo pull requests only; a fork PR never reaches the publish job.
When there is no pull request, or you want a specific branch.
Run the publish workflow from the Actions tab:
mode: experimental;target_branch: the branch to build.It publishes 0.0.0-experimental.<sha> to the experimental dist-tag. Install
by exact version, not by tag — the tag is clobbered by the next experimental
build:
npm install @strapi-community/plugin-rest-cache@0.0.0-experimental.<sha>pull_request_targetnpm trusted publishing is not branch-scoped. It checks the repository, the
workflow filename and the environment, and discards the ref. Since
workflow_dispatch runs the workflow file from the branch you pick, choosing a
feature branch would hand that branch's own YAML a publish-capable token — and
npm publish defaults to --tag latest.
The label trigger has the same problem in a different shape: plain
pull_request would run the PR branch's copy of the workflow, with publish
credentials in scope. That is what Strapi's own experimental workflow does, and
it is a real accepted risk on their side. This one uses
pull_request_target, which runs the workflow file as it exists on the default
branch, so neither the environment gate nor the version assertion can be edited
by the branch being published.
The usual pull_request_target trap - checking out untrusted code in a job
holding secrets - does not apply here, because the build job holds neither
secrets nor an id-token.
So the workflow takes the branch as an input instead. The build job checks it
out but has no id-token and no environment; the publish job runs from main's
YAML and asserts the version matches 0.0.0-experimental.<40 hex> before
publishing. Both halves are needed: without the assertion, a poisoned build
could stamp 5.99.0, which every ^5.0.0 range would resolve regardless of
dist-tag.
Everything publishing lives in publish.yml and must stay there. npm
validates the workflow filename and allows only one trusted-publisher config
per package, so a second publishing workflow file would fail authentication.
Never npm publish from a package directory. npm does not understand the
workspace: protocol and would publish workspace:* literally, producing a
manifest nobody can install. The workflow runs pnpm pack first and publishes
the tarball. The plugin depends on the memory provider this way, so this
affects the primary package.
The build must run before packing, and in order. The providers typecheck
against the plugin's emitted declarations, so pnpm run build builds the
plugin first, then the providers. files is ["dist"] — an unbuilt package
publishes an empty directory.
Node 24 or newer in the publish job. Trusted publishing needs npm ≥ 11.5.1 and no Node 22 release ships one.
ERESOLVE installing an experimental build — the internal peer ranges were
not rewritten. scripts/stamp-experimental-version.mjs pins them to the exact
experimental version because a ^5.x peer cannot satisfy 0.0.0-*.0.0.0-experimental
builds; nothing may reach the latest tag without a human pressing publish.pull_request_target to pull_request.id-token: write, an environment, or any secret.© strapi-community, MIT. 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-a-release of strapi-community/plugin-rest-cache.
Open the folder on GitHubat commit af0e7d8
Cut A 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 A Release this skillstrapi-community/plugin-rest-cache | 155 | — | ~2.2k | Automated safety check: Pass | MIT | |
| Cutting A ReleaseTriliumNext/Trilium | 38k | — | ~3.2k | Automated safety check: Pass | AGPL-3.0 | |
| Verdaccio Pull Request Workflowverdaccio/verdaccio | 18k | — | ~1.9k | Automated safety check: Pass | MIT | |
| Hunk Release Workflowmodem-dev/hunk | 9.6k | — | ~3.8k | Automated safety check: Pass | MIT | |
| Version ReleaseNG-ZORRO/ng-zorro-antd | 9.2k | — | ~3.1k | Automated safety check: Pass | MIT | |
| AionUi Version BumpiOfficeAI/AionUi | 33k | — | ~2.1k | Automated safety check: Pass | Apache-2.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.
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.
modem-dev/hunk
Maintainer workflow for preparing, publishing, verifying and curating Hunk releases, with confirmation gates before tags, publishes and public edits.
NG-ZORRO/ng-zorro-antd
NG-ZORRO/ng-zorro-antd repository release workflow. An agent skill from NG-ZORRO/ng-zorro-antd.
iOfficeAI/AionUi
Automates an AionUi release: checks the latest AionCore release and its artifacts, updates package.json, writes the changelog, opens a PR and tags the release.
ethereumjs/ethereumjs-monorepo
Runs a coordinated EthereumJS npm release round in six human-gated phases — intent and readiness, CHANGELOG, version bump, publish (human executes), post-publish verification, and announcements.
strapi-community/plugin-rest-cache
Add a new cache provider package to this repository, or modify an existing one.
strapi-community/plugin-rest-cache
Choose and write a Strapi REST Cache configuration for a specific use case.
strapi-community/plugin-rest-cache
Diagnose why Strapi REST Cache is not caching, is serving stale content, or is caching the wrong thing.
strapi-community/plugin-rest-cache
Verify a change to this plugin before opening a PR. An agent skill from strapi-community/plugin-rest-cache.
Works with
Categories
Publish this plugin to npm - a production release, a pre-release, or an experimental build from a branch. Cut A Release is an agent skill from strapi-community/plugin-rest-cache. Publish this plugin to npm - a production release, a pre-release, or an experimental build from a branch.
Cut A Release fits situations like: shipping a release; updating the changelog; debugging the publish workflow.
Run `npx skills add strapi-community/plugin-rest-cache --skill cut-a-release -a claude-code`. Or copy the skill folder (.claude/skills/cut-a-release in strapi-community/plugin-rest-cache) into .claude/skills/cut-a-release in your project. Claude Code loads it when a task matches its description.
Run `npx skills add strapi-community/plugin-rest-cache --skill cut-a-release -a codex`. Or copy the skill folder (.claude/skills/cut-a-release in strapi-community/plugin-rest-cache) into .agents/skills/cut-a-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 strapi-community/plugin-rest-cache --skill cut-a-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-a-release, .gemini/skills/cut-a-release, .github/skills/cut-a-release and .opencode/skills/cut-a-release in your project.
Going by SKILL.md and its folder, Cut A Release needs the command-line tools its instructions call (npm and pnpm) and credentials named GITHUB_TOKEN. Our summary lists: Node.js; A credential in GITHUB_TOKEN.
SKILL.md contains no URLs. Its commands use npm, 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 A Release is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.2k tokens (SKILL.md is roughly 8.8k 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 A Release: Cutting A Release (TriliumNext/Trilium, 38k stars), Verdaccio Pull Request Workflow (verdaccio/verdaccio, 18k stars), Hunk Release Workflow (modem-dev/hunk, 9.6k stars) and Version Release (NG-ZORRO/ng-zorro-antd, 9.2k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
strapi-community (a GitHub organization) maintains it in strapi-community/plugin-rest-cache, which has 155 GitHub stars. The repository holds 5 skills in this directory. The repository was last updated on September 28, 2026.
Source: strapi-community/plugin-rest-cache on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.