Nx Run Tasks
nomcopter/react-mosaic
Helps with running tasks in an Nx workspace. An agent skill from nomcopter/react-mosaic.
Version and publish @dunx/ packages to npm. An agent skill from petarzarkov/dunx.
$ npx skills add petarzarkov/dunx --skill release -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install petarzarkov/dunx 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/petarzarkov/dunx.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/release .claude/skills/release && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "release" agent skill from https://github.com/petarzarkov/dunx/tree/main/.claude/skills/release into .claude/skills/release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/petarzarkov/dunx/tree/main/.claude/skills/releaseType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add petarzarkov/dunx --skill release -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install petarzarkov/dunx release --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/petarzarkov/dunx.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/release .agents/skills/release && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "release" agent skill from https://github.com/petarzarkov/dunx/tree/main/.claude/skills/release into .agents/skills/release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add petarzarkov/dunx --skill release -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install petarzarkov/dunx release --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/petarzarkov/dunx.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/release .cursor/skills/release && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "release" agent skill from https://github.com/petarzarkov/dunx/tree/main/.claude/skills/release into .cursor/skills/release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/petarzarkov/dunx.git --path .claude/skills/release--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add petarzarkov/dunx --skill release -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install petarzarkov/dunx release --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/petarzarkov/dunx.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/release .gemini/skills/release && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "release" agent skill from https://github.com/petarzarkov/dunx/tree/main/.claude/skills/release into .gemini/skills/release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install petarzarkov/dunx 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 petarzarkov/dunx --skill release -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/petarzarkov/dunx.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/release .github/skills/release && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "release" agent skill from https://github.com/petarzarkov/dunx/tree/main/.claude/skills/release into .github/skills/release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add petarzarkov/dunx --skill release -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install petarzarkov/dunx release --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/petarzarkov/dunx.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/release .opencode/skills/release && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "release" agent skill from https://github.com/petarzarkov/dunx/tree/main/.claude/skills/release into .opencode/skills/release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
releaseVersion 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. 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.
4 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 221fede. 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:
bunbunxnpmgitFrom the folder's file list and the shell code blocks in SKILL.md.
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.
Names these keys or tokens, usually read from environment variables:
NPM_TOKENGITHUB_TOKENFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
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.
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 petarzarkov/dunx at commit 221fede, republished under its MIT licence (© petarzarkov). 1,158 words, ~2,407 tokens.
.claude/skills/release/SKILL.md (or your agent's skills folder).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.
/ci-check - build, lint, typecheck, test. A failed build publishes nothing,
but a passing build with broken dist/ publishes broken.
Run the publish-guard agent over the changed packages.
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.
Commit the release trigger and push to main:
| Subject | Bump |
|---|---|
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.
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.
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.< 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.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.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.
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.#/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.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.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.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.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.| Symptom | Cause |
|---|---|
| First publish of a new package fails in CI | A 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 CI | Only npm publish can use the OIDC credential. Run these locally against a personal npm login. |
Published tarball contains src/ or test files | Missing or wrong files in the manifest. publish-guard catches this. |
Consumer on node16/nodenext cannot resolve | An extensionless relative specifier reached the emitted .d.ts. Every relative import in source needs a .js extension. |
| CI publishes nothing and reports success | No version changed. Expected - check the dry-run output. |
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
Just SKILL.md in .claude/skills/release of petarzarkov/dunx.
Open the folder on GitHubat commit 221fede
Release next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Release this skillpetarzarkov/dunx | 100 | — | ~2.4k | Automated safety check: Pass | MIT | |
| Nx Run Tasksnomcopter/react-mosaic | 4.8k | 8 repos | ~613 | Automated safety check: Pass | Custom licence | |
| Migrate Internal Package into GhostTryGhost/Ghost | 56k | — | ~3.8k | Automated safety check: Pass | MIT | |
| Open Code Review CLIalibaba/open-code-review | 45k | — | ~3.1k | Automated safety check: Pass | Apache-2.0 | |
| Cutting A ReleaseTriliumNext/Trilium | 38k | — | ~3.2k | Automated safety check: Pass | AGPL-3.0 | |
| Install Anti-Slop Oxlint Rulesdmmulroy/anti-slop | 5.3k | — | ~2.2k | Automated safety check: Pass | MIT |
nomcopter/react-mosaic
Helps with running tasks in an Nx workspace. An agent skill from nomcopter/react-mosaic.
TryGhost/Ghost
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.
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.
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.
dmmulroy/anti-slop
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.
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.
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.
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…
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.
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…
petarzarkov/dunx
Regenerate the coverage report and badges, or diagnose a wrong percentage, a 404ing badge, or a package showing 0%.
Works with
Categories
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.
Release fits situations like: cutting a release; A publish failed; A package is missing from npm; A package needs its first npm version.
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.
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.
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.
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.
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.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Release is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
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.
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.
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.