Skip to content

quardianwolf/claude-arc-patch

Repository files navigation

Claude Arc Patch

Make the official Claude Chrome Extension work in Arc Browser.

The Problem

Claude's Chrome extension uses the chrome.sidePanel API to display a sidebar panel. Arc Browser doesn't support this API, so the extension fails to load its UI.

The Solution

This patcher copies the official Claude extension and applies minimal patches to make it work in Arc:

  • Floating sidebar panel injected into web pages via a content script (replaces the unsupported sidePanel API)
  • Service worker patch that monkey-patches chrome.sidePanel calls and routes icon clicks to the floating panel
  • Tab context patch that fixes chrome.tabs.query so Claude can identify the active tab from within the iframe
  • Tab Groups shim that emulates the Chrome Tab Groups API, which Arc exposes but never resolves (this is what makes Claude's browser automation / agentic browsing work in Arc)
  • Inline script extraction to comply with Manifest V3 CSP requirements

No original Claude extension code is modified. Only additional files are injected.

Installation

Prerequisites

Steps

  1. Clone this repo

    git clone https://github.com/quardianwolf/claude-arc-patch
    cd claude-arc-patch
  2. Run the patcher

    ./patch.sh

    The script auto-detects the Claude extension installed in Chrome. If it can't find it, provide the path manually:

    ./patch.sh /path/to/claude/extension/directory
  3. Load in Arc

    • Go to arc://extensions
    • Enable Developer mode (top right toggle)
    • Click Load unpacked
    • Select the claude-arc-patched folder
    • Disable the original Claude extension in Chrome to avoid conflicts
  4. If macOS blocks the script

    xattr -cr /path/to/claude-arc-patch
    bash patch.sh

Usage

  • Click the extension icon in Arc's toolbar to toggle the Claude sidebar
  • Cmd+E (Mac) / Ctrl+E (Windows) to toggle the sidebar
  • Click the X button on the sidebar header to close it

How It Works

File Purpose
patch.sh Copies the official extension and applies all patches
floating-panel.js Content script that creates a sidebar panel on web pages
sw-patch.js Service worker patch: monkey-patches sidePanel API, handles icon clicks and keyboard shortcuts
arc-tabs-patch.js Patches chrome.tabs.query so the sidepanel can find the active tab from an iframe context
arc-tabgroups-shim.js Emulates the Chrome Tab Groups API in memory (loaded in the service worker) so browser automation works — see below
theme-init.js Extracted inline script for dark/light mode (CSP compliance)

The Tab Groups problem (browser automation)

Claude's extension organizes the tabs it drives into a "Claude-managed tab group" using the Chrome Tab Groups API. Every automation call (tabs_context_mcp, navigate, etc.) funnels through createGroup()chrome.tabs.group().

Arc exposes this API surface — chrome.tabGroups is an object, chrome.tabs.group is a function, chrome.tabGroups.TAB_GROUP_ID_NONE === -1 — but the calls never resolve. chrome.tabs.group() hangs forever, so the automation promise never settles and every request times out (~8s).

Confirmed empirically in the service-worker console:

STEP created 1204885098
STEP ERR TIMEOUT tabs.group      <-- chrome.tabs.group() never returns

arc-tabgroups-shim.js replaces the tab-group methods in place with a fully in-memory emulation keyed by synthetic group IDs. It tracks membership itself and intercepts chrome.tabs.query({groupId}) / chrome.tabs.get() so the rest of the extension keeps working unmodified. Visual grouping is cosmetic (Arc doesn't render tab groups anyway), so emulation is sufficient. State is mirrored to chrome.storage.session to survive service-worker restarts.

Architecture

                  Arc Browser
                  +--------------------------+
                  |  Web Page                |
                  |  +--------------------+  |
  Icon click /    |  | floating-panel.js  |  |
  Cmd+E           |  | (content script)   |  |
       |          |  |                    |  |
  sw-patch.js --->|  |  +-------------+  |  |
  (service worker)|  |  | sidepanel   |  |  |
                  |  |  | .html       |  |  |
                  |  |  | (iframe)    |  |  |
                  |  |  +-------------+  |  |
                  |  +--------------------+  |
                  +--------------------------+

Troubleshooting

Panel not showing:

  • Make sure the extension is enabled at arc://extensions
  • Refresh the page (Cmd+R)
  • Check console for errors (Cmd+Option+I)

Login issues:

  • Make sure you're logged into Claude in Chrome first
  • The patched extension shares the same authentication

Shortcut not working:

  • Cmd+E only works after the page has loaded
  • Check arc://extensions/shortcuts for conflicts with other extensions

Browser automation / agentic browsing hangs or times out:

  • Open the service-worker console (arc://extensions > Claude > "service worker") and confirm you see [Arc TabGroups Shim] active at startup
  • If it's missing, re-run ./patch.sh and reload the extension

"Operation not permitted" when running patch.sh:

xattr -cr /path/to/claude-arc-patch

Security

  • No original Claude extension code is modified
  • Only additional patch files are injected
  • All code is open source and auditable
  • The extension ID is preserved, so authentication continues to work
  • No data is collected or sent externally

Updating

When Claude releases a new extension version:

  1. Update the Claude extension in Chrome
  2. Re-run ./patch.sh
  3. Reload the extension in Arc (arc://extensions > reload icon)

Contributing

Pull requests welcome. Please keep patches minimal and focused on Arc compatibility.

License

MIT - see LICENSE

Disclaimer

This project is not affiliated with Anthropic. Claude is a trademark of Anthropic, PBC.

About

Make the official Claude Chrome extension work in Arc Browser. Patches the unsupported sidePanel API with a floating sidebar.

Topics

Resources

License

Stars

7 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors