Windows app hangs ("not responding") after launch — main process blocks forever in HID device enumeration (HID.node → hid.dll) when one HID device doesn't respond
What version of the Codex App are you using (From “About Codex” dialog)?
26.715.2305.0 (Microsoft Store package; internal release 26.715.21425 per desktop logs)
What subscription do you have?
ChatGPT Pro
What platform is your computer?
Windows 11 Home 10.0.26200 x64
What issue are you seeing?
Summary
Since the mid-July update (first 26.707.x, still present in 26.715.2305.0), the Codex Windows desktop app (ChatGPT.exe) becomes unresponsive ("stopped interacting with Windows") shortly after every launch. Windows Application event log fills with Application Hang (Event ID 1002, MoAppHang) entries; on 26.707.x builds the same condition crashed the app instead (exception 0xc06d007f). The app worked fine for months before this update on the same machine.
Root cause (diagnosed locally)
I sampled the hung UI thread's native stack of the main process:
ntdll.dll (blocked in kernel device I/O wait)
KERNELBASE/KERNEL32
hid.dll
HID.node <- bundled native module in app.asar build
chrome.dll (Electron main)
The main process enumerates HID devices on the UI thread (presumably the Codex Micro / accessory-detection path added in the July builds). One of my HID devices — a Corsair composite mouse, VID_1B1C&PID_1B75, exposing 4 HID interfaces — was in a bad state where opening its HID interfaces blocks indefinitely: CreateFileW (even with access mask 0, share RW) never returns. I verified this with an out-of-process probe: all other 30 HID interfaces on the system open + HidD_GetProductString in <100 ms, while all 4 interfaces of that device hang past any timeout.
The UI thread blocks in roughly 60-second cycles (window briefly becomes responsive between cycles, then blocks again). Because the main thread is blocked, worker/IPC traffic piles up and times out, producing misleading secondary log errors such as:
Timed out waiting for MCP response to plugin/listworker_rpc_response_error "Failed to resolve git common dir: git process timed out after 60000ms"mcpServerStatus/list ... durationMs=65209
Verification
Unplugging the offending HID device immediately and completely fixes the hang; the app then runs normally. No other software on the machine was affected by this device, since ordinary apps don't enumerate HID.
Expected behavior
HID enumeration should not run (or synchronously block) on the main thread, and per-device opens should be wrapped with timeouts — a single unresponsive HID device shouldn't freeze the entire app window.
Related issues
This looks closely related to the Codex Micro / Work Louder device-kit reports #33606, #33375, #33518, #33567, #33409 — my 0xc06d007f Application Error events on 26.707.x (17 events on Jul 16 alone) match the serialport.node delay-load failures described there. This report adds the 26.715 manifestation with a captured native stack: the HID.node path blocks the UI thread indefinitely on a real, unresponsive HID device, with a confirmed hardware trigger and unplug-verification.
Additional note (possibly a separate issue)
While diagnosing this I also found: if the MSIX package is installed on a secondary drive (Windows EFS-encrypts package files there by design), every "bundled executable relocation" copy fails with errno -4094 (ERROR_ENCRYPTION_FAILED surfaced as UNKNOWN, bundled_executable_relocation_failed ... during copy_directory) and the app retries endlessly on every focus event; on Windows Home (no EFS support) this is unrecoverable until the app is reinstalled on the system drive. Consider COPY_FILE_ALLOW_DECRYPTED_DESTINATION or a read+write fallback for that copy path.
What steps can reproduce the bug?
- Use a Windows machine with a HID device whose interfaces do not answer open requests. In my case: a Corsair composite mouse (
VID_1B1C&PID_1B75, 4 HID interfaces) in a wedged state —CreateFileWon any of its HID interface paths never returns (verified with an out-of-process probe; every other HID interface on the system opens in <100 ms). - Launch the Codex Windows app (26.715.2305.0, Microsoft Store).
- The window renders, then goes "Not responding" within seconds, and stays in ~60-second block cycles (briefly responsive between cycles). Windows logs Event ID 1002 (MoAppHang) for ChatGPT.exe on every launch.
- Unplug the offending HID device — the app immediately and permanently becomes responsive again.
Note: reproducing requires a HID device in this stuck state, which is why the bug appears hardware-random across users. Any HID device whose driver stalls opens will trigger it, since the enumeration happens on the main thread. On 26.707.x the same code path crashed instead (0xc06d007f, 17 Application Error events on Jul 16 alone on my machine).
What is the expected behavior?
HID/accessory detection (Codex Micro / device-kit path) should run off the main thread and wrap per-device opens with timeouts. A single unresponsive HID device should never freeze the entire app window, and its failure should degrade gracefully (skip the device, log once, no endless retry).
Additional information
_No response_
45 Comments
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
Same, After the update, it's impossible to work.
Impossible to work after the update, same problem
I can reproduce a closely related issue with a Corsair Gaming K63 keyboard on the exact same Codex Desktop package.
Environment
OpenAI.Codex_26.715.2305.0_x64__2p2nqsd0c76g0VID_1B1C&PID_1B403.0.88.0(2022-07-27)Normal-mode HID layout
In normal mode, Windows exposes the physical keyboard as a composite device with two USB interfaces and several HID collections:
The Corsair software stack also exposes:
Reproduction and A/B isolation
This has been reproduced more than once. Other USB devices can remain connected; disconnecting the Corsair keyboard alone is sufficient to recover Codex.
I also performed all of the following:
These actions temporarily improved the behavior, but the severe stalls returned in normal keyboard mode.
BIOS-mode comparison
After switching the K63 to BIOS mode, Windows exposes a much simpler physical HID layout:
The
MI_00,MI_01,COL01,COL02,COL03, andCOL04child interfaces disappear.Corsair composite virtual input deviceandCorsair Busremain present.With the keyboard in BIOS mode:
I tested that remaining first-open stall with the K63 physically disconnected. It still occurs without the keyboard and disappears on subsequent switches after the conversation has been loaded. That remaining symptom therefore appears to be a separate conversation-history loading/caching issue, not part of the Corsair HID problem.
I also queried the Windows Application event log immediately after one of the stalls for
ChatGPT.exe,HID.node,serialport.node,0xC06D007F, andMoAppHang. No matching Application events were recorded in the checked ten-minute window, possibly because these shorter stalls recover before Windows records an application hang.This appears consistent with the synchronous HID enumeration problem described in this issue, but with a Corsair composite keyboard rather than the Corsair composite mouse in the original report. BIOS mode is currently an effective mitigation for the severe stalls on this system.
A supported temporary option to disable Codex Micro/accessory discovery would be useful until HID enumeration is moved off the main thread and protected by per-device timeouts.
Just tested again and it’s also happening with my Corsair K70 keyboard and Scimitar mouse when connected
I have all Razer peripherals, plus a Lian Li LED controller.
I'm not sure which device is actually causing the issue, but it's extremely frustrating. Everything worked flawlessly before the update.
I can reproduce a closely related Windows failure on a different hardware configuration, with a useful version and workaround comparison.
Environment
10.0.26100, build2610032.0.16.1047OpenAI.Codex_26.707.9564.0_x64__2p2nqsd0c76g0Version history and observed failures
26.707.9981.0Windows repeatedly recorded Application Error Event ID 1000:
This coincided with severe Codex UI lag and brief system-wide mouse/input freezing. It reproduced many times on July 15 and 16.
26.715.2305.0After updating to the current Store build, the app became nonresponsive shortly after launch and had to be closed. Windows recorded Application Hang Event ID 1002 for
ChatGPT.exeversion150.0.7871.124at:The affected-build desktop log contains repeated warnings matching the secondary symptom described in this issue:
The stack traces point into the packaged
26.715.2305.0Electron worker. I have not sampled the native UI-thread stack, so I cannot independently confirm that HID enumeration is the root cause on this machine.Controlled GPU workaround on the older build
On
26.707.9564.0, disabling Chromium hardware acceleration in Codex's persisted Electron profile and recreating the GPU/shader caches resolves the severe renderer/GPU pressure:Caches recreated:
GPUPersistentCacheGrShaderCacheShaderCacheDefault/DawnGraphiteCacheDefault/DawnWebGPUCacheDefault/GPUCacheControlled send capture before the change:
Controlled send capture after the change:
No new
ChatGPT.exeEvent ID 1000 or 1002 entries have appeared since downgrading to26.707.9564.0. The currently running process started at 15:58:44 and remains responsive.The hardware-acceleration preference survived the update and downgrade and is still
false. Despite that,26.715.2305.0still became nonresponsive at launch. This suggests the newer launch hang is separate from, or occurs before, the renderer/GPU workaround can help.Requested fixes
I have retained the local desktop logs and Windows event details. I have not uploaded raw logs because they contain task/session identifiers, but I can provide sanitized excerpts if maintainers request them.
Adding a device-specific confirmation for the Corsair K70 LUX, plus a handle-level isolation result and a control run with Codex features restored.
Environment
26200.8875OpenAI.Codex_26.715.2305.0_x64__2p2nqsd0c76g0VID_1B1C&PID_1B36Reinstalling Codex and resetting its local Electron profile did not stop the intermittent hangs.
Main-thread and device-handle isolation
Repeated live stack samples while
ChatGPT.exewas non-responsive showed its main/UI thread blocked in this path:The packaged
HID.nodeis under the bundled@worklouder/device-kit-oai/node-hidintegration.I resolved the remote device handles back to their Windows PnP PDOs. The useful isolation result was:
HID\VID_1B1C&PID_1B36&MI_00&COL04(\Device\0000006f).COL04, the block moved toHID\VID_1B1C&PID_1B36&MI_01(\Device\00000071).MI_01, the block moved again toMI_00&COL01(\Device\0000006c), the actual keyboard collection.All temporarily disabled interfaces were restored afterward. This shows that disabling a single vendor-defined collection is not a reliable workaround: the synchronous scan simply proceeds to another interface, eventually including the keyboard collection itself.
BIOS-mode A/B result
In normal mode, Windows exposed eight K70-related PnP entries: the USB composite device, two USB input interfaces, and five HID collections (
COL01throughCOL04, plusMI_01).Moving the K70 LUX hardware polling switch to
BIOSreduced that layout to two entries:The already-hung Codex process became responsive immediately, without first restarting it.
For a final control run, I restored the Codex features I had temporarily disabled during diagnosis:
apps,plugins, andremote_pluginwere all enabled again. I then fully restarted Codex with the K70 still in BIOS mode and sampled the main process every two seconds for approximately 102 seconds:app/listcompleted in 10.566 seconds, subsequent calls in 254–272 ms;plugin/listcompleted in 365–568 ms;This complements the K63 BIOS-mode report above with the K70 LUX PID, direct handle-to-interface mapping, and a final run showing that stability followed the HID layout change rather than disabling apps or plugins. On this system, the observed freeze was an HID I/O wait and was not correlated with monotonic memory growth during the validation window.
Adding a controlled iCUE startup-order A/B reproduction and descriptor-level timing for the same Corsair Harpoon PID reported here.
Environment
26200.8875, x64OpenAI.Codex_26.715.2305.0_x64__2p2nqsd0c76g05.11.953.0.88.0VID_1B1C&PID_1B75, HIDbcdDevice/VER_0314Main-thread evidence
Three consecutive dumps of the non-responsive Codex main process, captured over approximately nine seconds, showed the same main/UI-thread path:
The bundled module path is under
@worklouder/device-kit-oai -> @worklouder/wl-device-kit -> node-hid.Inspection of the packaged application flow showed:
The global HID enumeration occurs synchronously even though discovery is looking for a Work Louder device. With no matching device, the service schedules another discovery attempt approximately every 10 seconds.
Per-interface timing
An out-of-process probe tested all 17 present HID interfaces individually.
HidD_GetAttributes, specifically insideHidD_GetManufacturerString, until the probe's 4,000 ms timeout:MI_01MI_00&COL01MI_00&COL02MI_00&COL03Controlled startup-order reproduction
This makes iCUE's presence specifically during Codex startup a reliable trigger on this configuration. The lower-level Corsair defect may be in iCUE, mouse firmware, or their driver interaction, but optional device discovery in Codex should still be isolated from the Electron main thread and bounded by timeouts.
Confirmed workaround
Disable iCUE automatic startup, launch Codex first, and only start iCUE afterward if needed. Close iCUE before restarting Codex.
Raw dumps were retained locally but are intentionally not attached publicly because they may contain process-memory data. Sanitized excerpts can be provided if maintainers request them.
In-app
/feedbackhas now been submitted with the current ChatGPT session logs for this reproduction.Feedback/session ID:
019f6e4e-b91f-7f92-b50a-c7eede7d000cThis corresponds to the controlled iCUE startup-order and HID timing evidence in my diagnostic comment above.
Important correction to my earlier iCUE startup-order report: iCUE is not required for the fault to recur.
After a clean reboot with iCUE automatic startup disabled:
A fresh per-interface probe at that point again showed exactly four timeouts, all on the Harpoon
VID_1B1C&PID_1B75interfaces:MI_01MI_00&COL01MI_00&COL02MI_00&COL03Each reached the probe's 4,000 ms timeout immediately after
HidD_GetAttributes; the K100 interfaces remained healthy. The Codex main window was non-responsive during the same capture.After disconnecting the Harpoon and switching to a Dell USB mouse (
VID_413C&PID_3029):Revised conclusion and workaround
iCUE can accelerate or reliably trigger the bad Harpoon state during Codex startup, but it is not the sole cause. The Harpoon can re-enter the stalled descriptor state while iCUE is completely absent, plausibly after repeated global HID discovery calls.
The reliable temporary workaround is to leave the Harpoon disconnected and use a different non-Corsair mouse until Codex moves accessory discovery off the main thread, adds timeouts/filtering, or provides a supported opt-out.
Adding another device-specific confirmation with a controlled A/B result.
Environment
OpenAI.Codex_26.715.2305.0_x64__2p2nqsd0c76g0(internal desktop version26.715.21425)VID_1B1C&PID_1B33Failure evidence
Immediately after the Microsoft Store update, Codex became repeatedly unusable. Windows recorded:
AppHangTransientWER reports forChatGPT.exeTimed out waiting for MCP responseand repeatedgit process timed out after 60000msIn normal keyboard mode, Windows exposed eight K70-related composite USB/HID entries.
BIOS-mode A/B
Moving the K70's hardware polling selector to
BIOSreduced the present device layout from eight entries to two standard entries:The already-running Codex process became responsive immediately, without restarting it.
I then sampled that same process every 10 seconds for 305 seconds:
AppHangTransientreportsHID.node/hid.dllerrors, or explicit hangsFinally, I fully restarted Codex while the keyboard remained in BIOS mode. The new process tree started in the interactive desktop session, all 10 package processes were responsive on delayed verification, and there were still zero new WER hangs or Event ID 1002 records.
This strongly supports the synchronous HID-enumeration diagnosis and also confirms that iCUE is not required for this failure. BIOS mode is an effective temporary workaround on this K70 variant, but it disables/reduces normal keyboard functionality and is not a reasonable permanent fix.
Could this regression please be prioritized? A supported temporary opt-out for accessory discovery would also help until HID enumeration is moved off the Electron main thread and protected by per-device timeouts.
Also, this https://gist.github.com/triesmon/bdc20a18ec34108e2608c1294c451f86 workaround posted in other issue worked for me, but its temporary and we need something official and permanent
I managed to catch the hang with ProcDump on Codex 26.715.2305.0 and checked the dump in WinDbg.
!analyze -hang shows the main CrBrowserMain thread blocked here:
NtDeviceIoControlFile
DeviceIoControl
hid.dll!DeviceIoControlHelper
HidD_GetManufacturerString
node-hid/HID.node
The loaded HID module is from:
@worklouder/device-kit-oai
-> @worklouder/wl-device-kit
-> node-hid
-> HID.node
Failure bucket:
APPLICATION_HANG_BlockedOn_DeviceIO_cfffffff_hid.dll!DeviceIoControlHelper
serialport.node was not loaded in this dump, so this one is definitely the HID path.
I then checked the device VID/PID from the dump and Windows device list. The device it seems to get stuck on is:
VID_1B1C
PID_1B8B
This is my Corsair Scimitar RGB Elite. Windows exposes it as a composite HID device with mouse, keyboard, consumer control and vendor-specific interfaces.
So the Scimitar seems to be the trigger on my machine, but the actual bug is still in Codex: it is querying HID device information synchronously on the Electron main thread with no timeout. One HID request getting stuck freezes the whole app.
I do not have any Codex Micro / Work Louder device connected.
Best workaround is to rollback! Forced to use CLI today. Rollback with https://github.com/Wangnov/codex-app-mirror/releases#release-codex-app-26.707.71524 and done with it.
I can confirm the same issue with a different Corsair HID device.
Environment
26.715.2305.026.715.21425Hardware
I captured a WinDbg hang dump while the app was unresponsive. The
CrBrowserMainthread was blocked in:I isolated the keyboard by disconnecting devices individually. When the app hangs, unplugging only the Corsair K55 immediately restores responsiveness without restarting the app.
I also submitted diagnostics through the desktop feedback dialog:
no-active-thread-019f7131-dd51-7a73-b633-66083d8ba90aI have the WinDbg stack output and a full hang dump available if needed.
Additional privacy-safe reproduction
26.715.2305.0; browser process reports Chromium150.0.7871.124.MoAppHang/ Application Hang Event ID 1002 forChatGPT.exe.A ProcDump triage dump was captured only after the application window was confirmed hung. The hung process's UI thread was explicitly named
CrBrowserMainand was blocked in this native call chain:The installed package contains the bundled chain
@worklouder/device-kit-oai -> @worklouder/wl-device-kit -> node-hid -> HID.node. This independently confirms that the Codex browser/main UI thread can synchronously block while an optional HID integration reads a device serial number.The HID devices reported normal PnP status at capture time. The implementation should avoid serial-number/device enumeration on the browser UI thread and ensure an unresponsive HID driver/device cannot block it.
Another affected user with a closely matching failure on the same package version.
Environment
OpenAI.Codex_26.715.2305.0_x64__2p2nqsd0c76g0ChatGPT.exeversion:150.0.7871.124Behavior
Troubleshooting already tried
%USERPROFILE%\.codex, which allowed one fresh start/sign-in..codex; projects and sessions reappeared, confirming the local project data is intact, but the startup freeze returned.Event Viewer
Windows records:
Application Hang, Event ID1002MoAppHang2020343198852172000UnknownThe executable path is:
C:\Program Files\WindowsApps\OpenAI.Codex_26.715.2305.0_x64__2p2nqsd0c76g0\app\ChatGPT.exeThis completely blocks access to existing Codex projects. The symptoms and package version appear to match this issue very closely.
After updating to version 26.715.3651.0 through the Microsoft Store, the HID-related issue is still present. The app may work briefly after launch, but it eventually becomes unresponsive again with the same freezing behavior.
The temporary bypass tested in #33912 may also be useful for confirming or escaping this permanent-hang variant. It prevents the Work Louder discovery call entirely, so it avoids entering the bundled
node-hidenumeration path. I validated it against periodic main-thread stalls; I did not reproduce the permanently wedged HID device described in this issue.The current
OpenAI.Codex 26.715.3651.0package still contains the same discovery loop.Unsupported diagnostic workaround used on a copied runtime only:
resources/app.asar.``
js
``this.discovery.findWLDevices([a.Project2077])
with
[], padded with ASCII spaces to exactly the original byte length. In context this becomes[t] = [], reporting no Codex Micro device without changing the archive's size or file offsets.The patched archive launched normally. As expected, Codex Micro detection is disabled in that runtime.
Measured result while an original and patched instance ran simultaneously, using independent 26-second window-message-loop probes:
| Instance | Samples | Delays >=50 ms | Delays >=180 ms | Maximum |
|---|---:|---:|---:|---:|
| Original | 1,630 | 3 | 3 | 499.79 ms |
| Patched | 1,704 | 0 | 0 | 4.70 ms |
The user also immediately reported that the patched instance felt substantially better. Full ETW diagnosis and the controlled workaround result are in #33912.
This is not an appropriate product fix and users should not have to modify application archives. It is supporting evidence that bypassing only
findWLDevices()removes the UI-thread problem. The proper fix remains moving HID discovery off the Electron main thread, adding timeouts around device operations, and avoiding repeated polling when the optional device is absent or unresponsive.The same issue occurs in the new version.
Additional confirmed hardware trigger: a Logitech wireless-charging mouse pad.
Environment/behavior:
Not Responding).A/B isolation:
This strongly suggests that the charging pad's USB/HID state-change event triggers the synchronous HID enumeration path described in this issue. The pad itself may be functioning normally for its intended use; Codex should tolerate HID disconnect/reconnect events without blocking the Electron main/UI thread.
This may affect other users with Logitech wireless-charging mouse pads or similar peripherals that periodically change HID/device state. Suggested handling:
Is this being worked on? The Codex/ChatGPT app is essentially unusable at this point, I can't even close it without terminating its task. Will probably install a previous version at this point and wait for a fix.
After updating to Microsoft Store package 26.715.4045.0, the issue is still present.
ExeFileVersion and ProductVersion are still 150.0.7871.124, and the app continues to freeze with the same behavior.
I can add a controlled A/B confirmation with a REALFORCE R2 keyboard.
Environment:
OpenAI.Codex_26.715.3651.0_x64__2p2nqsd0c76g0ChatGPT.exefile version:150.0.7871.124VID_0853&PID_0146and USB interfacesMI_00,MI_01, andMI_02When Codex was already showing “Not responding”, disconnecting only the REALFORCE R2 immediately restored the existing app window without restarting Codex or Windows. This was directly observable: the window became usable again immediately after the keyboard was unplugged.
As a control, I first disconnected a Razer DeathAdder V3 Pro mouse (
VID_1532&PID_00B6); that did not restore the hung app. The recovery occurred only after disconnecting the REALFORCE R2.This system previously also recorded repeated
0xc06d007fcrashes on the older 26.707.x package, followed by repeatedApplication HangEvent ID 1002 reports on 26.715.x. The device-removal recovery makes the HID enumeration path a strong match for the current permanent-hang behavior.Independent reproduction confirming this remains present in the newer Microsoft Store package
OpenAI.Codex_26.715.4045.0_x64(ChatGPT.exe150.0.7871.124) on Windows 11 x64 build 26200.Additional hardware trigger
The blocking device here is a vendor-defined collection on a Corsair Gaming K55 RGB Keyboard:
FFC0, usage0002input.infdriver 10.0.26100.8875This is the K55's vendor-defined
Col03, not the ordinary typing collection (Col01) or consumer/volume collection (Col02).Full-dump evidence
Sysinternals ProcDump captured three independent hung-window full dumps. In every inspected dump, the Electron main thread (
CrBrowserMain) was blocked in:The request was HID IOCTL
0x000B01BA(manufacturer-string query). The exact device path recovered from the first dump was:The renderer processes and bundled Codex app-server remained alive. The full dumps are retained locally and are not attached publicly because they may contain sensitive process memory; they can be provided through an approved private support channel if needed.
Bundled versions in package 4045:
@worklouder/device-kit-oai0.1.10@worklouder/wl-device-kit0.1.18node-hid3.3.0The bundled discovery calls unfiltered synchronous
nodeHID.devices()before applying the Work Louder vendor/device filter, and retries after 10 seconds when no supported device is found.Narrow workaround verification
As a reversible test, only the exact K55
Col03instance above was disabled withpnputil; the keyboard/USB parent and all other collections remained enabled. After reboot:Col03remained disabled across reboot.This confirms the issue is not limited to a Corsair mouse or to
CreateFileW: an unrelated composite keyboard can block later inHidD_GetManufacturerString, and the UI-thread architecture makes either stall fatal to app responsiveness.The most robust fix still appears to be prefiltering before opening unrelated HID interfaces, moving discovery off the Electron main thread, adding bounded per-device timeouts/cancellation, backing off after failure, and providing a supported way to disable optional Codex Micro discovery.
Confirmed on Microsoft Store package 26.715.4045.0, Windows 11 Pro 24H2 build 26100.2033, with a Corsair K68 (VID_1B1C / PID_1B3F). This is the same keyboard model reported in #33924.
Additional evidence from this machine:
26.707.12708.0was stable. Microsoft Store switched the installed package to26.715.2305.0at 2026-07-17 18:03 local time; the first matchingAppHangTransientoccurred at 21:15. There were no K68 PnP, driver-install, or device-configuration changes at the onset.26.715.4045.0.node-hid 3.3.0probe filtered to this K68 eventually blocks indefinitely while enumerating it; other HID devices on the same system complete in approximately 8–119 ms.MI_01vendor interface is insufficient: theMI_00collections remain present and the hang can recur.WLDeviceDiscovery.findWLDevices()still calls synchronous, unfilterednodeHID.devices()before filtering for Work Louder hardware.This independently corroborates the root cause described in #33912. The K68 is a compatibility trigger, but the product defect is unbounded synchronous all-HID enumeration on the Electron main thread. Discovery should be moved to a terminable utility/child process with a hard timeout/circuit breaker, and descriptor access should be restricted by the target VID/PID. Until that ships, a server-side gate disable or supported local “disable Codex Micro discovery” setting would prevent the entire UI from being taken down by one wedged HID endpoint.
Independent confirmation on a Corsair K95 RGB Gaming Keyboard with the current Microsoft Store build.
Environment
OpenAI.Codex_26.715.4045.0_x6426.715.31925(build 5551)26200.8655, x64VID_1B1C&PID_1B115.48.583.08(force-reinstalled during diagnosis)Timing change does not remove the trigger
Before the firmware reset, Codex often hung immediately at launch. After force-reinstalling K95 firmware, Codex could open normally but would hang after roughly 2–3 minutes. The changed onset initially looked like a second issue, but the same HID signature appeared during the delayed hang.
Controlled evidence
The K95 exposes five HID interfaces on this system. During the Codex freeze:
pnputil /restart-devicemade the already-running Codex window responsive immediately—no Codex restart and no Windows restart;This reproduces on package 4045 even with current iCUE and freshly installed keyboard firmware. The keyboard is a compatibility trigger, but the product-level failure remains unbounded synchronous all-device HID enumeration on the Electron main thread.
Narrow workaround verification
A reversible per-user launcher was tested that leaves the signed MSIX, drivers, iCUE, account data, and project state untouched. It replaces only:
The inherited serial bootloader discovery and all unrelated HID behavior remain intact. With only optional normal Codex Micro / Work Louder HID discovery bypassed:
This suggests the durable product fix should move discovery into a terminable worker/utility process with a hard timeout/circuit breaker (or otherwise avoid synchronous
nodeHID.devices()on the main thread). A supported setting to disable optional Codex Micro discovery would also provide a safe interim mitigation.I can reliably reproduce this with a Corsair K70 Rapidfire keyboard connected in its normal USB mode.
Environment
Behaviour
After signing in, the app begins repeatedly freezing and showing “Not Responding”.
The freezes occur in a loop, roughly every 10 seconds. Individual freezes can last approximately 75 seconds or longer. The rest of Windows remains responsive.
The app may temporarily work after unplugging and reconnecting the keyboard, but the issue eventually returns.
Reproduction steps
Confirmed workaround
Unplugging and Plugging the keyboard back in resets the freeze timer (~1 hour), or using the physical profile switch on the back of the keyboard to switch profiles, which restarts the keyboard also does the trick.
Corsair HID interfaces
The keyboard exposes these interfaces:
HID\VID_1B1C&PID_1B3A&MI_00&COL01HID\VID_1B1C&PID_1B3A&MI_00&COL02HID\VID_1B1C&PID_1B3A&MI_00&COL03HID\VID_1B1C&PID_1B3A&MI_00&COL04HID\VID_1B1C&PID_1B3A&MI_01Frozen thread stack
Process Explorer captured the following stack while ChatGPT was Not Responding:
Independent reproduction: Logitech G102 LIGHTSYNC mouse (VID_046D&PID_C092)
I can independently reproduce the same HID-triggered Windows Desktop hang with a Logitech G102 LIGHTSYNC gaming mouse, rather than a Corsair device.
Environment
USB\VID_046D&PID_C092Exact reproduction
Logging out through Codex CLI and signing back into the Desktop app also resets the condition temporarily, but the hardware A/B test shows this is not primarily an authentication problem.
Relevant PnP enumeration
This mouse is not exposed as only one mouse interface. Windows currently enumerates the same physical device as:
HID-compliant mouse—MI_00HID Keyboard Device—MI_01&COL01HID-compliant consumer control device—MI_01&COL02HID-compliant system controller—MI_01&COL03MI_01&COL04andCOL05Windows Dynamic Lighting is enabled on this machine, and
Logitech LampArray Serviceis running. The G102/G203 family also uses a 1000 Hz USB report rate by default. These may be useful dimensions for an internal repro, although I have not yet isolated whether the blocking interface is a normal HID collection, the vendor-defined collections, or LampArray.The mouse continues to work normally in other applications. This case therefore suggests that the issue may not require a permanently wedged device: a periodic HID/accessory enumeration or open on the Electron main thread may enter the blocked state after the app has been running for a while, and physical device removal releases the wait.
Local Desktop evidence
The current 26.715.4045.0 Desktop log records:
[electron-sampler] Failed to collect child process snapshotduring the affected sessionResizeObserver loop completed with undelivered notificationsAppshot hotkey inactive configured=true enabled=true platform=win32Those may be secondary symptoms or load amplifiers; the immediate USB-removal recovery is the strongest causal signal.
Corroborating reports
A current Reddit thread contains the same immediate-unplug recovery with Corsair K55, K63, K70, and K95 keyboards. One user reports that closing iCUE does not help, while physically unplugging/replugging the keyboard restores the app temporarily:
https://www.reddit.com/r/codex/comments/1uzvw77/codexchatgpt_windows_app_keeps_freezing_and/
This Logitech mouse reproduction broadens the affected class from a particular Corsair keyboard/device to composite gaming HID devices generally.
Requested fix
Please keep HID/accessory enumeration off the Electron main/UI thread, apply a bounded timeout per HID interface open/query, and skip/log a device that does not respond instead of retrying synchronously. Device arrival/removal and periodic re-enumeration should also be safe against a single stalled HID collection.
Follow-up A/B result: disabling Windows Dynamic Lighting prevents recurrence
A new controlled observation further narrows the trigger toward the Windows Dynamic Lighting / HID LampArray path.
Test
This is currently a preliminary but strong A/B result; observation will continue. It is more specific than the earlier unplug test because the physical composite HID device remains connected. The change disables the LampArray control path while preserving normal mouse input.
Updated hypothesis
For this Logitech case, the blocking interface may be the G102's HID LampArray / Dynamic Lighting integration, or an interaction between periodic Codex HID/accessory enumeration and the Logitech LampArray service, rather than the standard mouse interface or authentication state.
Relevant local state before the workaround:
USB\VID_046D&PID_C092\LAMPARRAYdevice.HKCU\Software\Microsoft\Lighting\AmbientLightingEnabledwas1.Logitech LampArray Servicewas running.Suggested maintainer repro matrix
HID.nodeenumeration/open timing by usage page and interface path, especially the Lighting and Illumination / LampArray collection.logi_lamparray_serviceowns or queries the LampArray interface.This workaround currently appears substantially better than repeated USB unplug/replug because normal mouse functionality remains available.
Correction to the Dynamic Lighting A/B observation
This corrects my earlier follow-up comment: https://github.com/openai/codex/issues/33780#issuecomment-5014271562
After a longer observation period, the ChatGPT/Codex Desktop UI did hang again while Windows Dynamic Lighting was still disabled.
Confirmed state at recurrence
HKCU\Software\Microsoft\Lighting\AmbientLightingEnabledremained0.Logitech LampArray Serviceremained running.Corrected conclusion
The previous “no recurrence after disabling Dynamic Lighting” result was a false positive caused by an insufficient observation window, or at most a timing change. Disabling Windows Dynamic Lighting does not prevent this hang and should not be considered a reliable workaround.
The evidence does not currently isolate LampArray as the blocking collection. LampArray or the Logitech lighting service may still affect timing, but the stronger and durable conclusion remains:
The only consistently confirmed recovery on this machine is a full G102 USB disconnect/reconnect. Authentication reset and Dynamic Lighting changes are temporary or non-causal observations.
Please treat the earlier Dynamic Lighting isolation claim as withdrawn. The requested product fix remains unchanged: prefilter supported hardware before descriptor access, move discovery out of the Electron main thread into a terminable worker/utility process, and enforce hard per-device timeouts/circuit breaking for HID enumeration and descriptor reads.
I can reproduce what appears to be the same problem with Corsair keyboard and mouse hardware.
ChatGPT Plus
Processor 12th Gen Intel(R) Core(TM) i7-12700KF (3.60 GHz)
Installed RAM 32.0 GB (31.9 GB usable)
Graphics card NVIDIA GeForce RTX 3070 (8 GB)
System type 64-bit operating system, x64-based processor
Pen and touch Pen support
Edition Windows 11 Pro
Version 25H2
Installed on 25/01/2025
OS build 26200.8875
Experience Windows Feature Experience Pack 1000.26100.334.0
On Windows, Codex Desktop hangs while enumerating the connected Corsair HID devices (K70 and mouse). Process inspection indicates that execution stalls around HidD_GetManufacturerString during manufacturer-string probing. The application eventually becomes briefly responsive, then retries the HID enumeration and freezes again.
Replacing the Corsair keyboard and mouse with a cheap AliExpress, non-Corsair, Machinivo RGB mechanical keyboard, and similar cheap RGB mouse, resolves the problem. Codex Desktop then launches and operates normally.
This suggests that the HID enumeration path may synchronously block not only while opening a device or retrieving its product string, but also while retrieving the manufacturer string. The per-device enumeration and string-probing operations may require timeouts and should not execute on the main UI thread.
Insane find, I confirm unplugging my Corsair M65 and moving to USB3.0 seems to have solved the issue. I do not have iCUE installed, so wasn't hopeful.. but wow, just wow. Thanks.🤞
Edit: Issue recurred with corsair mouse in usb3.0 port, so have replaced mouse with offbrand and things are working normally.
So what does one need to do to work with Codex app? Disconnect my Corsair peripherals? I have both a Corsair keyboard, mouse and a fan controller. And running iCUE too. It's not so practical to disconnect everything or mess around with USB ports.
Switch out the KB and Mouse to anything else or, as one user reported, plug the Corsair KB into USB3. The fan controller should not be an issue.
Follow-up: disabling one K55 collection only moved the main-thread block
I previously reported a narrow workaround on this same CNU system: disabling the Corsair K55 vendor-defined
Col03collection while preserving typing and volume controls. That was only a temporary/partial success.Codex Desktop froze again on package
OpenAI.Codex_26.715.4045.0_x64__2p2nqsd0c76g0(ChatGPT.exe150.0.7871.124). A fresh ProcDump hung-window capture shows the same cause, now on a different collection from the same keyboard.Fresh main-thread evidence
The triggered main-process dump caught Electron's main thread in:
A companion full main-process dump independently caught the same thread in
hid.dll!HidD_GetManufacturerString.The exact interface path present on the blocked stack was:
Windows identifies this instance as the K55 HID-compliant consumer control device (
COL02). This collection carries the user's working volume/media controls, so disabling it is not an acceptable workaround.Col03remained disabled throughout this fresh reproduction.Both renderer first threads were waiting normally in
ZwWaitForSingleObject; the whole-window hang was the main-thread HID request. A PowerPoint artifact preview happened to be visible at the time, but it was not the blocking renderer path.Activation/retry finding
Read-only inspection of the packaged app confirms that the Codex Micro / Work Louder service calls
WLDeviceDiscovery.findWLDevices([DeviceType.Project2077])and schedules another attempt after 10 seconds when no supported device is found. The Codex Micro bridge/UI is enabled by a remotely evaluated feature gate on this client, and package 4045 exposes no supported local off switch.This result demonstrates that disabling unrelated HID collections one by one only moves the synchronous global scan to another interface. The most useful immediate mitigation would be to gate Codex Micro discovery off on affected Windows clients or expose a supported user setting. The durable fix remains to prefilter supported devices before descriptor access, run discovery outside Electron's main process/thread, and enforce hard per-interface timeouts/circuit breaking.
Raw full-memory dumps remain local because they may contain private task data, but sanitized stack/module details can be provided if maintainers need more.
Follow-up with the sustained result: the Codex Micro discovery bypass fully eliminated the HID-related freezes on this machine.
Tested package:
OpenAI.Codex 26.715.3651.0.Unsupported, version-specific procedure:
resources/app.asar; leave the registered Store package untouched.``
js
``this.discovery.findWLDevices([a.Project2077])
with
[], padded with ASCII spaces to exactly the original byte length. This makes discovery report no Codex Micro without changing ASAR size or offsets.Controlled A/B result using independent window-message-loop probes:
| Runtime | Samples | Delays >=50 ms | Delays >=180 ms | Maximum |
|---|---:|---:|---:|---:|
| Original | 1,630 | 3 | 3 | 499.79 ms |
| Patched | 1,704 | 0 | 0 | 4.70 ms |
The original produced three long pauses during a 26-second window; the patched runtime produced none. With this bypass included in the final workaround configuration, the machine then completed almost 24 hours of real, heavy Codex use without the periodic HID stalls or hangs.
The intentional limitation is that Codex Micro / Work Louder discovery is disabled. This is not a suitable product fix, but the A/B result is conclusive for this failure path: preventing
findWLDevices()from entering synchronousnode-hidenumeration removed the symptom. The product fix should move HID discovery off the Electron main thread, add bounded per-device timeouts, and avoid fixed-interval polling when optional hardware is absent.I mean sure but this doesn't seem like a viable solution. If every time I have to open this one specific app I need to switch out both my keyboard and mouse then I'm gonna cancel my sub and move on to something else, f that noise.
Windows Codex desktop app 26.715.4045.0 causes system-wide keyboard and mouse stalls. WPR UIDelay traces show repeated approximately 1.8-second input delays every approximately 11.8 seconds. The issue persists with --disable-gpu and disappears immediately when Codex is closed. The installed app contains @worklouder/device-kit-oai, wl-device-kit, and node-hid. Wi-Fi, USBXHCI, and NVIDIA DPC traces show no multi-second stalls. Please investigate the Work Louder/Codex Micro HID discovery path and advise whether a build or workaround disables synchronous HID enumeration.
Same issue here.
Reproducible K55 trigger and software recovery workaround
I can confirm this issue with a Corsair Gaming K55 RGB Keyboard (
VID_1B1C&PID_1B3D) on the Windows Codex/ChatGPT desktop app.Controlled observations:
.codexprofile, account reconnect, repair, reset, reinstall, and app updates did not resolve it.A useful temporary workaround is a targeted PnP restart of the physical K55 device. This reproduces the effect of unplugging/replugging the keyboard without physically disconnecting it and without restarting Codex. It has successfully recovered the frozen UI five times so far.
Run from an elevated PowerShell prompt:
Notes:
Preliminary positive result on
26.715.7063.0I have now updated the same affected Windows installation from
26.715.2305.0to:This is the same system and Corsair Gaming K63 (
VID_1B1C&PID_1B40) described in my earlier comment.After installing
26.715.7063.0:This is a preliminary observation immediately after updating, not yet a long-duration soak result. I will follow up if the HID-related stalls or freezes return, but
26.715.7063.0currently appears to mitigate both the severe Corsair/HID behavior and the separate first-load conversation stall on this machine.Aye, updated to the latest version from Store and it seems to have been fixed. At least it won't hang directly at boot as it did with the previous version.
Preliminary positive result on
26.715.7063.0I reconnected the original Corsair Harpoon RGB PRO (
VID_1B1C&PID_1B75) that previously reproduced the HID-related Codex freezes. It is operating in its normal composite configuration with all seven USB/HID entries present.So far, the prior hangs and system-input stalls have not returned during normal Codex use. A separate 90-second responsiveness probe collected 308 samples with zero nonresponsive samples while the Harpoon remained connected. No new
ChatGPT.exeApplication Hang or Application Error events were recorded.This is an initial smoke test rather than a long-duration soak result. I’ll follow up if the problem returns or after several extended Unity/Codex sessions.