Agent skill

Release

by petarzarkov in petarzarkov/dunx

Version and publish @dunx/ packages to npm. An agent skill from petarzarkov/dunx.

MITAuto-check passedDevelopment

Install Release

skills CLI
$ npx skills add petarzarkov/dunx --skill release -a claude-code

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

GitHub CLI
$ gh skill install petarzarkov/dunx 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/petarzarkov/dunx.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/release .claude/skills/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
release
GitHub stars
100
Token cost
~2.4k tokens
SKILL.md length
1,158 words
Files
1
Skills in repo
6
Repo updated
First seen
Licence
MIT

At a glance

Version and publish @dunx/ packages to npm. An agent skill from petarzarkov/dunx.

  • Works in 4 steps: /ci-check - build, lint, typecheck,… → Run the publish-guard agent over the… → bun run version:dry-run - on a… → …
  • Cutting a release
  • SKILL.md covers Cutting a release, The changelog, The tag and the GitHub release and Constraints that are…, plus 2 more sections
  • Calls bun, bunx and npm; needs NPM_TOKEN and GITHUB_TOKEN

What it does

Release is an agent skill from petarzarkov/dunx. Version and publish @dunx/ packages to npm. Use when cutting a release, when a publish failed or a package is missing from npm, when a package needs its first npm version, or when touching scripts/version.ts, the pinned npm version, or the publish job in ci.yml.

Its SKILL.md is about 2.4k 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. It works with npm. The repository describes itself as: fastest web DI framework. NestJS-style structure at Bun speed. Constructor DI with no reflect-metadata, no experimentalDecorators, no JavaScript router. The licence is MIT.

When your agent uses it

  • Cutting a release
  • A publish failed
  • A package is missing from npm
  • A package needs its first npm version

Example prompts

  • “/release”

Requirements

  • A credential in GITHUB_TOKEN
  • A credential in NPM_TOKEN

Workflow steps

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

  1. /ci-check - build, lint, typecheck, test. A failed build publishes nothing,
  2. Run the publish-guard agent over the changed packages.
  3. bun run version:dry-run - on a non-release commit this reports that it would
  4. Commit the release trigger and push to main

What it can do on your machine

Read from SKILL.md and the folder at commit 221fede. 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

    Shell commands in SKILL.md call:

    • bun
    • bunx
    • npm
    • git

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

  • Network

    No URLs in SKILL.md. Its commands use bunx, npm and git, 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:

    • NPM_TOKEN
    • GITHUB_TOKEN

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

Context cost

Release loads about 2.4k tokens when it runs. Until then it costs about 68 tokens; SKILL.md has 1,158 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~68
When it runs · the whole SKILL.md, loaded when a task matches
~2.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); files beside SKILL.md are not scanned.

SKILL.md

The full file from petarzarkov/dunx at commit 221fede, republished under its MIT licence (© petarzarkov). 1,158 words, ~2,407 tokens.

Download SKILL.mdSave it as .claude/skills/release/SKILL.md (or your agent's skills folder).
name
release
description
Version and publish @dunx/* packages to npm. Use when cutting a release, when a publish failed or a package is missing from npm, when a package needs its first npm version, or when touching scripts/version.ts, the pinned npm version, or the publish job in ci.yml.

/release

Releases are lockstep: every @dunx/* package shares one version and ships together, even the ones a release did not touch. Change detection decides whether to release, never what. The reason is a correctness one - a published range names a concrete version of @dunx/core, so independent versions would let an app end up with two copies of it, and in this container a token is a class object. Full reasoning: architecture/packaging.md, "Versioning is lockstep".

Do not make versions independent again without also solving the duplicate-core problem - see that section for the two alternatives and why each was rejected.

CI runs bun run version on every push to main, and it publishes nothing unless the head commit is a release commit. Ordinary merges run the checks and deploy the docs. This skill is for cutting a release deliberately, and for the failure modes.

Cutting a release

  1. /ci-check - build, lint, typecheck, test. A failed build publishes nothing, but a passing build with broken dist/ publishes broken.

  2. Run the publish-guard agent over the changed packages.

  3. bun run version:dry-run - on a non-release commit this reports that it would skip. It prints the computed bump, the commits it read, and the changed packages.

  4. Commit the release trigger and push to main:

    SubjectBump
    release: <summary>derived from every commit since the last release
    release(major|minor|patch): <summary>stated outright
    release!: <summary>major

    The trigger is matched on the subject only, so a body quoting the word does not publish.

The bump and the changed-package detection both span every commit back to the previous chore(release): bump version to ... marker. That marker is RELEASE_COMMIT_PREFIX in scripts/bump.ts, written by pushVersionCommit in scripts/version.ts - if you change one, change both, or every range becomes "all of history". CI's fetch-depth: 0 is load-bearing for the same reason: a shallow checkout cannot see the marker and silently under-reports the bump to a patch.

Force every package to publish regardless of computed bumps by putting [force-publish] in the commit message. That path bypasses the release gate, and writes no changelog entry: it has no range to describe.

The changelog

Each release prepends a section to the root CHANGELOG.md, from the same commit range the bump was derived from. scripts/changelog.ts owns the format in both directions - renderRelease writes a section, parseChangelog reads them back - and internal/docs renders them at #/releases. Nothing is hand-written.

  • The release: commit's own prose becomes the section's summary, so that subject is the release note. A release whose whole range is that one commit still gets a section.
  • Commits group by conventional type; an unrecognised one lands under "Other changes" rather than being dropped.
  • The generator escapes < and replaces em and en dashes, so a subject written before those rules existed cannot fail no-em-dash.test.ts or lose a type parameter to raw HTML.
  • The docs site is built after the release step in ci.yml, so the deployed artifact carries the section this release just wrote. The release commit is [skip ci], so building it earlier would leave the page a release behind.
  • Re-running a failed release does not duplicate a section: a version already present is left alone.

The tag and the GitHub release

After the version commit is pushed, scripts/github-release.ts tags v<version> and creates the GitHub release. Before this existed, git tag -l was empty across every release and the repo's Releases page held nothing.

  • The notes are read back from CHANGELOG.md by parseChangelog, not re-rendered from the commit range. A second renderer is how the tag, the file and the site would come to disagree about what shipped.
  • The body ends with a link to #/releases/<version>, which internal/docs serves as a page per release. The URL is derived from owner/repo, so a fork points at its own Pages site.
  • The API call is fetch against the REST API, not the gh CLI: nothing else in scripts/ needs gh, and fetch is native. It needs contents: write, which ci.yml's publishing job already had.
  • Neither step throws and neither fails the job. By the time they run the packages are on npm, so a failure here would make a finished publish look broken. Both are idempotent: an existing tag or release is left alone, so a rerun after a partial failure is safe.
  • A missing GITHUB_TOKEN skips the release and says so, which is what a local bun run version does.
  • [force-publish] gets no tag and no release. It bypasses the release gate and writes no changelog section, so there is no range to describe.
Show full SKILL.md (412 more words)Show less

Constraints that are load-bearing

  • Trusted publishing (OIDC), no NPM_TOKEN. Each package's trusted publisher on npmjs.com is pinned to the workflow filename ci.yml. Renaming that file silently breaks publishing for every package. ci.yml is the only workflow permitted to publish.
  • npm is the one sanctioned non-bun tool, only inside scripts/publish.ts: bun publish cannot authenticate via OIDC (oven-sh/bun#15601). It runs as bunx npm@<pinned> - the NPM constant, currently bunx npm@11.10.1. Bun executes npm on its own runtime, so CI needs no setup-node. The pin must stay >= 11.5.1; ubuntu-latest still ships npm 10.x, so the pin is doing real work. Bump the constant to upgrade.
  • workspace: ranges. npm publish does not expand them, so the publish path rewrites them to concrete ranges around the publish and restores package.json afterwards. The policy is one function, resolveWorkspaceRange in scripts/workspace-ranges.ts, shared by publish.ts and first-publish.ts because a second copy of it is how the two would drift: workspace:* publishes as ^<version>, not as an exact pin. Every internal range is a peerDependency, and an exact peer accepts one version and nothing else, so a consumer whose core resolved one patch ahead gets an ERESOLVE from npm or a nested second copy of core. The caret's pre-1.0 limit (^0.2.0 excludes 0.3.0) is why versioning stays lockstep, not a reason to go back to exact - exact excludes 0.2.1 as well. If a publish dies mid-run, check git diff for a package manifest left with concrete ranges where workspace:* belongs.
  • --provenance only under GITHUB_ACTIONS. It errors anywhere else, which would break a manual publish.

Failure modes

SymptomCause
First publish of a new package fails in CIA package with no versions on npm has no trusted-publisher settings page yet. Run bunx npm@11.10.1 login then bun scripts/first-publish.ts - not a bare npm publish, which ships workspace:* verbatim and breaks every consumer install.
dist-tag, deprecate, access fail in CIOnly npm publish can use the OIDC credential. Run these locally against a personal npm login.
Published tarball contains src/ or test filesMissing or wrong files in the manifest. publish-guard catches this.
Consumer on node16/nodenext cannot resolveAn extensionless relative specifier reached the emitted .d.ts. Every relative import in source needs a .js extension.
CI publishes nothing and reports successNo version changed. Expected - check the dry-run output.

Never

Do not add NPM_TOKEN, a second publishing workflow, or npm calls outside scripts/publish.ts. Do not hand-edit CHANGELOG.md: the next release rewrites the file around whatever is there, and the site renders what the script wrote.

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

Files

Just SKILL.md in .claude/skills/release of petarzarkov/dunx.

Open the folder on GitHubat commit 221fede

Compare with similar skills

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.

Release compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Release this skillpetarzarkov/dunx100—~2.4kAutomated safety check: PassMIT
Nx Run Tasksnomcopter/react-mosaic4.8k8 repos~613Automated safety check: PassCustom licence
Migrate Internal Package into GhostTryGhost/Ghost56k—~3.8kAutomated safety check: PassMIT
Open Code Review CLIalibaba/open-code-review45k—~3.1kAutomated safety check: PassApache-2.0
Cutting A ReleaseTriliumNext/Trilium38k—~3.2kAutomated safety check: PassAGPL-3.0
Install Anti-Slop Oxlint Rulesdmmulroy/anti-slop5.3k—~2.2kAutomated safety check: PassMIT

Similar skills

  • Nx Run Tasks

    nomcopter/react-mosaic

    Helps with running tasks in an Nx workspace. An agent skill from nomcopter/react-mosaic.

    4.8k GitHub starsUsed in 8 repos~613 tokens
    DevelopmentAuto-check passed
  • Moves a package from another TryGhost repository into Ghost as an internal workspace package while keeping its Git history, with checkpoints for the steps that need an administrator.

    56k GitHub stars~3.8k tokensUpdated today
    DevelopmentAuto-check passed
  • Open Code Review CLI

    alibaba/open-code-review

    Runs the ocr command-line tool to review Git changes, a commit or a branch comparison with an AI model, returning line-level comments and optionally applying fixes.

    45k GitHub stars~3.1k tokensUpdated yesterday
    DevelopmentAuto-check passed
  • 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.

    38k GitHub stars~3.2k tokensUpdated today
    DevelopmentAuto-check passed
  • Installs, updates or migrates the vendored anti-slop Oxlint plugin in a repository, keeping local rule changes and the plugin's license and provenance files.

    5.3k GitHub stars~2.2k tokensUpdated 29 days ago
    DevelopmentAuto-check passed
  • Open Code Review Delegate

    alibaba/open-code-review

    Has the host agent do the code review itself while the ocr CLI handles file selection and rule lookup, covering workspace changes, branch ranges or single commits.

    45k GitHub stars~2k tokensUpdated yesterday
    DevelopmentAuto-check passed

More from petarzarkov/dunx

  • Docs Pass

    petarzarkov/dunx

    Revise one documentation file so it states facts instead of performing insight, and get it under the budgets in scripts/no-slop.test.ts.

    100 GitHub stars~1.5k tokensUpdated yesterday
    Auto-check passed
  • New Package

    petarzarkov/dunx

    Add a workspace to the dunx monorepo - a published package under packages/, a published CLI under tools/, a private workspace under internal/, or an example under examples/ - with correct manifest…

    100 GitHub stars~1.5k tokensUpdated yesterday
    Auto-check passed
  • Spike

    petarzarkov/dunx

    Resolve an open technical question by measuring it on real Bun instead of assuming, then record the verified result in docs/architecture/constraints.md.

    100 GitHub stars~742 tokensUpdated yesterday
    Auto-check passed
  • Whats Next

    petarzarkov/dunx

    Write or refresh HANDOFF.md - a compact resume point holding completed objectives, live file paths, approaches already tried and rejected, and the exact next steps, placed against the roadmap in…

    100 GitHub stars~819 tokensUpdated yesterday
    Auto-check passed
  • Coverage Report

    petarzarkov/dunx

    Regenerate the coverage report and badges, or diagnose a wrong percentage, a 404ing badge, or a package showing 0%.

    100 GitHub stars~971 tokensUpdated yesterday
    Auto-check passed

Works with

Categories

Questions about Release

What does Release do?

Version and publish @dunx/ packages to npm. An agent skill from petarzarkov/dunx. Release is an agent skill from petarzarkov/dunx. Version and publish @dunx/ packages to npm.

When should I use Release?

Release fits situations like: cutting a release; A publish failed; A package is missing from npm; A package needs its first npm version.

How do I install Release in Claude Code?

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

How do I install Release in Codex?

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

Can I use 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 petarzarkov/dunx --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.

What does Release need to run?

Going by SKILL.md and its folder, Release needs the command-line tools its instructions call (bun, bunx, npm and git) and credentials named NPM_TOKEN and GITHUB_TOKEN. Our summary lists: A credential in GITHUB_TOKEN; A credential in NPM_TOKEN.

Does Release access the network?

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

Is 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. Review the folder before installing.

What licence does Release use?

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

How many tokens does Release use?

About 2.4k tokens (SKILL.md is roughly 9.6k 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 Release?

Skills that share tags, products or a category with Release: Nx Run Tasks (nomcopter/react-mosaic, 4.8k stars), Migrate Internal Package into Ghost (TryGhost/Ghost, 56k stars), Open Code Review CLI (alibaba/open-code-review, 45k stars) and Cutting A Release (TriliumNext/Trilium, 38k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Release?

petarzarkov (a GitHub user) maintains it in petarzarkov/dunx, which has 100 GitHub stars. The repository holds 6 skills in this directory. The repository was last updated on October 8, 2026.

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