[BUG] Computer use screenshots fully masked (solid gray) on Windows, even for granted frontmost apps
Status Open
Maintainer reply None cached
Activity 4 comments · opened Aug 31, 2026
Environment
- Platform: Windows 10 Pro 10.0.19045 (build 19045)
- App: Claude Code desktop app (Windows)
- Model: claude-fable-5
- Display: single monitor, 2048x1152, primary
Bug description
Computer-use screenshots are always fully masked (solid dark-gray fill), even when a granted application's window is frontmost and focused. Screenshot filtering mode is reported as "mask" by request_access. The mask appears to cover the ENTIRE screen instead of only non-granted applications.
Steps to reproduce
request_accessfor "Notepad" -> granted, tier "full",screenshotFiltering: "mask"open_application"Notepad" -> opens- Bring Notepad to the foreground (verified via
GetForegroundWindow: foreground process is notepad.exe) computer_batch [{action: "screenshot"}]
Expected
Screenshot shows the granted Notepad window; only non-granted apps are masked.
Actual
Screenshot is a uniform dark-gray image (~#1E1E1E) with no visible content at all. Same for the zoom action. Reproduces after app restart.
What was ruled out
- OS-level capture works: capturing the same Notepad window via
PrintWindow(GDI) from PowerShell returns a normal, fully rendered image. - Input works:
left_clickandtypeactions land correctly in the granted Notepad window (text verified viaWM_GETTEXT). - Reproduces with Notepad frontmost AND with Claude's own window frontmost — the entire screen is masked in both cases.
So the capture pipeline itself is fine; the mask filter appears to blank the whole frame on this Windows configuration.
Showing cached comments. Read the full discussion on GitHub ↗
3 Comments
Independent confirmation of the
cua-driver.exeoverlay root cause — different machine, different app version, and removing it fixed the bug completely.Environment
screenshotFiltering: "mask"in everyrequest_accessresponseSymptom
Every
computer_screenshotreturned a uniform blank dark frame (~#1a1a1a) on both monitors. Window metadata was always correct — the tool accurately enumerated and named the real on-screen windows and reported their positions — but the pixels were always empty.The decisive test: I granted Windows Security while it was maximized and in the foreground. It correctly dropped out of the
willHidelist, confirming the grant applied. The screenshot was still entirely blank. An allowlisted, foreground, full-screen window produced zero pixels.Root cause — confirmed
cua-driver.exewas running on my machine and appeared in thewillHidelist of every single screenshot attempt, across ~2 hours and a full OS reboot. Example from a late attempt:This matches the described mechanism exactly: its full-screen click-through layered overlay (
WS_EX_LAYERED | WS_EX_TRANSPARENT | WS_EX_NOACTIVATE) is invisible to the user, but the mask pass paints its full window bounds with no z-order or occlusion awareness, wiping the entire frame regardless of what is stacked above it.On my machine it was installed by Hermes Agent (Nous Research), which bundles Cua Driver. It was launched by an elevated scheduled task
cua-driver-serve(RunLevel Highest) runningcua-driver.exe serve, with the binaries inC:\Users\<user>\.cua-driver\packages\releases\0.22.1-x86_64-pc-windows-msvc\, surfaced via nested junctions atAppData\Local\Programs\Cua\cua-driver\bin.Fix — verified
Screenshots recovered immediately — full desktop, correct content, both monitors. Confirmed again after uninstalling Hermes Agent, deleting both Cua Driver locations, and rebooting. Nothing respawned; screenshots still work.
Supporting evidence — Windows Event Log
I exported the Application log (391 events, 3 Sep 15:09 → 4 Sep 02:30 UTC) covering the whole failure window. Useful negatives that should help rule out competing theories:
nvlddmkm,dxgkrnl, Event ID 4101)cua-driver.exeanywhere in the log, at any severityThe failure is completely silent — no crash, no GPU reset, no log line. This strongly supports the "mask pass paints the frame, capture itself succeeds" explanation over any driver/capture-failure theory, and it is the single worst thing about this bug from a user's perspective.
Things I ruled out (all negative, so nobody else has to)
HDR off · Windows "Screenshots and screen recording access" on · "Let desktop apps take screenshots" on · Claude app restart · full PC reboot · Process Lasso terminated · Defender exclusion added for the
.cua-driverfolder · granting every process reported as hidden (includingmsedgewebview2.exe,systemsettings.exe,textinputhost.exe) · both monitors tested · computer use re-enabled via the in-chat prompt · granting COMSOL's real UI process (comsolui.exe) rather than its launcher (comsol.exe)None of these made any difference. Only killing
cua-driver.exedid.Two side findings, possibly separate issues
1. Grant state is unstable. Grants repeatedly vanished between consecutive tool calls seconds apart —
computer_resolve_accessreturned apps underalreadyGranted, then moments later the same query returnedalreadyGranted: []withcomputer_list_granted_applicationsreportingallowedApps: [].A likely cause appears in the Event Log: an MSIX package servicing pass at 18:43:22 UTC logged
CoworkVMServicestopped at 18:43:26 and restarted at 18:47:45. Immediately after,computer_screenshotreturned an error I had not seen at any point earlier in the session: "Computer use is available on this device but not turned on yet." Servicing appears to tear down app state underneath a live session with no notice to the user or the agent.2.
CoworkVMServicecannot configure its own SCM recovery actions. On 100% of service starts (observed at 16:58:23, 18:47:45, 01:50:09 UTC) it logs Event ID 1, Level Warning:and on stop:
By its own warning text, a crash leaves the service dead until reboot. Unrelated to this bug but worth fixing.
Suggested fixes
Seconding the earlier suggestions, in the same priority order:
WS_EX_TRANSPARENT | WS_EX_LAYERED) entirely — they contribute no readable pixels.Diagnostic others can run
Cua Driver is bundled by several agent tools (Hermes Agent among them), and any always-on overlay utility — screen annotation tools, gamma/f.lux-style tools, some remote-control drivers — should reproduce this. If your screenshots are blank on Windows, check whether the
willHidelist in your tool results contains a process you don't recognise. On my machinecua-driver.exewas in every one. Kill that process and screenshots recover instantly.OP here — confirming the full-bounds mask painting mechanism from the comment above, but with an important twist: on my machine the offending "overlay" is the Claude desktop app's own maximized window. No third-party software involved.
Environment (same as OP report)
screenshotFiltering: "mask", granted app: Notepad (tier "full")Diagnostic
Following the
cua-driver.exelead, I enumerated all visible fullscreen layered windows (WS_EX_LAYERED, bounds ≥ screen size) viaEnumWindows/GetWindowLong:cua-driver.exe, no Hermes Agent, no third-party overlay of any kind.claude.exe, ElectronChrome_WidgetWin_1class, 2578×1408 — i.e. maximized, slightly overhanging the 2560×1440 screen).Reproduction / proof
computer_screenshotis a uniform ~#1E1E1E frame. This held even with the granted Notepad foreground and focused, and with the game/other windows stacked well above Claude's window in z-order.ShowWindow(claudeHwnd, SW_MINIMIZE)→ the very nextcomputer_screenshotrenders the entire desktop perfectly (wallpaper, icons, taskbar, the "Claude is using your computer" pill).So the mask pass paints the full bounds of the non-granted Claude window with no z-order/occlusion awareness, exactly as described above — and since the app's own window is (a) never in the user's grant list and (b) very commonly maximized, this reproduces with zero third-party software. That likely explains why this bug is hit so widely: every user running the app maximized on Windows gets a 100% masked frame regardless of what they granted.
Side observation: input was separately blocked for an elevated game process (UIPI, expected), but metadata in screenshot results was always correct — only pixels were wiped, matching the "capture succeeds, mask wipes the frame" theory.
Suggested fix addition
On top of the three suggestions above (visible-region masking, skipping click-through overlays, failing loudly), a trivial targeted fix: exempt the Claude app's own window from the mask pass entirely, or auto-minimize it during capture — it already shows the "Claude is using your computer" indicator while driving, so hiding/shrinking it during computer use would match user expectations.
Same issue here. Every computer-use screenshot is a uniform dark gray (#1E1E1E), on both monitors, even with a granted app (Notepad / ChatGPT) frontmost.
Environment:
Already tried (no change):
It worked on my previous PC with the same account, so this looks like a regression.