Repository navigation
Codex App visible window causes sustained high GPU/WindowServer CPU and MacBook Air extreme heat #30464
Description
What version of the Codex App are you using (From “About Codex” dialog)?
26.623.42026
What subscription do you have?
Pro
What platform is your computer?
Darwin 25.5.0 arm64 arm
What issue are you seeing?
The Codex macOS app makes my MacBook Air become very hot during normal use. I investigated this from within an active Codex session and found that the load is tied to the visible Codex desktop window, not to the CLI/app-server doing work.
Observed on macOS 26.5.1, Apple M4 MacBook Air, Codex App 26.623.42026.
While the Codex window was visible, process snapshots repeatedly showed high CPU in the Codex GPU/renderer path and WindowServer, for example:
- WindowServer: ~39-54% CPU
- Codex GPU process (
Codex (Service) --type=gpu-process): ~35-42% CPU - Codex renderer: ~11-31% CPU
- Codex app-server: usually low when not actively handling tool work
Sampling the hot processes showed the app-server mostly idle in Tokio/kevent/condition waits, while the hot GPU/renderer samples were in Chromium/Electron display/compositor paths and macOS graphics plumbing: CoreAnimation, IOSurface, ColorSync, Metal, AGX GPU driver calls, and compositor threads.
A hide/show test was especially clear:
- Before hiding Codex: WindowServer ~45%, Codex GPU ~42%, Codex renderer ~31%
- After hiding Codex with Cmd-H / setting the app invisible: WindowServer ~3.5%, Codex renderer ~0.6%, Codex GPU dropped out of the hot list
- After restoring Codex: WindowServer ~39%, Codex GPU ~38%, renderer ~13%
So the issue appears to be a visible-window repaint/compositing loop in the Codex desktop app. The background agent/session can continue without the heat spike when the Codex window is hidden.
I initially suspected my external display because I sometimes use a 3840x1620 @ 180 Hz external monitor, but I can reproduce the same heating on the MacBook Air by itself with no external display connected.
What steps can reproduce the bug?
- Open Codex App on macOS.
- Start or resume a normal Codex chat/session.
- Leave the Codex window visible while the session is active.
- Watch Activity Monitor or run
ps -axo pid,ppid,%cpu,%mem,rss,etime,command | sort -k3 -nr. - Observe sustained high CPU in WindowServer plus Codex GPU/renderer processes.
- Hide the Codex app window.
- Observe CPU drop sharply.
- Restore/show the Codex app window.
- Observe CPU rise again.
In my case, hiding the window reduced WindowServer from ~45% to ~3.5% and the Codex renderer from ~31% to ~0.6%. Restoring the window brought the load back immediately.
Profiling performed with sample showed the app-server was not the main source of work; the hot path was the visible UI/compositor/graphics path.
What is the expected behavior?
The Codex App window should not cause sustained high WindowServer/GPU/renderer CPU usage while visible during normal chat/session use. CPU/GPU activity should drop when the UI is idle, similar to what happens when the app is hidden.
Additional information
I checked for the syspolicyd pattern locally and did not see syspolicyd/trustd as the source of the load. I also checked thermal status with pmset -g therm; macOS had not recorded a thermal or performance warning at the time of testing, but the machine physically becomes hot during Codex use.
There were some stale/old Codex helper processes from previous sessions, but they were mostly idle and did not explain the high heat. The decisive signal was that hiding the visible Codex window immediately reduced WindowServer/Codex renderer/GPU load, and showing it brought the load back.
Activity
github-actions commentedon Jun 28, 2026
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
[-]Codex App visible window causes sustained high GPU/WindowServer CPU and MacBook Air heat[/-][+]Codex App visible window causes sustained high GPU/WindowServer CPU and MacBook Air extreme heat[/+]larryisthere commentedon Jul 1, 2026
I’m seeing a very similar issue on macOS with Codex Desktop, and the impact has been significant.
This cost us several hours of investigation and a very large number of Codex tokens because the machine became so sluggish that even diagnosing the problem from inside Codex was slow and noisy. After correlating process snapshots,
sample, and macOS system logs, the evidence points strongly to Codex Desktop as the trigger.Observed behavior:
Local evidence from Activity Monitor /
ps/sample:Codex (Renderer)spiked to ~85-90% CPU shortly after opening Codex Desktop.WindowServerrose at the same time, observed around ~23-49% CPU.Codexmain process RSS reached roughly 1.2GB during the spike.Codex (Service) --type=gpu-processalso showed elevated CPU.Codex app-serverre-launchedSkyComputerUseClientandnode_replsubprocesses.Sampling the hot renderer process showed the load inside Chromium/V8 renderer main-thread paths. Separately, system logs around the slowdown showed Codex Desktop UI/rendering related messages such as:
CoreAnimation Render fence tx observer ... timed out after 0.600000HIRunLoop ... taking so longlayoutSubtreeIfNeeded ... already being laid outThe strongest user-visible signal is immediate: quitting Codex Desktop relieves the slowdown. Reopening Codex Desktop brings back renderer/GPU/WindowServer pressure. This matches the pattern described here: Codex Desktop visible/running drives renderer/GPU/WindowServer load, and the system recovers when Codex exits.
This should probably be treated as a high-impact Desktop performance regression, because it makes the entire Mac difficult to use and makes Codex itself difficult to use for diagnosing the problem.
larryisthere commentedon Jul 1, 2026
Additional Computer Use data point from the same macOS machine as my earlier comment.
After the earlier WindowServer/GPU slowdown report, I hit another severe system-wide slowdown that ended in a forced reboot. This time I had already closed the Codex Desktop window before the forced restart, but post-reboot diagnostics showed that Computer Use helper processes were still active in the user session.
Environment / timing:
2026-07-01 11:41:36 +0800ResetCounterreportedbtn_rst,finger_reset force_off2026-07-01 10:20-11:42 +0800WindowServer / HID symptoms during that window:
Other concurrent pressure:
Chrome also produced a disk-writes diagnostic at
2026-07-01 11:02, with about2147 MBwritten over the sampled period, so Chrome/Spotlight/iCloud were also contributing pressure. However, the important Computer Use-specific finding is that closing the visible Codex Desktop window did not remove all Codex Computer Use processes.Current-process check after reboot showed:
The paths were under:
And the clients were launched as:
This differs slightly from #29157, where the leaked helpers were
turn-endednotifier helpers. In this later incident the residual helpers wereevent-stream mcpclients plusSkyComputerUseService. The user-visible failure was WindowServer/HID lag: dropped input events, render fence timeouts, cursor surface failures, and multiple clients failing WindowServer pings.I removed the local Computer Use runtime and caches as a mitigation:
After cleanup,
pgrepno longer findsSkyComputerUseService,SkyComputerUseClient,CUAService,Computer Use, orrecord-and-replayprocesses, and filesystem search no longer finds Computer Use / SkyComputerUse / CUAService artifacts under~/.codexor~/Library.Suggested product-side checks:
SkyComputerUseServiceandSkyComputerUseClient event-stream mcpchildren.event-stream mcpclients, not onlyturn-endedhelpers.lewismoss commentedon Jul 14, 2026
Update: code-level cause identified and workaround validated
I investigated this further against the currently installed desktop build, 26.707.72221, on the same M4 MacBook Air.
The load is caused by the macOS desktop window’s rendering/compositing path. The shipped Electron bundle creates a focused primary window with a transparent background and native macOS
vibrancy: "menu"unless the active theme hasopaqueWindows: true.While translucent, renderer layer updates are composited through Core Animation/IOSurface by the Codex GPU process and WindowServer. The bundle also has a large-window safeguard, but it only switches to opaque when both physical dimensions meet a 3840×2160 threshold. This does not account for high-refresh or ultrawide displays.
The existing Settings → General → Theme → Translucent sidebar option directly controls this behavior:
opaqueWindows: falseopaqueWindows: trueI disabled Translucent sidebar for both Light and Dark themes, enabled Reduce motion, quit, and reopened Codex.
Ten samples over 20 seconds while a turn was actively streaming showed:
A later instantaneous reading was WindowServer 1.0%, GPU 1.3%, and renderer 0.4%.
This is a clear step-change improvement and strongly validates the transparent/vibrant window as the dominant cause. The Rust app-server was not responsible.
Suggested product fix
Please make the primary macOS window use the existing opaque surface by default, leaving translucency as an explicit opt-in. At minimum, the opaque-surface decision should account for refresh rate/compositor cost instead of only the existing 3840×2160 size threshold.
Indefinite shimmer/streaming animations should also pause when not needed or when the document is hidden.
The relevant Electron desktop source does not appear to be included in the public
openai/codexrepository, so I cannot submit a directly buildable PR against it. The responsible logic was found in the shippedapp.asar.eartar93 commentedon Aug 4, 2026
Confirming the same issue on a newer Codex Desktop build, with a controlled renderer isolation test.
Environment
26.727.51351(build6119)150.0.7871.18215.7.4(build24G517)Mac16,7, Apple M4 Pro, 20-core GPU, 48 GB RAMObservations
Controlled isolation
Suspending only the active main Codex renderer with
SIGSTOPreduced overall GPU busy from the 65–77% range to approximately 7.5%. Resuming/replacing the renderer caused GPU busy to return to approximately 77%.This strongly isolates the active Codex renderer feeding the compositor/WindowServer path, rather than the Rust app-server or unrelated applications. It matches the continuous repaint/compositing behavior described in this issue.
Diagnostics and logs were uploaded privately through Codex
/feedback.Feedback ID:
019faf25-b610-7960-b385-e40adafcf3171368584035-sketch commentedon Aug 20, 2026
Confirming this issue on a current Apple Silicon Mac mini.
Environment:
The Mac remains cool during normal browsing and video editing with the same display configuration. The heating begins specifically when Codex starts working and decreases after Codex stops or exits.
I fully quit and relaunched ChatGPT/Codex, then left it idle for more than 10 minutes. The heating persisted.
A five-second process sample showed:
No Vite, Next.js, test runner, ffmpeg, Python, TypeScript server, project Node server, or other local development workload was active. Disk activity and memory pressure were not the trigger.
pmset -g thermreported no thermal or performance warning.This strongly matches a visible Codex UI/GPU compositing or repaint loop rather than local agent execution, project scanning, display refresh rate, or another application.
Please investigate why the Chromium GPU process and renderer continue submitting sustained work to WindowServer when there is no corresponding local workload.
1368584035-sketch commentedon Aug 23, 2026
Update: the workaround identified by @lewismoss was very effective on my setup.
After disabling Translucent sidebar and restarting ChatGPT/Codex, the sustained heating has essentially disappeared. My M4 Mac mini now remains almost cool during normal Codex use, and the issue is resolved for me.
This confirms that switching the window to the opaque mode is an effective workaround on ChatGPT/Codex Desktop 26.814.41407 (build 6720), macOS 26.6.2.
Thank you very much for investigating the cause and documenting the workaround.
XXXym commentedon Aug 24, 2026
Confirming the same rendering/compositor pattern on a substantially newer desktop build.
Environment
26.818.41509(build6962)27.0(26A5416b)Observations
During an active Codex turn with the app visible, repeated one-second process snapshots showed:
WindowServer:40.5%–43.2%--type=gpu-process):32.4%–42.5%17.6%–20.9%8.5%–13.1%codex app-server: usually near idle outside brief tool activityA separate
topinterval capturedWindowServerat51.7%, the GPU service at16.6%, and the renderers at8.7%and4.1%.I then hid the entire ChatGPT/Codex app and waited 8 seconds before taking another interval sample:
WindowServer:29.1%0.0%(five earlier hidden snapshots measured0.1%–1.5%)23.6%10.3%So hiding the app produced an immediate and repeatable drop in the main renderer and a meaningful reduction in
WindowServer, although the GPU service and second renderer did not become fully idle while the agent turn was still active.Process samples
A 3-second sample of the GPU process showed activity in
VizCompositorThread, Metal command submission/completion queues, and AGX driver calls. Renderer samples containedCompositorandVideoFrameCompositorthreads. The GPU process reported an823.7 MBphysical footprint with a9.4 GBhistorical peak. The long-lived renderer was using roughly1.4 GBRSS before the hide test.System-wide memory pressure was healthy and the machine was about 82% CPU-idle at the start of diagnosis, so the load was concentrated in the visible desktop graphics path rather than a saturated machine or a local project workload.
This appears to reproduce the same visible-window compositor issue on
26.818.41509. I can provide thesamplereports if useful.czii commentedon Sep 2, 2026
Confirmed on a MacBook Air with an Apple M4 (24 GB RAM, 512 GB SSD), macOS 26.6.2, and Codex Desktop 26.820.60940: disabling Translucent sidebar in Codex settings returned GPU usage to normal while Codex remained focused in the foreground. The setup included an external VX2479-4K-HD display at 3840×2160/60 Hz over USB-C/Thunderbolt. This appears to be a useful workaround and may indicate that translucent-window compositing is contributing to the high GPU/WindowServer load.
zdenekjourney commentedon Sep 10, 2026
Still reproducible on current builds and on M5 Pro. Adding a few data points that I did not see covered above: a negative control that rules out GPU contention from other apps, no external display involved, and a direct GPU-utilization metric instead of CPU% of the GPU helper process.
Environment
The last row matters because several reports in the related issues attribute this to large HiDPI external displays. It reproduces on the built-in panel alone, so an external display is not required.
Measuring actual GPU utilization
CPU% of
Codex (Service) --type=gpu-processunderstates this. The IOAccelerator counters give the real number withoutsudo:Results
The renderer process sat at roughly 100% of one core the entire time with no agent task running.
Negative control
I run local models on this machine, so before blaming Codex I removed every other GPU consumer:
gemma4:26bthat had 17.4 GB resident in VRAM with an infinitekeep_aliveDevice Utilization did not move at all: 54% before, 54% after. Quitting Codex took it to 0%. So this is not contention between Codex and something else on the machine, it is Codex on its own.
Why this is worse than a battery complaint on Apple Silicon
Unified memory means Metal inference and the Chromium compositor share one GPU. A visible Codex window holding 54–76% of the device does not just drain battery, it starves local model inference of GPU time for the entire session. Anyone running Ollama, LM Studio or MLX alongside Codex is paying for a spinner animation with their tokens per second.
Note on issue hygiene
There are currently 55 open and 22 closed issues with "GPU" in the title in this repo. #10432 was closed as completed in February; on 3 March someone reported this exact behaviour again in that thread and was asked to open a new issue. Six months and roughly a dozen new issues later, none of the macOS GPU issues I checked (#23026, #25077, #26736, #30464, #34415, #41038) has an assignee. Consolidating them behind one tracking issue would probably help this get prioritised, since the duplicates currently split the signal instead of adding it up.
Happy to run any further instrumentation on M5 Pro if it is useful.