Npm Trusted Publishing
GitHubOfficialFirst committed by MarkAlex1234Distributed by GitHub
- Skill
- Workflow
- Software development
- MIT
- Low risk
From the skill’s files
Taken from the skill’s own files (its description, section headings and stated usage). Not an AutoGineer summary, and not written by the author as one.
Set up or fix npm trusted publishing (OIDC) in GitHub Actions and remove NPM_TOKEN. Use for ENEEDAUTH, E404 on PUT, E422 repository.url, or migrating off 2FA-bypass tokens before January 2027. Moves a GitHub Actions release from a stored NPM_TOKEN to npm trusted publishing. GitHub signs a short-lived OIDC token for the run, and npm exchanges it for a publish token. It also diagnoses the misleading errors a half-finished migration produces. From January 2027, granular tokens that bypass 2FA can no longer publish directly (npm docs).
What it does
- When to Use This Skill
- Checklist (all must hold)
- Security Rules
- Error Guide
- Example
- Automating It
When to use it
- Use for ENEEDAUTH, E404 on PUT, E422 repository.url, or migrating off 2FA-bypass tokens before January 2027.
- The user wants to remove NPM_TOKEN / NODE_AUTH_TOKEN from a release workflow or set up OIDC or provenance publishing.
- A CI publish fails with ENEEDAUTH, 404 Not Found - PUT https://registry.npmjs.org/... or E422 ... repository.url.
- Release logs show npm notice npm tokens that bypass 2FA are being restricted.
Advantages
The skill’s files do not state this.
Usage examples
The skill’s files do not state this.
Install
Download the skill as a ZIP:
https://mp-staging.autogineer.com/agent-skills/github/npm-trusted-publishing/downloadUnzip it into the cross-client skills folder of your project:
mkdir -p .agents/skills && unzip npm-trusted-publishing.zip -d .agents/skills
Documentation by MarkAlex1234
npm Trusted Publishing
Moves a GitHub Actions release from a stored NPM_TOKEN to npm trusted publishing. GitHub signs a short-lived OIDC token for the run, and npm exchanges it for a publish token. It also diagnoses the misleading errors a half-finished migration produces. From January 2027, granular tokens that bypass 2FA can no longer publish directly (npm docs).
When to Use This Skill
The user wants to remove
NPM_TOKEN/NODE_AUTH_TOKENfrom a release workflow or set up OIDC or provenance publishing.A CI publish fails with
ENEEDAUTH,404 Not Found - PUT https://registry.npmjs.org/...orE422 ... repository.url.Release logs show
npm notice npm tokens that bypass 2FA are being restricted.
Checklist (all must hold)
Work through every item. Missing any one of them produces the errors above.
OIDC permission: the publishing job has
permissions: id-token: write. If the job had nopermissionsblock, keep the scopes it needs, such ascontents: writefor tags and releases orpull-requests: writefor changesets. Adding a block drops every scope you don't list.npm 11.5.1 or newer runs the publish. Node 24 ships it. Node 22 ships npm 10, so add
npm install -g npm@^11.5.1(or a newer pinned major) before publishing. pnpm 10 hands the publish to npm, so the same rule applies. Yarn Berry needs 4.10.3+.No token reaches the publish step. Remove
NODE_AUTH_TOKEN,NPM_TOKENandYARN_NPM_AUTH_TOKENfrom the step, the job and the workflowenv, and delete script lines that write_authTokenornpmAuthToken. npm tries OIDC first but falls back to a configured token, so a leftover token keeps the old credential in use. Keep a read-only token only on install steps that need private packages.actions/setup-nodehasregistry-url: https://registry.npmjs.org.package.jsonrepository.urlnames the same GitHub repo, for examplegit+https://github.com/OWNER/REPO.git, plusdirectoryfor workspace packages. A mismatch gives E422.A trusted publisher exists on npm for each package (npmjs.com → package → Settings → Trusted publishing), or with npm 11.15+:
npm trust github <pkg> --repo OWNER/REPO --file release.yml --allow-publish --yesThe workflow file name must match exactly; it is case-sensitive and includes
.yml.For a reusable workflow, use the calling workflow's file name, and grant
id-token: writein the caller too.If the job uses
environment:, set the same environment on the publisher.A package that doesn't exist yet must be published once by hand first.
GitHub-hosted runner. Self-hosted runners can't use trusted publishing.
Security Rules
Untrusted triggers: never add
id-token: writeto a job in a workflow triggered bypull_request_target,issue_comment,workflow_runordiscussion. It would let outsiders exchange an OIDC token and publish. Move publishing torelease,push(tags) orworkflow_dispatch.Dry runs:
npm publish --dry-runandnpm packjobs don't publish, so they need noid-tokenand no trusted publisher.The old token: delete the secret (
gh secret delete NPM_TOKEN) and revoke it on npmjs.com only after the first tokenless release succeeds.
Error Guide
| Error | Usual cause |
|---|---|
ENEEDAUTH | No id-token: write, npm older than 11.5.1, or a workflow file name that doesn't match the trusted publisher |
404 Not Found - PUT https://registry.npmjs.org/<pkg> | Same as above, a mismatched environment, no trusted publisher yet, or an expired token still being used |
E422 ... repository.url | repository is missing in package.json or names another repo |
| Publish still uses the token | A token remains in env, .npmrc or .yarnrc.yml (checklist item 3) |
Example
jobs:
publish:
runs-on: ubuntu-latest
permissions:
contents: read
id-token: write
steps:
- uses: actions/checkout@v5
- uses: actions/setup-node@v6
with:
node-version: 24
registry-url: https://registry.npmjs.org
- run: npm ci
- run: npm publish --access public # no NODE_AUTH_TOKENAutomating It
go-tokenless (MIT) applies this checklist to an existing repository. Use it when the user wants the edits made for them.
npx go-tokenlessprints a read-only diff of the workflow andpackage.jsonchanges, plus thenpm trustcommands.npx go-tokenless applywrites the changes.It refuses the unsafe cases above instead of guessing.
Limitations
The npm side (adding the trusted publisher, deleting the old token) needs the user's npm login with 2FA. Hand those steps to the user.
Trusted publishing covers GitHub Actions, GitLab.com and CircleCI cloud only.
Files
- ATTRIBUTION.mdAdded by AutoGineer885 B
- LICENSELicence file added by AutoGineer1.0 KiB
- SKILL.md5.1 KiB
ATTRIBUTION.md
Attribution
This folder is an unmodified copy of the Agent Skill "npm-trusted-publishing", distributed by AutoGineer (https://autogineer.com/agent-skills).
Commit: 797337f33f73e35d08d82f840e21c4b8c4932d88
First committed by: MarkAlex1234 (https://github.com/MarkAlex1234)
Publisher: GitHub (https://github.com/github)
Licence: MIT License (https://github.com/github/awesome-copilot/blob/797337f33f73e35d08d82f840e21c4b8c4932d88/LICENSE)
Licence evidence: repository licence LICENSE
Retrieved: 2026-11-07
The skill's own files are unmodified copies. AutoGineer is not affiliated with or endorsed by the author or the publisher.
Files added by AutoGineer
ATTRIBUTION.md: this file, written by AutoGineer
LICENSE: copied from LICENSE
Requirements and compatibility
Written for: GitHub Copilot
Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta
“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.
Needs: Needs Node.js
Security
What our scanner noticed· Low risk
- Instructions that use the network
A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.
Attribution and licence
- First committed by
MarkAlex1234
- Publisher
- GitHub (Official)
- Distributed by
- GitHub
- Source
- github/awesome-copilot · skills/npm-trusted-publishing · commit 797337f
- Licence
- MIT License (redistribution allowed)
- LICENSE (added by AutoGineer from LICENSE)
- ATTRIBUTION.md (written by AutoGineer)
- Synced
- Contributors
- MarkAlex1234
AutoGineer is not affiliated with or endorsed by MarkAlex1234 or GitHub.
Download ZIP
The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download npm-trusted-publishing.zip