Claude.app desktop: dispatched task subprocesses accumulate without cleanup (150+ processes / ~31 GB RAM)
Summary
The Claude desktop app (/Applications/Claude.app) spawns child processes for dispatched tasks via the bundled Claude Code CLI, but does not reap them when the tasks complete. Over ~38 hours of uptime with regular dispatch usage, 156 direct children accumulated, totaling 312 processes and ~31 GB resident memory.
Environment
- Hardware: Mac mini (M4, 32 GB RAM)
- macOS: 26.3.1 (build 25D771280a)
- Claude.app version: 1.8555.0
- Bundled Claude Code CLI: 2.1.146 (at
~/Library/Application Support/Claude/claude-code/2.1.146/claude.app/Contents/MacOS/claude)
Reproduction
- Launch
/Applications/Claude.app. - Use the dispatch feature multiple times over a session lasting hours/days.
- Inspect process tree:
````
ps -Ao pid,ppid,rss,command | grep 'claude-code/.*claude\.app'
Observed
- 156 processes with PPID equal to the main Claude.app PID, all running:
````
/Applications/Claude.app/Contents/Helpers/disclaimer
/Users/<user>/Library/Application Support/Claude/claude-code/2.1.146/claude.app/Contents/MacOS/claude --output-format ...
- Including their own subprocess fan-out: 312 total processes, ~31 GB RSS.
- RSS grows linearly with dispatch invocations; no decrease observed even when dispatched tasks have clearly completed.
- Quitting Claude.app reaps the entire tree and reclaims the memory.
Expected
Dispatched-task subprocesses should exit and be reaped when their work completes.
Secondary issue (possibly related)
Squirrel auto-updater (Claude.app/Contents/Frameworks/Squirrel.framework/Resources/ShipIt) prompts for admin permission on every interactive (VNC) login. Suspect the update never finalizes because Claude.app is always running, so ShipIt re-prompts indefinitely. Happy to file separately if preferred.
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗