PeekabooBridgeHostCoordinator, backed by the steipete/Peekaboo Swift package). This lets the peekaboo CLI drive UI automation while reusing the macOS app’s TCC permissions.
What this is (and is not)
- Host: OpenClaw.app can act as a PeekabooBridge host.
- Client: the
peekabooCLI (there is no separateopenclaw ui ...surface). - UI: visual overlays stay in Peekaboo.app; OpenClaw is a thin broker host.
Relationship to other desktop-control paths
OpenClaw has three desktop-control paths that intentionally stay separate:- PeekabooBridge host: OpenClaw.app hosts the local PeekabooBridge socket. The
peekabooCLI is the client and uses OpenClaw.app’s macOS permissions for screenshots, clicks, menus, dialogs, Dock actions, and window management. - Codex Computer Use: the bundled
codexplugin checks and can install Codex’scomputer-useMCP plugin (extensions/codex/src/app-server/computer-use.ts), then lets Codex own native desktop-control tool calls during Codex-mode turns. OpenClaw does not proxy those actions through PeekabooBridge. - Direct
cua-driverMCP: OpenClaw can register TryCua’s upstreamcua-driver mcpserver as a normal MCP server, giving agents the CUA driver’s own schemas and pid/window/element-index workflow without routing through the Codex marketplace or the PeekabooBridge socket.
cua-driver mcp to expose the CUA driver to any OpenClaw-managed runtime as a normal MCP server.
Enable the bridge
In the macOS app: Settings -> Enable Peekaboo Bridge. When enabled, OpenClaw starts a local UNIX socket server at~/Library/Application Support/OpenClaw/<socket-name>. If disabled, the host stops and peekaboo falls back to other available hosts. The coordinator also maintains legacy socket symlinks (clawdbot, clawdis, moltbot under Application Support) pointing at the current socket for older peekaboo installs.
Client discovery order
Peekaboo clients typically try hosts in this order:- Peekaboo.app (full UX)
- Claude.app (if installed)
- OpenClaw.app (thin broker)
peekaboo bridge status --verbose to see which host is active and which socket path is in use. Override with:
Security and permissions
- The bridge validates caller code signatures; an allowlist of TeamIDs is enforced (Peekaboo host TeamID plus the running app’s own TeamID).
- Prefer the signed bridge/app identity over a generic
noderuntime for Accessibility. Granting Accessibility tonodelets any package launched by that Node executable inherit GUI automation access; see macOS permissions. - Requests time out after 10 seconds (
requestTimeoutSec: 10). - If required permissions are missing, the bridge returns a clear error message rather than launching System Settings.
Snapshot behavior (automation)
Snapshots are stored in memory with a 10-minute validity window and a cap of 50 snapshots (InMemorySnapshotManager); artifacts are not deleted on cleanup. If you need longer retention, re-capture from the client.
Troubleshooting
- If
peekabooreports “bridge client is not authorized”, ensure the client is properly signed or run the host withPEEKABOO_ALLOW_UNSIGNED_SOCKET_CLIENTS=1in debug mode only. - If no hosts are found, open one of the host apps (Peekaboo.app or OpenClaw.app) and confirm permissions are granted.