About npm
npm is a skill for npm Registry account and package tasks, aimed at developers handling authentication, package reservation, and publishing. It uses shared authentication helpers and temporary npm configuration, with explicit stop conditions for credential or package-target problems.
Key features
- 01Check registry identity and availability
- 02Handle authentication and account issues
- 03Publish local packages and verify visibility
- 04Reserve package names and handle individual failures
- 05Run offline regression tests
Use cases
- 01Check the active npm Registry account
- 02Publish a repository package version
- 03Reserve package names with placeholder releases
- 04Run regression tests in a synthetic environment
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ steipete/ agent-scripts --skill npmAfter installing, type/npmin Claude Code to confirm it loaded.
Bundled files
References and scripts installed along with SKILL.md.
scripts/npm-auth-cache.mjsnpm-auth-cache.test.mjsnpm-auth-login.mjsnpm-auth-login.test.mjsnpm-auth.shnpm-auth.test.shnpm-cli-test-helpers.mjsnpm-service.shpublish-package.shpublish-package.test.shreserve-packages.shDetails
From the project READMEnpm
Use for npm registry/account tasks: npm whoami, package availability, package reservation, publish, org checks, and auth debugging.
Auth
- Use
one-passwordfirst for secret rules. - Never run
opdirectly in the shell tool. - Primary item:
npm Registry - steipete - Release AutomationinMolty. - Default to
OP_SERVICE_ACCOUNT_TOKEN; no desktop unlock. The item carries the working registry session (registry_token) plus username/password/TOTP fallback. - Desktop
npmjsfallback is explicit only: pass--account my.1password.comwhen Molty is unavailable and the user wants the fallback. Explicitrelease/publishrequests are consent for its unlock prompt. - Stop and ask if the item is missing, the account/vault is ambiguous, credentials are malformed, npm denies package access, or the requested package/version does not match the repo release target.
- Run npm auth work inside one task window of the shared
op-worktmux session (clawdbot-op.sock; seeone-password). Reuse the window on failure; kill it when the npm task is done. Never mint an npm-specific socket or session. - Keep npm auth in a temp npmrc; delete it after the command.
- All helpers share
scripts/npm-auth.sh: storedregistry_tokensession first, thenscripts/npm-auth-login.mjsregistry login with a fresh six-digit OTP; successful fallback sessions are cached back to the same item. Do not hand-roll field extraction, registry login, or cache writes. - Installed skill directory symlinks are supported. Shell entrypoints resolve physical siblings; sourced
npm-auth.shownsNPM_AUTH_SCRIPT_DIRwithout changing the caller'sSCRIPT_DIRor working directory. Node helpers also support file symlinks, including--preserve-symlinks-main. - Credential selection prefers canonical field
id, thenpurpose, then a unique label; duplicate label-only matches are rejected (legacynpmjsmay retain same-label fields). - For ad-hoc authenticated registry commands, use
scripts/npm-service.sh -- <npm args...>; usepublish-package.shfor a local package. - npm 11 prompt piping is brittle; avoid
printf ... | npm login --auth-type=legacy. - Avoid
expectfor npm login unless necessary; logs can echo prompts and are easy to get wrong. - Prefer the helper's registry API login path (
npm-profileloginCouch) for automation. - If auth shape is ambiguous or
npm whoamifails, stop and ask for the exact field label / credential fix. Do not probe more 1Password items or open another tmux window/session.
Package Publishing
From the package root, inside the same auth tmux window:
/Users/steipete/Projects/agent-scripts/skills/npm/scripts/publish-package.sh
The helper verifies identity, refuses an existing package version, publishes with a fresh OTP, retries one expired OTP, verifies registry visibility with the same temporary npmrc (including restricted packages), and cleans auth files.
Package Reservation
Use scripts/reserve-packages.sh from inside the same tmux window:
/Users/steipete/Projects/agent-scripts/skills/npm/scripts/reserve-packages.sh package-one package-two
What it does:
- reads the Molty release-automation item once via
op - reuses the stored registry session or creates one from username/password/TOTP
- publishes
0.0.0placeholder packages with a generic README - continues after per-package publish failures
- redacts tokens/OTP in logs
- cleans temp npmrc/work dirs
Notes:
- npm may reject names as too similar to already-published names. Treat that as a registry policy result, not an auth failure.
- npm CLI prompt piping is brittle on npm 11. Prefer the helper’s registry API login path over scripted
npm login. - For scoped packages,
npm viewcan lag/404 even when the package exists. Checknpm access get status <pkg>;publicor a publish failure sayingpreviously published versionsmeans the name is reserved.
Offline Regression Tests
From the repo root; synthetic fixtures only, no real 1Password/npm auth. Always use an empty environment (the shell mock checks its environment for token leaks):
test_home="$(mktemp -d)"
(
set -e
trap 'rm -rf "$test_home"' EXIT
env -i HOME="$test_home" PATH="$PATH" node --test skills/npm/scripts/*.test.mjs </dev/null
env -i HOME="$test_home" PATH="$PATH" /bin/bash skills/npm/scripts/npm-auth.test.sh </dev/null
)