Windows: system-wide mouse cursor flicker after turn completes; fixed only by restarting dwm.exe
Summary
On Windows, after a Codex Desktop turn finishes (idle), the mouse cursor starts flickering continuously across the entire screen. The flicker is not present while the turn is in progress. It survives full app exit (no ChatGPT/codex processes remaining). Restarting dwm.exe fixes it immediately; rebooting Windows also fixes it. Reloading system cursors via SPI_SETCURSORS does not fix it.
Environment
- OS: Windows (build: run
winverand fill in if needed) - Codex Desktop: 26.715.52143 (Microsoft Store / MSIX)
- Platform: Windows x64
Already ruled out (please do not close as environment noise)
- Custom mouse cursor theme / pointer style
- Background software
- GPU / GPU driver reinstall
- External injectors (e.g. Codex++ / skin injectors)
- Built-in pet / avatar UI feature
- Codex Computer Use
Steps to reproduce
- Open Codex Desktop on Windows.
- Send any message and wait until the turn fully completes (agent becomes idle).
- Move the mouse anywhere on the screen (including empty desktop).
Expected
Cursor remains normal after turn completion.
Actual
| Condition | Result |
|-----------|--------|
| During turn | No flicker |
| After turn completes (idle) | Continuous system-wide cursor flicker |
| Start a new turn | Flicker temporarily stops during the turn |
| That turn ends | Flicker returns |
| Fully quit Codex (no ChatGPT/codex processes in Task Manager) | Flicker continues |
| SystemParametersInfo(SPI_SETCURSORS) / restore system cursors | No effect |
| Stop-Process -Name dwm -Force (DWM restarts) | Flicker stops immediately |
| Reboot Windows | Flicker stops |
Inference
The post-turn idle path corrupts DWM cursor composition / hardware cursor state.
The bad state:
- outlives the Codex process
- is not fixed by reloading the cursor scheme from the registry
- is cleared only by recycling DWM (or rebooting Windows)
Workaround
Stop-Process -Name dwm -Force
Why this report is actionable
- Clear phase lock: only after turn idle, not during streaming
- Clear layer lock: DWM session state (process exit does not help; DWM restart does)
- Controlled exclusions listed above so it is not mistaken for cursor pack / driver / injector issues
- Optional: 10s screen recording starting at turn completion helps a lot
Request
Please investigate the turn-complete → idle path on Windows Desktop (pointer / layered window / composition / mouse passthrough cleanup) for anything that can leave DWM’s cursor composition in a bad state after the app exits.
This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗