On 4.3.0 every see capture is refused when the CLI hands the request to the on-demand daemon. The identical command with --no-remote succeeds. This is deterministic, survives killing the daemon (it respawns and fails the same way), and affects --mode frontmost, --mode screen and --app alike.
$ peekaboo --version
Peekaboo 4.3.0 (main/44eff916c, built: 2026-09-02T13:31:24-07:00)
Fails via daemon
$ peekaboo see --mode frontmost --path /tmp/fm.png
⛔ Action refused before dispatch; update the runtime before retrying
Error: The desktop observation provider returned response evidence that did not match the requested frontmost application snapshot identity.
$ peekaboo see --mode screen --path /tmp/sc.png
⛔ Action refused before dispatch; update the runtime before retrying
Error: The desktop observation provider returned response evidence that did not match the requested unexpected application evidence.
Three consecutive --mode frontmost runs produced the identical refusal. After pkill -f 'peekaboo daemon' the daemon respawns on demand and both commands fail identically, so this is not stale daemon state.
Works with --no-remote
$ peekaboo see --mode frontmost --path /tmp/fm-test.png --no-remote
🖼️ Screenshot saved to: /tmp/fm-test.png
📱 Application: ChatGPT
[win] Window: ChatGPT
🧊 Detection method: AXorcist
📊 UI elements detected: 16
⚙️ Interactable elements: 2
⏱️ Execution time: 1.92s
--mode screen --no-remote likewise succeeds. Same binary, same TCC grants (Screen Recording, Accessibility and Event Synthesizing all Granted), only the runtime host differs. --json confirms the failing path:
DEBUG: Runtime host: remote onDemand via /Users/agent/Library/Application Support/Peekaboo/daemon-8a6bfeca4f613a42.sock (build 4.3.0 (4.3.0))
VERBOSE [Capture]: Using desktop observation pipeline {target=frontmost}
VERBOSE [Operation]: Operation completed {operation=see_command, success=false, error=The desktop observation provider returned response evidence that did not match the requested frontmost application snapshot identity.}
Daemon and CLI are the same build (4.3.0), so this is not version skew.
Two secondary problems
1. The refusal still writes the PNG. Every refused run left a full screenshot on disk:
-rw-------@ 1 agent wheel 459473 Sep 8 20:54 /tmp/fm1.png
-rw-------@ 1 agent wheel 459651 Sep 8 20:54 /tmp/fm2.png
-rw-------@ 1 agent wheel 459616 Sep 8 20:54 /tmp/fm3.png
A caller that checks for the output file rather than parsing stderr will consume an image the tool declined to vouch for. If the evidence check fails, the artifact should not be left behind.
2. Malformed error string. The --mode screen variant renders as "did not match the requested unexpected application evidence" — the template appears to interpolate a fallback descriptor into a slot expecting a target description. The frontmost variant reads correctly, so it looks like a missing case in the message builder rather than a distinct failure.
Also, ⛔ ... update the runtime before retrying is misleading here: the runtime is current and the same build succeeds locally. The actionable hint would be to name the daemon path.
On 4.3.0 every
seecapture is refused when the CLI hands the request to the on-demand daemon. The identical command with--no-remotesucceeds. This is deterministic, survives killing the daemon (it respawns and fails the same way), and affects--mode frontmost,--mode screenand--appalike.Fails via daemon
Three consecutive
--mode frontmostruns produced the identical refusal. Afterpkill -f 'peekaboo daemon'the daemon respawns on demand and both commands fail identically, so this is not stale daemon state.Works with
--no-remote--mode screen --no-remotelikewise succeeds. Same binary, same TCC grants (Screen Recording, Accessibility and Event Synthesizing all Granted), only the runtime host differs.--jsonconfirms the failing path:Daemon and CLI are the same build (4.3.0), so this is not version skew.
Two secondary problems
1. The refusal still writes the PNG. Every refused run left a full screenshot on disk:
A caller that checks for the output file rather than parsing stderr will consume an image the tool declined to vouch for. If the evidence check fails, the artifact should not be left behind.
2. Malformed error string. The
--mode screenvariant renders as "did not match the requested unexpected application evidence" — the template appears to interpolate a fallback descriptor into a slot expecting a target description. Thefrontmostvariant reads correctly, so it looks like a missing case in the message builder rather than a distinct failure.Also,
⛔ ... update the runtime before retryingis misleading here: the runtime is current and the same build succeeds locally. The actionable hint would be to name the daemon path.