[BUG] Claude in Chrome 1.0.94: side panel shows "Can't reach the Claude extension." in Vivaldi; classic side panel opt-out removed

Status Open
Reported on v2.1.278
Maintainer reply None cached
Activity 4 comments · opened Sep 22, 2026

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.
  • onInstalled in the service worker now runs chrome.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:

  1. 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
  2. Bring back the "New side panel experience" toggle (the preferCoworkExperience opt-out) in the options page, or

Error Messages/Logs

Side panel text: Can't reach the Claude extension.

Steps to Reproduce

  1. Install Vivaldi 8.2.4133.47 on macOS.
  2. Install the Claude extension from the Chrome Web Store (version 1.0.94, ID fcoeoabgfenejglbffodgkkbkcdhcgfn) and sign in.
  3. Open the Claude side panel.
  4. The panel shows "Can't reach the Claude extension."
  5. 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.

View original on GitHub ↗

3 Comments

Domdron · 22 days ago

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. So sender.tab is set, both for sidepanel.html and for the claude.ai frame embedded in it. In Chrome it's undefined. 1.0.94 uses sender.tab === undefined to recognize its side panel, so in Vivaldi:

  1. The service worker's side panel check fails:

``js
function Si(e){return void 0===e.tab&&e.id===chrome.runtime.id}
`
The
cic-panel port gets disconnected immediately, and CIC_IFRAME_BRIDGE_INIT / CIC_IFRAME_TOOL_CALL / CIC_IFRAME_AGENT_STATE are refused with "sender is not an extension page". The same check guards the sidepanel-voice-auth` port.

  1. get_sidepanel_host_info (onMessageExternal, from the embedded claude.ai frame) computes const r=void 0===i.tab. With a tab set, it returns no accountUuid / lastActiveOrgUuid and no capabilities. The same void 0!==i.tab check refuses open_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.tab to identify the side panel. For example, also accept a sender whose url is the extension's own sidepanel.html. For the embedded claude.ai frame, accept a sender.tab.url that is sidepanel.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:

  • Service worker (vivaldi-sidepanel-patch.js): wraps runtime.onMessage / onMessageExternal / onConnect so listeners see the sender without tab. This only applies to the side panel messages and ports listed above, and only when the sender is the extension's own sidepanel.html or claude.ai embedded in it. It also records the tab the toolbar icon or shortcut was used on.
  • Side panel (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.sh builds an unpacked copy from the installed store version and marks it 1.0.94-vivaldi-p1. Usage is in the README.

Tested on Vivaldi 8.2.4133.47, macOS 26.2, extension 1.0.94:

  • the Cowork panel connects,
  • chat and browser tools work on the correct tab,
  • rebinding on icon click and on tab close works.

This is a workaround for anyone who wants it now. The real fix belongs in the extension.

claude-vivaldi-patch-p1.zip

feloau · 22 days ago

Same regression here on macOS, but in Brave, so it isn't limited to Vivaldi/Arc.

  • macOS 27, Brave, Max plan
  • Mac (1.0.94): the "⋮" menu only shows "Extension settings" and "Language". There's no way back to the classic side panel, and the "Side panel experience" option is gone from the extension settings.
  • Windows (same account, still on the older version): the menu still shows "Switch to new experience", so the classic panel works there.

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.

valentindimitrov · 17 days ago

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, and
chrome.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.html in 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.

Showing cached comments. Read the full discussion on GitHub ↗