macOS Computer Use returns blank wrong-sized capture on sole external display and times out for LSUIElement apps
What version of the Codex App are you using?
ChatGPT desktop app 26.707.31428 (build 5059) with the bundled Codex Computer Use integration.
What subscription do you have?
ChatGPT Pro
What platform is your computer?
Darwin 25.5.0 arm64 arm- macOS
26.5.1 - MacBook in closed-clamshell mode
- Exactly one active external HDMI display (
QCQ90) CGMainDisplayID=5, built-in flag0, logical resolution2304x1296, scale factor2.0
What issue are you seeing?
A fresh Computer Use session does not consistently bind capture and app discovery to the sole active external main display. Two related symptoms reproduce in the same display topology:
get_app_statefor Finder returns Accessibility data quickly (about307 ms) but the JPEG is blank and1366x768, which does not match the active main display's2304x1296logical geometry. This is evidence of a wrong, stale, or synthetic capture canvas. It is not enough evidence to claim that1366x768is definitively the closed built-in panel.get_app_stateforSystemUIServer,com.johnsilva.LidSwitch, or the LidSwitch app path each fails after about5.05 swithSkyComputerUseError -10005: timeoutReached. Both SystemUIServer and LidSwitch areLSUIElement/ UIElement-style targets.list_appsreports SystemUIServer as not running and omits the live LidSwitch process, even though both are live outside Computer Use.
Relevant logs during the failures contain:
AccessibilitySupport.UIElementError 0
AccessibilitySupport.UIElementError 2
Fetching all shareable content
There is no SCStreamErrorDomain -3811 in this reproduction. Finder AX succeeding also argues against a total Accessibility outage.
What steps can reproduce the bug?
- Connect one external display to a MacBook and use it in closed-clamshell mode.
- Verify the external display is the sole active main display. In this reproduction it is display ID
5, built-in0, logical2304x1296, scale2.0. - Start a fresh Codex/Computer Use task.
- Call
list_apps. - Call
get_app_statefor Finder. - Observe that AX content returns but the screenshot is a blank
1366x768JPEG rather than content sized/bound to the active external display. - Call
get_app_statefor anLSUIElementapp or menu-bar process, using its display name, bundle ID, and app path where available. - Observe a roughly five-second
SkyComputerUseError -10005: timeoutReached; also observe that live UIElement apps may be missing or marked not running inlist_apps. - Reopen the lid or disconnect/reconnect the external display and repeat to test display-topology invalidation.
What is the expected behavior?
- Display capture should resolve the current
CGMainDisplayIDand active ScreenCaptureKit display at request time, and the returned image should correspond to that display rather than a stale or synthetic canvas. list_appsshould distinguish ordinary windowed apps from liveLSUIElement/menu-bar apps instead of reporting a live process as absent or not running.- UIElement targets should return AX/capture state when supported, or fail immediately with a typed
unsupported_target,no_window, ornot_shareablediagnostic. They should not collapse discovery failures into a generic five-second timeout.
Additional information
This appears to be one target-resolution failure class with two adjacent surfaces: display selection for capture and process/window eligibility for UIElement apps. A systemic guard would snapshot and validate the active display/process topology before capture, invalidate cached display/window IDs on clamshell or reconnect changes, and reject a returned frame whose geometry/source metadata does not match the resolved target.
Suggested regressions:
- Closed-clamshell, exactly one external display: Finder returns nonblank AX plus a frame sourced from the active external main display.
- Clamshell transition and external-display disconnect/reconnect: cached display/window IDs are refreshed before the next request.
- Live
LSUIElementmenu-bar app: inventory identifies it accurately, and state retrieval either succeeds or returns a typed immediate unsupported/no-window result. - Ordinary windowed app and UIElement app in the same session: the UIElement failure path must not poison subsequent normal capture.
Existing reports checked but not exact duplicates:
- #21668 and #24301: wrong Space/window capture, not a blank wrong-sized frame with one active external display.
- #27829 and #30797:
cgWindowNotFoundfor normal windowed apps, not UIElement inventory plustimeoutReached. - #24086: locked Computer Use on a Mac mini with Studio Display; this reproduction is an unlocked MacBook in clamshell mode.
- #30846:
SCStreamErrorDomain -3811; that error is absent here.
Exact GitHub searches performed before filing included: "Computer Use" "external display", "blank screenshot" macOS, LSUIElement, SkyComputerUseError, timeoutReached, SystemUIServer, "Computer Use" clamshell, "Computer Use" monitor, "list_apps" macOS, UIElement "Computer Use", "menu bar" "Computer Use", "external monitor" "Computer Use", "external display" screenshot, "1366x768", and "timeout" "SystemUIServer", all scoped to repo:openai/codex is:issue.
This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗