GitHub package firewall: npm cooldown gate for CI and agents
GitHub's package firewall puts an npm install gate in front of CI and coding agents: cooldown, malware advisories, attestation checks. Free in preview.
The week LiteLLM shipped a backdoored release through its own pipeline, GitHub put a gate in front of the registry. On October 20 GitHub launched the package firewall in public preview: a proxy between your machines and npm that checks every package before it installs. It is the first install-time control from a major platform that treats coding agents and CI hosts as the clients most in need of one.
What actually happened
Per the GitHub changelog, the firewall inspects both metadata requests and package downloads against an enterprise policy. Three controls ship in the preview:
- Cooldown. Block any version younger than a set age. The setup docs allow 1 to 365 days, default 1, or 0 to turn it off.
- Advisory checks. Block versions flagged for malware or vulnerabilities in the GitHub Advisory Database.
- Supply-chain checks, such as attestation downgrades.
A blocked install returns an error with a link to request an exception. Setup is two lines in .npmrc: point registry at package-firewall.githubapp.com/npm/enterprises/<your-slug> and pass a GITHUB_TOKEN from an enterprise member. The token needs no elevated permissions. Artifactory can sit in front of it, but that support is experimental.
The limits matter. It is npm only. It is GitHub Enterprise Cloud only. It is free during the preview, and GitHub says it will be billed on metered usage "similar to Actions billing" at GA, with no rates published.
Why it matters for your business
A cooldown would have stopped most of this year's worst installs. Malicious releases tend to get pulled within hours. A one-day minimum age means your CI never sees them. You do not need GitHub for this idea; you need it somewhere.
Your agents install packages faster than you review them. Claude Code, Codex and Copilot all run npm install on their own. The firewall is a control that sits outside the model, which is where controls belong. An agent cannot talk its way past a 403.
Check the plan before you plan around it. Most small teams are on GitHub Team or Free, not Enterprise Cloud. If that is you, get the same effect with npm's own tooling: pin with a lockfile, run npm ci in CI, and add a minimum-release-age rule in your package manager or private registry. Python is not covered at all yet.
Budget for the meter. Metered billing on every install is a new line item. Count your CI runs now so the GA price does not surprise you.
Key takeaways
- GitHub's package firewall is a policy proxy for npm installs, in public preview since October 20
- Controls: minimum package age (default 1 day), Advisory Database malware and vulnerability blocks, attestation checks
- Enterprise Cloud only, npm only, free in preview, metered billing at GA
- Route CI hosts and coding agents through it first; they install the most with the least review
- Not on Enterprise Cloud? Lockfiles, npm ci and a release-age rule get you most of the way
Do your agents install whatever they want? We set up CI pipelines and agent sandboxes with pinned dependencies, install cooldowns and secrets that never touch a build box, on whatever GitHub plan you already pay for. See what we build, or ask us to audit your pipeline.
Sources: GitHub Changelog, GitHub Docs.
- #github
- #npm
- #supply-chain-security
- #package-firewall
- #ai-coding-agents
Tommy Rush — Founder, Rush Commerce
Operator turned builder. 15+ years running operations — now shipping the systems businesses run on. More
Get The Rush Report weekly — one email, zero fluff.
Keep reading
Pillow 13.0.0 fixes 38 flaws: upgrade before your uploads bite
Pillow 13.0.0 patches 38 security advisories, including CVE-2026-112398, a FlashPix heap overflow that can run code from one image. It also drops Python 3.10.
Read itOpenCode MCP OAuth RCE: silent patch, no CVE, check by hand
A malicious MCP server could run code on Windows and WSL machines using OpenCode 1.0.137–1.18.32. The fix shipped with no CVE, so scanners miss it.
Read it