Cowork VM fails to start: signature verification rejects valid multi-volume AppX package copy

Status Closed — duplicate
Maintainer reply None cached
Activity 4 comments · opened Aug 16, 2026 · closed Aug 25, 2026

Summary

Cowork's isolated Linux VM fails to start with "Workspace unavailable. The isolated Linux environment failed to start" on every attempt, specifically for locally-scheduled Cowork sessions. Root cause traced to cowork-svc.exe's own internal signature verification rejecting a valid, currently-installed copy of itself on a machine with two registered AppX package volumes (C: and D:).

Environment

  • Windows 11, Claude Desktop 1.30096.5.0 (package: Claude_1.30096.5.0_x64__pzs8sxrjxfjjc)
  • Machine has two registered AppX package volumes:
  • C:\Program Files\WindowsApps (default)
  • D:\WindowsApps (registered as HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Appx\PackageVolumes\2, SisPath = D:\WindowsApps)
  • This is a pre-existing, legitimate machine configuration — other Store apps are also deployed under D:\WindowsApps on this machine.

Symptom

  • Cowork UI shows: Workspace unavailable. The isolated Linux environment failed to start.
  • Fails specifically for locally-scheduled Cowork sessions (Cowork's own internal scheduler — confirmed via schtasks /query returning zero matches for any Claude/Cowork-related Windows Scheduled Task, so this is not OS Task Scheduler).
  • CoworkVMService (Windows service, runs as LocalSystem) is Running throughout.

Diagnostic trail

  1. cowork-service.log (host side): repeated Client connected entries, zero VM started successfully entries — the client connects and is rejected before VM creation.
  2. cowork_vm_node.log: flooded with, once per second:

``
[warn] [vm-client] Event resubscribe failed: Error: signature verification failed: client D:\WindowsApps\Claude_1.30096.5.0_x64__pzs8sxrjxfjjc\app\claude.exe was not started from the package directory C:\Program Files\WindowsApps\Claude_1.30096.5.0_x64__pzs8sxrjxfjjc
``

  1. coworkd-user.log (guest/VM side): last entry from a genuinely successful prior session (mounts, process spawn, clean exit) — stale since before the failures began, consistent with the VM never being reached at all during the failure window.
  2. Ruled out (with evidence, not assumption):
  • Service not running → Get-Service CoworkVMService = Running.
  • Wrong/stale Windows Scheduled Task → none exists (schtasks /query clean, even from an elevated prompt).
  • Wrong user/account context → Get-Process -IncludeUserName -Name claude shows every running instance owned by the interactive user, none by any other local account.
  • Stale cached VM/session state file → recursive filename and content search (Select-String) of %APPDATA%\Claude and %LOCALAPPDATA%\Claude for cowork|vm|session / D:\WindowsApps found nothing.
  1. Confirmed root cause via registry + filesystem:

``
reg query HKLM /f "D:\WindowsApps" /s /d
`
returned a live Windows Firewall rule for
D:\WindowsApps\Claude_1.30096.5.0_x64__pzs8sxrjxfjjc\app\resources\cowork-svc.exe — the exact current version, exact Cowork helper binary.
`
Test-Path "D:\WindowsApps\Claude_1.30096.5.0_x64__pzs8sxrjxfjjc\app\resources\cowork-svc.exe" # True
Test-Path "C:\Program Files\WindowsApps\Claude_1.30096.5.0_x64__pzs8sxrjxfjjc\app\resources\cowork-svc.exe" # True
`
Both are real files.
cowork-svc.exe` is genuinely, identically deployed to both volumes for the same package version.

Root cause

(Get-Item ...cowork-svc.exe).LastWriteTime is identical to the second on both volumes (2026-08-15 07:44:26 AM) — these are not a stale leftover vs. a fresh update, they are twin copies from a single deployment/replication operation.

This machine has two local Windows accounts (USER, interactive daily user; ADM, local admin). Get-AppxPackage -AllUsers shows Claude registered for both: Installed for USER, Staged for ADM. The working theory is that Windows' AppX deployment service replicates a package across every registered volume (C: and D: here) specifically to guarantee availability regardless of which account/session activates it — a legitimate, by-design behavior on multi-account machines with divergent default install volumes, not corruption or an abandoned install.

Given that, both copies are equally valid, correctly signed, byte-identical files. The actual defect is that Cowork's client verification does a plain path-string comparison against one hardcoded/cached "expected" directory (apparently derived from Get-AppxPackage's single reported InstallLocation), rather than validating the calling process's package identity/signature via the proper AppX APIs (which are volume-agnostic). The moment any activation path — here, Cowork's local-schedule trigger — gets legitimately served from the non-primary volume, the check fails permanently, with no retry/recovery logic: every reconnect attempt repeats the identical failure indefinitely (observed once per second in the logs).

Suggested fix

  • Cowork's client authentication should validate the calling process via package identity/signature (e.g. GetPackageInfo/Appx APIs), not a hardcoded/cached directory path string — so any legitimately-deployed copy of the package, on any registered volume, passes.
  • Given this stems from routine multi-volume package replication (a normal Windows behavior on multi-account machines), this is likely to affect any user with more than one local account and more than one registered AppX volume — not an edge case specific to this machine.

Note

A related in-app feedback report may have been filed via Claude Desktop's feedback flow on 2026-08-15 for the same issue; I don't have a retrievable ticket ID for it, flagging in case it helps correlate on Anthropic's end.

View original on GitHub ↗

3 Comments

EfriNS · 14 days ago

Update: root cause was more specific than originally reported, and one part of the original theory was wrong

Further investigation (with VM debug logging enabled, plus the service's own historical log under C:\ProgramData\Claude\Logs\cowork-service.log) refines — and partly corrects — the original report.

Correction: this is not "two equally-legitimate replicated copies"

The original report treated the C: and D: copies as two valid, in-sync replicas produced by routine multi-volume package replication. That's wrong. C:\ProgramData\Claude\Logs\cowork-service.log retains service-side history going back to 2026-05-21. Across that entire history — roughly 3 months, ~24 distinct app versions — every single successful Client signature verified entry was for a D:\WindowsApps\... client path. Zero exceptions. Zero rejections of any kind are logged before 2026-08-13 03:22:26 (the last successful D: verification). D: has been the sole, long-standing, properly-authorized install location on this machine the whole time — not a passive duplicate.

The C:\Program Files\WindowsApps\... copy only exists as of the current app version. It has never once been successfully verified.

The actual user-facing symptom

Before VM debug logging was enabled, the error visible to the user was simply "Workspace unavailable. The isolated Linux environment failed to start." With debug logging on, the underlying error is:

[error] [VM:start] Startup failed: Error: RPC pipe closed
...
  code: 'ERR_VM_PIPE_CLOSED'

occurring specifically inside [ScheduledTasks] startVM / [HostLoop], at the "Configuring Windows VM service..." step. This has been failing on a steady ~5 minute cadence since at least 2026-08-14 (confirmed in main.log, using the app's normal non-debug logging — this is not new or intermittent). The repeating [vm-client] Event resubscribe failed: signature verification failed warning (the focus of the original report) is a secondary symptom of the same root cause, not a separate issue.

Scope: only the scheduled/background VM-start path is affected

Every foreground/interactive launch of claude.exe, checked repeatedly via Get-Process -IncludeUserName, resolves correctly to C:\Program Files\WindowsApps\... (matching the current, though newly-established, InstallLocation) and is unaffected. Only the scheduled/background VM-start code path resolves execution from the D: copy (confirmed via a stack trace in the VM debug log showing the failing code executing from D:\WindowsApps\...\app.asar\...) and then gets rejected by a signature check that apparently assumes the client must match the single current InstallLocation (C:), rather than tolerating the package's actual, historically-authorized location.

New evidence: C: itself appears to lack proper capability authorization

Attempting Move-AppxPackage -Package Claude_<version>_x64__pzs8sxrjxfjjc -Volume <C: volume> fails with:

Deployment failed with HRESULT: 0x80073CF6, Package could not be registered.
Authorization of capabilities for Claude_<version>_x64__pzs8sxrjxfjjc failed with error code 0x800701C5.

This app declares restricted capabilities (e.g. the computerUse/automation-related features visible in its own desktop-features flag dump). Restricted capabilities normally require proper Store-mediated authorization. This failure suggests the C: deployment never received that authorization, while D: has three months of proven, successful authorization behind it — consistent with C: being the newly (and incompletely) provisioned side of this split, not D:.

Remediation attempts that did NOT resolve it

For anyone else hitting this, or for triage — none of the following fixed it:

  • Remove-AppxPackage -Package <id> -User <secondary-local-account-SID> (un-registering the package for a second local account that had it Staged but never launched) — no effect.
  • Move-AppxPackage -Volume <C:> — fails with the capability-authorization error above.
  • Move-AppxPackage -Volume <D:> — succeeds (no error) but is a silent no-op: InstallLocation remains C: afterward, D:'s files were already present so nothing was actually migrated.
  • Full package Repair via Settings → Apps → Advanced options — completes successfully, rebuilds the C: copy, but does not touch or remove the D: copy, and the scheduled VM-start failure is unchanged afterward.
  • Direct filesystem removal of the C: copy (takeown /r, icacls /grant Administrators:F /t, then Rename-Item) — ownership and permissions succeed cleanly (confirmed via icacls; Administrators ends up with effective Full Control), Controlled Folder Access is confirmed disabled, and Resource Monitor's handle search confirms no process has any file in that folder open — yet Rename-Item still fails with Access to the path is denied. This points to Windows enforcing package integrity on an actively-registered AppX folder at a level below ACLs/open-handle checks, not a permissions problem — direct filesystem tampering on a live-registered package folder appears to be structurally blocked outside the AppX servicing APIs.

Currently proceeding to a full uninstall (via Settings, confirming both the C: and D: copies are actually gone from disk afterward) + reinstall, since every lighter-weight remediation has been exhausted.

Suggested fix (revised)

The scheduled/background VM-start path's signature check should validate the calling process's package identity via the proper AppX APIs (as originally suggested), tolerant of the package's actual authorized location — not assume the single most-recently-registered InstallLocation is automatically correct. On this machine, the most-recently-registered location (C:) is in fact the less-trustworthy one: it has never passed capability authorization, while the location it's rejecting (D:) has three months of proven, successful use.

EfriNS · 14 days ago

Update 2: confirmed regression, no viable local fix exists

A full uninstall + fresh reinstall does not resolve this

After exhausting the lighter-weight remediation attempts listed in the previous update, I did a full uninstall via Settings (confirmed via Get-AppxPackage -AllUsers returning completely empty, and Test-Path confirming neither the C: nor D: package folders existed anymore) followed by a fresh install of the current version, from the same source originally used (direct download from claude.ai, not the Microsoft Store).

The fresh install recreated the exact same C:/D: split automatically. dir D:\WindowsApps\Claude_<version>_x64__pzs8sxrjxfjjc immediately after the fresh install shows the package folder with timestamps matching the install itself (same day, minutes after Get-AppxPackage's C: InstallLocation was confirmed). This was not a leftover, not a stale cache, not anything carried over from the old install — it was written fresh, by the current installer, on a machine that had zero prior Claude package registration.

The signature-check failure resumed immediately afterward, citing the identical D: client path as before.

This means the root cause is structural, not incidental

This machine has a second AppX package volume registered (D:\WindowsApps, PackageVolumes\2 in the registry) — likely from a past "install new apps to D:" configuration, and shared with several other unrelated Store apps. As long as that second volume stays registered, Windows' own deployment stack writes every install/update/repair of this package to both volumes simultaneously. That's not unique to this app or something a user did wrong — it's ordinary AppX behavior on any machine with more than one registered package volume. It's very likely reproducible on any machine in the same configuration, not specific to this machine's history.

Confirmed regression

Per the previous update, the service's own historical log shows this exact machine — in this exact dual-volume configuration — worked correctly for three months across roughly two dozen prior app versions, always being served from (and always successfully verified from) the D: copy. The signature-verification logic that now rejects that same D: copy is new in the current version. The dual-volume deployment itself did not change; the app's tolerance for it did.

No reasonable local remediation exists

The only action that reliably stops Windows from re-splitting the deployment is Remove-AppxVolume on the D: volume — but that volume is also currently used by other, unrelated installed apps on this machine (confirmed via matching Windows Firewall rules for those apps' own D:-based binaries). Removing it to work around this bug would mean accepting unknown impact on completely unrelated software, which isn't a reasonable ask of anyone hitting this. Given that, and that a full uninstall/reinstall (the most disruptive option available to an end user) doesn't help either, there does not appear to be any viable client-side workaround — this needs a fix in Cowork's client verification logic itself: it must tolerate the package being validly deployed to more than one registered AppX volume, rather than hard-rejecting any client not served from the single most-recently-registered InstallLocation.

EfriNS · 11 days ago

Note: This seems to be the same as "Claude Desktop for Windows: Cowork RPC pipe closed Workaround" (https://github.com/anthropics/claude-code/issues/85199), and the workaround that is suggested there is working for me (obviously this still needs a fix, running the service myself every time is not an acceptable solution).

Showing cached comments. Read the full discussion on GitHub ↗