[BUG] Claude in Chrome side panel (Cowork mode): GET /api/bootstrap returns 403 from extension context while identical authenticated request returns 200 from a claude.ai tab — endless sign-in loop
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?
Environment
- Claude in Chrome extension v1.0.85, new Cowork side panel mode
- Chrome (latest stable), Windows 11
- Account: Max plan; routingHint JWT flags include
edge_default_route - Network: traffic routed through a self-hosted WireGuard VPN (Amnezia) with a datacenter exit IP; Cloudflare PoP FRA
Symptom
The new (Cowork) side panel cannot start a session. After signing in and completing onboarding, the embedded frame dies (crashed-frame icon / "claude.ai refused to connect"), then the panel falls back to the "Sign in to Claude" screen. Clicking "Sign in on claude.ai" opens claude.ai where I am already signed in. "Already signed in? Reload" does not help. Switching back to the classic side panel works fine.
Root cause observed via DevTools
The panel's bootstrap request fails:
GET https://claude.ai/api/bootstrap→ 403 Forbidden (server: cloudflare, remote 160.79.104.10)- The request DOES include full session cookies (
sessionKey,__cf_bm,anthropic-device-id,routingHint, ...) — verified in Request Headers, so this is not a third-party-cookie issue.
Meanwhile, the exact same request issued same-origin from a regular claude.ai tab, same Chrome profile, same IP, same cookies:
GET https://claude.ai/api/bootstrap→ 200 OK with full account payload (cf-ray a32c24431945dc90-FRA)
Additional data point: in a regular claude.ai tab, GET https://claude.ai/manifest.json (a credential-less request) also returns 403, while all other ~135 page-load requests return 200.
Hypothesis
Edge/WAF filtering appears to reject requests whose fetch metadata differs from normal same-origin traffic (extension-context Origin: chrome-extension://... / Sec-Fetch-Site, or credential-less fetches), at least for datacenter-reputation IPs. This silently breaks the entire Cowork side panel while the website itself works flawlessly.
What I ruled out
- Third-party cookie blocking (cookies are present on the 403 request)
- Ad blockers and all extensions injecting into claude.ai (removed/disabled — no change)
- Hardware acceleration off, Chrome updated, claude.ai site data cleared, fresh sign-in — no change
Expected behavior
Side panel bootstrap should succeed, or at least the panel should surface the 403 to the user instead of an endless sign-in loop.
What Should Happen?
The new Cowork side panel should bootstrap successfully using the existing claude.ai session (GET /api/bootstrap should return 200 from the extension context, as it does from a regular claude.ai tab). If the request is rejected, the panel should show the actual error instead of falling back to an endless "Sign in to Claude" loop.
Error Messages/Logs
Side panel DevTools, Network tab:
Request URL: https://claude.ai/api/bootstrap
Request Method: GET
Status Code: 403 Forbidden
Remote Address: 160.79.104.10:443
Referrer Policy: strict-origin-when-cross-origin
Request Cookie header: present, includes sessionKey, __cf_bm, anthropic-device-id, routingHint (values redacted)
Same request from a regular claude.ai tab (same profile, same IP, same cookies):
GET https://claude.ai/api/bootstrap -> 200 OK
server: cloudflare
cf-ray: a32c24431945dc90-FRA
body: full account payload
Also observed in the regular tab during a normal page load (all other requests 200):
GET https://claude.ai/manifest.json -> 403
Steps to Reproduce
- Sign in to claude.ai (Max plan) in Chrome; account/network such that traffic exits via a datacenter/VPN IP (self-hosted WireGuard, Cloudflare PoP FRA in my case)
- Install Claude in Chrome extension v1.0.85 and open the side panel in the new Cowork mode
- Click "Sign in on claude.ai" in the panel, complete sign-in and onboarding (accept permissions/risk dialogs)
- Panel's embedded frame goes blank with a crashed-frame icon, then "claude.ai refused to connect", then the panel returns to the "Sign in to Claude" screen
- Open DevTools on the side panel (right-click -> Inspect -> Network):
GET https://claude.ai/api/bootstrapreturns 403 Forbidden even though the request carries full session cookies - For comparison, run the same request from a claude.ai tab console:
await fetch('/api/bootstrap', {credentials:'include'})-> 200 OK - Switch the panel back to classic mode -> everything works
Claude Model
None
Is this a regression?
No, this never worked
Last Working Version
_No response_
Claude Code Version
N/A — Claude in Chrome extension v1.0.85 (Cowork side panel)
Platform
Other
Operating System
Windows
Terminal/Shell
Other
Additional Information
_No response_