[BUG] Claude desktop (v1.20186.9) consumes ~70% CPU and ~2.4GB RAM on a MacBook Air M3 (16GB)
Preflight Checklist
- [x] I have searched existing issues and this hasn't been reported yet
- [x] This is a single bug report (please file separate reports for different bugs)
- [x] I am using the latest version of Claude Code
What's Wrong?
Summary
Claude desktop (v1.20186.9) consumes ~70% CPU and ~2.4GB RAM on a MacBook Air M3 (16GB) immediately after launching a single Claude Code session, even with minimal interaction. On a fanless machine, this causes sustained heat.
Environment
- Machine: MacBook Air M3, 16GB RAM (Mac15,13)
- macOS: 14.6 (23G80)
- Claude desktop: 1.20186.9
- Claude Code: 2.1.209
Observed resource usage
Measured via Activity Monitor and ps aux within seconds of starting a new Claude Code session (before any substantial work):
| Component | CPU% | RAM | Description |
|---|---|---|---|
| Claude Helper (Renderer) | ~43% | 565MB | Electron renderer — the main hog |
| Claude Helper (GPU) | ~19% | 111MB | GPU compositing with 2 CVDisplayLink threads |
| Claude (Main) | ~4% | 258MB | Electron main process |
| Virtual Machine Service | ~1% | 867MB | Full Linux VM sandbox (rootfs.img + sessiondata.img, 10GB each) |
| claude (CLI subprocess) | ~4% | 394MB | Claude Code process |
| 13 other helpers | ~0% | ~200MB | MCP servers, disclaimer processes, utility renderers |
| Total | ~70% | ~2.4GB | |
Activity Monitor's Energy tab shows Claude's 12-hour energy impact at 118.04 (second only to Brave Browser), with App Nap disabled.
Process sampling analysis
Used sample to profile the three heaviest Claude processes for 3 seconds each. Key findings:
Renderer (PID 1124, ~43% CPU)
- Main thread is actively running V8 JavaScript, including deeply recursive calls through
node::crypto::GetDigestImplementation(10+ levels of recursion visible in the sample). - 4 DedicatedWorker threads are all parked on
mach_msg2_trap, waiting for messages. - Compositor thread is actively polling via
kevent64, performing compositing work even though the UI is essentially static text. - 489 idle wake-ups reported by Activity Monitor — extremely high for a chat window.
GPU process (PID 1101, ~19% CPU)
- Two CVDisplayLink threads firing callbacks at display refresh rate. Each frame triggers compositing work through
CVDisplayLink::performIO→ Electron Framework rendering pipeline, even when nothing on screen has changed. - VizCompositorThread doing CFRunLoop work, processing display sources at refresh rate.
Virtual Machine Service (PID 1137, ~1% CPU, 867MB RAM)
- Apple Virtualization.framework running a full Linux VM with two 10GB sparse disk images.
- Always running while Claude Code is active, consuming 867MB even when no tools are executing.
Impact
On a fanless MacBook Air, ~70% sustained CPU causes the chassis to run noticeably hot. The 12-hour energy impact (118.04) suggests this is not transient — it persists as long as Claude is open. With 2.4GB of 16GB consumed, memory pressure also forces macOS's compressor to work harder, adding further CPU load.
What Should Happen?
A chat application displaying mostly static text should:
- Drop to near-zero CPU when idle (no typing, no streaming response)
- Not render frames at display refresh rate when the UI hasn't changed
- Not perform recursive crypto digest operations in the renderer at idle
- Use App Nap when the window is not focused
Error Messages/Logs
Steps to Reproduce
- Open Claude desktop on a MacBook Air M3 (16GB)
- Start a single Claude Code session
- Observe CPU in Activity Monitor — Claude Helper (Renderer) will be at 40%+ immediately
- Check Energy tab — no App Nap, high 12-hour power impact
Claude Model
None
Is this a regression?
I don't know
Last Working Version
_No response_
Claude Code Version
1.20186.9
Platform
Anthropic API
Operating System
macOS
Terminal/Shell
Terminal.app (macOS)
Additional Information
_No response_