`computer` launch_app always rejected with COMPUTER_STALE_OBSERVATION on macOS (app-provided embedded CUA driver, 2026.9.4)
Author: dangladeCreated Sep 17, 2026Updated Sep 17, 2026
LabelsP2issue-rating: 🦪 silver shellfishimpact:other
Summary
The computer tool's launch_app action is rejected 100% of the time with COMPUTER_STALE_OBSERVATION: refresh list_apps and retry on macOS when the CUA driver is the app-provided embedded one. Refreshing list_apps (or even taking a fresh screenshot) immediately before retrying does not help. All other actions work normally.
Environment
- OpenClaw 2026.9.4 (3a9d69d) — gateway/CLI installed via npm (Homebrew node), macOS app 2026.9.4 via Homebrew cask
- macOS 26.3.2, Apple M1 (Macmini9,1)
- Topology: external gateway (LaunchAgent from the npm install); OpenClaw.app paired as a node in attach-only mode
- Computer Control enabled in app Settings → This Mac → Capabilities, provider = CUA
- Driver: app-bundled
OpenClaw.app/Contents/Resources/cua-driver, spawned by the app asserve --embedded --no-permissions-gate --socket "~/Library/Application Support/OpenClaw/cua/<id>/cua.sock" --host-bundle-id ai.openclaw.mac --permission-mode unrestricted --dangerously-bypass-approvals, with a gateway-sidecua-driver mcp --embeddedbridging the same socket - Accessibility + Screen Recording granted (node reports
accessibility=yes, screenRecording=yes) - Vision-capable models via OpenRouter (reproduced with
anthropic/claude-fable-5.1andqwen/qwen3.7-flash)
Reproduction
- Agent turn:
list_apps→launch_app(TextEdit) → rejected withCOMPUTER_STALE_OBSERVATION: refresh list_apps and retry - Refresh
list_apps→launch_appagain → same rejection screenshot(fresh frame) →launch_app→ same rejection- Quit + relaunch OpenClaw.app and restart the gateway so both
serve --embeddedandmcp --embeddedare freshly spawned → same rejection on first try
What works
screenshot, list_apps, list_windows, bring_to_front, pointer and keyboard input all behave correctly in the same sessions. Launching apps via AppleScript (osascript through exec) works as a workaround, and agents eventually fall back to it on their own after burning retries.
Possibly related
- #148541 (
computertool in paired scope hardcoding the V1 action set — this setup is a paired node andlaunch_appis a V2 action) - PR #143113 (stale-build admission for desktop observe/launch in the cloud-workers lane)
- trycua/cua#3390 (state-scoped observations RFC — the semantics that produce this rejection)
Source: openclaw/openclaw