Skip to content

URL: https://mkdocs.justinsforge.com/memory/general/reference_browser_mcp_playwright_default/

Browser tooling: Playwright default, claude-in-chrome on-demand

Set 2026-07-05. Fixes the recurring "browser extension isn't connected" failures: agents kept reaching for the always-injected claude-in-chrome toolset even though the Chrome extension bridge was disconnected.

What changed (in ~/.claude.json, NOT git-tracked)

  • claudeInChromeDefaultEnabled -> false. The ~30 mcp__claude-in-chrome__* tools + "use these for web tasks" instruction block no longer auto-inject into sessions.
  • Registered playwright MCP at user scope (all projects): {"type":"stdio","command":"npx","args":["-y","@playwright/mcp@latest"]}.
  • Backup of prior config: ~/.claude.json.bak.chrome-playwright.

Why Playwright over the alternatives

  • claude-in-chrome: needs the real logged-in Chrome + a live extension bridge. Great for acting inside authed sites, brittle as a default (bridge drops => every web task fails).
  • Playwright MCP (@playwright/mcp): headless, self-contained, no extension. Right default for scrape/screenshot/test/automation.
  • Vercel: rejected. Its MCP is deployment management, its "agent browser" is a hosted product not a local MCP, and Forge sites deploy to Cloudflare Pages, not Vercel.

Which browser to summon when

  • Default = Playwright (automatic, always available). No extension, no logged-in-Chrome dependency.
  • Need the real, authed Chrome (a site headless can't reach) -> flip claudeInChromeDefaultEnabled back to true (via /config or ask Claude) for that session.
  • /screenshot and /preview-site skills already drove Playwright as a local CLI and are unaffected by this change.

Takes effect on fresh claude boot only

~/.claude.json is read once at process startup. Already-running processes keep old config in memory.

  • Warm pool (spawn_pool): stale spares booted before the change still carry chrome-on / playwright-off. On 2026-07-05 the pool was drained (forge_spawn_pool.sh drain) + refilled so spares boot on new config; it also self-heals via forge-spawn-pool.timer (every 15min, recycles spares >90min).
  • Verified live: a stale pre-change spare reported CHROME=yes PLAYWRIGHT=no; a fresh post-change worker reported CHROME=no PLAYWRIGHT=yes.
  • Chromium for the MCP: playwright-core 1.62.0-alpha pins chromium-headless-shell v1229, installed under ~/.cache/ms-playwright/; headless launch smoke-tested OK.