Claude Desktop 1.19367.0
This release provides Claude Desktop version 1.19367.0 pre-patched for Linux.
Installation Options
Arch Linux (AUR)
yay -S claude-desktop-binDebian/Ubuntu (APT Repository — recommended)
curl -fsSL https://patrickjaja.github.io/claude-desktop-bin/install.sh | sudo bash
sudo apt install claude-desktop-binDebian/Ubuntu (manual .deb)
# x86_64
sudo apt install ./claude-desktop-bin_1.19367.0-1_amd64.deb
# ARM64
sudo apt install ./claude-desktop-bin_1.19367.0-1_arm64.debFedora/RHEL (RPM Repository — recommended)
curl -fsSL https://patrickjaja.github.io/claude-desktop-bin/install-rpm.sh | sudo bash
sudo dnf install claude-desktop-binFedora/RHEL (manual .rpm)
# x86_64
sudo dnf install ./claude-desktop-bin-1.19367.0-1.x86_64.rpm
# ARM64
sudo dnf install ./claude-desktop-bin-1.19367.0-1.aarch64.rpmNixOS / Nix
nix run github:patrickjaja/claude-desktop-binAppImage (Any Distro)
# x86_64
chmod +x Claude_Desktop-1.19367.0-x86_64.AppImage
./Claude_Desktop-1.19367.0-x86_64.AppImage
# ARM64
chmod +x Claude_Desktop-1.19367.0-aarch64.AppImage
./Claude_Desktop-1.19367.0-aarch64.AppImageUpdate existing AppImage (delta download — only changed blocks):
appimageupdatetool Claude_Desktop-*-x86_64.AppImage # Or from within the AppImage: ./Claude_Desktop-*-x86_64.AppImage --appimage-update
Checksums
| File | SHA256 |
|---|---|
| Tarball (x86_64) | 75631a4c71b6183f5a7680ed11d0f6bd2c43b6721fb186e8e0dda9e96c921458
|
| Tarball (aarch64) | ed3b2c2566e205d86e733a6ecb96d23b5c4512cdda2ef8d6974be7270a9dd15f
|
| AppImage (x86_64) | a1dd93b20ec6718a68efcb9c5e28269629625481cf802ddfcb6f88c58d9bffee
|
| AppImage (aarch64) | aeecb4c52dc8ad990ce68bb299cbb64cff3b4b25d0c4979223678a17fbd3d152
|
| Debian (amd64) | 328708c1d45aee4add13beeea86ae39f5603cb4069c4039f9ea28912d819fa78
|
| Debian (arm64) | bac22c8be8e39db7257bef7a9f05229c6c1774c4c26af9ae1f2b560dc72d9b39
|
| RPM (x86_64) | 4a5e70c8cfc94bae64ba98d5bc48f3ea5646ab70e66069e784f89b852c8a7ffa
|
| RPM (aarch64) | b556cf956d91b725db5c70bd32889c8880c17b989f80563160cc2f7b4f239e86
|
Changes since last release
v1.19367.0: upstream code-split the main bundle - orchestrator now patches stub + chunks as one logical file
Upstream restructured the app: .vite/build/index.js went from a 15 MB monolith to a 773-byte loader stub, with the real main-process code in ~44 content-hashed index.chunk-<hash>.js siblings, and index.pre.js (now the package.json entry point) grew to 4.5 MB. Chunk hashes change every release, so no patch can target them by name. Every pattern-matching patch 0-matched and the auto-release failed (#187).
The fix is in the patch orchestrator, not in 40 regexes: apply_patches.py (and validate-patches.sh) now stage the stub plus all sibling chunks as one concatenated file with boundary markers, run every index.js patch against it, then split it back and write each file. Patches keep their @patch-target: .../index.js headers and their strict aggregate match counts work across the whole logical bundle exactly as on the old monolith; a corrupted boundary fails the build loudly, and each split file is node --checked. This proved necessary beyond convenience: fix_asar_workspace_cwd's five anchor sites now span two different chunks.
31 of 40 patches applied verbatim on the concatenation. Nine needed real fixes, almost all one shared root cause: the code-split minifier turned module-local identifiers into dotted cross-chunk member paths that [\w$]+ cannot match - the main window is now exports.mainWindow (fix_window_bounds, fix_profile_window_title, fix_quick_entry_cli_toggle), loggers are n.logger.info (fix_asar_workspace_cwd), and flag reads are p.isFeatureEnabled("...") instead of rt("...") (fix_imagine_linux, fix_buddy_ble_linux, enable_local_agent_mode - the latter's standalone flag matchers would otherwise have produced dangling l.!0 syntax errors). The remaining drifts were minifier hoisting (var r; before the folder-drop handler in fix_asar_folder_drop) and a renamed tray icon variable (fix_tray_icon_theme). SSH plugin/MCP forwarding remains unconditional upstream (regression guard re-anchored, satisfied).
Two latent pre-existing bugs were found and fixed along the way: fix_quick_entry_cli_toggle's second-instance argv sub-patch reported "already applied" on pristine bundles because its idempotency probe matched a sibling sub-patch's own injected text (it now checks the real end-state and genuinely applies), and fix_buddy_ble_linux reported success on files containing no buddy code at all (absence now fails loud).
v1.19367.0: desktopName pinned to claude-desktop.desktop (upstream renamed to com.anthropic.Claude.desktop)
Upstream renamed its desktopName to com.anthropic.Claude.desktop, matching the .desktop file the official .deb installs. Chromium derives the window's Wayland app_id / X11 WM_CLASS from that value, and every .desktop entry we ship (Arch/deb/rpm/AppImage/Nix, the launcher's per-profile entries, StartupWMClass, the claude:// xdg-mime handler) is built around the claude-desktop identity - the window-to-icon matching fixed in #148 would have silently broken on Wayland. The tarball build now pins desktopName back to claude-desktop.desktop after extraction (the JS bundle references neither name, so the pin is safe) and fails loud if the key ever disappears.
Local agent sessions: stop forcing ENABLE_TOOL_SEARCH (Patch 3f disabled)
enable_local_agent_mode.nim no longer forces GrowthBook flag 1129419822 (ENABLE_TOOL_SEARCH='auto' for local agent sessions); the flag now follows Anthropic's server-side rollout. Forcing it put a ToolSearch tool into every Cowork/Code session, but with a session inventory of ~79 tools nothing was ever deferred, so the tool had nothing to load - and its mere presence primed the model into a bogus "load tools first" detour (observed in a live session: Skill({"skill":"ToolSearch"}) -> "Unknown skill" error, one wasted turn before recovering). All computer-use and MCP tools were always fully loaded; removing the force removes the confusion surface without losing anything.
v1.19367.0: what else changed upstream
The bundle actually shrank 1.7 MB - the old build double-shipped agent-sdk (0.3.198 + 0.3.202), the new one ships only 0.3.202. Electron stays 42.5.1; the built-in MCP server set, the Cowork VM backend files, and the CU platform gates are unchanged. No newly darwin/win32-gated features exclude Linux; the new file-index-worker (fuzzy file scorer) and coworkScheduledTaskProjects capability are ungated and work on Linux natively. Three new GrowthBook flags (session-concurrency limits, device-tool artifact read gate, GPU crash-streak marker) - none patch-relevant; all 13 flags forced by enable_local_agent_mode are unchanged. ion-dist needed no patch changes (one new config key upstream: inferenceFoundryAuthFlow for Entra ID device-code vs browser sign-in). Eleven new IPC channels landed (LocalSessions remote-target trust/WSL/cwd handling, a DocumentFunnel bridge, Extensions.isLocalExtensionInstallAllowed), none removed. One structural caveat for future audits, now noted in the baseline docs: minified helper names differ per chunk (the flag reader is rt() in the big chunk but isFeatureEnabled() in smaller ones), so greps must cover all index*.js files.