[BUG] [Cowork VM] npm install puppeteer fails with E403 Forbidden — Chromium post-install download likely blocked

Resolved 💬 3 comments Opened Mar 12, 2026 by debandjones01012014-a11y Closed Apr 10, 2026

Preflight Checklist

  • [x] I have searched existing issues and this hasn't been reported yet
  • [x] This is a single bug report (please file separate reports for different bugs)
  • [x] I am using the latest version of Claude Code

What's Wrong?

npm install puppeteer fails with a 403 Forbidden error inside the Cowork VM sandbox when attempting to render HTML assets to PNG via Puppeteer headless. The error occurs specifically on the puppeteer package. IT has confirmed the npm registry (registry.npmjs.org) is not network-blocked, so the 403 is likely originating from an .npmrc configuration, a VM-level npm security policy, or Puppeteer's post-install Chromium download being intercepted.

What Should Happen?

npm install puppeteer --prefix /tmp/puppeteer-env should succeed, install Puppeteer and its bundled Chromium binary, and allow headless HTML-to-PNG rendering at exact pixel dimensions (e.g. 1080×1350 for Instagram Portrait) without any manual steps from the user.

Error Messages/Logs

npm error code E403
npm error 403 Forbidden - GET https://registry.npmjs.org/puppeteer
npm error 403 In most cases, you or one of your dependencies are requesting
npm error a package version that is forbidden by your security policy,
npm error or on a server you do not have access to.
npm error A complete log of this run can be found in:
/sessions/confident-lucid-newton/.npm/_logs/2026-03-09T12_58_52_735Z-debug-0.log

Steps to Reproduce

  1. Open Cowork on a machine connected to Zenoti corporate network
  2. Ask the Brand Design skill to generate a social post (any vertical, any platform)
  3. Observe that after the HTML is saved, the skill attempts npm install puppeteer --prefix /tmp/puppeteer-env
  4. npm returns E403 Forbidden immediately — no download begins
  5. Skill falls back to Method 2 (pycairo + Pillow) successfully

To reproduce the raw error directly in the Cowork terminal:
npm install puppeteer --prefix /tmp/puppeteer-env

Claude Model

Sonnet (default)

Is this a regression?

Yes, this worked in a previous version

Last Working Version

1.1.5749

Claude Code Version

claude-sonnet-4-6 (Cowork v2.3, Zenoti Brand Design Skill U1.5)

Platform

Anthropic API

Operating System

macOS

Terminal/Shell

Terminal.app (macOS)

Additional Information

  1. .npmrc in the VM — check /sessions/.../.npmrc or ~/.npmrc for a registry=, //registry.npmjs.org/:authToken=, or fetch-retry config that may be enforcing auth or scoping Puppeteer out
  2. Puppeteer's Chromium post-install download — even if the npm package resolves, Puppeteer triggers a separate ~170 MB Chromium binary download via https://storage.googleapis.com during postinstall. This URL may be what's actually being blocked, not the npm registry itself
  3. npm audit or fund policy — some enterprise npm configs set --ignore-scripts or restrict packages with known CVEs; Puppeteer's bundled Chromium can trigger security scanners
  4. Recommended fix — run npm config list inside the Cowork VM and share the output; also test curl -I https://registry.npmjs.org/puppeteer vs curl -I https://storage.googleapis.com to isolate exactly which endpoint is returning 403

View original on GitHub ↗

This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗