OpenClaw macOS IPC आर्किटेक्चर
वर्तमान मॉडल: एक स्थानीय Unix सॉकेट node host service को exec approvals +system.run के लिए macOS app से जोड़ता है। discovery/connect जांचों के लिए एक openclaw-mac debug CLI मौजूद है; agent actions अब भी Gateway WebSocket और node.invoke से होकर प्रवाहित होते हैं। UI automation PeekabooBridge का उपयोग करता है।
लक्ष्य
- एकल GUI app instance जो सभी TCC-facing work (notifications, screen recording, mic, speech, AppleScript) का स्वामी हो।
- automation के लिए एक छोटा surface: Gateway + node commands, साथ में UI automation के लिए PeekabooBridge।
- अनुमानयोग्य permissions: हमेशा वही signed bundle ID, launchd द्वारा लॉन्च किया गया, ताकि TCC grants टिके रहें।
यह कैसे काम करता है
Gateway + node transport
- app Gateway (local mode) चलाता है और उससे node के रूप में जुड़ता है।
- Agent actions
node.invokeके माध्यम से किए जाते हैं (जैसेsystem.run,system.notify,canvas.*)। - सामान्य Mac node commands में
canvas.*,camera.snap,camera.clip,screen.snapshot,screen.record,system.run, औरsystem.notifyशामिल हैं। - node एक
permissionsmap रिपोर्ट करता है ताकि agents देख सकें कि screen, camera, microphone, speech, automation, या accessibility access उपलब्ध है या नहीं।
Node service + app IPC
- एक headless node host service Gateway WebSocket से जुड़ती है।
system.runrequests स्थानीय Unix socket पर macOS app को forward किए जाते हैं।- app UI context में exec करता है, आवश्यकता होने पर prompts दिखाता है, और output लौटाता है।
PeekabooBridge (UI automation)
- UI automation
bridge.sockनामक अलग UNIX socket और PeekabooBridge JSON protocol का उपयोग करता है। - Host preference order (client-side): Peekaboo.app → Claude.app → OpenClaw.app → local execution।
- Security: bridge hosts के लिए allowed TeamID आवश्यक है; DEBUG-only same-UID escape hatch
PEEKABOO_ALLOW_UNSIGNED_SOCKET_CLIENTS=1(Peekaboo convention) द्वारा guarded है। - विवरण के लिए देखें: PeekabooBridge usage।
Operational flows
- Restart/rebuild:
SIGN_IDENTITY="Apple Development: <Developer Name> (<TEAMID>)" scripts/restart-mac.sh- मौजूदा instances को kill करता है
- Swift build + package
- LaunchAgent को लिखता/bootstraps/kickstarts करता है
- Single instance: यदि उसी bundle ID वाला कोई दूसरा instance चल रहा हो, तो app जल्दी exit कर जाता है।
Hardening notes
- सभी privileged surfaces के लिए TeamID match आवश्यक रखना बेहतर है।
- PeekabooBridge:
PEEKABOO_ALLOW_UNSIGNED_SOCKET_CLIENTS=1(DEBUG-only) local development के लिए same-UID callers को अनुमति दे सकता है। - सभी communication local-only रहती है; कोई network sockets expose नहीं किए जाते।
- TCC prompts केवल GUI app bundle से originate होते हैं; rebuilds में signed bundle ID stable रखें।
- IPC hardening: socket mode
0600, token, peer-UID checks, HMAC challenge/response, short TTL।