[BUG] Windows: CoworkVMService can never arm its own recovery actions ("Access is denied" at every start) — service death becomes a silent claude.exe hang with no crash dump (root cause of #59794 and #66849, both closed stale)

Status Open
Reported on v2.1.227
Maintainer reply None cached
Activity 8 comments · opened Aug 11, 2026

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?

TL;DR

  • CoworkVMService can never configure its own crash-recovery — every start logs Access is denied (3+ months, no exception).
  • When it dies unexpectedly nothing restarts it: claude.exe blocks on the named pipe and hangs — the "Claude Desktop stops responding / hangs on Windows" symptom.
  • Recurring across 8 app versions since 2026-05 (13 WER reports); updating hasn't fixed it.

This produces WER hangs (1002), not crashes (1000). Zero Crashpad dumps in three months — invisible to crash telemetry, likely why users keep re-filing this while dashboards look clean.

5-second self-check: run sc qfailure CoworkVMService. If the same holds on your build — and the mechanism says it should, since a packaged service can't grant itself SERVICE_CHANGE_CONFIG — you'll get a valid response with no restart/reboot/run-command actions listed. Paste your output below either way.

(Independent corroboration: #66849 ran this same check on v1.11847.5.0 in June 2026 and found the same unarmed state — that report, labeled has-repro, was closed stale without reply; #70537, the same crash, was closed as its duplicate.)

Mechanism:

  1. Service start tries to configure its own recovery, gets Access is denied.
  2. It runs as LocalSystem and is still denied: a packaged (WIN32_PACKAGED_PROCESS) service's token is identity-restricted beneath the account, below SERVICE_CHANGE_CONFIG — no account fixes that.
  3. Recovery stays unarmed (sc qfailure confirms no configured actions).
  4. Service dies unexpectedly (separate cause), nothing restarts it, claude.exe blocks on \\.\pipe\cowork-vm-service and hangs.

Multiple times daily on affected days; dies mid-session, losing in-flight Cowork workspace work.

Not the Home/Hyper-V-unavailable cluster: Cowork initializes and runs fine here; the workspace works, then the service dies later. Post-initialization failure, not a launch failure. (#66849 reproduced it on Windows 11 Pro with the full Hyper-V stack enabled — the defect is independent of edition.)

Separately, the package also recurringly flips to Modified/NeedsRemediation with the setter unidentified — deliberately out of scope here; will file separately if this issue gets traction.

<details>
<summary>Access-denied warning, exact quotes and timestamps</summary>

Logged at every single service start across 3+ months of retained logs, no exception found:

Warning: failed to open service for recovery config: Access is denied.

Sampled: 2026/05/14 21:42:43, 2026/05/18 22:58:52, 2026/08/08 20:27:22, 2026/08/10 20:23:50, 2026/08/10 22:32:23 (30 seconds before the death below).

sc qc CoworkVMService confirms TYPE: 210 WIN32_PACKAGED_PROCESS, SERVICE_START_NAME: LocalSystem, DISPLAY_NAME: Claude (why the service shows up as "Claude," not "CoworkVMService," in every SCM event).

</details>

<details>
<summary>Death timeline — 2026-08-10 22:50:49</summary>

Final 8 lines the service wrote before 17m56s of silence:

2026/08/10 22:32:47.721592 [Server] Client connected
2026/08/10 22:32:48.097205 [Server] Client signature verified: claude.exe (subject: Anthropic, PBC)
2026/08/10 22:32:48.098250 [Server] Client connected: user=<user> exe=claude.exe isDev=false
2026/08/10 22:32:48.098250 [VM] VM owner set: id=cowork-vm-096705da sid=S-1-5-21-<redacted>
2026/08/10 22:32:48.098250 [VM] Event callbacks set
2026/08/10 22:32:48.098250 [Server] Created new VM session for <user>
2026/08/10 22:32:48.098855 [Server] Persistent RPC: entering loop
2026/08/10 22:32:53.801868 [IdleCheck] Session starting idle timer now

Nothing more is written. Then:

  • 22:50:49 — System event 7034: "The Claude service terminated unexpectedly."
  • 22:50:52 (+3s) — claude.exe hang, Application event 1002, fault bucket 2185556362616152072.
  • 23:03:37 — second claude.exe hang, same fault bucket, WER signature efa4cdb5 — also seen 2026-08-09 21:21:43, a day before any repair, so this isn't repair-induced.

Not a designed idle-shutdown: idle-shutdown, observed working correctly elsewhere in the same log, always starts with an explicit disconnect line and finishes a clean stop within seconds. This death has none of that — no disconnect, no stop request, no shutdown sequence.

</details>

What Should Happen?

A service death should be a recoverable blip, not a silent app hang. Concretely, any of:

(a) Arm recovery actions via the deployment path (manifest/installer).
(b) The code currently tries to arm recovery at every start and silently accepts the failure. At minimum, stop silently accepting it — surface it, retry from an elevated/deployment-time context, or explicitly design around recovery not being available this way. Silently accepting a failure that can never succeed is a bug independent of who owns the permission model.
(c) claude.exe bounds the pipe-connect wait with a timeout, and explicitly calls StartService / handles trigger-start before waiting.

(a) or (b) fixes the underlying defect. (c) is the cheap win: arming recovery at install time + bounding the pipe connect with a timeout turns a silent hang into a self-healing blip, without ever solving the package-flag question.

Error Messages/Logs

At every service start (cowork-service.log):
Warning: failed to open service for recovery config: Access is denied.

sc qfailure CoworkVMService:
[SC] QueryServiceConfig2 SUCCESS
SERVICE_NAME: CoworkVMService
        RESET_PERIOD (in seconds)    : 0
        REBOOT_MESSAGE               :
        COMMAND_LINE                 :
(no FAILURE_ACTIONS block — nothing configured to run on failure)

System event log, 2026-08-10 22:50:49, event 7034:
The Claude service terminated unexpectedly. It has done this 1 time(s).

Application event log, 22:50:52 and 23:03:37, event 1002:
The program claude.exe version 1.26832.0.0 stopped interacting with Windows and was closed.
Fault bucket 2185556362616152072 (identical both times; same WER signature also fired 2026-08-09 21:21:43, before any local repair existed).

Steps to Reproduce

The permission defect is checkable in 5 seconds on any machine with the Cowork build:

  1. Run sc qfailure CoworkVMService — observe: valid response, no restart/reboot/run-command actions configured (recovery never armed).
  2. Optionally run sc qc CoworkVMService — observe TYPE: 210 WIN32_PACKAGED_PROCESS, SERVICE_START_NAME: LocalSystem.
  3. Check the service log (C:\ProgramData\Claude\Logs\cowork-service.log) — every start contains Warning: failed to open service for recovery config: Access is denied.

The downstream hang is not on-demand reproducible, but the observation recipe is reliable:

  1. Use a Cowork session on Windows and leave it connected. When CoworkVMService eventually dies unexpectedly (System event 7034 — here it has happened up to several times daily), nothing restarts it.
  2. claude.exe, blocked on \\.\pipe\cowork-vm-service, hangs within seconds (Application event 1002, fault bucket 2185556362616152072 — deterministic across days and occurrences here).

Claude Model

None

Is this a regression?

Yes, this worked in a previous version

Last Working Version

None known — the same WER signature spans 8 app versions since 2026-05-16

Claude Code Version

Claude Desktop 1.26832.0.0 (MSIX / Cowork build) — the defect is in the Desktop app's packaged service. CLI 2.1.227 also present, unaffected.

Platform

Anthropic API

Operating System

Windows

Terminal/Shell

PowerShell

Additional Information

<details>
<summary>Auto-repair cycle by event ID (2026-08-11 08:30, wake-triggered) and matched healthy cycle</summary>

A background watcher (60-second polling) caught a full auto-repair cycle fire at 08:30:12-13, immediately after waking the PC, before any app launch. Overnight idle produced zero events. Microsoft-Windows-AppXDeploymentServer/Operational sequence: RegisterByPackageFullName (603) with RepairAppRegistration + ForceTargetApplicationShutdown → ACL repair (649) → TerminateSingleService against CoworkVMService, twice (9648/9650) → package disabled (10000) → repeated registration step (617) → package re-enabled (10007) → done (400/613). Reported success; package remained Modified, NeedsRemediation immediately after.

Matched healthy cycle at 08:33:51-56: manual Add-AppxPackage -ForceUpdateFromAnyVersion re-stage ran the same sequence and resolved cleanly (package Ok, service running, stable since). Both cycles available on request.

</details>

<details>
<summary>Join keys / prior art</summary>

  • Package: Claude_1.26832.0.0_x64__pzs8sxrjxfjjc
  • WER hang fault bucket: 2185556362616152072
  • Timestamps: 2026-08-09 21:21:43, 2026-08-10 22:50:49, 22:50:52, 23:03:37
  • 13 WER reports since 2026-05-16 across 8 app versions — not new, not version-specific.
  • If this ships through Partner Center telemetry, this bucket should be pullable for fleet-wide hang counts, if applicable.
  • This exact root cause has been filed and closed unanswered twice: #59794 (area:cowork / bug / has-repro — closed stale) and #66849 (area:cowork / area:desktop / platform:windows / has-repro — independently ran sc qfailure, found the same unarmed state, offered further diagnostics, closed stale by the bot). #70537, the same crash, was closed as a duplicate of #66849 — which was then itself closed stale.
  • Other related Cowork/Windows failures repeatedly filed by unrelated users — different proximate causes, most closed stale or invalid without engagement; listed as evidence the dashboards look clean, not as duplicates: #25914, #28231, #39891, #51098, #53247, #61559, #67780.

</details>

Form-field note: this is a Claude Desktop / Cowork (GUI) report; the Terminal/Shell and Platform values were selected only because the form requires them.

I'm not a Windows engineer — I had Claude dig into this on my own machine. Every log line above is machine output, not inference. If this can be labeled area:cowork / platform:windows and pointed at whoever owns it, I'll run any diagnostic they want.

View original on GitHub ↗

4 Comments

DocVoxel · 18 days ago

Independent corroboration, found while diagnosing #86140 (packaged-service activation failure, ERROR_INVALID_PARAMETER/87 — a separate root cause, but the same service).

Confirmed the same mechanism on a separate Windows 11 25H2 machine: CoworkVMService running as LocalSystem still gets Access is denied when it tries to arm its own recovery actions at startup, and sc.exe qfailure CoworkVMService shows no actions configured — consistent with your read that a packaged (WIN32_PACKAGED_PROCESS) service can't grant itself SERVICE_CHANGE_CONFIG regardless of account.

+1 on fix (a)/(b): recovery actions need to be armed at install time from the installer, which isn't subject to the packaged-service config lock. Reference config for whoever picks this up:

sc.exe failure CoworkVMService reset= 86400 actions= restart/5000/restart/10000/restart/30000

jtonylperez · 15 days ago

Independent corroboration on a third machine (Windows 11 Home 10.0.26200, Claude desktop 1.30096.5.0, Cowork build).

Same mechanism confirmed here:

  • sc.exe qc CoworkVMServiceSERVICE_START_NAME: LocalSystem
  • sc.exe sdshow CoworkVMServiceD:(A;;CCLCSWRPWPDTLOCRRC;;;AU)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;S-1-5-80-1949724575-2387902436-65106593-1201171665-3967308604)SERVICE_CHANGE_CONFIG/WRITE_DAC is only granted to the service's own per-service virtual SID, never to SY (LocalSystem). Matches the packaged-service token restriction described above — the running process can't grant itself that right regardless of account.
  • cowork-service.log logs Warning: failed to configure recovery actions (a crashed service will stay down until reboot): open service: Access is denied. on every single start, going back to the earliest log entry on this machine (2026-03-02).
  • System event log: two SCM event 7034 ("terminated unexpectedly") entries today (2026-08-15, 17:01 and 22:28). Both times the service stayed Stopped until manually started — matches the "silent death, no auto-recovery" behavior described here.

+1 on fix (a)/(b) — recovery needs to be armed from the installer, not from the packaged process itself.

For anyone who wants a local workaround in the meantime: since an elevated admin's own token isn't subject to the packaged-service restriction, sc.exe sdset run from an elevated (non-packaged) context can add SY directly to the DACL — confirmed working on this machine:

sc.exe sdset CoworkVMService "D:(A;;CCLCSWRPWPDTLOCRRC;;;AU)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;S-1-5-80-1949724575-2387902436-65106593-1201171665-3967308604)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;SY)"
Restart-Service -Name CoworkVMService

This clears the "Access is denied" warning on the next start (equivalent effect to directly running the sc.exe failure command suggested above). Only caveat: this ACL gets reset on every app update — confirmed via the 7045/7040 install/start-type-change event pairs in the System log going back to 2026-05-16 — so it needs reapplying after each update until this is fixed upstream.

vsdtyf8h22-cmd · 14 days ago

Fourth machine, and one data point that contradicts the suggested workaround — plus a variant of the death where the crash happens during the handshake rather than after a working session.

Environment: Windows 11 x64, Claude Desktop 1.30096.5.0 (MSIX), host stack verified healthy — vmcompute and hns both Running, wsl --status reports Ubuntu / version 2, CoworkVMService is LocalSystem / Auto.

The recovery-config defect reproduces exactly as described

sc.exe qfailure CoworkVMService
SERVICE_NAME: CoworkVMService
        RESET_PERIOD (in Sekunden)   : 0
        REBOOT_MESSAGE               :
        COMMAND_LINE                 :

No FAILURE_ACTIONS block — recovery never armed, same as everyone above. And the warning is in every single start:

Warning: failed to configure recovery actions (a crashed service will stay down until reboot): open service: Access is denied.

The sdset workaround does not work here

@jtonylperez's mitigation fails on this machine, from an elevated PowerShell:

sc.exe sdset CoworkVMService "D:(A;;CCLCSWRPWPDTLOCRRC;;;AU)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;S-1-5-80-1949724575-2387902436-65106593-1201171665-3967308604)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;SY)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)"
[SC] OpenService FAILED 5: Access is denied

sc.exe failure ... fails identically. My descriptor is byte-identical to the one quoted above on the D: part, plus an SACL:

sc.exe sdshow CoworkVMService
D:(A;;CCLCSWRPWPDTLOCRRC;;;AU)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;S-1-5-80-1949724575-2387902436-65106593-1201171665-3967308604)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)

Reading that DACL: AU gets query/start/stop only, and the per-service SID gets the write rights. There is no ACE for Administrators or SY at all, so an elevated admin token holds no WRITE_DAC on this object either — which is consistent with the denial, and suggests the elevated-context escape may not be generally available. Worth flagging so others don't conclude the mitigation is broken on their end.

That makes fix (a) — arming recovery from the installer — the only path that works for users in this state. There is currently no local mitigation at all on this machine.

Variant: the service dies during the handshake, before configure

The reports here describe a service that dies mid-session after Cowork has initialized. Here it never initializes: the service crashes at first contact, so the VM is never created.

Service log, clean start:

21:25:37.250532 Starting CoworkVMService as Windows service
21:25:37.447627 Waiting for configuration from app via 'configure' method...
21:25:37.448155 Warning: failed to configure recovery actions ...: open service: Access is denied.
21:25:37.453869 [HCS] vmcompute.dll loaded successfully
21:25:37.456461 [HCS] Procs initialized, HCS ready
21:25:37.460626 [HCN] EnumerateNetworks result: ["c08cb7b8-9b3c-408e-8e30-5e16a3aeb444"]
21:25:37.524799 [Server] Signature verification initialized
21:25:37.525320 Service ready. Listening on \\.\pipe\cowork-vm-service

Then the client reconnects once per second, 45 times, and the log simply ends — no configure, no Client signature verified, no error:

21:25:57.830603 [Server] Client connected
21:25:58.011712 [Server] Client connected
... one per second ...
21:26:42.158166 [Server] Client connected

System log, same second as the last connection:

Id 7034 | 21:26:42 | The Claude service terminated unexpectedly.

Application log, two seconds later:

Id 1002 | 21:26:44 | claude.exe 1.30096.5.0 stopped interacting with Windows and was closed.
Id 1001 | 21:26:44 | MoAppHang, P1: Claude_1.30096.5.0_x64__pzs8sxrjxfjjc

Reproducible on demand: Start-Service CoworkVMService succeeds and logs a clean start every time; triggering the sandbox kills it again. Three 7034s in one session (21:12:43, 21:26:42, 21:41:15).

This is the same silent-death-plus-hang signature described in this issue, but it means the failure isn't only a mid-session stability problem — for users in this state Cowork never starts at all, and the missing recovery actions turn every single attempt into the "restart your computer" dead end.

Ruled out here

Reboots (4+), full app restart including tray exit, app Repair, app Reset, manual Start-Service, and — tested specifically — Avira real-time protection disabled and NordVPN quit with its services force-stopped: the crash reproduces identically, so security software is not involved. Full uninstall/reinstall deliberately not attempted given #78873, where uninstall fails with 0x80073D28 on exactly this DACL-locked service.

Happy to run any diagnostic that would help, including anything that could produce a dump of the service process at the moment it dies — as noted in this thread, it leaves none.

jtonylperez · 14 days ago

Correction to my comment above: I described the sdset workaround as "confirmed working on this machine" — that was inaccurate. It was prepared as a script but never actually executed/verified on this machine. Apologies for the overstatement.

@vsdtyf8h22-cmd's finding is important: OpenService FAILED 5 from an elevated PowerShell, with no ACE for SY/Administrators on their DACL either, means the "elevated admin token bypasses the packaged-service restriction" explanation I gave doesn't hold in general. Retracting that claim — the local sdset/sc failure mitigation is not reliable, and fix (a) (arming recovery from the installer) looks like the only path that's guaranteed to work.

Showing cached comments. Read the full discussion on GitHub ↗