[BUG] Cowork macOS: local sandbox VM starts with NO network route (only loopback) and cloud egress proxy returns 403 for every domain, despite "Allow network egress: All domains" — regression since 2026-09-10 ~23:15 UTC
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?
Related: #30861 (macOS MITM egress proxy blocks all non-API domains regardless of allowlist), #48114 (Windows, "All domains" ignored), #23818, #38984.
Environment
- macOS, Apple Silicon (MacBook Pro)
- Claude Desktop 1.49585.0 when it broke; full reinstall from claude.ai/download → 1.46388.3 (Electron 42.10.0) — same result
- Plan: individual org, user is org owner
- Settings → Capabilities → Allow network egress: ON, allowlist: All domains ("Claude can access all domains on the internet")
- macOS proxies (System Settings → Wi-Fi → Details → Proxies): all OFF, no PAC, no VPN
What happened
Until ~23:15 UTC on 2026-09-10, Cowork sessions linked to this Mac had normal network from the local Linux sandbox (device_bash): SSH to a VPS on port 22, HTTPS, package installs — dozens of successful sessions on 09-09 and 09-10.
Since then, every session — new conversations, after Cmd+Q/reopen, after relinking the computer, after toggling the egress setting off/on, and after a full reinstall — starts the sandbox with no network at all:
$ ip route # (empty)
$ ip -br addr # lo UNKNOWN 127.0.0.1/8 ::1/128 (only loopback; no enp0s1 in the namespace)
$ cat /etc/resolv.conf # nameserver 172.16.10.1
$ ping -c1 1.1.1.1 # ping: connect: Network is unreachable
$ curl https://www.google.com # 000
$ ssh user@<vps-ip> # ssh: connect to host <vps-ip> port 22: Network is unreachable
The cloud container of the same sessions is also locked down beyond the setting: its egress proxy answers 403 to CONNECT for every host except a few registries:
www.google.com:443 connect_rejected — gateway answered 403 to CONNECT (policy denial or upstream failure)
<my-domain>:443 connect_rejected (same)
pypi.org → 200 ; github.com → 400 (reachable)
After the reinstall, the linked session additionally reported Workspace still starting. The isolated Linux environment on this device is booting in the background (usually 10–30 seconds) for ~20 minutes before the VM came up — again with no route.
The Mac itself is fine: the same VPS answers SSH from the Mac's Terminal, and the app's built-in browser reaches my Cloudflare-tunnelled hosts.
Timing
Anthropic status shows an incident (elevated latency, Claude API + Cowork) mitigated 23:24 UTC on 2026-09-10 — my sandbox lost its network at ~23:15 UTC and never recovered. Support (AI responder) wrote: "this does appear to be a deeper policy-enforcement or platform-side issue that goes beyond what I can verify or correct directly" and could not escalate to a human or issue a ticket number.
Expected
With "Allow network egress: All domains", the local sandbox should get a default route (as it did until 09-10) and the proxy should allow any host.
Actual
Sandbox network namespace has no interface/route at all; cloud proxy denies everything outside the hard-coded registries. Setting changes and reinstall have no effect.
Steps to reproduce (on this account)
- Settings → Capabilities → egress ON, All domains.
- Start a new Cowork conversation linked to the Mac, connect any folder.
- Ask Claude to run
ip route; ping -c1 1.1.1.1in the local environment → empty route table, unreachable.
Happy to provide logs from ~/Library/Logs/Claude or run any diagnostic. Full evidence file available.
What Should Happen?
With Settings → Capabilities → "Allow network egress: All domains", the local Cowork sandbox on macOS should come up with a default route / network interface (as it did until 2026-09-10 ~23:15 UTC — SSH to my VPS on port 22, HTTPS, package installs all worked), and the egress proxy should allow any host. Toggling the setting, opening new sessions, relinking the computer and reinstalling the app should restore it — none of them does.
Error Messages/Logs
Local sandbox (device_bash), every new session since 2026-09-10 23:15 UTC, before and after full reinstall (1.49585.0 -> 1.46388.3):
$ ip route
(empty)
$ ip -br addr
lo UNKNOWN 127.0.0.1/8 ::1/128
$ cat /etc/resolv.conf
nameserver 172.16.10.1
$ ping -c1 -W3 1.1.1.1
ping: connect: Network is unreachable
$ curl -s -m 8 -o /dev/null -w "%{http_code}\n" https://www.google.com
000
$ ssh -i key user@<vps-ip> "echo up"
ssh: connect to host <vps-ip> port 22: Network is unreachable
After reinstall, for ~20 minutes every device_bash call returned:
Workspace still starting. The isolated Linux environment on this device is booting in the background (usually 10-30 seconds). Try again shortly.
Cloud container of the same session (agent proxy status):
www.google.com:443 connect_rejected — gateway answered 403 to CONNECT (policy denial or upstream failure)
<my-domain>:443 connect_rejected (same)
<my-domain-2>:443 connect_rejected (same)
pypi.org -> 200 ; github.com -> 400 (reachable)
Steps to Reproduce
- On macOS (Apple Silicon), Claude Desktop 1.46388.3 (also 1.49585.0), account with Settings → Capabilities → "Allow network egress" ON and allowlist "All domains".
- Confirm macOS has no proxies/PAC/VPN (System Settings → Wi-Fi → Details → Proxies: all off).
- Start a NEW Cowork conversation, link it to this computer, connect any folder.
- Ask Claude to run in the local environment:
ip route; ip -br addr; ping -c1 1.1.1.1; curl -s -o /dev/null -w "%{http_code}" https://www.google.com - Result: empty route table, only loopback, "Network is unreachable", curl 000.
- Toggle the egress setting off → wait 10 s → on; Cmd+Q the app; open another new conversation; repeat step 4 → same result.
- Uninstall the app, reinstall from claude.ai/download, relink the computer; repeat step 4 → same result (plus "Workspace still starting" for ~20 min).
Note: until 2026-09-10 ~23:15 UTC the exact same steps gave a working network (SSH/HTTPS from the sandbox). Anthropic status lists an API/Cowork incident mitigated at 23:24 UTC that day.
Claude Model
None
Is this a regression?
Yes, this worked in a previous version
Last Working Version
Claude Desktop 1.49585.0 (macOS) — worked until 2026-09-10 ~23:15 UTC; same build stopped working after that time
Claude Code Version
Claude Desktop (Cowork) 1.46388.3 on macOS, Electron 42.10.0 (reinstalled from claude.ai/download); previously 1.49585.0. claude --version is not available inside Cowork.
Platform
Anthropic API
Operating System
macOS
Terminal/Shell
Terminal.app (macOS)
Additional Information
Related: #30861 (macOS egress proxy blocks all non-API domains regardless of allowlist), #48114 (Windows, "All domains" ignored), #92273 (allowlist not affected by settings), #23818, #38984.
Support (support@anthropic.com, AI responder) acknowledged in writing: "this does appear to be a deeper policy-enforcement or platform-side issue that goes beyond what I can verify or correct directly", but could not escalate to a human or issue a ticket number.
The Mac itself is fine: the same VPS answers SSH from the Mac's Terminal and the app's built-in browser reaches my Cloudflare-tunnelled hosts. Only the Cowork sandbox/proxy path is broken. Happy to provide logs from ~/Library/Logs/Claude or run any diagnostic.
9 Comments
Hi all, I'm seeing the same regression and wanted to add another data point in case it helps narrow down the timing.
Setup: individual Max plan, Claude desktop app on Windows, Cowork cloud sessions. Settings > Capabilities > Domain allowlist is "Package managers only" plus additional domains (including
*.googleapis.com). Claude chat with the same settings still works normally.When it started: I have an hourly scheduled Cowork task that calls Google and Windsor APIs, and it gives a clean before/after:
oauth2.googleapis.com:443rejected with 403 on CONNECTSo for me it broke between 22:16 and 23:10 UTC on September 10. The good run and the failed runs all ran in Anthropic's cloud environment (container version 2.1.268 on the latest run).
What the cloud container shows now:
Separately, the local workspace on Windows fails with the September 8 Windows update message from the status page incident, so neither path works for me right now.
Could someone from Anthropic confirm whether this is being tracked? I'm happy to share session IDs privately if that would help.
Thanks!
Thanks @thewafflethief — that matches my timeline exactly. On macOS the last good session here was ~23:15 UTC on 09-10; everything after that (new sessions, relink, toggling the egress setting, full reinstall) comes up with no route in the local sandbox and 403 on CONNECT from the cloud proxy. Re-checked just now (2026-09-11 02:45 UTC): still broken on both paths. Two independent accounts (Max individual, macOS + Windows) breaking in the same ~1h window, with the setting still showing "All domains" / allowlist, points to a server-side egress policy change rather than anything client-side. I also have a support conversation open (Fin ID 215475892645145) and the AI responder already acknowledged a "platform-side" issue but could not escalate. Would appreciate confirmation from Anthropic that this is tracked.
Same here: macOS (Apple Silicon), Cowork, Allow network egress ON with Domain allowlist "All domains". Broken since 2026-09-11 (UTC) on both paths:
api.github.com/github.com/api.anthropic.comget through.pypi.organdregistry.npmjs.orgreturn 403 withx-deny-reason: host_not_allowed, and the proxy status showsconnect_rejectedfor everything else.403 from proxy after CONNECTfor every host exceptapi.anthropic.com, including self-hosted internal hosts that worked from the same setup on 2026-09-10.The in-app browser pane is unaffected.
Another macOS report with the identical fingerprint, adding it since the reports so far are 1x macOS + 1x Windows.
Setup: macOS (Apple Silicon), Claude desktop app, Cowork cloud session linked to the Mac. Settings > Capabilities > Allow network egress: ON, Domain allowlist: "All domains" (UI confirms "Claude can access all domains on the internet"). Verified in the UI while the failure was active, unchanged for weeks.
Cloud container, measured 2026-09-11 11:09 UTC, identical to a run at 10:30 UTC:
api.github.com 200 reachable
api.anthropic.com 404 reachable
pypi.org 403 x-deny-reason: host_not_allowed
files.pythonhosted.org 403 same
registry.npmjs.org 403 same
googleads.googleapis.com CONNECT tunnel failed, 403
oauth2.googleapis.com CONNECT tunnel failed, 403
graph.facebook.com CONNECT tunnel failed, 403
api.openai.com CONNECT tunnel failed, 403
www.google.com CONNECT tunnel failed, 403
example.com CONNECT tunnel failed, 403
raw.githubusercontent.com CONNECT tunnel failed, 403
Exactly the three-host list @spde describes. example.com being denied is the cleanest tell that this is a blanket policy denial rather than anything service-specific.
device_bash (local VM on the Mac) is on the same policy and returns the same 403s, so "run it locally" is not a workaround. The in-app browser pane and MCP connectors are unaffected, which is consistent with them not traversing the sandbox proxy.
A second account on a separate plan, same skills, different credentials, hit the identical failure in the same window on 2026-09-11 and also had it working earlier that day. No setting was changed on either side.
Impact: every skill that calls a third-party API is dead. Google Ads API, Meta Graph API, OpenAI API. These are production advertising workflows.
Nothing on status.claude.com covers this; the only open Cowork incident is the September 8 Windows one, which is a different failure. Happy to provide session IDs privately.
Workaround that restored my workflow: Claude Code CLI on the Mac itself, same Max subscription, no Cowork sandbox — egress is the machine's own network, so SSH, tunnels and third-party APIs all work again.
Steps: (1)
curl -fsSL https://claude.ai/install.sh | bash, then runclaudeand pick "Claude account with subscription"; (2)cdinto the project/knowledge folder that already has aCLAUDE.md— Claude Code reads it on start, so the "brain" is the same one Cowork used; (3) copy your Cowork skills to~/.claude/skills/<name>/SKILL.md; (4) stop the per-command permission prompts with~/.claude/settings.json:{"permissions": {"defaultMode": "acceptEdits", "allow": ["Read","Edit","Write","Bash(*)","WebFetch"], "deny": ["Bash(rm -rf /*)", "Read(**/.env)"]}}.First test: booted from CLAUDE.md, SSH'd into a Windows VPS through a Linux jump host and read a production config in under 4 minutes. The only Cowork pieces I'm still missing are the connectors and scheduled tasks (moving them to MCP + cron). Still want the Cowork egress fixed, but this unblocks work today.
Via Claude Code. It also works for me, regardless of whether from CLI or from the app. It's just an issue with an old cowork, I guess.
Another data point — Windows, cloud container only, no local VM in the loop. Two things here look new to this thread.
Earliest hard timestamp so far: 2026-09-10T22:14:10Z. From the container's own proxy log:
That sits just ahead of thewafflethief's bracket (good run finishing 22:16 UTC, next run failing by 23:10). If their 22:09 run made its network calls early in the run, the two are consistent; if not, the rollout was staggered across containers rather than flipped everywhere at once.
It broke under a container that was already running — mid-process, not at provisioning.
This is where our case differs from every report above, which are all "every new session comes up broken." Ours was a long-lived cloud session doing real Google Workspace work as a domain-wide-delegated service account:
spreadsheets.batchUpdatestructural writes, Docs reads, Drive uploads, all succeeding. The same calls began failing at 22:14:10Z with no new container, no session restart, no settings change and no credential change — the same process kept running straight across the transition, succeeding minutes before and refused after. Still denied 15+ hours later.So on the cloud path the policy is being evaluated per request, not stamped onto the container at provisioning. #93525's repro notes warn that a stale container keeps its old policy and that you must therefore test only in a freshly provisioned one — that was not true here, and it's worth knowing for anyone trying to correlate the onset against a rollout.
The pypi.org disagreement in this thread has a mundane explanation.
goldenwhaleai sees
pypi.orgreturning 200 while thewafflethief, spde and DennisOmmer90 see 403. Both are correct.pypi.org,files.pythonhosted.org,registry.npmjs.org,index.crates.io,proxy.golang.organdapi.anthropic.comsit in the container'sno_proxylist, so requests to them take a direct path and never reach the CONNECT gateway to be judged. Whether you see 200 or 403 depends on whether the direct path is filtered as well — i.e. which of the two enforcement points your container has. Here pypi returns 200, and everything that actually traverses the proxy returns 403.The practical consequence cost me several hours: "package installs still work" is not evidence that the allowlist is intact. I concluded from exactly that signal that this was a Google-specific block. It isn't.
curl https://example.com/through the proxy is the honest one-line probe — which is why DennisOmmer90's point aboutexample.comis the right diagnostic.For anyone chasing credentials: the tunnel is refused before TLS, so no token, key, scope or connector change can influence it. An unauthenticated request gets the identical 403. Revoking and reconnecting integrations is wasted effort on this one.
Impact matches the other reports, scheduled tasks included — ours reads Google Sheets daily and now dies on its first call — while chat, WebFetch and WebSearch stay perfectly healthy because they route separately. That split is what makes this so easy to misdiagnose.
Still broken as of 2026-09-11T13:18Z.
Update: this has cleared on my account. My hourly scheduled task ran successfully at 19:11 UTC today, and my other Cowork sessions are working again.
Confirming recovery here too (macOS, the original report): at 22:19 UTC on 2026-09-11 the local sandbox came up with a default route again (
ip routepopulated, ping OK, SSH to the VPS on port 22 OK) and the cloud container's proxy now returns 200 for www.google.com and my own tunnelled host. No client change on my side — same app build, same settings. So the outage window for this account was ~23:15 UTC 09-10 → ~22:19 UTC 09-11 (about 23 hours). Leaving the issue open for a root-cause note from Anthropic, since nothing appeared on the status page and the setting was being ignored the whole time.