github patrickjaja/claude-desktop-bin v1.15962.0-3
Claude Desktop 1.15962.0 (patch release 3)

6 hours ago

Claude Desktop 1.15962.0 (patch release 3)

This release provides Claude Desktop version 1.15962.0 pre-patched for Linux.

Installation Options

Arch Linux (AUR)

yay -S claude-desktop-bin

Debian/Ubuntu (APT Repository — recommended)

curl -fsSL https://patrickjaja.github.io/claude-desktop-bin/install.sh | sudo bash
sudo apt install claude-desktop-bin

Debian/Ubuntu (manual .deb)

# x86_64
sudo apt install ./claude-desktop-bin_1.15962.0-3_amd64.deb
# ARM64
sudo apt install ./claude-desktop-bin_1.15962.0-3_arm64.deb

Fedora/RHEL (RPM Repository — recommended)

curl -fsSL https://patrickjaja.github.io/claude-desktop-bin/install-rpm.sh | sudo bash
sudo dnf install claude-desktop-bin

Fedora/RHEL (manual .rpm)

# x86_64
sudo dnf install ./claude-desktop-bin-1.15962.0-3.x86_64.rpm
# ARM64
sudo dnf install ./claude-desktop-bin-1.15962.0-3.aarch64.rpm

NixOS / Nix

nix run github:patrickjaja/claude-desktop-bin

AppImage (Any Distro)

# x86_64
chmod +x Claude_Desktop-1.15962.0-x86_64.AppImage
./Claude_Desktop-1.15962.0-x86_64.AppImage
# ARM64
chmod +x Claude_Desktop-1.15962.0-aarch64.AppImage
./Claude_Desktop-1.15962.0-aarch64.AppImage

Update 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) 3871375bb7c46b8c3ebb201b0315c08e18465f2f209c3391a59b3e9aa881cd4a
Tarball (aarch64) c067ddce8269634724f90f4559e036f5211c79b8276d132dc0cc3a9b78907fd3
AppImage (x86_64) ae68d2870449698d3dff6bbd6f3a1136450b67a4323ec7910b7e562f0323e9ca
AppImage (aarch64) dadeafadd83dc9001dcb4aee2454b78a412799c8ea67b43b33f1c47c62f85285
Debian (amd64) 5834d83ad298da89d6675f9c98a64c3a4f5aad6654fa029224eef4578ff92126
Debian (arm64) f88baa690bccc850762af5fa9ef02613f5a9f773f557327dd332355e2b357e9e
RPM (x86_64) 71269dff3c7464065eeee650b6fb56214ea791685e6a719212cc64871c233daa
RPM (aarch64) f1980dba88a4d9ce4727de2fac8614160c9fb7d5b2716602a08d1287a915c4e0

Changes since last release

Themes: dual light/dark variants, corrected token map, per-theme spinners, new Mario theme

  • Light mode was broken for every theme. The patch forced a single palette onto :root and .darkTheme with !important regardless of the app's mode, so the Settings -> Appearance toggle did nothing and dark values bled into light mode (washed-out, unreadable). Each built-in is now dual-variant - a light block injected on :root,[data-mode=light] and a dark block on .darkTheme,[data-mode=dark],.dark (dark last so it wins on a specificity tie) - and the app toggle now switches variants live. Setting just activeTheme is enough; no themes block to copy.
  • The override CSS targeted tokens that no longer exist. A live token extract showed --accent-main-*, --accent-secondary-* and --tw-prose-* were removed upstream, so a chunk of the old theming was dead. Retargeted to the real tokens (--accent-brand/--accent-*/--accent-pro-*), dropped the dead prose block, and added --df-* (window chrome: sidebar/content) + --cds-* (Code/Cowork, popovers) coverage so those surfaces recolor too. Borders are alpha'd (dark-mode border tokens are authored near-white, so a raw dark value was invisible); decorative glows are gated to dark only. The patch derives --accent-main-*/-secondary-* aliases so older custom themes still work.
  • nordic applied nothing - the built-in key is nord but the folder is nordic, so an activeTheme: "nordic" silently bailed. Added a nordic -> nord alias and a loud "theme not found" fallback (no false success). catppuccin-latte contrast failures fixed.
  • New mario theme (Nintendo): a sky-blue overworld light variant and a warm-brick underground dark variant, Mario-red brand, coin-gold/pipe-green status colors.
  • Per-theme spinner reshape. The loading "starburst" is rendered by remote claude.ai code (not the local bundle), so a new injected installer (js/spinner_injector.js) swaps its SVG path for a per-theme shape via the patch's executeJavaScript hook - mushroom (mario), blossom (sweet), snowflake (nord), cat (catppuccin), coffee cup (latte). Detection matches the star path signature with fallback fragments and fails loud (console [spinner] matched 0) if upstream geometry ever drifts.
  • All 7 themes ship coordinated light+dark palettes verified to WCAG AA. Docs: themes/README.md rewritten for the new schema, themes/THEME_PREVIEW.html added, and baseline/THEME_TOKEN_MAP.md + SPINNER_INJECTION_NOTES.md + SPINNER_SHAPES.md capture the v1.15962 token reality. Also fixed patches/Makefile to declare the add_feature_custom_themes -> js/spinner_injector.js staticRead dependency (a JS-only edit now rebuilds the binary). No upstream-version bump.

Fix: Computer Use broken on Linux - Cowork executor factory fell through to throw (#159)

  • Cowork / agent Computer Use failed on Linux with computer-use executor not implemented for linux (#159, thanks @Adiker for the precise diagnosis). As of v1.15200 upstream split executor resolution into two factories. fix_computer_use_linux.nim already (a) injects our full globalThis.__linuxExecutor (ydotool/xdotool input, grim/spectacle/scrot screenshots, multi-monitor, KDE kwin-bridge) at app-ready and (b) routes createDarwinExecutor to it. But the second factory - the one the Cowork/agent path actually calls - has the shape {const{…,hostBundleId:Z()};if(win32)return …;if(darwin)return …;throw "computer-use executor not implemented for ${platform}"} with no linux branch, so on Linux it fell straight to the throw. This is a factory dispatch, not a process.platform=== guard, which is why a platform-gate count diff didn't surface it.
  • Fix: new sub-patch (Patch 4d, count 35 -> 36) injects if(process.platform==="linux"&&globalThis.__linuxExecutor)return globalThis.__linuxExecutor; immediately before that throw, anchored on the unique if(process.platform==="darwin")return X(Y);throw "…executor not implemented…" site. Both factories now resolve to the same already-injected __linuxExecutor; the &&globalThis.__linuxExecutor guard preserves a clean fallback to the original throw (no regression). Idempotency keys on the linux branch being present at this throw-site (Rule 6), not merely existing somewhere (Patch 4 injects an identical string into createDarwinExecutor). Matches the one-line fix the reporter verified working (screenshot/click/type/multi-monitor). (Gotcha fixed along the way: the throw interpolates ${process.platform}, whose body has a ., so the placeholder anchor is [\w$.]+ - [\w$]+ stops at the dot and silently 0-matches.)

Upstream bump v1.15200.0 -> v1.15962.0 (4 patches fixed; all apply)

  • Version bump v1.15200.0 -> v1.15962.0, a full re-minify release. Routine for Linux: no new platform gate locks out a Linux feature (darwin/win32/linux gate counts unchanged at 76/125/10; the only structural change is the removal of a macOS-only disclaimer Helpers command wrapper, a Linux no-op), no new native modules, no new built-in MCP servers, and the Cowork RPC contract between Desktop and claude-cowork-service is functionally identical (same socket name, framing, 22 prior methods, 7 event types, spawn args/env). Three patches needed rebasing for the re-minify (a fourth, fix_computer_use_linux, gained a sub-patch for #159 - see the entry above).
  • fix_quick_entry_cli_toggle: the Quick Entry show-handler's focus branch gained an argument. Upstream changed the registration arrow from ?(w.focus(),i9t()) to ?(w.focus(),GZt(tt)) - the focus-branch call now takes the window var. Sub-patch A's anchor required empty parens (,[\w$]+\(\)\)), so it matched 0 times. Widened both ternary-branch call arg-lists from \(\) to \([\w$]*\). The arrow prefix/body slice is unchanged; sub-patch B (second-instance) was unaffected.
  • fix_window_bounds: a new setup call was inserted into the main-window factory. The factory went from …Mk(w.webContents,MAIN_WINDOW),w} to …ev(tt.webContents,MAIN_WINDOW),Cft(tt),tt} - a Cft(tt) call now sits between the MAIN_WINDOW setup call and the trailing ,w} return, breaking the adjacency the regex anchored on. Added a second lazy (.*?) group after the setup call (re-emitted verbatim, so the new call is preserved and the bounds-fix IIFE is injected just before ,w}).
  • fix_cowork_linux Patch G: the smol-bin copy gate was wrapped in a GrowthBook-readiness await. Upstream changed if(process.platform==="win32"){const …} to if(await BO(),process.platform==="win32"){await L9(5e3),await Promise.race([…]);const …} (BO = waitForGrowthBookReady). The old anchor keyed on if( immediately before the gate plus the {const …} body shape. Re-anchored on the gate expression only (process.platform==="win32")({…\smol-bin.) via a [^}]+ body matcher terminated by the smol-bin. tail (unique - the bare gate appears 68x but only this one precedes a resourcesPath/smol-bin join), and dropped the leading if( from the replacement so the await BO(), prefix is preserved. The Linux KVM opt-in (||process.platform==="linux"&&globalThis.__coworkKvmMode) is unchanged.
  • New in v1.15962, no patch needed: upstream now ships bundled skills (resources/bundled-skills/ with docx/pdf/pdf-reading/pptx/xlsx/frontend-design + a manifest), and usesLocalSkillStorage() now returns those bundled skills instead of an empty list. This may partially close the gap where document-skills were unavailable on 3p/gateway deployments (a manual workaround we documented) - worth a re-test on 3p, but it adds no platform-gated code. Also added: 14 renderer<->main IPC handlers (an external-browser-preview surface that is hard-disabled in this build, MCP-OAuth + folder-picker channels for local sessions, an SSH-target setter, and a plugin-bridge listServers) - none touch platform/spawn/native code.
  • Cowork daemon: no change required. v1.15962 adds a getNetworkDrives RPC and a networkDrives field on configure; both are absorbed by the daemon's existing tolerance (unknown-method default returns null -> Desktop falls back to [] inside a try/catch; the unknown configure field is dropped by a non-strict json.Unmarshal). COWORK_RPC_PROTOCOL.md updated to record this.
  • Baselines re-validated and updated: CLAUDE_FEATURE_FLAGS.md (registry z_() -> QR(), merger yDA -> HSA, gate HR() -> gM(), reader nt() -> it(), yukonSilver fn $oe() -> Uae(); 4 GrowthBook flags added / 1 removed, none gating a cowork/code/dispatch surface, so the enable_local_agent_mode override list is unchanged - all 15 forced flag IDs + 12 merger override names still present), ION.md (97 MB / 758 JS / 984 files / 25 CSS; config chunk QjesmIoF -> DAO_m0do; ternary obj var ft -> mt; fix_ion_dist_linux.nim still applies cleanly), and PLATFORM_GATE_BASELINE.md (gate counts unchanged; one macOS-only gate removed). .electron-version stays 42.0.0, so no .electron-shasums update.

Links

Don't miss a new claude-desktop-bin release

NewReleases is sending notifications on new releases.