Windows Codex freezes with UGREEN USB switch and recovers immediately when unplugged

Open 💬 2 comments Opened Jul 17, 2026 by ksbrown8839
💡 Likely answer: A maintainer (github-actions[bot], contributor) responded on this thread — see the highlighted reply below.

What version of the Codex App are you using (From “About Codex” dialog)?

OpenAI Codex Desktop 26.715.2305.0 Microsoft Store version

What subscription do you have?

Plus Plan

What platform is your computer?

Windows 11 x64 OS build: 10.0.26200.8875

What issue are you seeing?

Codex Desktop becomes completely unresponsive and Windows displays
"(Not Responding)" whenever the USB switch and its keyboard/mouse are connected.

As soon as I unplug the USB switch, Codex immediately begins responding again.
Reconnecting the switch causes the problem to return.

This was not happening one or two weeks ago.

What steps can reproduce the bug?

  1. Connect the Corsair K68 keyboard and Glaive mouse through the UGREEN USB switch.
  2. Start Codex Desktop.
  3. Use Codex normally or leave it open.
  4. Codex becomes unresponsive.
  5. Unplug the UGREEN switch from the computer.
  6. Codex immediately recovers.

What is the expected behavior?

HID enumeration or hardware discovery should not block the Codex UI.

Additional information

Hardware

  • UGREEN USB switch using Genesys Logic hubs:
  • VID_05E3 / PID_0610
  • VID_05E3 / PID_0626
  • Corsair K68 keyboard:
  • VID_1B1C / PID_1B3F
  • Corsair Glaive RGB mouse:
  • VID_1B1C / PID_1B34
  • Corsair iCUE 5.46.67

Actual behavior

The Codex main UI process becomes unresponsive until the USB devices are
physically disconnected.

Windows recorded four matching MoAppHang reports on July 17, 2026, at
approximately:

  • 5:43 PM ET
  • 5:46 PM ET
  • 6:10 PM ET
  • 6:41 PM ET

WER fault bucket:

61cf54cf289d829fbc09b36f63f5c8e0

Technical findings

Local inspection of the installed Codex package indicates that the Codex
Micro/Work Louder device-discovery service calls synchronous
nodeHID.devices() to enumerate all attached HID devices before filtering for
supported hardware.

When no supported device is found, discovery appears to be retried every
10 seconds.

The Codex main process has the native HID.node module loaded. The node-hid
documentation warns that its synchronous API can block application execution
and that HID.devices() performs a relatively costly USB/Bluetooth
enumeration.

Corsair iCUE also logs repeated communication failures involving the K68 while
the switch is connected, including Windows errors 433 and 1167. This may cause
the synchronous HID enumeration to become stuck on a stale or malfunctioning
device path.

Disconnecting the USB switch removes the affected HID endpoints and immediately
releases the Codex UI.

Suggested fix

Please move HID enumeration off the Electron main/UI thread and use
devicesAsync() or event-based USB arrival/removal detection instead of
synchronously polling every attached HID device.

View original on GitHub ↗

2 Comments

github-actions[bot] contributor · 1 month ago

Potential duplicates detected. Please review them and close your issue if it is a duplicate.

  • #33780
  • #33912
  • #33909

Powered by Codex Action

Remgrandt · 1 month ago

Independent reproduction on 26.715.4045.0 (Corsair K68, no USB switch)

I reproduced the same failure mode on a separate Windows system with a directly connected Corsair K68. A controlled gate-off A/B test strongly isolates the freeze to the Codex Micro HID-discovery path.

Environment
  • Codex Microsoft Store package: OpenAI.Codex_26.715.4045.0_x64__2p2nqsd0c76g0
  • Windows 11 Pro x64, version 10.0.26200
  • Corsair K68: VID_1B1C / PID_1B3F
  • No UGREEN switch or VID_05E3 hub was present
  • Windows exposed five K68 HID collections: one keyboard, one consumer-control device, and three vendor-defined devices
Unmodified-build observations

On the unmodified Store build:

  • The Electron main process loaded HID.node and hid.dll through the bundled @worklouder/device-kit-oai dependency chain.
  • On one fresh launch, the main window reported nonresponsive for all 113 samples collected over 30 seconds.
  • On a warm launch, the window initially responded and transitioned to Responding=False after approximately 15 seconds.
  • Disabling all configured plugins did not remove the failure (34 of 51 samples were nonresponsive over 20 seconds).
  • Launching with --disable-gpu did not remove it either (27 of 48 samples were nonresponsive over 20 seconds).
  • No taskkill.exe executions or WMI CPU spike occurred during the fresh reproduction, which distinguishes this instance from the separate process-storm behavior reported elsewhere.

Inspection of the packaged JavaScript showed this sequence:

  1. Renderer gate 3207467860 mounts the Codex Micro bridge.
  2. The bridge immediately calls codexMicro.getState().
  3. The main-process service imports @worklouder/device-kit-oai and calls WLDeviceDiscovery.findWLDevices([DeviceType.Project2077]).
  4. When no supported device is found, reconnect is scheduled after 10,000 ms.

That timing matches the observed periodic loss of responsiveness.

Controlled gate-off A/B

I copied the same installed build to a user-local directory, retained the same Codex user profile, and changed only the two renderer expressions checking gate 3207467860 to the boolean constant false. The Microsoft Store package itself was not modified.

Archive identifiers:

Original app.asar SHA-256:
4F81FE8CFADD0ECD1D55A46F4B101B1DB70ABBB372B63A0120218B1D868008A3

Gate-off app.asar SHA-256:
1E1628A212687E5C5BF34E29B79557DEAE247BB916C9ADC7F278D733AC88C852

Changed expression offsets within app.asar:
23773659
23800151

Results with the gate disabled:

  • Three automated UI-message-pump runs totaling 125 seconds
  • 478 samples
  • Zero Responding=False observations
  • Zero SendMessageTimeout(WM_NULL) failures using a 250 ms timeout
  • Maximum observed probe latency: 16.1 ms
  • Zero new Windows Application events 1000, 1001, or 1002 for ChatGPT.exe during the measured process run
  • Neither HID.node nor hid.dll was loaded in the repaired main process

This test does not identify which individual K68 HID collection stalls enumeration. It does show that, on this machine, preventing the Codex Micro bridge from mounting removes the freeze while keeping the same application build, profile, account, keyboard, and other configuration.

This also suggests the issue is not limited to UGREEN/Genesys USB switches. Moving HID enumeration off the Electron main thread, using the asynchronous node-hid API, and backing off or disabling discovery after a stalled/failed attempt would prevent an optional hardware integration from blocking the desktop UI.