[BUG] Chrome native host enters zombie state without socket, blocking all browser automation
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?
The Chrome native host process (chrome-native-host) can enter a zombie state where it's running but hasn't created its Unix socket (/tmp/claude-mcp-browser-bridge-{user}).
When this happens, all browser automation fails with "Browser extension is not connected" even though:
- The extension is installed and enabled
- Chrome is running
- The native messaging host config is correct
- The native host process IS running (visible via
ps aux | grep chrome-native-host)
The native host process appears healthy (not crashed), but the socket file doesn't exist, so Claude Code's MCP cannot communicate with the extension.
Root cause: The native host process started but never created its socket listener, leaving it in a zombie state that blocks all connections.
What Should Happen?
- The native host should reliably create its Unix socket on startup
- The extension should detect when the native host is in a bad state and respawn it
- There should be a health check / heartbeat mechanism between the extension and native host
- If the socket doesn't exist but the process is running, the system should self-recover
Error Messages/Logs
# MCP tool response:
Browser extension is not connected. Please ensure the Claude browser extension is installed and running.
# Diagnostic findings:
$ ps aux | grep chrome-native-host
francis 2827 0.0 0.6 22122708 204392 ? Sl 12:01 0:01 /home/francis/.local/share/mise/installs/node/22.20.0/bin/node /home/francis/.local/share/pnpm/global/5/.pnpm/@anthropic-ai+claude-code@2.0.76/node_modules/@anthropic-ai/claude-code/cli.js --chrome-native-host
$ ls /tmp/claude-mcp-browser-bridge-francis
ls: cannot access '/tmp/claude-mcp-browser-bridge-francis': No such file or directory
# Native host process was running but socket did not exist
Steps to Reproduce
- Start Chrome with the Claude extension installed and enabled
- Start Claude Code and attempt to use browser automation (e.g.,
tabs_context_mcp) - Observe "Browser extension is not connected" error
- Check for native host process:
ps aux | grep chrome-native-host- process IS running - Check for socket:
ls /tmp/claude-mcp-browser-bridge-$USER- socket does NOT exist - Kill the stale process:
kill <pid> - Toggle the Chrome extension off/on to respawn the native host
- Browser automation now works
Note: The exact trigger for the zombie state is unclear - it was discovered after the process had been running since system boot (several hours).
Claude Model
None
Is this a regression?
I don't know
Last Working Version
_No response_
Claude Code Version
2.0.76 (Claude Code)
Platform
Anthropic API
Operating System
Other Linux
Terminal/Shell
Other
Additional Information
Environment details:
- Linux: Arch Linux (kernel 6.17.9-arch1-1)
- Chrome: 143.0.7499.169
- Chrome extension version: 1.0.36
- Native messaging host config:
~/.config/google-chrome/NativeMessagingHosts/com.anthropic.claude_code_browser_extension.json
Workaround:
- Kill the zombie native host:
kill $(pgrep -f chrome-native-host) - Toggle the Chrome extension off/on in
chrome://extensionsto respawn
Suggested fix:
Add a health check / socket existence verification in the extension that respawns the native host if the socket is missing but the process is running (or stale).
This issue has 4 comments on GitHub. Read the full discussion on GitHub ↗