claude-in-chrome extension defaults to Desktop app's native host, never connects to Claude Code CLI
Environment: macOS, Google Chrome 150.0.7871.115, Claude Code CLI (--chrome flag), Claude Desktop app also installed
Issue:
The claude-in-chrome browser extension (fcoeoabgfenejglbffodgkkbkcdhcgfn) will not connect to an active Claude Code CLI session. tabs_context_mcp consistently returns "Browser extension is not connected" regardless of troubleshooting steps taken.
Root cause identified:
There are two native messaging host manifests registered for the same extension ID:
- com.anthropic.claude_browser_extension.json → path: /Applications/Claude.app/Contents/Helpers/chrome-native-host (Desktop app)
- com.anthropic.claude_code_browser_extension.json → path: ~/.claude/chrome/chrome-native-host (Claude Code CLI)
Every time the extension attempts to connect, Chrome spawns the Desktop app's native host binary (/Applications/Claude.app/Contents/Helpers/chrome-native-host), NOT the Claude Code CLI one — even when the Claude Desktop app is fully quit (verified via ps aux, no Claude.app process running). This happens repeatedly and reproducibly.
Steps to reproduce:
- Have both Claude Desktop app and Claude Code CLI (with --chrome) installed
- Fully quit Claude Desktop app (verified no process running)
- Attempt to use any claude-in-chrome tool (e.g. tabs_context_mcp) from Claude Code CLI
- Observe: still "not connected"
- Check
ps aux | grep chrome-native-host— shows /Applications/Claude.app/Contents/Helpers/chrome-native-host was spawned, not the Claude Code CLI one
Attempted fixes that did NOT resolve it:
- Toggling extension off/on in chrome://extensions
- Fully restarting Chrome
- Fully quitting Claude Desktop app
- Killing the stray native host process manually (kill -9)
- Fully uninstalling and reinstalling the Claude extension from claude.ai/chrome
Expected behavior:
When Claude Code CLI is the active session requesting the browser connection, the extension should connect via the claude_code_browser_extension native host, not default to the Desktop app's host — especially when the Desktop app isn't even running.
Impact:
Blocks any workflow using claude-in-chrome tools while Claude Desktop is also installed on the same machine, even if it's not currently open.