Verdaccio Pull Request Workflow
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.
A skill your agent uses when the user wants to ship a new version of react-zmage to npm.
$ npx skills add Caldis/react-zmage --skill release-workflow -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install Caldis/react-zmage release-workflow --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/Caldis/react-zmage.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/release-workflow .claude/skills/release-workflow && 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-workflow" agent skill from https://github.com/Caldis/react-zmage/tree/master/.agents/skills/release-workflow into .claude/skills/release-workflow/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release-workflow", 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/Caldis/react-zmage/tree/master/.agents/skills/release-workflowType 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 Caldis/react-zmage --skill release-workflow -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install Caldis/react-zmage release-workflow --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Caldis/react-zmage.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/release-workflow .agents/skills/release-workflow && 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-workflow" agent skill from https://github.com/Caldis/react-zmage/tree/master/.agents/skills/release-workflow into .agents/skills/release-workflow/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release-workflow", 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 Caldis/react-zmage --skill release-workflow -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install Caldis/react-zmage release-workflow --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Caldis/react-zmage.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/release-workflow .cursor/skills/release-workflow && 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-workflow" agent skill from https://github.com/Caldis/react-zmage/tree/master/.agents/skills/release-workflow into .cursor/skills/release-workflow/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release-workflow", 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/Caldis/react-zmage.git --path .agents/skills/release-workflow--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 Caldis/react-zmage --skill release-workflow -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install Caldis/react-zmage release-workflow --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Caldis/react-zmage.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/release-workflow .gemini/skills/release-workflow && 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-workflow" agent skill from https://github.com/Caldis/react-zmage/tree/master/.agents/skills/release-workflow into .gemini/skills/release-workflow/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release-workflow", 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 Caldis/react-zmage release-workflowInstalls 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 Caldis/react-zmage --skill release-workflow -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/Caldis/react-zmage.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/release-workflow .github/skills/release-workflow && 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-workflow" agent skill from https://github.com/Caldis/react-zmage/tree/master/.agents/skills/release-workflow into .github/skills/release-workflow/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release-workflow", 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 Caldis/react-zmage --skill release-workflow -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install Caldis/react-zmage release-workflow --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Caldis/react-zmage.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/release-workflow .opencode/skills/release-workflow && 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-workflow" agent skill from https://github.com/Caldis/react-zmage/tree/master/.agents/skills/release-workflow into .opencode/skills/release-workflow/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release-workflow", 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.
release-workflowA skill your agent uses when the user wants to ship a new version of react-zmage to npm.
Release Workflow is an agent skill from Caldis/react-zmage. Use when the user wants to ship a new version of react-zmage to npm. Strong triggers — "发版" / "我要发版" / "准备发版" / "release a new version" / "publish to npm" / "ship 1.x.y" / "提交推送 我要发版". Also activate when user asks to "bump version" or "tag a release". This skill walks the full release pipeline: pre-flight verification → version bump (core + 4 sandbox tgz refs in lockstep) → build → commit (conventional format with version in subject) → push → STOP for user-only npm publish (OTP-gated) → tag (no v prefix per repo…
Its SKILL.md is about 3.6k 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 Translation, Commit messages and Changelog and release notes. It works with React, npm, GitHub and JavaScript. The repository describes itself as: Turn any <img into an origin-expand fullscreen React image viewer. The licence is MIT.
9 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit bd9b97d. 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:
gitghpnpmnpmFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
zmage.caldis.menpmjs.comFrom 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 Workflow loads about 3.6k tokens when it runs. Until then it costs about 206 tokens; SKILL.md has 1,601 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 noted patterns worth knowing about, such as sudo or a known installer.
ce you to notice unintended files (e.g. `.env.local`, an editor config, a worktree leftover).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 Caldis/react-zmage at commit bd9b97d, republished under its MIT licence (© Caldis). 1,601 words, ~3,627 tokens.
.claude/skills/release-workflow/SKILL.md (or your agent's skills folder).A react-zmage release has to land in three places that drift independently:
| Surface | What it shows | Failure mode if missed |
|---|---|---|
| npm registry | latest tarball + version | "1.5.0 was published but npm shows 1.4.1" |
| Git tag | reproducible commit anchor | bisects skip the release; CI tooling looking for tags breaks |
| GitHub Release page | human-facing changelog (bilingual) | repo browsers see no changelog; migration guidance invisible |
The npm side requires an interactive OTP that only the human user can supply — which means the agent cannot drive the whole flow end-to-end. The skill exists to enforce a clean stop/resume around that human checkpoint, plus to bake in the lesser-known repo conventions (no v prefix on tags, bilingual notes structure, sandbox .tgz paths bumped in lockstep with core).
Strong triggers (just do it):
Weak triggers (consider, then judge):
packages/core/src/** — they may want a release but didn't say so. Ask once: "ship a release with this, or commit-only?"Skip:
Run these all and confirm they pass:
# Core unit + integration tests
pnpm --filter react-zmage test
# Public-docs contract (asserts llms.txt, README, AGENTS, types stay aligned)
pnpm --filter llms-eval run test
# i18n key parity across 7 languages — must all be equal
for lang in en de es fr ja ko zh-CN; do
count=$(grep -cE "^[[:space:]]+'[^']+':" "packages/home/src/i18n/$lang.ts")
echo "$lang: $count keys"
done
# Build core to verify dist artifacts produce
pnpm --filter react-zmage run build
# (Optional but strong) full sandbox check — catches dist regressions
pnpm -w run checkIf sync-public-docs was triggered earlier in the conversation, or if the release includes user-facing docs / homepage / examples, also confirm:
pnpm --filter react-zmage-home run build succeededdocs/index.html, docs/404.html, and docs/assets/* are included when the home bundle changeddocs/llms.txt changed, pnpm --filter llms-eval run test passed and docs/llms.txt is included in the commitdocs/assets/*.js for the new example headings / i18n strings)docs/.nojekyll exists if the repo contains Markdown under docs/ that Jekyll could parse as LiquidIf anything is red, fix it before continuing. A release must be on green.
# Find the last released tag
git tag -l --sort=-v:refname | head -3
# → 1.5.0 / 1.4.1 / 1.4.0 (no `v` prefix — repo convention)
# Enumerate everything since the last tag
git log --oneline <last-tag>..HEADGroup commits into:
! marker (e.g. refactor(core)!: rename X → Y) or any change that breaks consumer code at compile time / runtimeSemver suggestion → always confirm with the user before bumping:
| Accumulated | Strict semver | Repo history shows |
|---|---|---|
| any BREAKING | major (X+1.0.0) | maintainer has historically chosen minor for explicit-! renames (e.g. 1.5.0 carried closeOnDoubleClick → hideOnDblClick !). Ask, don't assume. |
| feat only | minor (X.Y+1.0) | follow |
| fix only | patch (X.Y.Z+1) | follow |
Always present the choice and let the user pick. Frame it as: "Strict semver says X.Y.Z, but you've historically chosen W.V.U. Which one?"
Core is the source of truth. Four sandbox packages pin its .tgz for integration tests — they all carry the same version string and must move together.
Files to edit (verify with grep '"react-zmage"' packages/sandbox-*/package.json first; the list may grow):
packages/core/package.json → "version": "<NEW>"
packages/sandbox-r17/package.json → "react-zmage": "file:..\\..\\.pack\\react-zmage-<NEW>.tgz"
packages/sandbox-r18/package.json → same
packages/sandbox-r19/package.json → same
packages/sandbox-nextjs/package.json → sameOther workspace packages (home, llms-eval, apps/*) stay on 0.0.0 — they're private/internal and not published.
pnpm --filter react-zmage run buildMust show Build success for both ESM and CJS, plus the ssr/ subentry. If tsup fails, do not proceed — the dist is what npm ships.
Repo style (see git log --format=%s -10): the commit that ships also bumps the version. Subject line names the headline change and ends with the version in parens.
<type>(<scope>): <headline> (<X.Y.Z>)
<body — 3–5 paragraphs covering what shipped, why, and any gotchas>
<optional code example or migration note>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>Examples from repo history:
fix(core): isolate ESC/hotkeys from outer modal listeners (1.4.1)feat(core): hotKey rotate / download + custom-descriptor surface (1.5.0)Stage files explicitly (no git add -A) — see Anti-patterns. Use a HEREDOC to preserve message formatting:
git commit -m "$(cat <<'EOF'
feat(core): <headline> (<X.Y.Z>)
<body>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
EOF
)"git push origin masterCapture the resulting commit SHA — later steps need it.
After pushing, inspect the workflows for the pushed commit before asking the user to publish to npm:
gh run list --commit <commit-sha> --limit 10 --json databaseId,workflowName,status,conclusion,url
gh run watch <run-id> --exit-statusAt minimum, CI must pass. If Pages is triggered, it must also pass unless the release explicitly does not touch public docs or site assets. For any failed run:
gh run view <run-id> --json jobs,conclusion,status,url
gh run view <run-id> --log-failedFix the logged root cause locally, run the closest matching verification command, commit the fix, push again, and re-check the new workflow runs. Do not continue to npm publish while the release commit or a follow-up fix commit is still red.
If homepage examples / docs changed, verify the deployed site after Pages succeeds. Fetch https://zmage.caldis.me/ with a no-cache header, extract the current assets/*.js, and confirm it contains the expected new example labels in English and Chinese. If Pages is green but the old asset is still served, report the cache delay and retry before calling the website updated.
This is the hard stop. Do not run npm publish from the agent.
The npm account requires an OTP (one-time password) at publish time. Only the user can supply it interactively. Suggest the exact command and wait:
Pushed
<sha>to master. Runcd packages/core && npm publishyourself (needs your OTP). Tell me when it's done and I'll handle tag + GitHub Release.
If the user offers to "let you publish" — politely decline and ask them to run it. The OTP friction is intentional security; bypassing it is not in scope.
Repo convention: bare-version tags, no v prefix. Verify with git tag -l | head — historical tags are 1.5.0, 1.4.1, 0.8.5, etc. Mismatching this breaks tools that assume monotonic naming.
git tag <X.Y.Z> <commit-sha>
git push origin <X.Y.Z>(Lightweight tag is fine — repo history uses both. --follow-tags only pushes annotated tags, so explicit git push origin <tag> is the safe form.)
Notes structure (see gh release view 1.4.1 --json body --jq .body for the canonical template):
## 新功能 / ## 视觉更新 / ## 优化 / ## 修复 / ## 破坏变更 (use only the ones that apply)--- separator on its own line## New Features / ## Visual Update / ## Improvements / ## Fix / ## BreakingEach bullet is user-facing: visual changes, API changes, fixes that affect consumers. Skip pure internal refactors, CSS variable renames, test additions.
For features that introduce new public API, include a small code example inside the bullet (see the 1.5.0 release for the hotKey custom-descriptor block as a reference shape).
gh release create <X.Y.Z> --title "<X.Y.Z>" --notes "$(cat <<'EOF'
## 新功能
- **<headline>**: <user-facing description>.
```tsx
// optional code example for new APIs<bug fixed>: <symptom>.<headline>: <user-facing description>.
// same example<bug fixed>: <symptom>.
EOF
)"
The command prints the release URL on success — relay it to the user.
### Step 9 — Final verification
Confirm three surfaces show the same version:
```bash
# 1. npm — open https://www.npmjs.com/package/react-zmage and check the latest version
# (or: npm view react-zmage version)
# 2. Git tag pushed to remote
git ls-remote --tags origin | grep <X.Y.Z>
# 3. GitHub Release listed
gh release view <X.Y.Z> --json url --jq .urlIf any one is missing, fix it before reporting "done":
npm publishgit push origin <X.Y.Z>gh release createnpm publish from the agent. OTP is user-only; running blind triggers an interactive prompt that hangs the agent shell. Always stop at Step 6.git tag v<X.Y.Z> — repo convention is bare-version. Mismatch breaks tools that scan for monotonic tag names.<X.Y.Z+1>.git add -A or git add .. A release commit's file list should be auditable in the commit message; explicit paths force you to notice unintended files (e.g. .env.local, an editor config, a worktree leftover).git push origin master --follow-tags for tagging. Lightweight tags (which the repo uses) are not pushed by --follow-tags. Explicit git push origin <tag> is the only safe form.Before declaring the release complete:
packages/core/package.json AND all 4 packages/sandbox-*/package.json .tgz pathsdocs/.nojekyll exists(<X.Y.Z>) matching the bumped versiongit push origin master succeedednpm publish succeeded (Step 6 hard-stop respected)v prefix) pointing to the release commitgit ls-remote --tags origin shows it)--- → EN), user-facing bullets onlyIf a new sandbox package is added (e.g. sandbox-r20), Step 2's file list grows — keep grep '"react-zmage"' packages/sandbox-*/package.json as the discovery command rather than hardcoding the count.
If the maintainer ever publishes a v-prefixed tag, this skill's "no v prefix" rule should be revisited — at that point the convention has changed and the skill should follow.
If npm publish ever moves to a token-based CI flow (e.g. via GitHub Actions on tag push), Step 6's hard-stop becomes obsolete — update the skill to reflect whichever side now drives the publish.
© Caldis, 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 .agents/skills/release-workflow of Caldis/react-zmage.
Open the folder on GitHubat commit bd9b97d
Release Workflow 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 Workflow this skillCaldis/react-zmage | 946 | — | ~3.6k | Automated safety check: Notes | MIT | |
| Verdaccio Pull Request Workflowverdaccio/verdaccio | 18k | — | ~1.9k | Automated safety check: Pass | MIT | |
| Release Roundethereumjs/ethereumjs-monorepo | 2.8k | — | ~2k | Automated safety check: Pass | None | |
| Changeset Changelogjmfederico/pi-web | 866 | — | ~1.5k | Automated safety check: Pass | MIT | |
| ReleaseOvenMediaLabs/OvenPlayer | 592 | — | ~1.3k | Automated safety check: Pass | MIT | |
| Release New Versionkcsujeet/ilamy-calendar | 351 | — | ~5.8k | Automated safety check: Pass | MIT |
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.
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.
jmfederico/pi-web
A skill your agent uses whenever the user asks about changelogs, Changesets, release notes, conventional commits, commit messages for release notes, or making user-visible project changes that…
OvenMediaLabs/OvenPlayer
Release ovenplayer to npm — confirm the version, verify the committed dist/ bundle is current, write the release notes, and open a draft GitHub Release for the user to publish.
kcsujeet/ilamy-calendar
Cut a new release of @ilamy/calendar — analyze commits since the last tag, suggest a semver bump, draft a CHANGELOG entry in the project's existing style, run the CI gate, commit, tag, push to…
aptos-labs/aptos-ts-sdk
A skill your agent uses when cutting a release of @aptos-labs/ts-sdk or @aptos-labs/confidential-asset.
Caldis/react-zmage
A skill your agent uses when adding the react-zmage React image viewer to an existing React, Next.js, MDX, CMS, markdown, or rich text image surface.
Caldis/react-zmage
A skill your agent uses when modifying public API in packages/core (types/global.ts, types/default.ts, index.ts, or package.json exports field), adding/renaming/removing props, changing default…
Works with
Categories
A skill your agent uses when the user wants to ship a new version of react-zmage to npm. Release Workflow is an agent skill from Caldis/react-zmage. Use when the user wants to ship a new version of react-zmage to npm.
Release Workflow fits situations like: the user wants to ship a new version of react-zmage to npm; — 发版 / 我要发版 / 准备发版 / release a new version / publish to npm / ship 1.x.y / 提交推送 我要发版; asks to bump version.
Run `npx skills add Caldis/react-zmage --skill release-workflow -a claude-code`. Or copy the skill folder (.agents/skills/release-workflow in Caldis/react-zmage) into .claude/skills/release-workflow in your project. Claude Code loads it when a task matches its description.
Run `npx skills add Caldis/react-zmage --skill release-workflow -a codex`. Or copy the skill folder (.agents/skills/release-workflow in Caldis/react-zmage) into .agents/skills/release-workflow 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 Caldis/react-zmage --skill release-workflow -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-workflow, .gemini/skills/release-workflow, .github/skills/release-workflow and .opencode/skills/release-workflow in your project.
Going by SKILL.md and its folder, Release Workflow needs the command-line tools its instructions call (git, gh, pnpm and npm).
SKILL.md names 2 domains. In commands or code: zmage.caldis.me and npmjs.com; the agent is likely to contact these when it follows the instructions. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found notes only (mentions a .env file), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.
Release Workflow is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.6k tokens (SKILL.md is roughly 15k 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 Workflow: Verdaccio Pull Request Workflow (verdaccio/verdaccio, 18k stars), Release Round (ethereumjs/ethereumjs-monorepo, 2.8k stars), Changeset Changelog (jmfederico/pi-web, 866 stars) and Release (OvenMediaLabs/OvenPlayer, 592 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
Caldis (a GitHub user) maintains it in Caldis/react-zmage, which has 946 GitHub stars. The repository holds 3 skills in this directory. The repository was last updated on May 18, 2026.
Source: Caldis/react-zmage on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.