Why Claude Desktop on Linux Freezes: A 27-Byte Telemetry Reply and an FD Leak Developer deafbeef traced freezes in Claude Desktop on Linux to unread `Cache-Control: no-store` fetch responses left open in Chromium Mojo data pipes, causing file-descriptor exhaustion, according to a public write-up posted November 14–15, 2026 on blog.dfb.sh. The triggering traffic is a Claude Code presence-clear POST sent with `keepalive: true` and `.catch(() => {})` that never reads the server's 27-byte `{"refresh_after_seconds":0}` reply; the author's hung-process dump showed 942 two-megabyte shared-memory regions, 938 holding only that JSON, alongside repeated `TransferBuffer::Initialize() failed` errors. A minimal repro without retaining Response objects still leaked 836 descriptors, and the author reports the vendor ticket is disputed; the post is not an official Anthropic publication. Claude Desktop on Linux can look healthy in logs, then freeze with placeholder skeletons or a stuck typing animation. Developer deafbeef spent two months patching a local install, captured a 1.5 TiB sparse renderer core dump mostly reserved V8 sandbox address space, not RAM , and traced the hang to hundreds of two-megabyte shared-memory response pipes that each held the same 27-byte JSON payload: {"refresh after seconds":0} . The write-up lives at blog.dfb.sh https://blog.dfb.sh/blog/claude-desktop-freeze/?ref=explainx . It is not an official Anthropic post. It is one of the most detailed Chromium-in-Electron forensic stories tied to a frontier model desktop app in 2026, and it matters because coding agents increasingly ship inside desktop shells with always-on telemetry . TL;DR | Question | Answer | |---|---| | Symptom | UI skeletons, dead clicks, streaming replies frozen mid-token | | Root mechanism author | Unread Cache-Control: no-store bodies stay open in Mojo pipes → FD exhaustion | | Triggering traffic | Claude Code presence clear POST with keepalive: true , .catch = {} | | Response payload | 27 bytes JSON refresh hint | | Electron / Chromium | Claude Desktop Electron 44 ≈ Chrome 152 in the traced build | | Datadog SDK | Bundled; not the sole holder of pipes per later repro | | Fix status | Public Nov 14–15, 2026 post; vendor ticket disputed | Why empty logs mislead Main-process logs showed only “Main webview is unresponsive, will kill and reload” on a loop. Reload often failed. The renderer sometimes exited with FATAL: Crashing because hung , but stderr went to /dev/null until the author redirected it. That pattern matches other Claude Desktop reliability threads https://explainx.ai/blog/claude-deleted-law-professor-syllabus-lecture-notes-baude-dropbox-2026 where users blame the model when the shell is the bottleneck. Here the shell lost the ability to talk to its browser process because IPC backlog met descriptor starvation . A rounded tank with green drops falling steadily from a small crack, echoing a slow descriptor leak The presence request that nobody reads On the Code tab, Claude Desktop sends presence telemetry so the server knows a client is active. When the window is hidden or idle, it sends a clear : POST /v1/code/channels/