Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Full npm publish pipeline for scoped @0xjitsu packages. Runs pre-flight validation (package.json fields, .npmrc scope, build, tests, dry-run pack), interactive version bump (patch/minor/major), publishes to npm with public access, creates a git tag and GitHub release, then verifies the published package is installable. Triggered when the user asks to publish an npm package, release a new version, ship to npm, or cut a release.
.claude/skills/0xjitsu-npm-publish/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-04 | ✗→✓ | ▲ Improved | 130% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 60% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 43% | 0% |
| case-13 | ✗→✓ | ▲ Improved | 123% | 0% |
| case-18 | ✗→✓ | ▲ Improved | 15% | 0% |
Ship a package to the npm registry with full pre-flight checks, version management, and post-publish verification.
Activate this skill when the user:
Run every check before attempting to publish. Fail fast on any blocker.
Verify the following fields exist and are non-empty:
| Field | Required | Notes | |---------------|----------|----------------------------------------------------| | name | Yes | Must be scoped: @0xjitsu/<package> | | version | Yes | Must follow semver | | description | Yes | One-line summary for npm search | | license | Yes | Should be AGPL-3.0-or-later unless overridden | | files | Yes | Whitelist of published files (e.g., ["dist", "bin"]) | | bin | If CLI | Entry point for CLI packages | | main/exports | Yes | Package entry point | | repository | Recommended | Links npm page to GitHub | | keywords | Recommended | Improves discoverability |
If any required field is missing, report it and stop.
Check that .npmrc (project root or ~/.npmrc) contains:
@0xjitsu:registry=https://registry.npmjs.org/If missing, offer to create it. Verify npm auth:
bashnpm whoami
If not authenticated, instruct the user to run npm login.
If package.json contains a build script:
bashnpm run build
Fail the pipeline if the build exits non-zero. Verify the output directory (dist/, build/, etc.) exists and is non-empty.
If package.json contains a test script (and it is not the default echo "Error: no test specified"):
bashnpm test
Hard rule: Never publish if tests fail. No exceptions.
bashnpm pack --dry-run 2>&1
Review the file list. Flag and halt if any of these appear:
.env, .env.* (secrets)node_modules/ (bloat).git/ (repository internals)*.pem, *.key (certificates/keys)credentials.json, serviceAccountKey.json (auth files)Report the total packed size. Warn if over 5 MB.
Present the current version and ask:
> Current version: X.Y.Z > What type of release? > - patch (X.Y.Z+1) -- bug fixes, no new features > - minor (X.Y+1.0) -- new features, backward compatible > - major (X+1.0.0) -- breaking changes
bashnpm version <patch|minor|major> --no-git-tag-version
Using --no-git-tag-version because we create the tag manually after publish succeeds.
Invoke the changelog-gen skill if available. If not available, prompt the user to write a changelog entry manually. The entry must exist before publishing.
bashgit add package.json package-lock.json CHANGELOG.md git commit -m "release: v<new-version>"
Ask for explicit confirmation before running:
bashnpm publish --access public
--access public is required for scoped packages to be publicly visible.--force. If publish fails, diagnose and fix the root cause.bashgit tag v<version>
bashgit push origin <current-branch> git push origin v<version>
Write the changelog entry for this version to a temp file, then:
bashgh release create v<version> \ --title "v<version>" \ --notes-file /tmp/CHANGELOG_ENTRY.md
Clean up the temp file after.
bashnpm view @0xjitsu/<package>@latest version
Verify the returned version matches what was just published.
bashTMPDIR=$(mktemp -d) cd "$TMPDIR" npm init -y --silent npm install @0xjitsu/<package>@<version>
If the package has a bin entry:
bashnpx @0xjitsu/<package> --help
Verify it runs without error. Clean up the temp directory.
Print a summary:
Published: @0xjitsu/<package>@<version>
Registry: https://www.npmjs.com/package/@0xjitsu/<package>
Git tag: v<version>
Release: https://github.com/0xjitsu/<repo>/releases/tag/v<version>| Rule | Rationale | |------|-----------| | Never use npm publish --force | Can overwrite existing versions, breaking downstream consumers | | Always dry-run first | Catches accidentally included secrets or bloat | | Never publish if tests fail | Broken packages erode trust | | Ask confirmation before npm publish | Publishing is irreversible (npm unpublish has a 72h window) | | Never publish .env or credentials | Security violation -- halt immediately if detected in pack | | Create tag only after successful publish | Prevents tags pointing to unpublished versions | | Use --access public for scoped packages | Scoped packages default to restricted on npm |
If something goes wrong after publish:
npm unpublish @0xjitsu/<package>@<version> (only within 72 hours)git tag -d v<version> and git push origin :refs/tags/v<version>gh release delete v<version> --yes| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 11,132 | 2,229 | -80% | 1 | 1 | 0% | 2,129 | 2,047 | -4% | 0 | 0 | — |
case-02 | fail→fail | 7,765 | 3,578 | -54% | 1 | 1 | 0% | 1,436 | 2,296 | +60% | 0 | 0 | — |
case-03 | fail→fail | 4,248 | 1,922 | -55% | 1 | 1 | 0% | 192 | 1,927 | +904% | 0 | 0 | — |
case-04 | fail→pass | 4,536 | 1,525 | -66% | 1 | 1 | 0% | 784 | 1,805 | +130% | 0 | 0 | — |
case-05 | pass→pass | 2,949 | 2,066 | -30% | 1 | 1 | 0% | 493 | 1,888 | +283% | 0 | 0 | — |
case-06 | pass→pass | 9,045 | 2,866 | -68% | 1 | 1 | 0% | 1,528 | 2,016 | +32% | 0 | 0 | — |
case-07 | pass→pass | 4,648 | 3,744 | -19% | 1 | 1 | 0% | 758 | 2,263 | +199% | 0 | 0 | — |
case-08 | pass→pass | 3,006 | 1,997 | -34% | 1 | 1 | 0% | 484 | 1,911 | +295% | 0 | 0 | — |
case-09 | pass→pass | 7,013 | 3,486 | -50% | 1 | 1 | 0% | 1,191 | 2,205 | +85% | 0 | 0 | — |
case-10 | fail→pass | 8,518 | 12,333 | +45% | 1 | 1 | 0% | 1,471 | 2,354 | +60% | 0 | 0 | — |
case-11 | pass→pass | 8,623 | 3,450 | -60% | 1 | 1 | 0% | 1,461 | 2,177 | +49% | 0 | 0 | — |
case-12 | fail→pass | 8,913 | 23,845 | +168% | 1 | 1 | 0% | 1,677 | 2,395 | +43% | 0 | 0 | — |
case-13 | fail→pass | 4,649 | 2,422 | -48% | 1 | 1 | 0% | 907 | 2,019 | +123% | 0 | 0 | — |
case-14 | pass→pass | 14,820 | 23,248 | +57% | 1 | 1 | 0% | 2,883 | 2,520 | -13% | 0 | 0 | — |
case-15 | pass→pass | 7,205 | 4,689 | -35% | 1 | 1 | 0% | 1,308 | 2,435 | +86% | 0 | 0 | — |
case-16 | pass→pass | 3,755 | 22,204 | +491% | 1 | 1 | 0% | 707 | 2,115 | +199% | 0 | 0 | — |
case-17 | pass→pass | 3,782 | 17,498 | +363% | 1 | 1 | 0% | 553 | 1,862 | +237% | 0 | 0 | — |
case-18 | fail→pass | 12,150 | 1,943 | -84% | 1 | 1 | 0% | 1,638 | 1,878 | +15% | 0 | 0 | — |
case-19 | pass→pass | 2,767 | 24,018 | +768% | 1 | 1 | 0% | 372 | 1,853 | +398% | 0 | 0 | — |
case-20 | pass→pass | 2,331 | 2,025 | -13% | 1 | 1 | 0% | 411 | 1,952 | +375% | 0 | 0 | — |
case-21 | pass→pass | 2,714 | 2,368 | -13% | 1 | 1 | 0% | 476 | 1,966 | +313% | 0 | 0 | — |
case-22 | pass→pass | 2,064 | 2,013 | -2% | 1 | 1 | 0% | 410 | 1,903 | +364% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 21 counted toward the lift figure. The other 1 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +23 percentage points is the difference between those two pass rates over the 21 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
| Model | Method | Date | Lift |
|---|---|---|---|
| gemini-3.6-flash | verified | 8/3/2026 | +32% |
Other measured skills in the registry, with their headline benchmark lift.