[Windows][26.810.4967.0] System-wide mouse stutter; hidden avatar overlay and cursor polling may contribute
What version of the Codex App are you using (From “About Codex” dialog)?
- Desktop app/product version reported by the running app:
26.810.41047 - Windows MSIX package:
OpenAI.Codex_26.810.4967.0_x64__2p2nqsd0c76g0 - Embedded Chromium:
151.0.7922.137
What subscription do you have?
_Not included in the diagnostic capture._
What platform is your computer?
- Windows 11, build
10.0.26200, x64 - Intel Core Ultra 9 275HX (24 logical processors)
- NVIDIA GeForce RTX 5080 Laptop GPU
- 32 GB RAM
What issue are you seeing?
When the ChatGPT/Codex Windows desktop app is open—especially while a Codex task is active—mouse movement across Windows becomes jerky and less predictable. Fully quitting Codex improves mouse behavior immediately.
This initially appeared to coincide with the Computer History announcement, but Computer History is macOS-only and off by default. The local evidence instead points to a Windows desktop-app input/composition regression.
Read-only diagnostics on the affected machine found:
- The Electron main process averaged about 142% of one CPU core over a 12-second sample, with the primary renderer averaging about 25% and the GPU process about 30% CPU.
- Aggregate GPU 3D utilization was low, and Windows DPC/interrupt time was normal, so this was not conventional GPU saturation or a mouse-driver interrupt storm.
- Codex maintains a second hidden Chromium window whose appearance is logged as
avatarOverlaywithrendererWindowVisible=false. - The hidden avatar-overlay renderer still receives duplicate task/reasoning activity updates while invisible.
- The installed desktop bundle contains an avatar/native-composition pointer synchronization loop scheduled every 32 ms. It reads
screen.getCursorScreenPoint(), evaluates pointer/button state, and sends syntheticmouseMoveevents into overlay surfaces. - The overlay composition window disables Chromium background throttling.
- The bundle contains an
avatarOverlayCpuOptimizationsfeature gate whose local fallback/default isfalse; the active server-side value could not be confirmed. - The Computer Use plugin is installed and enabled, and its native pipe is initialized at startup, but no Computer Use action/helper process was active and no mouse-control requests appeared in the current logs.
The overlay/pointer-sync path is a possible cause or contributor, not proven. In particular, related report #38546 says the desktop pet was disabled, so the underlying regression may be broader than the visible pet and could involve the always-prewarmed avatar renderer, native composition, or another Electron foreground/input path.
What steps can reproduce the bug?
- Fully exit the ChatGPT/Codex desktop app, including the tray/background process.
- Confirm mouse movement is smooth in Windows and other applications.
- Launch Codex Desktop normally.
- Start or resume a Codex task.
- Move the pointer across the desktop, File Explorer, Settings, and other ordinary applications.
- Observe jerky/stuttering pointer movement.
- Fully quit Codex again.
- Observe that pointer behavior improves immediately.
Useful isolation tests:
- In Settings → Pets, choose Tuck Away Pet, then fully restart the desktop app.
- If the issue persists, disable both Computer Use plugin toggles and restart.
- Compare CPU and pointer behavior with an active desktop task versus Codex CLI performing comparable work.
What is the expected behavior?
Running an active Codex desktop task should not alter, intercept, or degrade system-wide mouse movement or Windows desktop responsiveness.
Hidden/prewarmed overlay renderers should not continuously perform expensive cursor polling, native composition, or duplicate activity processing when they are not visible or needed.
Additional information
Feedback ID for OpenAI correlation:
01a00408-042a-7db2-a7fe-d7b774bfd7e6
Related reports:
- #38546 — system-wide mouse stutter on Windows while the desktop app runs
- #38710 — same
26.810.4967.0package, active-thread trigger, system-wide pointer/composition degradation
Suggested maintainer checks:
- Confirm whether
avatarOverlayCpuOptimizationswas enabled for this account/session. - Confirm whether the 32 ms pointer synchronization timer and native composition coordinator remain active while the avatar overlay renderer is hidden or the pet is tucked away.
- Check whether duplicate activity delivery to the invisible avatar renderer is expected.
- Compare Windows builds before and after
26.810.4967.0for changes to Electron/Chromium input routing, DirectComposition, transparent always-on-top surfaces, and Computer Use native-pipe initialization. - Consider suspending/destroying the hidden overlay renderer and cursor polling when the pet/overlay is inactive.
4 Comments
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
I can reproduce this on a newer Windows build, and a per-process trace points to turn-boundary CPU/working-set thrashing in the primary renderer and Electron main process, rather than the hidden avatar renderer or conventional GPU saturation.
Environment
10.0.26200OpenAI.Codex_26.810.7004.0_x64__2p2nqsd0c76g026.810.6296.0to26.810.7004.0immediately before the regression was observed.More specific reproduction pattern
The system-wide mouse stutter is reproducible at two turn boundaries:
Idle CPU is low. The spikes are concentrated around those events.
Per-process measurements
During a captured completion/input sequence (approximately 1.2-second sampling):
353%(about 3.5 logical cores)30,990/sec342 MB -> 446 MB165%47,327/sec118 MB -> 389 MB -> 119 MB11.4 MB/sec60%Windows memory counters during an event also showed:
Page Reads/sec: approximately497Pages Input/sec: approximately3,886Transition Faults/sec: approximately31,2811.1 GBThis looks like a large amount of previously cold process state being touched and then aggressively trimmed, which explains why the effect is system-wide rather than limited to animation inside the Codex window.
Negative isolation results
8%; GPU copy around3%.33 msand was not correlated with the sustained spike.So the avatar pointer-sync path described in this issue may be a separate contributor for some machines, but it was not the dominant path in this reproduction.
Possible maintainer investigation path
Inspection of the bundled/minified renderer code suggests that a turn update replaces the rendered-entry collection and invalidates memoized maps that scan the full set of turns/items. That is only an inference without ETW call stacks, but it matches the observed primary-renderer spike at
turn/started/turn/completed. The main process simultaneously shows a large cold-working-set page-in/trim cycle.It may be useful to check for:
turn/startedandturn/completedevent.I attempted a WPR GeneralProfile/GPU/DesktopComposition trace, but starting WPR required elevation on this machine, so the figures above come from process/performance-counter sampling rather than ETW stacks.
Temporary no-restart workaround
Because this report already points to the hidden
avatarOverlay, one additional state-reset step may help when the cursor stutter is active:On another Windows 11 / Codex
26.810.6296.0system, that wake → tuck away cycle restored smooth mouse movement immediately in the same app process on every recurrence tested. No restart, elevation, service change, or driver reset was needed.This is temporary—the issue can recur—but it is more targeted than restarting the entire app. Detailed same-process
avatarOverlayevidence: https://github.com/openai/codex/issues/38546#issuecomment-5302228705Independent confirmations: #38663 and #38745.
Additional reproduction: keyboard jitter plus ~1 GiB/s non-disk main-process reads
I reproduced this on the same Windows app generation with both system-wide mouse jitter and uneven/delayed keyboard input.
Environment
OpenAI.Codex 26.810.6296.010.0.26200, x64Measurements in the degraded state
GetProcessIoCountersshowed 872-974 MiB/s in main-process read-transfer rate.For scale only—not proof—a 2560 x 1600 x 4-byte surface at 60 fps is approximately 937.5 MiB/s, very close to the observed process read-transfer rate.
Log totals from the affected process
Across its two main desktop-log segments:
| Signature | Count |
| --- | ---: |
|
main_thread_jank_snapshot| 25 ||
ResizeObserver loop completed with undelivered notifications| 203 || Events delivered to hidden
rendererWindowAppearance=avatarOverlay| 11,020 ||
unknown conversation| 3,576 |The invisible avatar renderer received reasoning-summary and turn events throughout the session. Raw logs are not attached because they include local paths and task metadata.
This overlaps with the renderer/layout symptoms in #33996, but the approximately 1 GiB/s non-disk main-process read signature and system-wide keyboard impact may help distinguish the pathological state.
State experiment
The persisted state had 11 entries in
electron-remote-hosted-pip-task-visibility-state, all markedshown, plus stale overlay bounds.I backed up the state, set
electron-avatar-overlay-open=false, and cleared the PiP task map. After a full app quit/relaunch, Codex removed the explicit closed flag and repopulated all 11 task entries. That persisted edit is therefore not a durable fix.Before/after full restart
A full tray quit and relaunch of the same app version immediately improved mouse and keyboard behavior.
In a 20-second post-restart sample:
The restart log did have a short initialization burst before settling (1 jank snapshot, 35 ResizeObserver errors, 109 avatar events, 22 unknown-conversation events). The important distinction is that these signatures stopped in the subsequent live-rate window rather than continuing or escalating.
Interpretation
This strengthens the correlation with a hidden overlay/event/composition path, but does not prove it is the sole root cause. A reasoning-summary/layout feedback loop may be a contributor, and the normal post-restart app still prewarms the hidden overlay.
Potential maintainer checks:
avatarOverlayCpuOptimizationsand mixed-refresh hybrid-GPU systems.A full tray quit/relaunch is currently an effective but temporary workaround. The wake-Pet -> tuck-away cycle already documented above is a useful same-process workaround to try on recurrence.