list_connected_browsers reports isLocal: true for a browser on a different physical machine
Status Open
Reported on v2.1.201
Maintainer reply None cached
Workaround ✓ Mentioned in thread ↓
Activity 4 comments · opened Jul 6, 2026
Environment
Claude Code 2.1.201 (CLI), two Macs on the same LAN, extension on both, same account.
Bug
list_connected_browsers reports isLocal: true for both connected browsers:
[
{"deviceId": "3112c087-…", "name": "Browser 1", "osPlatform": "macOS", "isLocal": true},
{"deviceId": "3fe3204b-…", "name": "Browser 2", "osPlatform": "macOS", "isLocal": true}
]
One of them is on a different physical machine - confirmed by selecting it and navigating: the tab opened on the other computer.
Showing cached comments. Read the full discussion on GitHub ↗
3 Comments
Same thing on Windows, so the
platform:macoslabel may be too narrow.Two machines, both Windows 10, same account, extension on both:
One of those is a laptop on a different desk. I didn't confirm it by navigating the way you did, because the reason I care is that I'm deliberately keeping two agent sessions off each other's machine, and opening a tab over there is the thing I'm trying to avoid.
Something that made this worse for me: the names aren't stable either. In one day I watched
Browser 1andBrowser 2swap which machine they pointed at, twice, while the deviceIds stayed put. SoisLocalandnameare both unsafe to select on, and deviceId is the only field I trust now.I'm also hitting this.
Claude Code will open chrome on my iMac instead of the MacBook, without any prompt.
Here's a report from Claude Code in my terminal:
<blockquote>
list_connected_browsersreportsisLocal: truefor browsers on other machinesSummary
The Claude in Chrome MCP tool
list_connected_browsersreturnsisLocal: truefor Chromeinstances running on a different physical machine than the Claude Code session. With two
browsers connected — one genuinely local, one on another Mac — both returned
isLocal: truein the same call, so the field cannot discriminate at all.
Actual (two browsers, two different physical machines, one call)
Expected
isLocal: trueonly for a browser on the same host as the agent. If that can't be determinedreliably, omit the field rather than assert
true.Evidence the machines differ
Each browser's self-reported hardware, vs. the host running the Claude Code shell:
| |
9584195d|cce4ed85| Claude Code host ||---|---|---|---|
|
navigator.hardwareConcurrency| 8 | 10 | 10 (hw.ncpu) || Display | 2240x1260 @2x | 1710x1107 @2x | 2880x1864 panel |
| Verdict | remote (24" iMac) | genuinely local | — |
Core count is decisive: 8 != 10.
cce4ed85matches the host on cores, and its 1710x1107 @2x isthe host panel's "More Space" scaled mode. Timezone and Chrome major version matched across all
three, so neither discriminates.
Impact
chrome://version, which would report the host and profile path, is rejected by the extension("Can't interact with browser-internal or unparseable URLs"), so
isLocalis the only signalavailable to the agent. A wrong value is load-bearing. In this session it caused the agent to:
another machine, and mistake a stale local record for its own tab.
The user, not the agent, identified that the browser was on a different computer. A correct
isLocal: falsewould have prevented all of it.Repro
list_connected_browsersfrom machine B → machine A reportsisLocal: true.isLocal: true.Secondary (device identity)
Device names are positional and unstable: the same deviceId was listed as "Browser 1", then
"Browser 2", then "Browser 1" again as other devices connected/disconnected. A name assigned by
the user during the
switch_browserconnect flow (which returnedConnected to browser "<name>")never appeared in
list_connected_browsers, which kept returning "Browser 1". Stable, real devicenames would make this class of mix-up self-evident.
Environment
fcoeoabgfenejglbffodgkkbkcdhcgfn) 1.0.90 on the Claude Code host;version on the remote browser is also 1.0.90 — verified by user, not exposed by any available tool
Chrome/152.0.0.0, UA-reduced)</blockquote>
I ended up building this with Claude Code as a workaround for this issue and #74671.