[BUG] Claude in Chrome extension blocks navigation to all domains except one specific site (behaves like an allowlist)
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?
When Claude uses the Claude in Chrome extension to navigate to a website, navigation to boottent.com succeeds, but navigation to every other domain I've tried (google.com, spartacodingclub.kr, and others) fails immediately with the error Navigation to this domain is not allowed — even though the extension's own "Site access" setting in chrome://extensions is set to "On all sites" and I have not configured any domain whitelist myself.
This behaves as if some other allowlist (separate from the Chrome extension's site-access permission) is silently restricting navigation to a single domain, with no visible setting to view or change it, and no clear explanation given to the user about why it's happening. I re-checked and re-approved the extension's site access and retried navigation within the same session, but the restriction persisted.
What Should Happen?
The Claude in Chrome extension should allow navigation to any domain the user has granted site access to (currently set to "On all sites" in chrome://extensions), consistent with the extension's own permission settings. Since no domain whitelist has been configured by the user, Claude should be able to navigate to any website (e.g., google.com, spartacodingclub.kr) — not just boottent.com.
If there is an intentional session-level or backend domain allowlist restricting navigation, this should be either (a) surfaced to the user with a clear explanation of which domains are allowed and why, or (b) configurable/removable by the user, rather than silently blocking navigation with a generic "Navigation to this domain is not allowed" error that gives no indication of how to resolve it.
Error Messages/Logs
Steps to Reproduce
- Install/enable the Claude in Chrome extension (v1.0.79) and confirm in chrome://extensions → Claude → Site access that it is set to "On all sites."
- Start a Claude Code session that uses the Claude in Chrome MCP tools (e.g. mcp__claude-in-chrome__navigate).
- Ask Claude to navigate to boottent.com (or have it navigate there as part of a task). Confirm this succeeds — the page loads normally.
- In the same session, ask Claude to navigate to a different domain, e.g. https://www.google.com or https://spartacodingclub.kr.
- Observe that navigation fails immediately with the error: Navigation to this domain is not allowed.
- Go back to chrome://extensions → Claude → Site access and confirm it is still "On all sites" (no whitelist configured).
- Retry step 4 in the same session — the error persists.
Expected result: Step 4 should succeed, since the extension has full site access and no whitelist was configured.
Actual result: Only boottent.com is reachable; all other domains are blocked with no way to view or change the restriction from the extension's UI.
Claude Model
None
Is this a regression?
Yes, this worked in a previous version
Last Working Version
_No response_
Claude Code Version
1.18286.0.0Unable to run claude --version directly (using the Claude Code desktop app, not a standalone CLI). App version shown in Windows Settings > Apps > Claude: 1.18286.0.0
Platform
Anthropic API
Operating System
Windows
Terminal/Shell
PowerShell
Additional Information
I'm using the Claude in Chrome extension (v1.0.79) and running into a navigation restriction that seems unintended.
Symptom: When Claude uses mcp__claude-in-chrome__navigate (or the Claude in Chrome extension) to visit websites, navigation to boottent.com works fine, but navigation to other domains (e.g. google.com, spartacodingclub.kr) fails with the error: Navigation to this domain is not allowed.
What I've already checked: In chrome://extensions → Claude → Site access, the extension is set to "On all sites" and I have not configured any domain whitelist/restriction myself. So this doesn't appear to be a Chrome extension permission issue on my end.
Reproducibility: This has occurred consistently across multiple sessions over the past week. Re-approving the extension's site access and retrying did not resolve it within the same session.
Question: Is this an intended per-session domain restriction/allowlist feature, or a bug? If intended, is there a way for the user to see or configure which domains are allowed?
3 Comments
Same symptom here, plus a new data point: the "Allowed sites" UI that is supposed to fix this is itself broken, so there is no recovery path.
Environment
fcoeoabgfenejglbffodgkkbkcdhcgfnv1.0.81 (this issue reports v1.0.79)http://60.205.188.223:8054(internal system: plain HTTP, IP address, non-standard port)The allowlist cannot be populated
Settings → Claude in Chrome → Allowed sites shows "No sites have been approved yet". Every URL entered into "Add URL" is rejected with:
Tried all of these, all rejected:
https://www.google.comfailing too suggests the verification call itself is failing, rather than the URL being rejected on content grounds.Evidence from extension storage
Chrome host permissions are fully granted — this layer is not the blocker.
~/Library/Application Support/Google/Chrome/Default/Secure Preferences, extensionfcoeoabgfenejglbffodgkkbkcdhcgfn:Managed Extension Settings/<ext id>/is empty — no enterprise policy involved.The extension's own per-origin table (
Local Extension Settings/fcoeoabgfenejglbffodgkkbkcdhcgfn) explains the "only one domain works" behaviour reported in this issue:navigatecall of the session.duration: "once"— consumed immediately.netloc(host:port), so it did not cover a different host on the same port.[]and never received another entry.That matches this issue's "one specific site works, everything else is blocked": the one working domain is whatever happened to consume that single automatic
oncegrant.The two permission layers do not communicate
mcp__claude-in-chrome__navigate/computer/get_page_text(including "always allow") does not write an entry into the extension's origin table.Verified directly: removed the "always allow" rules from
.claude/settings.local.json, which restored the Claude Code permission prompt; the user approved it; the extension table still stayed[].Error progression
| Condition | Error |
|---|---|
| Tool auto-approved by a Claude Code allow-rule |
Navigation to this domain is not allowed(extension) || Allow-rule removed, permission mode = auto |
Permission denied by the Claude Code auto mode classifier|| Permission mode = ask, user approves the prompt |
Navigation to this domain is not allowed(extension, again) || Page manually dragged into the MCP tab group, then
computer/get_page_text|Permission denied for this action on this domain|The last row matters: with the target page already inside the MCP tab group (the group's stored
domainfield is60.205.188.223), non-navigation actions are still refused. So the gate is per-origin, not per-navigation —navigate,computerandget_page_textare all blocked identically.Impact
Claude Code cannot drive Chrome at all for this account on either machine, and the documented workaround (add the site to the allowlist) is unavailable because the add step is broken.
Related: #58464, #57219, #38378, #36767, #47388.
Same symptom on Windows, plus a root cause trace and a working no-restart workaround.
Environment
fcoeoabgfenejglbffodgkkbkcdhcgfnv1.0.84, Chrome site access "On all sites" (Secure Preferencesshows<all_urls>granted, no enterprise policy)Repro
Fresh desktop session, default permission mode: the first domain navigated works (gets an automatic
duration: "once"grant), every subsequent domain returnsNavigation to this domain is not allowedwith no prompt ever shown. Matches this issue and #74366.Root cause (from the session state + app bundle)
chromePermissionModeandchromeAllowedDomains(visible in%APPDATA%\Claude\claude-code-sessions\<account>\<env>\local_<sessionId>.json). Sessions created in default/acceptEdits permission mode getchromePermissionMode: "follow_a_plan"with the domain list frozen at session start.permissionOverrides.allowedDomains. In the extension'scheckPermission, a non-emptyturnApprovedDomainsset causes any other hostname to return{allowed: false, needsPrompt: false}BEFORE the stored-permission lookup and before any prompt path. So the extension's own "Allowed sites" storage is unreachable, and no approval UI can ever fire mid-session, which is the catch-22 several people here hit.Workaround that does NOT work (any more)
Editing
chromeAllowedDomainsin the session JSON while the app is quit (suggested upthread): on this app version the session files are deleted on quit and re-materialized from an internal store on launch, so on-disk edits never survive. The files are mirrors, not the source of truth.Workaround that DOES work, live, no restart
Flip the affected session's permission mode to Auto (or Bypass permissions) in the session's permission-mode picker.
computeChromeStateOnPermissionModeChangethen clears the lockdown (session becomesskip_all_permission_checks, prior state saved tochromePermsBeforeUnsupervised), and all domains navigate immediately. Verified across framer.com, google.com, example.com, wikipedia.org and others right after the flip. Switching the mode back restores the previous lockdown state.Suggested fix
Same as proposed above: in
checkPermission, a hostname missing fromturnApprovedDomainsshould fall through toneedsPrompt: trueso newly approved domains can be appended to the session grant list, instead of hard-denying with no recovery path.Same symptom on v1.0.84, with additional evidence from the extension's local storage that may help narrow this down: the "Always allow actions on this site" button writes a
duration: "once"record instead of a permanent one.Environment
mcp__claude-in-chrome__*)Symptom (matches OP)
Within one session, the first domain navigated to works (approval card appears, then full access to that host for the rest of the session). Every subsequent domain fails with
Navigation to this domain is not allowed— no approval card is shown, so approval can never be granted. Reproduced across multiple sessions on multiple days.New evidence: "Always allow" writes
onceto permissionStorageI inspected the extension's LevelDB at
%LOCALAPPDATA%\Google\Chrome\User Data\Default\Local Extension Settings\fcoeoabgfenejglbffodgkkbkcdhcgfn\.Every approval — including one where I explicitly clicked "Always allow actions on this site" (verified at 2026-07-30 00:34 JST) — is stored as:
Observations:
durationis always"once"— across 4 approvals on 3 different hosts over 2 days, regardless of which button was clicked. No record withduration: "always"(or any other value) was ever written.permissionStoragereturns to{"permissions":[]}.options.html#permissions→ "Your approved sites") remains empty immediately after clicking "Always allow".approvedSites,alwaysAllow,"duration":"always", etc.) returns zero hits, and noSync Extension Settingsdirectory exists for this extension ID.oncerecord is consumed and permissionStorage is empty — suggesting a session-scoped in-memory allow that is never persisted.Why the "only the first site works" behavior follows
Since only one approval card is ever shown per session (for the first navigation), and its stored effect is
once/session-scoped, users can never accumulate approved sites — which produces exactly the "behaves like an allowlist of one" behavior in the OP.Root cause found in the minified source (v1.0.84)
In
assets/mcpPermissions-*.js, the MCP retry path grants the permission with a hardcodedONCEafter the prompt is approved, regardless of which button the user clicked:(
lAis the duration enum{ONCE:"once", ALWAYS:"always"}.)grantPermissionitself supportsalwayscorrectly, and the read side honors it —findApplicablePermissionmatches persistent records withduration !== ONCE, and the navigate tool'scheckPermissiongate returnsallowedfor them. I verified this end-to-end by injecting aduration:"always"allow record viachrome.storage.localfrom the extension's service worker console: navigation to a second and third domain then works across sessions with no prompt.So the fix appears to be: propagate the user's selected duration through the MCP approval path instead of hardcoding
ONCE(and/or surface the extension's own always/once prompt for MCP-originated requests).Happy to provide the full (redacted) LevelDB excerpts if useful.