Skip to content

Codex App visible window causes sustained high GPU/WindowServer CPU and MacBook Air extreme heat #30464

Open

Description

@lewismoss

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?

  1. Open Codex App on macOS.
  2. Start or resume a normal Codex chat/session.
  3. Leave the Codex window visible while the session is active.
  4. Watch Activity Monitor or run ps -axo pid,ppid,%cpu,%mem,rss,etime,command | sort -k3 -nr.
  5. Observe sustained high CPU in WindowServer plus Codex GPU/renderer processes.
  6. Hide the Codex app window.
  7. Observe CPU drop sharply.
  8. Restore/show the Codex app window.
  9. 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

  1. added
    appIssues related to the Codex desktop app
    on Jun 28, 2026
  2. changed the title [-]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[/+] on Jun 28, 2026
  3. larryisthere commented on Jul 1, 2026

    @larryisthere

    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:

    • As soon as Codex Desktop is opened, the whole system becomes noticeably sluggish.
    • Quitting Codex Desktop makes the machine responsive again almost immediately.
    • This happens even after closing Chrome and disabling Handoff/Continuity.
    • The issue is tied to Codex Desktop. The CLI alone does not explain the user-visible slowdown.

    Local evidence from Activity Monitor / ps / sample:

    • Codex (Renderer) spiked to ~85-90% CPU shortly after opening Codex Desktop.
    • WindowServer rose at the same time, observed around ~23-49% CPU.
    • Codex main process RSS reached roughly 1.2GB during the spike.
    • Codex (Service) --type=gpu-process also showed elevated CPU.
    • Codex app-server re-launched SkyComputerUseClient and node_repl subprocesses.

    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.600000
    • HIRunLoop ... taking so long
    • AppKit layout recursion warning: layoutSubtreeIfNeeded ... already being laid out
    • StatusBar / BaseBoard scene failures during quit

    The 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.

  4. larryisthere commented on Jul 1, 2026

    @larryisthere

    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:

    • macOS: 26.5.1 build 25F80, Apple Silicon
    • Forced reboot recorded at 2026-07-01 11:41:36 +0800
    • ResetCounter reported btn_rst,finger_reset force_off
    • The affected window was roughly 2026-07-01 10:20-11:42 +0800

    WindowServer / HID symptoms during that window:

    WindowServer timed_out_fence=320
    WindowServer ping_timeouts=504
    WindowServer event_enqueue_error=34
    WindowServer event_enqueue_dropped=32
    WindowServer cursor_disabled=103
    

    Other concurrent pressure:

    Spotlight/LaunchServices bundlefinder=12
    LaunchServices failed_register=74
    mds_xpc_timeout=4
    spotlight_queries=1882
    spotlight_stalling=38
    cloudkit_requests=3968
    

    Chrome also produced a disk-writes diagnostic at 2026-07-01 11:02, with about 2147 MB written 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:

    SkyComputerUseService: 1 process
    SkyComputerUseClient event-stream mcp: 5 processes
    

    The paths were under:

    ~/.codex/computer-use/Codex Computer Use.app
    

    And the clients were launched as:

    ./Codex Computer Use.app/Contents/SharedSupport/SkyComputerUseClient.app/Contents/MacOS/SkyComputerUseClient event-stream mcp
    

    This differs slightly from #29157, where the leaked helpers were turn-ended notifier helpers. In this later incident the residual helpers were event-stream mcp clients plus SkyComputerUseService. 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:

    ~/.codex/computer-use
    ~/.codex/plugins/cache/openai-bundled/computer-use
    ~/.codex/plugins/cache/openai-bundled/record-and-replay
    ~/Library/Preferences/com.openai.sky.CUAService*.plist
    ~/Library/Caches/com.openai.sky.CUAService*
    ~/Library/HTTPStorages/com.openai.sky.CUAService*
    ~/Library/Group Containers/2DC432GLL2.com.openai.sky.CUAService
    

    After cleanup, pgrep no longer finds SkyComputerUseService, SkyComputerUseClient, CUAService, Computer Use, or record-and-replay processes, and filesystem search no longer finds Computer Use / SkyComputerUse / CUAService artifacts under ~/.codex or ~/Library.

    Suggested product-side checks:

    • Ensure closing/quitting Codex Desktop tears down all SkyComputerUseService and SkyComputerUseClient event-stream mcp children.
    • Add a stale-helper guard for event-stream mcp clients, not only turn-ended helpers.
    • Make Computer Use helper lifecycle observable from the UI or logs, so users can tell whether Computer Use remains active after the desktop window is closed.
    • Consider disabling Computer Use helper startup when the feature is not actively being used, or add a supported setting to fully disable/remove the Computer Use runtime.
  5. lewismoss commented on Jul 14, 2026

    @lewismoss
    Author

    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 has opaqueWindows: 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:

    • Translucent sidebar enabled → opaqueWindows: false
    • Translucent sidebar disabled → opaqueWindows: true

    I 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/codex repository, so I cannot submit a directly buildable PR against it. The responsible logic was found in the shipped app.asar.

  6. eartar93 commented on Aug 4, 2026

    @eartar93

    Confirming the same issue on a newer Codex Desktop build, with a controlled renderer isolation test.

    Environment

    • Codex Desktop 26.727.51351 (build 6119)
    • Bundled Codex Framework / Chromium 150.0.7871.182
    • macOS 15.7.4 (build 24G517)
    • MacBook Pro Mac16,7, Apple M4 Pro, 20-core GPU, 48 GB RAM
    • Internal 3456×2234 Retina display; no external display needed to reproduce

    Observations

    • With Codex visible during ordinary use, hardware sampling showed approximately 65–77% overall GPU busy.
    • Activity Monitor attributed approximately 63–72% GPU to WindowServer and approximately 28% GPU to the Codex GPU service.
    • Restarting the Codex GPU helper did not resolve the condition.
    • Restarting the main renderer did not resolve it; the load returned with the replacement renderer.
    • Restarting Chrome's GPU helper did not materially affect the condition, and Chrome settled around 2% CPU.

    Controlled isolation

    Suspending only the active main Codex renderer with SIGSTOP reduced 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-e40adafcf317

  7. 1368584035-sketch commented on Aug 20, 2026

    @1368584035-sketch

    Confirming this issue on a current Apple Silicon Mac mini.

    Environment:

    • ChatGPT/Codex Desktop: 26.814.41407, build 6720
    • Embedded Chromium/Codex Framework: 151.0.7922.137
    • macOS: 26.6.2 (25G83)
    • Hardware: Mac mini, Apple M4, 16 GB RAM
    • Display: 3840 × 2160

    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:

    • WindowServer: 25.6–26.1% CPU
    • Codex GPU service: 20.3–24.2% CPU
    • Main Codex Renderer: 8.6–11.4% CPU, approximately 600 MB RSS
    • codex app-server: approximately 0–1.5% CPU
    • Overall system CPU remained approximately 82% idle

    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 therm reported 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.

  8. 1368584035-sketch commented on Aug 23, 2026

    @1368584035-sketch

    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.

  9. XXXym commented on Aug 24, 2026

    @XXXym

    Confirming the same rendering/compositor pattern on a substantially newer desktop build.

    Environment

    • ChatGPT/Codex Desktop: 26.818.41509 (build 6962)
    • macOS: 27.0 (26A5416b)
    • Hardware: MacBook Pro, Apple M3 Max (16 CPU cores), 64 GB RAM
    • App uptime when captured: about 2 days 8 hours

    Observations

    During an active Codex turn with the app visible, repeated one-second process snapshots showed:

    • WindowServer: 40.5%–43.2%
    • Codex GPU service (--type=gpu-process): 32.4%–42.5%
    • Long-lived Codex renderer: 17.6%–20.9%
    • Second Codex renderer: 8.5%–13.1%
    • codex app-server: usually near idle outside brief tool activity

    A separate top interval captured WindowServer at 51.7%, the GPU service at 16.6%, and the renderers at 8.7% and 4.1%.

    I then hid the entire ChatGPT/Codex app and waited 8 seconds before taking another interval sample:

    • WindowServer: 29.1%
    • Long-lived renderer: 0.0% (five earlier hidden snapshots measured 0.1%–1.5%)
    • GPU service: 23.6%
    • Second renderer: 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 contained Compositor and VideoFrameCompositor threads. The GPU process reported an 823.7 MB physical footprint with a 9.4 GB historical peak. The long-lived renderer was using roughly 1.4 GB RSS 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 the sample reports if useful.

  10. czii commented on Sep 2, 2026

    @czii

    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.

  11. zdenekjourney commented on Sep 10, 2026

    @zdenekjourney

    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

    Codex App 26.903.71938 (build 8576)
    macOS 26.4.1 (Darwin 25.4.0 arm64)
    Machine Apple M5 Pro, 20 GPU cores, 64 GB
    Display built-in only, 3024x1964 Retina, no external monitor

    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-process understates this. The IOAccelerator counters give the real number without sudo:

    ioreg -r -d 1 -w 0 -c IOAccelerator | grep -o '"Device Utilization %"=[0-9]*'
    

    Results

    State Device Utilization Codex renderer CPU
    Codex window visible 54–76% 95–105%
    Codex window visible, all local GPU compute stopped 54% 103%
    Codex fully quit 0% (3 consecutive samples) n/a

    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:

    • Ollama shut down, including a gemma4:26b that had 17.4 GB resident in VRAM with an infinite keep_alive
    • LM Studio left with no model loaded

    Device 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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    appIssues related to the Codex desktop appbugSomething isn't workingperformance

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions