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.
| 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> --yesOther measured skills in the registry, with their headline benchmark lift.