Animated gradient drains battery. Still causes ~40% WindowServer CPU with prefersReducedMotion:true (regression / #25575 not fixed)
Summary
The continuously-animated gradient bar at the top of the Claude Code UI redraws every frame at the display refresh rate, driving high WindowServer + terminal CPU on macOS. This drains the battery very quickly and it was reported in #25575 and closed as resolved by prefersReducedMotion: true, but that setting does not disable the gradient — it only covers spinner shimmer / flash effects. Filing fresh per the note on that (now locked) issue.
prefersReducedMotion does not cover the gradient
- Docs describe it as: "Reduce or disable UI animations (spinners, shimmer, flash effects) for accessibility."
- The 2.1.158 binary's internal schema string is identical: "Reduce or disable animations for accessibility (spinner shimmer, flash effects, etc.)", and it is only wired into the spinner components — there is no
statusBarAnimation/gradient gate. - With
prefersReducedMotion: trueset and verified loaded (fresh process started after the edit), the gradient still animates.
Measured impact (this machine, setting ON)
| | CPU |
|---|---|
| WindowServer | ~40–42% |
| iTerm2 | ~11% |
Matches #25575's reported 36–53% range. CPU returns to single digits when Claude Code is not running.
Steps to reproduce
- Set
{"prefersReducedMotion": true}in~/.claude/settings.json. - Launch
claudein iTerm2 (GPU/Metal renderer); confirm the setting is loaded. - Observe the top gradient still animating; watch WindowServer in
top/Activity Monitor.
Expected
A way to disable the gradient animation (e.g. a statusBarAnimationEnabled: false flag, extending prefersReducedMotion to cover it, or stopping frame submission when content is static — as Ghostty does, dropping it to 3–7%).
Environment
- Claude Code 2.1.158
- macOS 15.6.1 (24G90), Apple Silicon
- iTerm2 3.6.10
- Built-in Liquid Retina XDR (ProMotion, up to 120Hz), 3024×1964
- Related: #25575 (closed/locked), possibly #22509
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗