[BUG] Cowork: VM runtime download leaves .partial and never completes — 'SDK version not verified', survives clean reinstall (Windows, MSIX)
Summary
On some managed Windows PCs the Cowork VM runtime download never completes. A .partial file is left behind, .verified is never created, and the app reuses the incomplete download on every subsequent attempt — so the failure repeats forever. A full uninstall/reinstall does not help, because the broken download lives in the user profile and survives reinstall.
Environment
- Claude Desktop, MSIX build, enterprise deployment (bootstrap policy via registry, self-hosted gateway, Amazon Bedrock backend)
- Windows 11 Pro, managed corporate PC
- VM runtime version:
2.1.260
Symptoms (in the order they appeared)
1) RPC error -1: failed to mount .../local-agent-mode-sessions/<id>/outputs
source path ... is under Plan9 share "c" which is not mounted
create: RPC error -1: ensure user: <name> already exists unexpectedly: uid=1018 gid=1018
2) RPC error -1: SDK version 2.1.260 not verified at
/mnt/.virtiofs-root/shared/c/Users/<user>/AppData/Local/<app-data>/claude-code-vm/2.1.260/.verified
The UI shows "failed to start workspace" and offers "reinstall workspace", which does not fix it.
Root cause we identified
We reproduced the same state on a second machine and inspected the runtime folder.
Failed runtime (2.1.260)
download.<hash>.zst.partial 75,589,735 bytes
claude.decompress.tmp 121,634,816 bytes
(no .verified)
Working runtime (same version, after a successful retry)
claude 214,687,216 bytes
.verified 64 bytes (sha256 of the payload)
.payload 103 bytes {"sha256":"...","size":214687216}
So the download stops partway (75 MB of ~215 MB). The app then keeps the partial file and retries decompression against it instead of restarting the download, which can never succeed.
On our reproduction machine a later retry did complete the download and the app started working. On the affected machine every retry fails at the same stage.
What we tried (none resolved it permanently)
- Restart app, restart PC
- Delete
local-agent-mode-sessionsandclaude-code-sessions - "Reinstall workspace" from the error dialog
- Full clean uninstall + reinstall: app package, user data folders, policy registry keys
- Copy a byte-identical, hash-verified
2.1.260runtime from a working machine - Confirmed
VirtualMachinePlatformandHypervisorPlatformare enabled - Confirmed services running:
CoworkVMService,vmcompute,HvHost
Other users in the same environment (same OS image, same security software, same network) are unaffected — they downloaded the runtime earlier. Only machines that need a fresh download fail, which points at the download path rather than the local VM stack.
Impact
Cowork is unusable on the affected machine. File upload is also affected, since reading uploaded files happens inside the same VM — so there is no workaround within the app.
Requests
- Do not reuse
.partialfiles. Restart or resume an interrupted download instead of retrying decompression against an incomplete archive. - Surface download progress and failure reason in the UI. Today the only signal is a verification error that looks unrelated to a network problem.
- Provide a supported offline install path for the VM runtime, for managed environments where large downloads are unreliable.
- Consider validating
.partialsize against.payload.sizebefore attempting decompression.
Showing cached comments. Read the full discussion on GitHub ↗
7 Comments
Additional data point that narrows this down:
On the affected machine, Claude Code (CLI / VS Code extension) works fine.
Both products share the same VM stack and the same runtime directory (
claude-code-vm), and Claude Code successfully starts its VM and mounts host folders on that machine. Only Claude Desktop fails.That rules out the whole local virtualization layer as the cause:
VirtualMachinePlatform/HypervisorPlatformare effective, not just flagged as enabledSo the failure appears specific to how Claude Desktop fetches and validates its runtime version, not to the machine's ability to run the VM. On this machine Desktop needs
2.1.260and cannot complete that download, while an older verified runtime for Claude Code sits in the same directory and works.Update: the
.partialtheory in my original report is not the whole storySame enterprise environment, two more affected machines today (2026-09-10). One of them I debugged for several hours over a remote session. What I found contradicts the original title, so I want to correct the record.
The runtime file is present, complete, and hash-verified — the guest still rejects it
Yet every start fails within 1–2 seconds:
There is no download attempt in the log at all. No
.partial, no network error. The host has the file; the guest says it is not verified.Everything before
sdk_installsucceedsadd_plan9_sharesreports success on the host side, but that only means the share was registered — it does not prove the guest mounted it.A second machine shows what looks like the same root cause from the other side
Different user, same environment, never touched by any of my scripts:
A third machine reported
uid=1005. So on some machines the guest cannot mount the hostcshare at all, and on others it mounts but cannot read a specific file under it. My working assumption is now that both symptoms are the guest failing to access the host share, not a download problem.What did not fix it
local-agent-mode-sessions/claude-code-sessionsvm_bundles\claudevm.bundledown to only the.zstcaches and their.originmarkersclaude-code-vmentirely and letting the app re-fetch (it did, correctly — same failure)Remove-AppxPackage, delete the wholeClaude-3puser folder (~9 GB), reinstall, sign in fresh. The app downloaded the runtime itself and wrote its own.verified. Still fails identically.The clean reinstall is the important one: at that point nothing on the machine came from me, the app produced every file itself, and it still could not read its own output from inside the VM.
Three secondary findings that may be worth fixing regardless
1. Auto-reinstall only ever runs once, permanently
A zero-byte
.auto_reinstall_attemptedmarker invm_bundles\claudevm.bundlemakes the app give up self-healing forever. Deleting it makes the app retry properly. As shipped, a user who hits one transient failure loses automatic recovery for good.2. That one auto-reinstall attempt is incomplete because of a file lock
The kernel and initrd are removed while the 8 GB
rootfs.vhdxsurvives, leaving a mismatched set. The marker from finding 1 is written anyway, so this half-cleaned state becomes permanent. Suggestion: stop the VM before deleting, and do not write the marker when the cleanup was partial.3.
Installing SDKgives no diagnostic on failureThe message is identical whether the file is missing, unreadable, or fails a checksum. On a machine where the file demonstrably exists with the right hash, there is no way to tell which of those happened. Logging the guest-side stat/read result would have saved most of a day here.
Environment
1.49585.0.0, MSIX, enterprise deployment (registry bootstrap, self-hosted gateway, Amazon Bedrock backend)2.1.260VirtualMachinePlatformandHypervisorPlatformenabled;CoworkVMService,vmcompute,HvHostall runningMachines in the same environment that had already fetched the runtime before that reboot are unaffected. Claude Code on the very same machine works normally, which rules out virtualization, antivirus and network as general causes — those would break Code too. The failure is specific to the Cowork workspace path.
Happy to collect any additional guest-side logs if you can tell me where they land.
Root cause located: the guest rejects the Plan9 mount with
EINVALFollowing up on my earlier comment. I found the guest-side log and it pins the failure to a single call. Every symptom in this thread —
SDK version not verified,Plan9 share "c" which is not mounted,ensure user: already exists unexpectedly— is downstream of this one line.Guest log (
C:\ProgramData\Claude\Logs\coworkd\user-<SID>.log):mounted 0/1. The session disk (/dev/sdc) mounts fine — only the 9p share fails, and it fails withEINVALrather than a connection error.The host side is fully healthy
Service log (
C:\ProgramData\Claude\Logs\cowork-service.log), same session:So: the share is registered successfully, host↔guest RPC works, the host writes 46 CA certs into the guest, and the guest reaches our gateway over HTTPS. Only
mountfails.This distinguishes it from #72685 and friends, where
HcsModifyComputeSystemitself failed withHRESULT 0x8007273f. Here the host call succeeds and the guest kernel refuses the mount.Why
not verifiedis a red herring.verifiedlives on the host underclaude-code-vm/<version>/. The guest reads it through/mnt/.virtiofs-root/shared/c/..., which never gets mounted — so the check fails for a file that is present and correct.I verified the file is not the problem:
The value matches what the app itself ships. Editing
.verified(I tried the payload hash) only makes it worse.What we ruled out — ~7 hours, one machine, full remote session
Host-side, all ineffective:
local-agent-mode-sessions/claude-code-sessionsvm_bundles\claudevm.bundleto only the.zstcaches; deleteclaude-code-vmentirely and let the app re-fetch.auto_reinstall_attemptedto restore self-healing (repeatedly — it comes back)Remove-AppxPackage, delete the entire 11 GB user data folder, reinstall, sign in fresh, let the app download everything itself. Same failure.CLAUDE_CODE_LOCAL_BINARYto forcegetRequiredVersion()to"local"— MSIX isolation drops the variable;[CCD] LOCAL OVERRIDEnever logsnetsh winsock reset+wsl --update+ reboot (the workaround from #72685)SecurityServicesRunning{2} → {0}) + rebootEnvironment is otherwise clean:
Also worth noting: Claude Code on the same machine works normally. Same VM stack, same box. That rules out virtualization, AV and network as general causes.
Requests
invalid argumentwith no detail is what made this take a full day. The msize / version / trans / aname values would likely identify it immediately.mounted 0/1 Plan9 sharesas a fatal, surfaced error. Right now the guest continues, and the user sees a misleadingSDK version not verifiedseveral steps later pointing at a file that is perfectly fine.2a762adfhere, which is the same bundle fingered in #87601.Happy to pull any further guest-side logs, or run a build with verbose mount logging.
Environment: Claude Desktop
1.49585.0.0(MSIX, enterprise deployment with registry bootstrap, self-hosted gateway, Amazon Bedrock backend) · Windows 11 Pro build 26200 · VM runtime2.1.260· guest bundle2a762adf.We have the same issue - just found it with this error 'SDK version not verified'
We have around 1200 clients but only 1 client has the issue.
Tried the same
Maybe Windows Update related
https://github.com/anthropics/claude-code/issues/92984
I'm also affected. I couldn't find any issue related to this SDK issue before, but now it looks like it's not just me affected :)
Here's my log https://gist.github.com/pkozuchowski/30d53b24603e65ecc42b69c93b0d56af
Resolved on our side — root cause is KB5124008, and it matches #92984 exactly
Closing the loop on my two earlier comments. My
.partialtheory and my guest-mount findings were both symptoms of the same thing, and @StephanGa's pointer to #92984 was correct.Removing KB5124008 and rebooting restored Cowork immediately. App version held constant at
1.49585.0.0throughout.One note for anyone following:
wusa /uninstall /kb:5124008returns ExitCode 87 on current Windows — cumulative updates can't be removed that way. This worked:Then reboot. Takes 3–10 minutes plus a longer-than-usual boot.
The concrete defect, for whoever escalates this
The update ships a mismatched pair of Plan9 components:
Every report in #92984 that lists file versions shows this same split. That is almost certainly why the guest's 9p mount is rejected with
EINVALwhile the host-sideHcsModifyComputeSystemstill returnshr=0x0— the host thinks it succeeded, the transport behaves differently than the guest expects.Request: please escalate to Microsoft
The evidence is already at the level Microsoft would ask for:
A vendor-side report from Anthropic carries weight that individual enterprise tickets do not, and you can quantify the affected install base. From our side this currently has no durable fix — the update is delivered by Windows Update, so any machine we repair gets it back on the next cycle.
If it helps, I'm happy to supply the host service log and guest
coworkdlog from a failing boot and a working boot on the same machine.Two things that would reduce the damage regardless of Microsoft's timeline:
mounted 0/N Plan9 sharesas a fatal error. Today the guest continues and the user eventually seesSDK version not verified, which points at a file that is present and hash-correct. That misdirection cost us most of a day before we found the guest log.invalid argumentwith no detail gives nothing to work with; the msize/version/trans/aname values would likely have identified the mismatch immediately.Thanks to everyone in #92984 — that thread is what closed this out.