Codex App visible window causes sustained high GPU/WindowServer CPU and MacBook Air extreme heat
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.
8 Comments
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
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.
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.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:
| Process | Before | After mean | Reduction |
|---|---:|---:|---:|
| WindowServer | 83.9% | 7.87% | 90.6% |
| Codex GPU process | 34.4% | 2.38% | 93.1% |
| Active renderer | 12.7% | 2.93% | 76.9% |
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.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-e40adafcf317Confirming 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.
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.
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.