[BUG] Claude Cowork sandbox never becomes ready on Windows ARM64 / Snapdragon X Plus
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?
Device: Surface Pro 12-inch / Windows ARM64
CPU: Snapdragon X Plus (8-core) @ 3.30 GHz
CPU manufacturer: Qualcomm Technologies Inc
OS: Windows 11 Home, build 26200
Claude Desktop: 1.11187.1.0 arm64
Claude package: Claude_1.11187.1.0_arm64__pzs8sxrjxfjjc
Claude Cowork chat opens normally, but the Cowork sandbox never becomes ready.
When I ask Cowork to run a simple command such as:
echo hello
the command does not run. The output is always:
Workspace still starting. The isolated Linux environment is booting in the background (usually 10-30 seconds). Try again shortly.
Waiting several minutes does not fix it. Retrying does not fix it. I also sometimes see:
VM connection timeout after 60 seconds
The Windows/HCS VM appears to start successfully, but the Linux guest / sandbox daemon never connects back to the host.
What Should Happen?
Claude Cowork should successfully start the isolated Linux sandbox/VM and allow commands to run inside the selected workspace.
A simple command like:
echo hello
should execute successfully and return:
hello
Claude should also be able to create and run a simple Python file in the workspace without the sandbox staying in a "Workspace still starting" state.
Error Messages/Logs
Command output in Claude Cowork:
Workspace still starting. The isolated Linux environment is booting in the background (usually 10-30 seconds). Try again shortly.
Sometimes the UI also shows:
Failed to start Claude's workspace
VM connection timeout after 60 seconds
Relevant cowork_vm_node.log:
[VM:start] Beginning startup
[VM:steps] download_and_sdk_prepare completed
[VM:steps] load_swift_api completed
[VM:steps] create_network completed
[VM:steps] create_vm_config completed
[VM:steps] vm_boot completed
[VM:steps] add_plan9_shares completed
[VM:start] Still waiting for guest connection... 10193ms elapsed
[VM:start] Still waiting for guest connection... 20381ms elapsed
[VM:start] Still waiting for guest connection... 30568ms elapsed
[VM:start] Still waiting for guest connection... 40809ms elapsed
[VM:start] Still waiting for guest connection... 50964ms elapsed
[VM:start] Connection timeout, last completed step: add_plan9_shares
Dispatching startup error: VM connection timeout after 60 seconds
[VM:start] Startup failed: Error: VM connection timeout after 60 seconds
Relevant cowork-service.log:
[HCS] HcsCreateComputeSystem returned: hr=0x0
[HCS] HcsStartComputeSystem returned: hr=0x0
[HVSock] Listening on port 51234
[RPC] Server started, waiting for sdk-daemon connection on port 51234
[VNet] Listening for VM network connections on vsock port 1024
[VM] Adding Plan9 share via HcsModifyComputeSystem: name=c path=C:\
[VM] Adding Plan9 share via HcsModifyComputeSystem: name=d path=D:\
[VM] VM started successfully
The Windows/HCS VM appears to start successfully, but the Linux guest / sdk-daemon never connects back to the host.
Steps to Reproduce
- Use a Windows ARM64 device with Snapdragon X Plus.
- Install Claude Desktop ARM64.
- Open Claude Desktop and go to Claude Cowork.
- Create or open a clean workspace, for example:
C:\Users\<user>\Claude\Projects\TEST COWORK
- Ask Claude Cowork to run exactly one command:
echo hello
- The command does not run. Instead, it returns:
Workspace still starting. The isolated Linux environment is booting in the background (usually 10-30 seconds). Try again shortly.
- Wait several minutes and try again. The same message appears.
- The issue also reproduces after restarting Windows and after resetting the Cowork VM bundle folders.
Claude Model
Sonnet (default)
Is this a regression?
No, this never worked
Last Working Version
_No response_
Claude Code Version
2.1.165 bundled with Claude Desktop/Cowork
Platform
Anthropic API
Operating System
Windows
Terminal/Shell
PowerShell
Additional Information
This is not using a globally installed Claude CLI. The claude command is not available in PATH.
Bundled versions found under Claude Desktop/Cowork data directory:
- Bundled Claude Code: 2.1.165
- Bundled Claude Code VM: 2.1.165
- Claude Desktop package: Claude_1.11187.1.0_arm64__pzs8sxrjxfjjc
Hardware:
- CPU: Snapdragon X Plus (8-core) @ 3.30 GHz
- Manufacturer: Qualcomm Technologies Inc
- CPU architecture: ARM64 / WMI Architecture 12
- OS: Windows 11 Home ARM64, build 26200
I tested a clean workspace on C: and also an existing workspace on D:. Both reproduce the same issue.
I already tried:
- Restarting Claude Desktop
- Restarting Windows
- Enabling HypervisorPlatform, VirtualMachinePlatform, and WSL
- Confirming CoworkVMService, hns, and vmcompute are running
- Confirming the HCS VM is running via hcsdiag list
- Renaming/resetting vm_bundles, claude-code-vm, and local-agent-mode-sessions
- Letting Claude re-download/recreate the VM bundle
The issue still reproduces after all of the above.
Showing cached comments. Read the full discussion on GitHub ↗
11 Comments
Confirming this on my setup — same VM connection timeout, 100% reproducible.
Device: ASUS Zenbook A14 (UX3407QA)
CPU: Snapdragon X – X1-26-100, Qualcomm Oryon CPU @ 2.96 GHz (ARM64)
GPU: Qualcomm Adreno X1-45
RAM: 32 GB
OS: Windows 11 Home, Version 25H2, Build 26200.8655 — System type: ARM-based (64-bit)
Claude app version: 1.13576.0.0
Symptom: Every Cowork session that needs the Linux sandbox fails with "Failed to start Claude's workspace — VM connection timeout after 60 seconds." The Windows side reports the VM as started, but the guest never becomes ready.
Reproduction: 100% — every session, every time.
Things I already ruled out (so this is clearly the ARM/virtualization issue, not config):
Moved my working folder off OneDrive onto a local C: drive → no change.
The folder/sync setup is not the cause; the failure happens before any file work.
File operations themselves work fine — reading/writing files in my workspace succeeds even while the VM times out. Only the Linux sandbox (running code, generating Office/PDF files) is broken.
Impact: Document generation (.docx/.xlsx/.pptx/.pdf) and any code execution are completely unusable on this device. Plain file/note work still functions.
Note: This matches several other reports for Snapdragon X / Windows ARM64 (#46516, #39636, #42784, #40198). Looks like the Linux guest kernel never reaches init under the ARM64 virtualization layer.
I was able to get Claude Desktop working again by fully restarting the background service.
Steps:
Win + R, typeservices.msc, and hit Enter.``
powershell
``Stop-Service CoworkVMService
Start-Sleep -Seconds 5
Start-Service CoworkVMService
``
echo "hello world"run
``<br/>
Credits:
[BUG] Cowork Linux sandbox never becomes ready on Windows 11 Pro ARM64 — VM boots, guest never connects (timeout after 60s)
Environment
Claude_1.18286.0.0_arm64__pzs8sxrjxfjjc6d1538ba6fecc4e5c5583993c4b30bb1875f0f5avmmsservice RunningWhat's wrong
The Cowork Linux sandbox never becomes ready. Every attempt ends with:
All VM startup steps complete successfully, the VM boots, but the Linux guest / sdk-daemon never connects back to the host. Bash tool calls fall back to "Workspace unavailable"; Claude routes commands to Desktop Commander (host PowerShell) instead.
This appears identical to #66535 (Windows ARM64 / Snapdragon X Plus).
Steps already taken (no effect)
Microsoft-Hyper-V-All), verifiedvmmsRunning — confirmed workingCoworkVMServicemanually%LOCALAPPDATA%\Packages\Claude_pzs8sxrjxfjjc\LocalCache\Roaming\Claude\vm_bundles(note: earlier attempts at%APPDATA%\Claude\vm_bundleswere ineffective due to MSIX path virtualization)smol-bin.arm64.vhdxcopied successfully (no more EBUSY) — issue still reproducesLog excerpt — clean run after bundle reset (
cowork_vm_node.log)Earlier runs (before the bundle reset) additionally showed
smol-bin.vhdx locked by running VM (EBUSY), skipping copyon every attempt, including immediately after a full OS restart, and timeouts withlast completed step: load_swift_api.Additional service-side logs available on request:
C:\ProgramData\Claude\Logs\cowork-service.log.Expected behavior
The Linux sandbox should start and the guest should connect back to the host, allowing bash commands to run inside the Cowork workspace.
Notes
CoworkVMServiceships with startup type Manual and cannot be switched to Automatic (access denied even elevated), so the service must be started manually after some reboots.comment_issue_66535.md
Reproduced this exact signature on a non-ARM64 device — Intel Core Ultra 7 165U, Windows 11, MSIX install (
Claude_1.17377.2.0_x64andClaude_1.18286.0.0_x64, both reproduce). Adding for corroboration since this issue is currently filed under Snapdragon X Plus specifically, but the failure doesn't appear to be ARM64-specific.Identical failure point and timeout window:
Same pattern as this issue's log — VM actually succeeds after the timeout is already reported:
So on my hardware, the VM wasn't stuck — it completed roughly 10 minutes after
add_plan9_sharesstarted, well past the ~58-60 secondstartVMtimeout. The app never reconciles UI state once this happens; the user is left looking at a failure dialog for a session that's actually fine.Reproduced twice across two app versions (1.17377.2.0 → auto-updated to 1.18286.0.0), both times hanging at the same step with the same ~60s timeout regardless of eventual boot duration. Both instances also show a brief
NOT_CONNECTED→CONNECTEDnetwork status flip within ~3 seconds ofadd_plan9_sharesstarting, immediately before the hang — possibly worth checking whether the share-mount step is racing the virtual network interface coming up, though I can't confirm that's causal from the client-side logs alone.Given this reproduces on Intel x64 as well as Snapdragon ARM64, seems safe to conclude the root cause is in the shared
add_plan9_sharesimplementation / timeout logic itself, not architecture-specific.Environment:
Claude_pzs8sxrjxfjjc)System info
normally on this machine — base virtualization is not the issue.
Symptom
Same as reported here — every Cowork/workspace launch fails with:
Failed to start Claude's workspace / VM connection timeout after 60 seconds
Happening consistently since at least 2026-06-27, still occurring today (2026-07-04).
I tried the fix suggested in this thread (fully quitting Claude, restarting the
CoworkVMService Windows service via Stop-Service/Start-Service, then relaunching).
It did NOT resolve the issue. Confirmed via logs that the service got a new
ProcessId and the app processes had fresh start times, so the restart genuinely
happened — but the next VM start attempt failed at the exact same step:
create_network completed (1ms)
create_vm_config completed (125ms)
vm_boot completed (384ms)
add_plan9_shares completed (6ms)
Still waiting for guest connection... (times out at 60s)
Connection timeout, last completed step: add_plan9_shares
The VM itself boots and the plan9 shares are set up in single-digit milliseconds,
but the guest agent never phones back to the host. This points to the guest
image / HCS integration not completing correctly on this ARM64 chipset, rather
than a stale service/network state — a full service restart made no difference.
Full logs attached (cowork_vm_node.log, ssh.log).
Also affected — same root cause, different device.
CPU: Snapdragon X Plus (8-core) @ 3.30 GHz, Qualcomm Oryon architecture
RAM: 16 GB
GPU: Qualcomm(R) Adreno(TM) X1-45
OS: Windows 11, 64-bit, ARM-based processor
Claude Desktop: 1.20186.1.0 (arm64, installed via Microsoft Store/MSIX)
Same error every time: "VM connection timeout after 60 seconds"
Troubleshooting already attempted (no change):
This matches the theory above that it's a Cowork VM image / ARM Windows compatibility issue rather than a per-device config problem. Please don't close this as stale — it's still actively affecting ARM64 Snapdragon users.
Same failure here on Snapdragon X / Windows 11 Home ARM64, but after instrumenting it over several weeks I think the "60s timeout" framing is hiding what's actually going on. Three findings that I haven't seen in this thread yet.
1. The guest always connects — just 20 minutes to 2 hours late. Every "success" is an adoption.
The host side never fails:
HcsCreateComputeSystemandHcsStartComputeSystemboth returnhr=0x0, Plan9 shares attach, and the hv-socket listener binds on port 51234. The app then times out at 60s — but the VM is left running, and the guest eventually connects. A later start attempt finds it already up and adopts it, which surfaces as a "clean success".I matched every
sdk-daemon is ready!incowork-service.logto theCreating HCS compute systemthat preceded it:| VM booted | sdk-daemon ready | Guest took |
|---|---|---|
| 27 Apr 16:03 | 27 Apr 17:50 | 1h 47m |
| 05 May 22:57 | 06 May 00:21 | 1h 24m |
| 14 May 22:11 | 15 May 00:07 | 1h 57m |
| 19 May 15:00 | 19 May 15:23 | 22m (fastest ever) |
| 08 Jul 00:01 | 08 Jul 08:39 | 8h 38m |
| 14 Jul 20:37 | 14 Jul 22:42 | 2h 05m |
| 15 Jul 08:02 | 15 Jul 08:41 | 39m |
| 19 Jul 20:22 | 20 Jul 08:10 | 11h 47m |
Not one fresh boot has ever connected within 60 seconds on this machine. The overnight figures overstate it — Modern Standby pauses the VM, so sleep time doesn't count. Awake-time to connect is roughly 20 minutes to 2 hours.
Practical consequence: leaving the machine awake and plugged in, then reopening Cowork an hour later, works reliably. That's a usable workaround, and it also means anyone reporting "it randomly started working" is probably adopting a VM booted much earlier.
2. The guest is spinning at 100% CPU, not hanging or starving — this looks like a virtual timer problem
During the silent phase I sampled the guest's resource use:
vmmemsits at a steady ~100% of one vCPUSo it is executing flat out while touching almost no memory, indefinitely, and then completes correctly. That rules out I/O stalls (would be near-zero CPU) and memory starvation (host wasn't under pressure). It's the signature of a busy-wait: thousands of small kernel delay/calibration loops each taking orders of magnitude longer than intended, which is what you'd expect if the virtualized ARM generic timer is being read or delivered incorrectly under Hyper-V on this SoC.
Corroborating evidence from the guest console log on one occasion where userspace did come up: ordinary operations ran 10–100× slow (a
update-ca-certificates --freshthat normally takes ~3s took 27.7s;mountof a 9p share took 6s; the smol-bin mount once took 9m 35s). The whole guest was living on a slow clock, not just one boot stage.Control experiment on the same machine: WSL2 Ubuntu boots in seconds — same hypervisor, same VirtualMachinePlatform, same hv-socket/9p plumbing, same Windows build. Microsoft's kernel ships Hyper-V clock enlightenments; the Cowork guest kernel presumably isn't getting the same timer path here. That points squarely at the guest image rather than the host, and would explain why this cluster of reports is specific to Snapdragon X machines.
3. Separate bug: coworkd identifies the session disk positionally and can crash-loop forever
Distinct from the slow boot. On 16 Jul the guest booted fine but Linux enumerated the SCSI disks in a different order — the updater found smol-bin at
/dev/sdc1instead of the usual/dev/sdb1. coworkd then treated/dev/sdc(which is the smol-bin disk, attachedReadOnly: trueby the host) as the session disk and tried to format it:coworkd treats that as fatal and restarts — and looped this way for 9+ hours (14:21 to 23:15) until the VM was killed. Unlike the slow boot, this never self-heals, because the enumeration doesn't change within a VM's lifetime. Selecting the session disk by label/UUID/serial rather than by device node would fix it.
Worth noting this log is the most useful diagnostic in the whole stack and I don't think it's widely known:
C:\ProgramData\Claude\Logs\coworkd\user-<SID>.logis the guest's own console output (coworkd writes to/dev/vport0p0, which the host service pipes to that file). If it's silent, the guest hasn't reached userspace yet; if it's looping onRead-only file system, you've hit the bug above.Suggested fixes, in priority order
cowork-svc.exe(initrd=\%s root=/dev/sda1 rootfstype=ext4 rw panic=10) and the image is a signed bundle.6e4ms inapp.asarwith no env or config override. Since the VM keeps booting in the background anyway, an async "workspace still starting, we'll notify you" state — or simply a configurable timeout — would turn this from "completely broken" into "slow but usable" for every affected machine./dev/sdX.Environment
6d1538ba6fecc4e5c5583993c4b30bb1875f0f5a(unchanged across app updates; a fresh bundle re-download on 12 Jul changed nothing)AllowOvercommit: trueThings that are NOT the cause (tested on this machine, so nobody else needs to)
vmmsis absent on Home, but Cowork calls the HCS API directly and never touches it — VM create/start/modify all returnhr=0x0. Don't buy Pro for this.vmwp.exeare excluded, not scanned.Get-HnsNetworkreturns zero networks, but the control channel is an hv-socket, not the NAT network, so that's a red herring for this symptom.Two follow-ups after reading back through this thread.
@CarlKnox's Intel x64 report is the same mechanism. A guest that completed ~10 minutes after
add_plan9_shares, long past the 60s timeout, with the UI never reconciling — that is exactly the late-connection pattern above, independently observed on non-ARM hardware. So the timeout-vs-reality mismatch looks cross-platform, while the magnitude is what's Snapdragon-specific (10 minutes there vs 22 minutes to 2 hours here). That distinction matters for triage: fixing the timeout handling helps everyone, fixing the guest timer behaviour is what makes Snapdragon machines usable.A warning about the
CoworkVMServicerestart workaround in this thread: under the model above it's counterproductive, and I'd suggest people stop recommending it. Stopping the service tears down the compute system, so it kills any VM that was quietly making progress toward connecting — and the suggested ~2 minute wait afterwards is nowhere near long enough for a fresh guest to boot on affected hardware. @ohgodhsiang already reported it made no difference. The opposite approach is what actually works: let the first attempt "fail", leave the VM running, keep the machine awake (Modern Standby pauses the VM, so sleep time doesn't count), and reopen Cowork later — it adopts the now-ready VM instantly.Readiness can be checked without guessing from the UI, which shows the same "still starting" state whether the guest is 30 seconds or 90 minutes away:
A timestamp later than your boot attempt means the guest is up.
Correction to my previous comment, plus a third failure mode I hadn't identified.
I said the
CoworkVMServicerestart workaround should stop being recommended. That was too broad and I was wrong about it. It fixes a real failure — just not the slow-boot one. Both things are true:Mode C: the service idle-stops and the app never recovers.
CoworkVMServiceshuts down when its last client disconnects — the log line is:Quitting or restarting Claude Desktop triggers this. The service exits and tears down any running VM with it (so a VM you were deliberately letting boot in the background dies silently — no
VM stoppedline is written, because the process that would log it is gone).On the next launch, the app tries to reach the service's named pipe and fails, once per second, indefinitely:
It never surfaces this to the user. The UI shows the same "workspace still starting" / timeout messaging as every other failure, so it is indistinguishable from the guest-boot problem — and no amount of waiting or retrying will fix it, because no VM is ever created.
Fix, and it needs no admin rights:
The pipe reappears and the app reconnects within a second or two (
[Server] Event subscriber connected). Then open Cowork to actually boot a VM.Two suggestions:
ENOENTon\\.\pipe\cowork-vm-serviceand either start the service or tell the user to — rather than retrying silently forever behind a generic timeout message. This alone would resolve a chunk of the "nothing works, tried everything" reports in these threads.Diagnosing these separately matters, because the right action is opposite in each case: for Mode C, restart the service; for a slow boot, do not touch it and just wait.
Outcome update, and two findings that change how this should be triaged.
1. A fresh guest boot finally succeeded — and the workspace still did not start.
VM created 15:49:37,
sdk-daemon is ready!at 16:29:49 — 40 minutes, machine kept awake throughout. The guest came up properly: Plan9 share mounted, 85 CA certs installed, API reachability passed,coworkd: connected, waiting for commands. So the boot really is a finite wait, not a hang.But the post-connect SDK install never completes. The app copies a single 259 MB
claudebinary (v2.1.219) host→guest over the 9p mount, with a 30-second budget:That repeated for over an hour. It is a livelock: each timeout restarts the copy, so no attempt can ever finish. The VM boot survives its own timeout only by accident — the app gives up but leaves the VM running, so the guest finishes later and a subsequent attempt adopts it. The SDK install has no such escape hatch.
Measurements during a live attempt (window verified against log timestamps, 17:26:18→17:26:48):
| Metric | Value | Meaning |
|---|---|---|
|
vmmemworking set | flat 19 MB | guest pulls in no data ||
vmmemCPU | ~90–137 % | guest pegs a full vCPU ||
vmwpCPU | 0.0 % | host-side 9p reads never served |The
vmwpreading is the decisive one. If 259 MB were crossing the mount, the VM worker process would be busy serving those reads. At a flat 0 %, no file data moves at all — the guest burns a core somewhere before issuing a single read. This is the same execution-speed problem as the boot phase, one layer up, not a slow file copy.Consequence for triage: raising the 60s VM timeout alone would not fix these machines. They would simply fail 30 seconds later, at a step whose retry discards all progress. Suggestions:
2. The Desktop Cowork tab silently falls back to a remote x86_64 sandbox when the local VM fails — which is almost certainly why some people report Cowork "working" while their VM is plainly broken.
While the local VM above was still failing, the Claude Desktop Cowork tab (not a browser session) ran
echo hellosuccessfully.uname -ain that sandbox returned:x86_64 — on a Snapdragon laptop whose local guest image is
smol-bin.arm64.vhdx. At the same moment (17:26:48 / 17:27:36 / 17:28:55) the local VM was still logging SDK-install timeouts with its guest console silent. The two cannot be the same sandbox. Further probing of the working sandbox:mount | grep -E '9p|virtiofs|plan9'→ no 9p mounts/mnt/contains onlyuser-data; no/mnt/.virtiofs-root/sharednproc= 2, RAM = 8023 MB (the local VM is configured 2 vCPU / 4096 MB)/sys/class/dmi/id/*at allSo it is a remote container-style sandbox with no access to the local filesystem. Two implications worth stating explicitly in this thread:
uname -m— if it saysx86_64on an ARM machine, the local VM is still broken and the fallback served the command. Several "fixed for me" confirmations in these threads may be this./mnt/user-data, and sends the data off-machine — which matters for anyone working with confidential documents, and rules out offline use entirely.