[BUG] Windows MSIX: clicking an external link in the chat transcript crashes the app (GPU exit 0x060C201E) and forces an MSIX repair cycle - expected: open in default browser
Preflight Checklist
- [x] I have searched existing issues — the underlying GPU/MSIX crash mechanism is tracked in #81341 / #81398 / #84992, but this specific trigger (clicking an ordinary external link in the chat transcript) is not reported anywhere
- [x] This is a single bug report
- [x] I am using the latest version of Claude Code
What's Wrong?
Summary
On Claude Desktop for Windows (MSIX install), clicking an ordinary external https link in the chat transcript hard-crashes the entire app, and Windows then runs an MSIX app repair cycle before the app can relaunch. Expected behavior: the link opens in the default browser.
Hit twice, roughly a week apart, both times clicking ietf.org links that the assistant had produced in a chat response:
https://mailman3.ietf.org/mailman3/lists/...https://mailarchive.ietf.org/arch/browse/web-bot-auth/
Because each occurrence costs a multi-minute forced repair/re-download cycle, I have stopped clicking links in the transcript entirely rather than experimenting with which links trigger it.
Why this appears to be a new trigger for a known crash
The crash signature is identical to the Browser-pane/preview GPU crash cluster:
- #81341 — CIG (MicrosoftSignedOnly) kills the GPU process loading
vk_swiftshader.dll, exit0x060C201E - #81398 — in-app Browser pane crashes GPU process, exit
101457950(=0x060C201E), reinstall loop - #84992 — GPU crash →
CoworkVMServiceholds package → auto-repair fails0x80073D02→Modified/NeedsRemediation
New information in this report: the trigger was not a deliberate Browser-pane or preview task — it was a plain link click in the chat transcript, which should go to shell.openExternal / the default browser. The app log shows a preview context being created seconds before the GPU death, which suggests transcript link clicks are being routed into the in-app preview/browser machinery (where the known GPU crash then fires) instead of being handed to the OS:
2026-08-10 07:16:58 [info] [Preview] Created session preview context {
previewId: 'preview-local_1732d13b-...',
totalContexts: 1
}
...
2026-08-10 07:17:05 [info] GPU process gone: {
type: 'GPU',
reason: 'crashed',
exitCode: 101457950, // 0x060C201E
serviceName: 'GPU'
}
2026-08-10 07:17:05 [warn] [Preview] capturePreviewScreenshotIfChanged failed: {
error: [Error: UnknownVizError] ...
}
If link clicks were dispatched straight to the default browser, this machinery would never be engaged and the known GPU crash could not take the app down from a link click.
Incident 2 — 2026-08-10 ~07:17 local (fully evidenced)
App: MSIX Claude_1.26832.0.0_x64__pzs8sxrjxfjjc, bundled Claude Code CLI 2.1.222.
Sequence from main.log + Event Viewer AppXDeploymentServer/Operational:
07:16:58— link clicked;[Preview] Created session preview context(see above)07:17:05—GPU process gone: { reason: 'crashed', exitCode: 101457950 }(×2); app dies07:17:21— Windows startsRegisterByPackageFullNamewithForceTargetApplicationShutdownOption,RepairAppRegistrationOption; logsTrying to repair ACLs for \\?\C:\Program Files\WindowsApps\Claude_1.26832.0.0_...→ "ACLs repaired successfully ... Register next time should succeed"07:17:38— fullRepairPackageOperation: re-downloads the MSIX fromhttps://downloads.claude.ai/releases/win32/x64/1.26832.0/Claude-056ee2be....msixand re-registers07:18:03and07:20:18— two repair attempts fail with0x80073D02("Unable to install because the following apps need to be closed Claude_...") —Packages were not updated because affected apps are still running. Running apps: {Claude_pzs8sxrjxfjjc!Claude}— exactly theCoworkVMService/running-process interference described in #84992. Also logged:Failed to set the Trust Label ... Error: 0x80070057andIllegal non-AppStore or non-AppInstaller package integrity validation attempted~07:20— a repair attempt finally succeeds;CoworkVMServicerestarts (Application log: service stopped07:17:22, started07:18:02, started again07:20:13); app is usable again
No WER report and no Application-log crash entry is written for the app process itself (silent death — matches #81398), and %APPDATA%\Claude\Crashpad contains no dump (settings.dat only).
Incident 1 — night of 2026-08-04 (partial evidence)
At the time the running package was Claude_1.24012.9.0 with an update to 1.25927.0.0 pending in deferred registration (downloaded 2026-08-04 12:10, "Marking package for deferred registration because {Claude_1.24012.9.0...} is still running"). The app log for that night shows:
2026-08-05 00:26:29 [info] Main webview render process gone: { reason: 'crashed', exitCode: -2147483645 } // 0x80000003 STATUS_BREAKPOINT
2026-08-05 00:26:29 [error] Sentry caught: {
eventId: 'e643c8d304a84728a56a15e9d1d3b3df',
type: 'Unknown',
value: 'Main webview render process gone',
...
}
That Sentry event ID should let you pull the server-side report. The pending deferred registration then applying on next launch is presumably the "repair/install" screen observed after this crash. (Timestamp is from the log; the user-observed click was that same night.)
What Should Happen?
- Clicking an external
httpslink in the chat transcript opens the link in the OS default browser (shell.openExternal), never engaging the in-app preview/browser or GPU-process machinery. - Even when the GPU process dies, Chromium should fall back / relaunch it without taking down the whole app (as tracked in the linked issues).
- A crash should not put the MSIX package into a state requiring a repair/re-download cycle before relaunch.
Steps to Reproduce
- Windows 11 Home 10.0.26200, Claude Desktop installed as MSIX (
Claude_1.26832.0.0_x64__pzs8sxrjxfjjc). - In a Claude Code Desktop chat, have the assistant output an external link (observed with
https://mailman3.ietf.org/...andhttps://mailarchive.ietf.org/arch/browse/web-bot-auth/; unknown whether it is all external links or specific to these — not re-tested deliberately because each occurrence forces a repair cycle). - Click the link in the transcript.
- App hard-crashes (GPU process exit
0x060C201E); Windows runs an MSIX repair (which initially fails0x80073D02whileCoworkVMService/zombie processes hold the package) before the app can relaunch.
2 out of 2 link clicks on ietf.org URLs crashed the app (2026-08-04 and 2026-08-10). Not deliberately re-reproduced since — happy to run a controlled repro with diagnostics attached if that would help, and can provide full main.log and Event Viewer exports on request.
Environment
- Claude Desktop MSIX
1.26832.0.0(incident 2) /1.24012.9.0with1.25927.0.0deferred (incident 1); bundled Claude Code CLI 2.1.222 (2.1.219 at incident 1) - Windows 11 Home 10.0.26200
- GPUs: Intel Iris Xe (31.0.101.4032) + NVIDIA GeForce RTX 4070 Laptop (31.0.15.5195)
- Environmental context, likely unrelated but noted for completeness: user-level Claude data directories were migrated to another drive with NTFS junctions left at the original
%USERPROFILE%\.claudepaths (the MSIX package itself is untouched onC:); a separate known issue with a pdf-viewer MCP plugin leaking node child processes exists on this machine.
Claude Code Version
Desktop MSIX 1.26832.0.0 / bundled CLI 2.1.222
Operating System
Windows
Additional Information
Related issues (same underlying GPU/MSIX failure, different triggers): #81341, #81398, #84992, #80978, #81947.
Showing cached comments. Read the full discussion on GitHub ↗
5 Comments
Clarification from further use on the affected machine: other external links in the chat transcript have always opened normally in the default browser — only ietf.org links have ever triggered this crash (both incidents, the two URL patterns in the report:
mailman3.ietf.org/mailman3/lists/...andmailarchive.ietf.org/arch/browse/...).So this does not look like all link clicks being routed through the in-app preview machinery; the common path presumably is
shell.openExternaland works. Something specific to these URLs (or their content) causes the preview context creation seen in the log seven seconds before the GPU death — e.g. a link-preview/unfurl behavior for certain URLs, or whatever loads in that hidden preview probing Vulkan/WebGL/WebRTC and hitting the CIG kill from #81341.That narrows the repro: it is deterministic 2/2 on those ietf.org URLs and 0/N on everything else clicked on this machine.
Correction and root-cause refinement after more information from the affected machine, superseding part of my previous comment:
Corrected behavior model: transcript link clicks open in the in-app Claude browser by design (not
shell.openExternal— my earlier assumption was wrong). Other sites render fine in that in-app browser. Only these ietf.org URLs crash it, 2/2. Explicitly asking for the link to be opened in the OS default browser works fine, including for these URLs.Why these URLs specifically — they are Cloudflare bot-challenge pages:
https://mailman3.ietf.org/mailman3/lists/responds to a non-browser client with HTTP 403 +Cf-Mitigated: challengeand a CSP referencinghttps://challenges.cloudflare.com(Turnstile interstitial).https://mailarchive.ietf.org/arch/browse/...serves content but injects Cloudflare's invisible challenge-platform detection script (/cdn-cgi/challenge-platform/scripts/jsd/main.js) into a hidden iframe. Both hosts reportServer: cloudflare.Cloudflare's challenge/JSD scripts perform WebGL/canvas fingerprinting. That is precisely the probe that causes Chromium's GPU process to load
vk_swiftshader.dll, which CIG (MicrosoftSignedOnly) rejects fatally under MSIX packaging — the verified mechanism in #81341, and consistent with #80978's "GPU/viz process crashes on WebGL/Cloudflare pages". The user's regular browser presumably passes or survives the same challenge because the signing-level rejection is only escalated to process death inside an MSIX package.Refined chain: click link → in-app browser loads a Cloudflare-challenged page → challenge script probes WebGL → GPU process loads
vk_swiftshader.dll→ CIG kill (0x060C201E) → app dies → MSIX repair (initially failing0x80073D02while the packaged service holds files, #84992).Testable prediction: any page serving a Cloudflare challenge/interstitial to the in-app browser should reproduce this on an MSIX install — the ietf.org URLs above are just a deterministic public instance. (Not re-tested on the affected machine; each occurrence costs a repair cycle.)
Confirming this on the current build, with one data point that may help narrow the mechanism: CIG is not enabled on this machine, yet the crash still occurs.
Environment
Get-ProcessMitigation -System→Cig.MicrosoftSignedOnly= NOTSETGet-ProcessMitigation -Name claude.exe→ no per-app entryvk_swiftshader.dllis present in the package (5.4 MB)Trigger
Clicked an ordinary external
https://link (a Cloudflare dashboard URL) that the assistant had produced in the chat transcript. Expected it to open in the default browser.Result
~9 seconds later, from
logs/main.log:A second, identical crash (same exit code) occurred 17 minutes later. Recovery required an MSIX Repair from Windows Settings plus a reboot.
Two details that may aid triage
1. No crash artifact is produced anywhere.
Crashpad/contains onlysettings.dat— zero dumps. No WER report and no entry in%LOCALAPPDATA%\CrashDumpseither. Anyone diagnosing this locally will find nothing in the usual places, which makes it look like a clean exit rather than a crash.2. The reboot requirement appears to come from the VM service, not the GPU crash.
C:\ProgramData\Claude\Logs\cowork-service.loglogs this on every single start:So
CoworkVMServicecannot register its own SCM recovery actions, and once it goes down it stays down until the machine reboots. That would explain why this consistently presents as "needs a reboot and a Repair" rather than "relaunch the app".Preceding instability
53 GPU-dependent
screenshot failedentries appear inmain.logover the ~24 hours before the first hard crash, alongside 4UnknownVizErrorentries — the GPU process was degrading before it died outright.Follow-up to my previous comment — I dug into why
CoworkVMServicecannot configure its own recovery actions, and it turns out the reboot requirement is not repairable by the user at all.The service ships with this DACL:
Only two ACEs:
| Trustee | Rights | Has
DC(SERVICE_CHANGE_CONFIG)? ||---|---|---|
|
AU(Authenticated Users) |CC LC SW RP WP DT LO CR RC| No ||
S-1-5-80-…(the service's own SID) |CC DC LC SW RP WP DT LO CR SD RC WD WO| Yes |Two consequences:
1. There is no
BA(Builtin Administrators) ACE, so an elevated admin gets only theAUrights. Running the obvious fix from an Administrator shell fails exactly the same way an unelevated one does:2.
AUlacksDC, which is the specific right required to set failure actions — so the service's own startup attempt fails with the same error it logs on every single launch:Net effect: when the GPU crash brings the service down, nothing can restart it — not the service, not the user, not an administrator — so a reboot becomes the only recovery path. That is what turns this bug from "relaunch the app" into "reboot, then run an MSIX Repair."
A user could take ownership and rewrite the descriptor with
sc sdset, but that means modifying a vendor-installed service's security descriptor, which risks the same MSIX integrity checks that already force the Repair cycle. I would not suggest anyone do that.Suggested fix: either grant
DCtoBAin the service DACL, or configure the failure actions at install time (while the installer still holds the necessary rights) rather than from the service's own startup path. Either would let the service auto-restart after a GPU crash and remove the reboot + Repair step entirely — a worthwhile mitigation even while the underlying GPU crash remains open.Third data point from the same machine, and I think it identifies the mechanism behind a symptom that gets reported separately from this crash: "Remote Control disconnected" on sessions that were created locally.
It is caused by deferred MSIX registration, not by anything in the user's Remote Control configuration.
What happened
The app auto-updated
1.30096.5.0→1.32352.0.0. FromMicrosoft-Windows-AppXDeploymentServer/Operational:Windows could not register the new package because the app was running, so it deferred it. The deferred registration then applied on the next app start, replacing the binary underneath sessions already bound to the previous local host. Every running session detached with:
The message is misleading in a way that sends users down the wrong path. It reads as a Remote Control fault, so people go looking at Remote Control settings — but the sessions were created locally on that same machine, and nothing about Remote Control is misconfigured.
Why it is not a configuration problem
Verified on the affected machine while the symptom was present:
| Check | Result |
|---|---|
|
ANTHROPIC_BASE_URL,DISABLE_REMOTE_CONTROL, API keys, Bedrock/Vertex | all unset (user + machine) ||
settings.json/settings.local.json| no remote keys; no local override file ||
disableRemoteControl| not present anywhere ||
get_sessionon the affected session |isRemote: false— correctly local || Session record on disk | no remote-control state stored at all |
|
~/.claude.json| only UI-history flags (hasUsedRemoteControl,remoteDialogSeen,remoteControlSurfacesSeen) |A user chasing this through configuration will find nothing, because there is nothing there. The only reliable recovery is to archive the detached session and create a new one, which binds to the new host.
Relationship to the crash in this issue
Same root family. The
0x80073D02 — Unable to install because the following apps need to be closedfailures reported here and in #84992 are the same collision between the updater and the running app; deferred registration is what Windows does instead when it declines to fail outright. So one update event can produce either a Repair cycle or a fleet of detached sessions, depending on timing.Suggested fixes, roughly in order of value
Workaround for anyone hitting this
There is no supported way to disable the update (
SignatureKind: Developer, so Store update policy does not apply). What does work is removing the surprise — check whether an update is staged before starting long work, and if so close the app fully and reopen so registration applies cleanly:If that returns a recent entry, or if a staged version is higher than
(Get-AppxPackage -Name Claude).Version, an update is waiting and will detach sessions on the next start.