Skip to content

Claude Desktop (macOS): main process hard-wedges when free RAM is low; WarmLifecycle keeps spawning session children with no memory backpressure #85104

Description

@gregoryecox-rgb

Environment

  • Claude Desktop 1.25927.0 (all freezes below; machine has since auto-updated to 1.26832.0)
  • Bundled Claude Code CLI 2.1.221
  • macOS Darwin 25.5.0, Apple Silicon, 48 GB RAM
  • Heavy multi-session use: several concurrent Code sessions + scheduled tasks + claude.ai connectors (9 remote MCP servers / 68 tools per session) + 5 local desktop extensions

Symptom

The app stops accepting chat input entirely; the whole UI is unresponsive and only force-quit works. This happened ~6 times on 2026-08-06 and twice on 2026-08-08. No crash reports are generated (nothing crashes — the main process stalls).

Evidence from ~/Library/Logs/Claude/main.log

The main process logs [ScheduledTasks] lines every 60 s, so log silence >150 s indicates the Electron main process stopped executing (not just a renderer). Confirmed silent gaps, with the last [process-memory] reading before each:

Date Silence tree_rss_sum children sys_free_raw
08-06 5.5 min ~4.7 GB 25 616–706 MB
08-06 33.1 min 4.6 GB 20 ~1.4 GB falling
08-06 3.5 min 5.2 GB 24 706 MB
08-08 4.5 min 8.7 GB 52 1020 MB
08-08 4.0 min 5.2 GB 27 1092 MB

Every freeze occurred with sys_free_raw ≈ 0.6–1.1 GB. (Note sys_free — which includes reclaimable cache — stayed at 11–28 GB throughout; it is not the operative number.)

The immediate trigger in each case was session lifecycle work at that floor:

11:15:02 [WarmLifecycle:preview] Warming up session local_6bab6417-…
11:15:09 Sending message to session local_6bab6417-…
11:15:17 [process-memory] … sys_free_raw=1092MB
11:15:19 [CCD] LocalSessions.setFocusedSession: sessionId=null
[ 4.0 minutes of total log silence — user force-quits ]

and on 08-06:

13:15:47 [CCD] Warming session local_a97cdd68-…   (sys_free_raw ≈ 1.4 GB and falling)
[ 33.1 minutes of silence ]

Analysis

  1. Each warm session holds a ~500 MB CLI child plus local MCP server processes. Children accumulated to 52 (5.4 GB) on 08-08; electron_main itself was at 1285 MB RSS.
  2. Archiving a session does not release its child: LocalSessions.archive is immediately followed by [WarmLifecycle:session] Starting idle timeout: 900s — the child stays warm 15–30 min after explicit archive.
  3. WarmLifecycle warms new sessions even when sys_free_raw is ~1 GB — the subsystem that logs the memory number applies no backpressure from it.
  4. When macOS starts aggressive reclaim at that floor, the (very large) main process pages and its event loop stalls minutes at a time → user force-quits.

Requests

  • Backpressure: don't warm additional sessions (and start shedding idle warm children) when sys_free_raw drops below a threshold.
  • Release the CLI child on explicit archive, or expose a "close session now" that does.
  • Expose warm-pool size / idle-timeout as settings (none exist in the bundle today).
  • Consider trimming electron_main RSS growth (1.3 GB after a morning of use).

Also observed (separate, minor)

  • With the Claude browser extension installed in two Chromium browsers (Chrome + Comet), the bridge rejects tool calls with Multiple Chrome extensions connected — target_device_id required (674 log occurrences) while ensureConnected reports connected=true — sessions bind to a dead browser connection.
  • [ScheduledTasks] looks for task files at ~/Claude/Scheduled/<name>/SKILL.md while the scheduler MCP keeps them at ~/.claude/scheduled-tasks/<name>/SKILL.md, producing ENOENT warn-spam every 60 s for ~40 tasks that exist and fire correctly.

🤖 Drafted with Claude Code from local main.log forensics; filed by the account owner.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions