Someone on r/ClaudeAI last week posted about their Claude Code Chrome connection dying for the fifteenth time in one afternoon. The thread blew up. But not with solutions — mostly commiseration and workarounds that sounded like duct tape on a cracked pipe. So I spent a few hours digging through GitHub issues, the extension source, and a couple of community forks to figure out what’s actually happening.

The disconnection problem is not a bug. It’s an architecture.

Wait, it goes through the cloud?

Most people assume Claude Code talks to Chrome directly. Your CLI, your browser, same machine.

But not even close.

The actual connection chain: Claude Code CLI opens a WebSocket to bridge.claudeusercontent.com (an Anthropic cloud server), which opens another WebSocket back down to a native messaging host on your machine, which then talks to the Chrome extension through Chrome’s Native Messaging API. Your terminal and your browser are sitting on the same desk. And the signal between them is bouncing off a server in Virginia or Frankfurt, depending on where Anthropic decided to route your account.

So I drew this out on paper before I believed it. And every single hop in that chain is a place where the connection can silently drop.

Thirty seconds

Chrome’s Manifest V3 kills idle Service Workers after 30 seconds. The WebSocket dies with it. The toolbar icon still says “enabled.” It is not.

It gets weirder with multiple machines

Because the cloud relay routes by Anthropic account rather than by device, two computers on the same network using the same account can end up cross-wired. Claude Code on your laptop might connect to Chrome on your desktop. And one user in issue #25551 described running a screenshot command and getting a capture from a coworker’s machine. So your browser commands are not just going through the cloud. They might be landing on the wrong computer entirely.

And if you have Claude Desktop installed alongside Claude Code, both register as native messaging hosts and fight over the connection. The standard fix people recommend is closing Claude Desktop whenever you want to use Claude Code’s browser features, which is a hell of a workaround for two products from the same company. Issue #14536 compounds this for anyone with multiple Chrome profiles or browsers, since there is no mechanism to choose which browser receives commands.

And then modal dialogs. A JavaScript alert() or confirm() on any open tab blocks Chrome’s event loop, so commands from the native messaging host just queue up silently. Claude Code sends a command, waits, gets nothing back. No error, no timeout notification. Just a command that vanishes into a blocked thread while you sit there wondering why nothing happened. People in the GitHub threads describe restart rituals (disable extension, close Desktop, relaunch Chrome, re-enable, type /chrome) that take longer than the browser task they originally wanted to automate.

The band-aid and the bypass

Typing /chrome in the CLI forces a reconnect. Issue #20298 has been open since mid-2025 with dozens of “me too” replies.

But a developer named mimimiku778 went further and built claude-in-chrome-local-mcp, which strips out the cloud relay and replaces it with a local Unix socket so the CLI talks directly to the extension without routing anything through Anthropic’s servers. And it works, by all accounts. But it’s a third-party patch on plumbing that could change any time, and the MV3 Service Worker timeout stays because that is a Chrome platform constraint no socket library can fix.

Outside-in was always going to break

Every failure mode points back to one design choice: connecting from outside the browser to the inside. Chrome does not want to be a server. MV3 actively kills persistent external connections. Native Messaging was built for lightweight integrations, not persistent command channels for an AI coding agent.

Browser-native tools sidestep all of this because they never need an external connection in the first place. A Chrome extension running in the side panel already has DOM access, tab context, and page state without any relay or WebSocket chain. Dassi works this way — the AI lives inside Chrome, so the connection problem does not exist by design.

Claude Code is a good coding tool. I use it daily. But for anything that happens inside the browser, starting inside the browser makes five failure modes disappear before they start.