Codex Windows 26.810.4967 idle main-process CPU busy loop in Chrome plugin app-server hashing
Summary
Codex for Windows 26.810.4967.0 enters a persistent Electron main-process CPU busy loop while completely idle. The regression started immediately after the app updated from 26.803.10989.0 to 26.810.4967.0 on 2026-08-14.
This does not require opening or using the in-app Browser. Closing Codex restores normal system responsiveness, but quitting is not an acceptable recovery while local tasks are running.
Symptoms
- Mouse movement becomes visibly discontinuous.
- Typing in Codex has noticeable input latency.
- The Electron main process continuously uses about
140–150%of one CPU core while the app is idle. - The background
codex.exetask service remains near idle (about0.6%), and GPU use is only about0.3–1%. - Toggling the pet visible and hidden can temporarily improve mouse motion, but does not stop the CPU loop or typing lag.
Reproduction
- Start Codex for Windows
26.810.4967.0. - Do not open the in-app Browser and do not start any new work.
- Leave the app idle.
- Observe sustained main-process CPU around
140–150%and system/input stutter. - Fully quit Codex; responsiveness immediately returns.
Built-in performance trace evidence
A roughly 15-second trace recorded with Codex's Help → Start performance tracing contained 3,971,851 events.
- Electron
CrBrowserMain(Chromium's term for the main/browser process, not the in-app Browser feature): ThreadControllerImpl::RunTask:68,122events, about13.00 sthread CPU.RunMicrotasks:59,220events, about11.74 sthread CPU.- V8 CPU-profile hotspots:
update -> update [hash] -> XK [src-BlUt09P1.js]: about7.55 s.createUnsafeArrayBuffer -> createUnsafeBuffer -> allocUnsafeSlow -> readFileHandle [promises]: about6.44 s.- Three V8 workers spent about
7.77 sof thread CPU inV8.GC_BACKGROUND_FULL_ARRAY_BUFFER_SWEEP.
Trace metadata (raw trace is not attached because it is 701,105,313 bytes):
- SHA-256:
82C2B7A19C3DB9537E834ADA7AF1D2285B70E3C362998339C7A426E7489EDA79
Suspected root cause in the packaged bundle
The packaged src-BlUt09P1.js identifies the hot function as the file-equivalence check in chrome-plugin-app-server-runtime:
async function XK(path) {
return createHash("sha256")
.update(await fs.promises.readFile(path))
.digest("hex");
}
The caller recursively compares the source and destination copies of the plugin app-server runtime. The compared set includes approximately:
codex.exe: 295 MBcodex-code-mode-host.exe: 59 MB- two Windows helpers: 10 MB combined
Reading and hashing both sides creates roughly 729 MB of transient buffers per full comparison. In the affected build, this check appears to repeat or overlap continuously while idle, producing the microtask storm, ArrayBuffer GC, CPU use, and input stutter.
The module name refers to Codex's background Chrome/plugin native-host runtime. It does not mean the in-app Browser page is required to trigger the bug.
Other checks
- Recreating the main chat renderer does not stop the loop.
- Ending Browser renderer/helper processes does not stop it.
- Lowering the main-process priority does not produce a perceptible improvement.
- A clean restart without using the in-app Browser still reproduces the issue.
Expected behavior
The Electron main process should remain near idle when Codex is idle. Resource synchronization should not repeatedly read and SHA-256 hash hundreds of megabytes, and recovery should not require quitting Codex while tasks are running.
17 Comments
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
Additional independent reproduction from another Windows 11 system on 2026-08-14.
26.803.10989.0to26.810.4967.0earlier the same day.This corroborates the version boundary, user-visible stutter, and process-level resource pattern. It does not independently distinguish the repeated hashing mechanism described here from the native-host reconciliation loop in #38510, so I am not claiming a root-cause attribution from this sample alone. Raw logs are not attached because they contain local paths and task metadata.
Independent reproduction on Windows 11 after updating Codex from 26.803.10989.0 to 26.810.4967.0.
Hardware:
Observed during the stuttering:
Controlled behavior:
Feedback/session ID: 019fff71-b6c5-7b31-844c-e5a35d6b9204
It is really bad, please help.
I maintain WinBridge Recovery, an independent Windows recovery/diagnostic tool for Codex Desktop local plugin/runtime state.
This trace is useful because it gives a clean boundary for what a local recovery tool can and cannot address. WinBridge can compare the currently installed AppX resources with the user-side Chrome plugin/app-server cache, versioned directories,
latest, Native Host state, and hashes. If those layers are stale or version-split, it can rebuild the user-owned state from the already installed official package with staging, verification and rollback.But if the source and destination resources are already current and byte-identical and
chrome-plugin-app-server-runtimestill re-reads/hashes hundreds of MB in a tight loop, that is an upstream lifecycle/reconciliation bug rather than something WinBridge should try to "fix" by repeatedly rewriting files.So for this issue I would mainly use WinBridge as a control: first rule out package/cache/version drift; if the state is healthy and the hashing loop persists, stop local repair and treat the 26.810 reconciliation loop as the actual bug. The project does not patch the app bundle or disable product security checks.
Independent reproduction on another Windows system with the same affected build.
Environment
OpenAI.Codex 26.810.4967.0ChatGPT.exe 151.0.7922.13726200.9168User impact
Controlled measurements
The high-CPU process was identified as the Electron main
ChatGPT.exeprocess (the process launched by Explorer that owns the renderer, GPU, and utility children).121.1%of one logical CPU core106.2%139.1%60/60one-second samples were at or above one full core121.9%.118.3%.118.5%.550–690 MBduring the longer captures.During the same process-level capture:
codex.exebackend was approximately idle10.2%of one core7.2%of one coreThis independently corroborates an app-global main-process busy loop in
26.810.4967.0, rather than load from one conversation, active tool execution, the Codex backend, or the GPU process.I did not capture the built-in performance trace, so I cannot independently confirm the hashing/reconciliation root cause described in this issue. No raw logs, local paths, account details, process IDs, or conversation/task IDs are included here.
Two-machine confirmation with live cache-junction and file-I/O evidence
Adding an independent two-machine reproduction from August 14, 2026.
Version boundary
OpenAI.Codex 26.803.10989.0to26.810.4967.0. Its bundledchrome@openai-bundledplugin version is26.810.41047.26.810.41047and independently developed the same progressive, system-wide mouse lag.User impact
The pointer initially pauses and resumes, then progressively worsens until mouse clicks no longer register. The affected user is currently limited to keyboard control and has previously had to shut Windows down from the keyboard.
Machine A live measurements during the affected state
ChatGPT.exe: 134.38% of one logical CPU core over 8 seconds.latestjunction pointed to the correct installed version for every sample, but its creation timestamp changed three times during a five-second watch. The target did not change.OK/CM_PROB_NONE.ChatGPT.exeapplication-hang event was present.Interpretation
This independently matches the hashing/reconciliation mechanism described here and the Windows path/junction findings in #38510:
26.810.41047directory;The same symptom on two separate Windows machines running the same internal payload, plus two different mice on Machine A, strongly argues against mouse hardware or a single USB controller as the primary cause.
No raw logs, machine names, IP addresses, account details, local paths, or conversation/task identifiers are included.
Independent corroboration from another Windows 11 system running the exact build 26.810.4967.0.
My strongest symptoms appeared while a long Codex task was working rather than while Codex was completely idle, but the boundary is the same: Codex starts acceptably, then the machine and Codex surface become sluggish; fully closing Codex restores normal responsiveness, and restarting it helps temporarily.
At one sample, Windows Task Manager showed the ChatGPT/Codex process group at approximately 2.6 GB and 34.6% CPU while total system CPU was approximately 88%. Individual Codex children included codex.exe at approximately 929 MB and another Codex process at approximately 762 MB. I also saw unusually frequent automatic context compaction in tasks that appeared new in the UI.
Luna Max had been stable for me throughout August, and a separate OneDrive memory spike was reduced by restarting OneDrive; the slowdown returned specifically with Codex active. I have not attached private logs, paths, account details, or conversation data.
Please link this with #38551 as an independent report of the same 26.810.4967.0 regression, while keeping the trigger difference (active long task versus idle loop) in mind.
Confirmed independently on Windows with Codex package
OpenAI.Codex 26.810.4967.0.Symptoms: while Codex was running, the entire Windows desktop became less responsive and the system mouse cursor visibly stuttered/jerked. The issue was reproducible enough to make the machine feel generally sluggish during Codex use.
I rolled back exactly one release to
26.803.10989.0(MSIX package) and the stutter disappeared completely. No other system changes were made between the affected and working state.So for this machine:
26.810.4967.026.803.10989.026.803.10989.0This strongly suggests a regression introduced in
26.810.4967.0rather than a general Windows/driver issue.Independent Windows reproduction with File I/O attribution and Chrome-extension A/B control
I reproduced the same regression independently on another Windows system.
Environment
OpenAI.Codex 26.810.4967.026.810.41047151.0.7922.1371.2.27259.1970926200.9168Faulted state
The Electron main
ChatGPT.exeprocess, rather thancodex.exe, a renderer, or the GPU child, was responsible for the sustained load:137–145%of one logical CPU core (11.4–12.1%of the whole machine)500–1000 MiB/sof logical reads, with a measured peak around1.21 GB/s104,000page faults/sDPC/interrupt load, physical-disk queue, available RAM, GPU load, mouse-device status, and relevant Windows hardware/driver event logs did not indicate a competing bottleneck.
A File I/O trace attributed the repeated reads to whole-file comparisons between the versioned Chrome/plugin app-server runtime under:
%LOCALAPPDATA%\OpenAI\Codex\bin\<runtime-id>%USERPROFILE%\.codex\plugins\.plugin-appserverThe packaged
chrome-plugin-app-server-runtimepath checks equal file sizes and then calculates SHA-256 by reading each entire file withfs.promises.readFile. In the faulted state, that source/destination equivalence check repeated continuously.Chrome-extension control
Disabling the ChatGPT Chrome extension while the fault was already active removed
extension-host.exe, but did not cancel the loop in the existing desktop main process. During the following 40.7-second observation:124.4%of one core760 MiB/s(range approximately328 MiB/s–1.21 GB/s)After fully quitting Codex from the system tray—not merely closing its window—and relaunching it with the Chrome extension still disabled:
4.2%of one core0.03 MiB/sand peaked at0.24 MiB/sThis suggests that disabling the extension prevents the integration from retriggering the faulty state, but does not stop a reconciliation/hash loop already latched in the running Electron main process.
Foreground-priority observation
While the loop continued unchanged, focusing System Informer made pointer motion appear smooth; switching back to the desktop or a normal-priority application made the stutter visible again. System Informer was running at High priority while
ChatGPT.exeremained Normal priority. This only masked the symptom—the CPU/read loop continued—and may explain reports where Task Manager or other elevated/high-priority tools appear smooth.No raw logs, trace files, usernames, task/conversation identifiers, account details, or unsanitized local paths are included.
Independent reproduction: ~333k page faults/s and working-set oscillation
Confirmed on another Windows system with the exact affected build.
Environment
OpenAI.Codex 26.810.4967.02800030-second live sample while Codex was idle
The affected process was the Electron main
ChatGPT.exe, not the bundledcodex.exeapp-server.The next busiest processes were only around 1.5k–2k faults/s. The bundled
codex.exeapp-server measured about 102 faults/s and the busiest renderer about 56 faults/s in the same comparison.System-level correlation
While the loop was active:
With Codex fully closed:
Closing and reopening Codex reproduced this A/B transition twice.
Controls
This independently corroborates the main-process repeated-read/hash and ArrayBuffer-GC mechanism described in this issue: the hundreds-of-MB working-set sawtooth and very high soft-fault rate match repeated whole-file reads much better than a monotonic memory leak.
The system counters establish correlation with the input stutter; they do not by themselves prove that TLB shootdowns are the direct cause.
Measurement method
Windows formatted performance counters queried through CIM:
No raw logs, local paths, account details, or conversation/task identifiers are included.
I can independently reproduce this on Windows 11 25H2 with Codex Desktop
26.810.4967.0. Chrome itself was not running.During a 20-second affected-state sample,
ChatGPT.exeaveraged approximately 132% CPU, 1.20 GB/s of reads, and 257,000 page faults per second. A Process Monitor capture shows repeated full-file reads of both the main Codex runtime and the.plugin-appservercopies, includingcodex.exeandcodex-code-mode-host.exe.As a controlled workaround, I set:
After fully quitting and reopening Codex, the sustained activity and system-wide mouse stutter stopped during continued Codex use. Restarting by itself had previously provided only temporary relief.
I can provide sanitized Process Monitor PML/CSV files, the 20-second performance-counter capture, relevant desktop-log excerpts, or a built-in performance trace. I can also test a candidate build or diagnostic flag. Please let me know which artifact and upload method would be most useful.
I can reproduce the same system-wide stuttering on Windows 10 with Codex Desktop
26.810.4967.0.I also tested the suggested workaround:
After fully restarting Codex, disabling the bundled Chrome integration does improve the situation: the stuttering takes longer to appear.
However, it does not fix the issue. After using Codex for some time, the system-wide stuttering still returns.
Fully exiting Codex restores normal Windows responsiveness.
This suggests that the Chrome native-host/cache reconciliation loop may be one contributor to the regression, but it does not appear to be the only cause.
Environment:
26.810.4967.0I did not capture the exact CPU/I/O measurements or the precise time-to-reproduction, so I don't want to provide inaccurate numbers.
I encountered the same issue and independently came to the same conclusion before finding this thread.
Microsoft Windows NT 10.0.26200.0 x64, 26.810.50856.
"resources\codex.exe" (281.5MB) is getting hashed repeatedly at 300MB/s+ by the built-in electron browser, causes significant input lag in Windows due to the mouse events not getting pumped quick enough.
AI:
Local performance sampling found that the Browser main thread was repeatedly and synchronously SHA-256 hashing the complete bundled
resources\codex.exe, which is295,151,920bytes (281.5 MiB). A Windows UI-delay capture recorded repeatedWM_MOUSEMOVEdelays of562–641 mson that same thread.The packaged and relocated copies of
codex.exewere already identical, including their SHA-256 hashes. Nevertheless, while otherwise idle, the Browser process recorded approximately3.9 GiBof reads in 10 seconds and continued using about1.2CPU cores.This appears related to the Windows bundled-executable relocation/validation path repeatedly executing the equivalent of:
Because this runs synchronously on Electron’s Browser main thread, Windows input messages cannot be serviced while the executable is being read and hashed.
Codex Desktop version:
26.810.6296.0, x64.Uploaded performance trace: no-active-thread-01a00371-dbb2-79c3-b2ba-a595da76742f
thank you for your reports, we believe we've addressed this in 26.810.7004.0. try that version and send a fresh feedback if it persists!
Independent trace match plus simultaneous MCP/helper-process accumulation
I can independently reproduce this on Windows with the affected 26.810 line. The problem began immediately after the 2026-08-14 update from
26.803.10989.0.I recorded a built-in performance trace while the system-wide mouse/typing stutter was occurring. The active CPU-profile window was ~20.7 s. The hotspot was in the Electron Browser/main process: native crypto
updateaccumulated ~13.1 s self time throughnode:internal/crypto/hash update -> XKinsrc-BlUt09P1.js.createUnsafeArrayBufferaccumulated ~1.36 s throughallocUnsafeSlow -> readFileHandle, andRunMicrotasksrepeatedly blocked the main process for roughly 650–673 ms at a time.Inspection of the packaged bundle confirmed that
XKis the SHA-256 whole-file hashing function used by the plugin/runtime file-equivalence comparison, so this independently matches the hashing/reconciliation mechanism already identified in this issue.The renderer JS heap remained approximately flat during the trace (~140.8 MB -> ~142.2 MB after minor GC), and the Browser/main heap was ~38 MB and stable. This does not look like a conventional renderer JS heap leak.
At the same time, I found a second large resource problem that may compound the same user-visible slowdown:
node_replcontexts: 20Fully terminating
ChatGPT.exeremoved the process tree and immediately restored normal responsiveness.This appears to be two simultaneous problems on this machine: (1) the Electron main-process hashing/reconciliation loop described here, and (2) MCP/helper processes being multiplied or retained instead of reclaimed, similar to #37672.
A further clean reproduction: after a fresh Windows reboot, the machine is responsive until Codex is launched. The mouse/typing latency begins almost immediately after opening the app, without opening a project, submitting a prompt, or starting any Codex work. Fully terminating the app again restores responsiveness.
Version clarification: a subsequent package check shows this machine is currently on
OpenAI.Codex 26.810.6296.0. The earlier trace/process measurements were collected during the affected investigation where26.810.4967.0had been recorded, but the later fresh-reboot/immediate-launch reproduction may have occurred after the automatic update to26.810.6296.0and should not be interpreted as specific to26.810.4967.0.I am waiting for
26.810.7004.0to become available so I can retest. The Codex updater currently reports “Update is becoming available, try checking again later”, so the new build has not yet been offered to this machine. The currently installed package isOpenAI.Codex 26.810.6296.0.I am withholding the raw ~144.6 MB trace because it contains local paths and task metadata, but I can provide a sanitized trace if maintainers request a safe upload method.
Independent reproduction + reversible workaround: runtime read/hash loop drops ~500× after rebuilding
.plugin-appserverAdding an independent Windows reproduction on Codex Desktop
26.810.4967.0, plus results from a reversible A/B workaround test.The original failure mode was a persistent Electron desktop-main loop with system/UI stutter and approximately
790–893 MB/sof logical File I/O reads. A 15-second WPR File I/O trace attributed the dominant reads to repeated full-file access of two identical Codex runtime sets: the versioned desktop runtime and the plugin app-server runtime. The Electron main process performed approximately 31,046.66 MB of reads in 15 seconds.I have now completed the previously proposed reversible A/B test. The result was strongly positive.
Environment
2620026.810.4967.0No chat/session data, SQLite databases, MCP configuration, skills, project files, tokens, or documents were deleted or edited.
---
Reversible A/B test
Procedure:
%USERPROFILE%\.codex\plugins\.plugin-appserverto a dated backup directory, for example:
.plugin-appserver.backup-YYYYMMDD-HHMM.plugin-appserverdirectory.No automatic rollback was required in this test.
Important safety note
This is a rename, not delete procedure.
The backup should be retained until the user has had a reasonable period of stable operation. It should only be removed after stability is confirmed.
Do not delete unrelated files under
.codex, and do not delete or modify chat/session stores, SQLite databases, project data, credentials, tokens, skills, or documents as part of this workaround.Raw traces and unsanitized local paths should not be published.
---
What was inside the old and regenerated runtime directories
Both the dated backup and the newly recreated
.plugin-appserverdirectory contained only four runtime files:codex.execodex-code-mode-host.execodex-windows-sandbox-setup.execodex-command-runner.exeThe total size of each runtime set was approximately 347.75 MB.
For each corresponding old/new file pair:
So the positive result cannot be explained by Codex downloading or generating a different executable version.
The runtime binaries themselves were byte-identical before and after the workaround.
The inspected runtime directories did not contain user chats, conversation context, skills, projects, tokens, or working documents.
---
Before / after measurements
Before rebuilding
.plugin-appserverAffected-state measurements for the Electron desktop-main process:
The system remained usable in terms of total CPU capacity, but mouse movement, scrolling and UI responsiveness were visibly degraded.
After clean recreation of
.plugin-appserverFirst stabilized 10-second measurement after restart:
Independent second 10-second measurement during an active conversation:
ChatGPT.exeprocesses combined: 0.15% total host CPUCompared with the affected-state logical read rate of
790–893 MB/s, the regenerated runtime state reduced logical reads by roughly 500×.The user-visible result matched the counters:
---
What this A/B test establishes
Confirmed by measurement
The workaround produced a large and measurable change in the observed failure state:
close Codex → rename
.plugin-appserver→ restart → allow Codex to recreate it → remeasureAfter that sequence:
The newly generated runtime binaries were byte-identical to the old ones.
Therefore the improvement is not explained by replacing bad executables with different binaries.
Engineering interpretation — hypothesis, not proven source-level root cause
The result is consistent with the rename/recreation resetting some stale or latched state associated with plugin app-server runtime verification, registration, synchronization, watcher state, or related cache/lifecycle metadata.
That interpretation fits the earlier WPR evidence showing repeated full-file reads of identical source/destination runtime binaries.
However, this experiment does not identify the exact internal state variable or closed-source code path that was stuck.
So I would describe this as:
The plugin runtime was not permanently disabled. Codex recreated
.plugin-appserverautomatically and normal application/chat operation continued.---
Practical workaround for users still affected on this build
For users who are still on an affected
26.810.4967.0installation and see the same symptoms:%USERPROFILE%\.codex\plugins\.plugin-appserver..plugin-appserveris recreated automatically.This should not be interpreted as a reason to delete chat history, session databases, project data, skills, tokens, or other files under
.codex.---
Relationship to the reported fix build
A maintainer has noted in this issue that the regression is believed to be addressed in
26.810.7004.0.All measurements and the workaround above were performed on the affected
26.810.4967.0build.I am not claiming that the same loop persists in
26.810.7004.0or later.For a clean follow-up, the most useful test would be to run the same CPU/File I/O counters and, if necessary, another short WPR trace on the newer build and compare it against the affected-state measurements above.
If the issue is gone in the newer build, that would provide a useful before/after confirmation.
If it persists, a fresh report should reference this issue and include the new-build measurements.
---
Privacy
No usernames, account details, conversation IDs, task IDs, project names, local personal paths, transcript content, credentials, or tokens are included here.
The raw ETL is intentionally not published because kernel File I/O traces contain local filesystem paths.
I can provide additional sanitized aggregates if useful.
Additional reproduction on Windows x64 with Codex Desktop 26.810.6296.0 and bundled Chrome plugin 26.810.50856. I have not tested the reported fix build 26.810.7004.0 yet.
Important workaround nuance: disabled is still watched
I first used the commonly suggested configuration workaround and fully restarted the app:
The loop stopped immediately after restart, but returned after the app had remained open for roughly one day. At that point
codex plugin listreported:A live breakpoint in the Electron main process at the
chrome-native-host-cache-watcherreconcile call repeatedly captured:So the native-host cache watcher still considered Chrome active for reconciliation based on installed state even though the plugin was disabled.
Runtime evidence during the recurrence
A 10-second CPU profile again showed native
crypto.Hash.update()as the dominant main-process hotspot. The captured async chain was:XKin the packaged bundle performs the equivalent of:Breakpoint arguments showed repeated hashing of paired runtime files under the versioned Codex runtime and
.codex/plugins/.plugin-appserver, includingcodex.exe,codex-code-mode-host.exe,codex-command-runner.exe, andcodex-windows-sandbox-setup.exe.A 20-second affected-state sample measured:
A Chrome
extension-host.exeprocess had also survived the Codex app restart and kept the installed Chrome cache directory open. The official removal command initially failed with WindowsAccess denieduntil that stale extension host was terminated.After
codex plugin remove chrome@openai-bundledsucceeded, the plugin state becamenot installed, the Chrome cache directory disappeared, and the hashing loop stopped immediately without restarting Codex. A 20-second post-removal sample measured:This suggests that on 26.810.6296.0, disabling the plugin is not a durable mitigation because native-host cache reconciliation follows installation state rather than enabled state. Fully removing the Chrome plugin is the durable workaround observed here.
Privacy: no usernames, account data, conversation/task IDs, absolute personal paths, IP addresses, raw logs, screenshots, credentials, or process dumps are included.