[BUG] Claude Desktop — recurring silent GPU-process crash kills entire app during web research (4-5×/day), no recovery, no crash dump
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?
Claude Desktop app, version 1.21459.0 (also reproduced on 1.20186.9 before auto-update)
Windows 10 Pro 10.0.19045, MSIX package (Claude_pzs8sxrjxfjjc)
Claude Code 2.1.209
The Electron GPU subprocess crashes and is not recovered by the app — instead of Chromium's normal silent GPU-process respawn, the entire application goes unresponsive for 18-30 minutes, then requires a full cold restart. This happened 4 times in ~2.5 hours in one session (2026-07-15, 11:09:14 / 11:40:41 / 12:28:52 / 13:16:26 local time), and 4-5 times total that day — every occurrence during web-research tasks (both inline browser navigation and delegated research subagents).
Evidence from %APPDATA%\Claude\logs\main.log:
2026-07-15 13:16:26 [info] GPU process gone: {
type: 'GPU',
reason: 'crashed',
exitCode: 101457950, // 0x60C201E, identical across all 4 occurrences
serviceName: 'GPU'
}
What Should Happen?
The GPU process should crash-and-recover transparently (as Chromium normally does), without taking down the rest of the app. At minimum, the app should never lose an entire session silently — it should either survive the GPU-process death, or clearly notify the user and preserve/resume the in-progress work (tool results, conversation state) instead of going fully unresponsive for 18-30 minutes and requiring a cold restart with all research progress lost.
Error Messages/Logs
2026-07-15 13:16:26 [info] GPU process gone: {
type: 'GPU',
reason: 'crashed',
exitCode: 101457950, // 0x60C201E, identical across all 4 occurrences
serviceName: 'GPU'
}
Steps to Reproduce
Steps to Reproduce
Open Claude Desktop and start a session in Claude Code.
Run a web-research task that uses the browser tool — either inline (direct navigate/browser-tool calls in the main thread) or delegated to a research subagent (e.g. tech-researcher) that browses external sites.
Continue normal browsing/navigation activity (multiple page loads) for a few minutes.
At an unpredictable point (observed after anywhere from a few minutes up to ~45 minutes of active browsing), the app becomes fully unresponsive — no further output, no error shown to the user.
Check %APPDATA%\Claude\logs\main.log — a GPU process gone: { reason: 'crashed', exitCode: 101457950 } entry appears at the exact moment the session died.
The app stays silent for 18-30 minutes, then auto-restarts (Starting app in the log). All in-progress work/session state from before the crash is lost.
Reproduced 4 times in one afternoon (2026-07-15, at 11:09, 11:40, 12:28, 13:16 local), each time during web-research activity, same exit code every time. Not consistently tied to one specific site or one specific tool call — happens across different research tasks, both inline and subagent-delegated.
Claude Model
Opus
Is this a regression?
Yes, this worked in a previous version
Last Working Version
Unknown / not determined. The crash was reproduced on both app version 1.20186.9 and 1.21459.0 (auto-updated mid-session) — the update did not resolve it, so I cannot confirm any version where this issue was absent. This may not be a regression from a specific version; it could be an ongoing issue that simply wasn't triggered before because browser-tool-heavy research sessions weren't run as frequently.
Claude Code Version
Claude Code 2.1.209
Platform
Anthropic API
Operating System
Windows
Terminal/Shell
PowerShell
Additional Information
Full main.log excerpts (GPU-crash entries + surrounding [process-memory] telemetry) available on request — happy to attach a trimmed excerpt if a maintainer needs it (didn't paste full logs here to avoid noise/potential unrelated local paths).
Ruled out before filing: Windows TDR/driver-timeout events (EventID 4101 — none found), WER Application Error events (EventID 1000 — none found), Crashpad .dmp files (folder empty — no native crash dump captured for any of the 4 occurrences), and OOM/memory pressure (1.1-2.1 GB free at crash time, not critical).
The identical exit code (101457950 / 0x60C201E) across all 4 occurrences suggests a specific, reproducible internal fault rather than random corruption.
Impact note: each occurrence burns tokens on conversation context plus the research/search tool calls themselves, with zero usable output since the session dies before results are saved — this happened 4-5 times in one day. Requesting that Anthropic support review token compensation for these sessions given the reproducible, app-side nature of the failure (not user error).
Happy to provide session IDs / exact timestamps of all affected sessions if useful for correlating with server-side telemetry.
Showing cached comments. Read the full discussion on GitHub ↗
6 Comments
Confirming the same crash signature on a second machine, but with a later onset.
Environment
This first began on this machine on 2026-07-25; it had not manifested here previously, even though this issue was opened about two weeks earlier. It recurred on 2026-07-26 at approximately 06:59 local time during Preview/web-research activity.
Relevant log sequence:
The exit code matches this report exactly:
101457950/0x60C201E. After the crash, Claude Desktop could not be relaunched; the Windows package later reportedModified, NeedsRemediation, and a normal reboot was required to clear the stuck state.Unlike the original report, Crashpad generated an approximately 35.6 MB
.dmpfile. I can provide a sanitized log excerpt or the dump privately if an Anthropic maintainer requests it. I am not attaching the dump publicly because it may contain sensitive application state.The delayed onset could indicate a recent Desktop rollout/update or a newly exercised Preview/browser path, but that is only a hypothesis.
Follow-up after correlating the rotated Claude logs with Windows power/display events:
[updater] Version changed since last launch: 1.24012.1 → 1.24012.9.1.24012.1, the logs contain 12 browser-preview creation events from July 22–24 with no matchingreason: 'crashed', exitCode: 101457950failure.1.24012.9, there are 20 browser-preview creation events and five distinct crash times between July 25–26, all with the exact101457950 / 0x60C201Esignature. (Some log records are duplicated, so raw line counts are higher.)[Preview MCP] javascript_tool timed out after 30000ms.This makes the
1.24012.9update plus the Preview/browser path a materially stronger correlation than the power-plan changes. The no-sleep/lid settings could increase process lifetime and exposure to the bug, but there is no evidence of a power transition directly causing the crashes. This is correlation, not yet proof of causation.Likely the same root cause as #81341, where I have just posted a measured breakdown: Chromium's Code Integrity Guard (
MicrosoftSignedOnly = ON,AllowStoreSignedBinaries = OFF, measured live on the running GPU child) refuses the package's own Authenticode-signedapp\vk_swiftshader.dllwith0xC0000428(CodeIntegrity event 3033,RequestedPolicy 8vsValidatedPolicy 1) when Dawn probes for a SwiftShader fallback adapter. The GPU process exits101457950/0x060C201Eand the browser process then reachesIntentionallyCrashBrowserForUnusableGpuProcess().Two points from that comment that may be useful here:
51c97ad46b7b) was deliberately narrowed in March 2026 (97b3f5d7800fde085af53b1b7455b730c215a874), and Electron 42.7.0 already ships the narrowed Chromium 148.0.7778.280.Full detail, including the
ERROR_PACKAGES_IN_USErepair loop that produces the "reinstall the application" dialog: #81341.Independent occurrence on a different OS with a completely different trigger, producing the identical
exitCode: 101457950(0x060C201E) and the same total-loss outcome. Posting because two unrelated triggers converging on the same result points at the handler rather than the trigger.Impact — this is the part that hurt
Three Claude Code sessions were live. All died. Two were mid-turn, each frozen on a user message that never got a reply. In one of them the message the user had just submitted was lost and re-sent by the client, leaving a duplicate in the transcript. Session history survived only because it is journalled to disk independently of the crash path.
There was no warning, no degraded mode, and no indication of what happened — from the user's side the window simply vanished.
Environment
SignatureKind: Developer,IsDevelopmentMode: False,AppxSignature.p7xpresent, installed underWindowsApps)32.0.16.1088, 2026-07-22) + AMD Radeon 610M integrated (driver32.0.21045.1000, 2026-07-23)AMRunningMode: Not running)What happened
Immediately before it, in
Microsoft-Windows-CodeIntegrity/Operational, same second:vk_swiftshader.dllis SwiftShader's Vulkan ICD — Chromium's bundled software renderer (confirmed from the shipped binary:ProductName: SwiftShader Vulkan Dynamic Link Library, © 2018 Google Inc., exportsvk_icdGetInstanceProcAddr, withvk_swiftshader_icd.jsonbeside it). With it blocked, GPU-process creation failed. Windows refused creation 5× with0x3CFC / ERROR_NEEDS_REMEDIATION, then the app wrote a crashpad dump and terminated withGPU process isn't usable. Goodbye.Windows subsequently flagged the package
Modified / NeedsRemediationand its auto-repair retriedRegistersix times (02:48:39 → 03:02:52) before a manual MSIX reinstall resolved it.On the trigger — weaker than I first claimed
In the surrounding window Code Integrity was also rejecting Bitdefender's AMSI provider in bulk (
369blocks ofantimalware_provider64.dllvs1forvk_swiftshader.dllacross that log; a further372in a later 90-minute window). I originally presented this as the likely cause. It does not hold up as well as I implied, and I want to be explicit about that rather than leave the tidier version standing:HKLM\SOFTWARE\Microsoft\AMSI\Providers→ that exact path; only onedlls_*directory exists), and its ordinary Authenticode signature is valid (Bitdefender SRL via DigiCert, timestamp-countersigned to 2029). It fails a different bar: a provider loaded into a protected host process needs an anti-malware/ELAM signing level.svchost.exeis rejected. So "AMSI is broken machine-wide" — which my first version implied — is wrong.vk_swiftshader.dllfailed exactly once and has not failed since. A direct collateral-rejection mechanism would predict repeated hits on Claude. The data does not show that.Net: the AMSI correlation is real but the causal link is not demonstrated, and on closer inspection the evidence runs against it. Treat the trigger as unexplained.
**One lead I have not examined, flagged for completeness:** this is a hybrid-graphics machine, and Windows Update history shows a driver storm on 2026-07-29 23:02–23:31 — roughly 90 failed (
ResultCode 4) attempts including the AMD graphics driver, several succeeding only on retry, withamdkmdag.sysregistered from two different driver stores that evening. That is ~27 hours before the crash. There are no TDR events and nothing GPU-related in the System log at 02:47, so this is a background suspect only — but it is a more conventional explanation for a GPU-process failure than anything above, and I raise it rather than leave it out.Requests (in priority order)
Caveat worth stating: the natural "fall back to software rendering" answer routes through
vk_swiftshader.dll— the very DLL that was blocked here. Under this failure mode that path is unavailable, so a robust fallback is one that doesn't depend on loading it (app.disableHardwareAcceleration()/--disable-gputerritory). I have not verified which path this Electron build takes when the GPU process dies at launch; flagging it as a question, not a claim.exitCode: 101457950(0x060C201E) is opaque; the Code Integrity3033event names the blocked DLL and made this diagnosable in minutes. Capturing recent3033/3010entries at crash time would remove the dependency on a log that rolls (below).Repro hint for QA
Block
app\vk_swiftshader.dllfrom loading — a WDAC/Code Integrity policy will do it deterministically — and launch the app.exitCode: 101457950(0x060C201E).("Expected: falls back to SwiftShader" is not a valid expectation under this repro — SwiftShader is the blocked component.)
The log-retention hazard, measured
Microsoft-Windows-CodeIntegrity/Operationalships withmaxSize: 1052672(1 MB),retention: false(circular). At this machine's event rate that is about 50 minutes of history — measured at 09:58 the same morning, the log spanned only08:35:29 → 09:25:05(OldestRecordNumber 7060; records 1–7059 purged, no archived copy, no log-clear event).The 02:47 crash events were present at 08:33 and gone by 09:58. The user reports an earlier occurrence whose evidence was lost the same way.
This is the argument for request #5: asking a reporter to retrieve Code Integrity events after the fact will routinely arrive too late on any machine with a noisy AMSI provider.
What is not ruled out
Correcting my own earlier over-claiming here too:
Resource-Exhaustion-Detector(2004) events in a System log retained back to 2026-07-29 22:06, which fully covers the crash window.Get-HotFixreports date-only, midnight-stamped values and does not list driver updates at all. KB5101684 is independently confirmed at 2026-07-29 23:13 (~27 hours before, not two days); KB5101711 has no entry in the 128-record Windows Update history and its timestamp is unverified. The driver storm noted above was invisible to the method I used.There is no OS-level crash on this machine at any point: no Event 41 / 1001 / 6008, no
MEMORY.DMP, no minidumps, and uptime is continuous from 2026-07-29 23:20. Whatever happened at 02:47 was contained to this application.(Rewritten 2026-08-01. An earlier version of this comment carried its own errors — it misquoted my request #1 and repeated a claim about the AV component that further checking refuted. Rather than stack corrections, I ran an independent verification pass over every factual claim in the original report and folded the results into that comment directly. This note now just records what changed and why, so the edit history is auditable.)
I put each factual claim in my report above through a separate adversarial check against the live machine — the instruction being to refute the claim, not confirm it. Five of eight did not survive intact. Listing them because a reader who saw the first version deserves to know which parts moved, and because two of them are the kind of error worth naming out loud.
| Claim | Verdict | What was wrong |
|---|---|---|
|
vk_swiftshader.dllis SwiftShader's Vulkan ICD | confirmed | — || …therefore "fall back to software rendering" is circular | refuted | Chromium ships SwiftShader in every build. It was bundled, not active — the running GPU process carried no
--disable-gpu/--use-angle=swiftshader(0 of 15 command lines). Asking for a software fallback is a real state change, not a no-op. It remains true that this particular fallback path was unavailable while the DLL was blocked, which is what request #1 now says. || AV provider is the sole registered AMSI provider | partly wrong | It is sole for 64-bit processes. A second registration exists in the 32-bit hive (
WOW6432Node\...C92→antimalware_provider32.dll). || …and it therefore never loads | wrong | It is loaded successfully in ~25 live processes right now. Only the load into
svchost.exeis rejected. My first version implied AMSI was broken machine-wide. It isn't. || Its Authenticode signature is valid; rejection is at a higher bar | confirmed | — |
| The two DLLs failed different signing levels (Windows vs Microsoft) | unverifiable now | The Bitdefender half is confirmed across all 372 surviving events. The Claude half rests entirely on my own verbatim capture at 08:33 — the log has since rolled and the record is gone, with no archive. Stated as provenance in the main comment rather than presented as re-checkable. |
| Package is "manifest-registered"; ~5 of 6 packages lack a
.cat| wrong on both counts | It is Developer-signed and sideloaded (SignatureKind: Developer,IsDevelopmentMode: False,AppxSignature.p7xpresent) — manifest-registered would meanSignatureKind: Noneand no signature blob. And "5 of 6" was an unrepresentative draw: the real rate is 90 of 163 packages (55.2%), and it tracks signing kind — Store-signed packages have the catalog in 66 of 67 cases, Developer-signed lack it in 12 of 18. The conclusion (the3010warning isn't the root cause) may still stand, but not on the reasoning I gave. ||
main.logshows exactly one GPU crash | confirmed | — || Log capped at 1 MB / ~50 min, now raised to 64 MB | confirmed | — |
| Memory and Windows Update correctly ruled out | wrong | "Ample free RAM" was a post-hoc reading and inaccurate (commit charge at 90.9% of limit). The sound evidence is the absence of Resource-Exhaustion-Detector events. And
Get-HotFix— the method I used — doesn't list driver updates, which hid a driver storm on 2026-07-29 (~90 failed attempts including the AMD graphics driver,amdkmdag.sysregistered from two different driver stores that evening, ~27 hours before the crash). |Two things I'd draw out of that:
The AMSI theory is weaker than I presented it, and I've said so in the main comment. The provider's rejection is constant and confined to one host process; Claude's DLL failed once. That pattern argues against the collateral-damage mechanism I proposed, not for it.
I had omitted a materially relevant environment fact: this is a hybrid-graphics laptop (NVIDIA RTX 5070 Laptop + AMD Radeon 610M integrated), with a recent, partly-failed graphics driver update. For a GPU-process crash that is arguably more relevant than anything I originally wrote about, and it is now in the Environment section. I have no evidence tying it to the crash — no TDR events, nothing GPU-related in the System log at 02:47 — so I raise it as an unexamined lead rather than a theory.
None of this changes what the issue is about. Whatever blocked that DLL, the application's response was to terminate the whole process tree and take three live sessions with it. That part needed no correction.
Root cause found — and it reproduces
Third occurrence on this machine, this time with the Code Integrity log enlarged beforehand so nothing rolled. Every link below is backed by a direct measurement on the host; no inference steps are left open. This supersedes the trigger analysis in my two comments above, which was wrong.
The chain
Evidence per link
1. Electron version — the app ships 42.7.0. From the package itself,
app\version:Electron 42.7.1 release notes:
So on 42.7.0 the setting is accepted and does not take effect. That is why disabling hardware acceleration did not prevent the crash — it never actually applied.
2. The GPU process runs under Code Integrity Guard.
Get-ProcessMitigationon the live GPU process:MicrosoftSignedOnly: ONis literally what the event text means by "Microsoft signing level requirements."3. The blocked DLL is Anthropic-signed, and nothing vouches for it.
For an MSIX package,
AppxMetadata\CodeIntegrity.catis what normally grants package binaries the elevated signing level. This package has noAppxMetadatadirectory at all (Developer-signed sideload;SignatureKind: Developer,AppxSignature.p7xpresent). Hence the same-instant3010:I previously dismissed that
3010as chronic background noise. That was wrong. Across 165 minutes of log it fires exactly three times — all three within the same second as the crash. It is not noise; it is the missing link in the validation.4. The trigger is the preview pane, and it is deterministic. Across the entire renderer log, WebGL/WebGPU initialisation appears at exactly two timestamps — both crashes, nothing else:
And immediately before the second:
Five seconds from preview context creation to GPU-process death.
Two independent fixes, either sufficient
AppxMetadata\CodeIntegrity.cat. Anthropic-signed binaries then satisfy Code Integrity Guard, and the DLL loads regardless of which rendering path is chosen.(1) is the smaller change. (2) removes the whole class — any Anthropic-signed DLL loaded into the CIG-protected GPU process is currently exposed to this, not just SwiftShader.
Verified workaround, for anyone hitting this now
Launching the app with an explicit
--disable-gpu— the same thing the Electron fix does internally — resolves it on this host:--use-angle=d3d11-warp-webglvk_swiftshader.dllis not loaded by any process3010/3033events since the changeOk; no new crash dumps; no GPU fatalsNo security mechanism has to be weakened to achieve this — Code Integrity, the GPU sandbox, and AV all stay on. Anyone tempted to "fix" this by disabling Code Integrity or passing
--no-sandboxshould not: it lowers security and does not address the cause.Corrections to my earlier comments
For the record, since I posted them: the anti-malware/AMSI correlation I described was not the cause. At the moment of the third crash the AMSI event count was one — Claude's own. The bursts sit over an hour either side. That line of analysis is dead, and the two comments above are corrected accordingly.
Also:
main.logalone under-reports this. It records "GPU process gone" but not the subsequent fatal, so a reader of that log concludes the app survived. The crash dumps and the AppModel0x3CFCrecords show otherwise. If the crash reporter surfaced the Code Integrity state and the fallback-exhaustion path, this would have been a ten-minute diagnosis instead of a day.