[BUG] Claude in Chrome 1.0.94: side panel shows "Can't reach the Claude extension." in Vivaldi; classic side panel opt-out removed
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?
This is about the Claude in Chrome browser extension, not the Claude Code CLI.
In Vivaldi, the extension's new side panel (the embedded claude.ai Cowork interface) never works. It only shows:
Can't reach the Claude extension.
Up to extension 1.0.93, you could work around this in the extension options: Side panel experience → New side panel experience → off. That brought back the classic side panel, which works fine in Vivaldi.
In 1.0.94, that toggle is gone, so Vivaldi users have no way back to a working side panel. From the bundled code in 1.0.94:
- The options page no longer renders the "Side panel experience" section.
onInstalledin the service worker now runschrome.storage.local.remove(["preferCoworkExperience"]), so the old preference is deleted on install/update.- Whether the side panel uses Cowork or classic now depends only on the server-side feature flag
chrome_ext_cowork_iframe, plus an internal fallback that doesn't trigger in this case. There's no user-facing control left.
According to the 1.0.94 code, the classic panel is still used when sidepanel.html is opened with ?mode=window, so the classic UI hasn't been removed. It just can't be chosen for the side panel anymore.
What Should Happen?
Fix the Cowork side panel so it can reach the extension in Vivaldi.
Or at least a workaround:
- Fall back to the classic side panel automatically when the embedded Cowork iframe can't reach the extension, instead of stopping at "Can't reach the Claude extension.", or
- Bring back the "New side panel experience" toggle (the
preferCoworkExperienceopt-out) in the options page, or
Error Messages/Logs
Side panel text: Can't reach the Claude extension.
Steps to Reproduce
- Install Vivaldi 8.2.4133.47 on macOS.
- Install the Claude extension from the Chrome Web Store (version 1.0.94, ID fcoeoabgfenejglbffodgkkbkcdhcgfn) and sign in.
- Open the Claude side panel.
- The panel shows "Can't reach the Claude extension."
- Open the extension options. The "Side panel experience" section / "New side panel experience" toggle is no longer there (it is in 1.0.93).
Claude Model
_No response_
Is this a regression?
Yes, this worked in a previous version
Last Working Version
1.0.93 (browser extension)
Claude Code Version
2.1.278 (Claude Code) – n/a, bug is in the browser extension 1.0.94
Platform
Anthropic API
Operating System
macOS
Terminal/Shell
Other
Additional Information
- Browser: Vivaldi 8.2.4133.47 (Chromium-based), macOS 26.2
- Extension: 1.0.94 broken, no workaround. 1.0.93 in another Vivaldi profile still has the toggle, and turning it off works around the problem.
- Probably related: Arc has the same Cowork-iframe breakage, and a community patch there forces the classic side panel: https://github.com/quardianwolf/claude-arc-patch
- Earlier Vivaldi side-panel issues: #34062, #61899
- The Claude Code version below is filled in only because the form requires it. This bug is in the browser extension.
Showing cached comments. Read the full discussion on GitHub ↗
3 Comments
Root cause found, plus a patch as proof and workaround
Vivaldi hosts extension side panels as tabs: in the side panel,
chrome.tabs.getCurrent()returns a tab. Sosender.tabis set, both forsidepanel.htmland for the claude.ai frame embedded in it. In Chrome it'sundefined. 1.0.94 usessender.tab === undefinedto recognize its side panel, so in Vivaldi:``
js
`function Si(e){return void 0===e.tab&&e.id===chrome.runtime.id}
cic-panelThe
port gets disconnected immediately, andCIC_IFRAME_BRIDGE_INIT/CIC_IFRAME_TOOL_CALL/CIC_IFRAME_AGENT_STATEare refused with"sender is not an extension page". The same check guards thesidepanel-voice-auth` port.get_sidepanel_host_info(onMessageExternal, from the embedded claude.ai frame) computesconst r=void 0===i.tab. With a tab set, it returns noaccountUuid/lastActiveOrgUuidand no capabilities. The samevoid 0!==i.tabcheck refusesopen_options/set_locale.The claude.ai frame loads and completes its handshake with the panel, but everything after that fails, and it shows "Can't reach the Claude extension."
Suggested fix: don't use
sender.tabto identify the side panel. For example, also accept a sender whoseurlis the extension's ownsidepanel.html. For the embedded claude.ai frame, accept asender.tab.urlthat issidepanel.html.Second Vivaldi issue: tab binding
Vivaldi ignores the per-tab
chrome.sidePanel.setOptions({tabId, path: "sidepanel.html?tabId=N"}). Only one panel is shown, and it keeps the?tabId=it was first opened with, even after that tab is closed. As a result, "this page" refers to the wrong tab, or to none ("no active tab context"). This looks like the same problem as #61899. Also,chrome.runtime.getContexts({contextTypes: ["SIDE_PANEL"]})returns nothing in Vivaldi.Patch (attached)
The attached patch fixes both issues without changing any of Anthropic's scripts. It adds two scripts that load first:
vivaldi-sidepanel-patch.js): wrapsruntime.onMessage/onMessageExternal/onConnectso listeners see the sender withouttab. This only applies to the side panel messages and ports listed above, and only when the sender is the extension's ownsidepanel.htmlor claude.ai embedded in it. It also records the tab the toolbar icon or shortcut was used on.vivaldi-panel-rebind.js, only active when the panel is hosted in a tab): also fixes the tab binding. Clicking the toolbar icon on a tab rebinds the panel to that tab, and closing the bound tab rebinds the panel to the active tab. It works by reloading the panel with the new?tabId=, so an open chat restarts.patch.shbuilds an unpacked copy from the installed store version and marks it1.0.94-vivaldi-p1. Usage is in the README.Tested on Vivaldi 8.2.4133.47, macOS 26.2, extension 1.0.94:
This is a workaround for anyone who wants it now. The real fix belongs in the extension.
claude-vivaldi-patch-p1.zip
Same regression here on macOS, but in Brave, so it isn't limited to Vivaldi/Arc.
The classic panel fits my workflow better: model picker, "Convert to task", and the dashed border showing which tab Claude is controlling. Once Windows updates, I'll lose it there too.
Confirming on Windows 11 (Vivaldi 8.2.4133.76, extension 1.0.94), so this isn't macOS-only. Same result as the root cause above: in the side panel,
chrome.tabs.getCurrent()returns a tab object, andchrome.runtime.sendMessage({type: "CIC_IFRAME_BRIDGE_INIT", panelTabId: <id>, sessionId: "diag"})returns{ok: false, error: "sender is not an extension page"}.Opening
chrome-extension://fcoeoabgfenejglbffodgkkbkcdhcgfn/sidepanel.htmlin a normal tab fails the same way. Network, QUIC and reinstalling have no effect.Browser control through Claude Code / Claude desktop (
mcp__claude-in-chrome__*) does work in Vivaldi: tab groups, navigation, page text and screenshots all work on allowlisted sites. Only the side panel is broken.