मुख्य सामग्री पर जाएं

OpenClaw macOS IPC आर्किटेक्चर

Current model: a local Unix socket connects the node host service to the macOS app for exec approvals + system.run. A openclaw-mac debug CLI exists for discovery/connect checks; agent actions still flow through the Gateway WebSocket and node.invoke. UI automation uses PeekabooBridge.

लक्ष्य

  • एकल GUI ऐप इंस्टेंस जो सभी TCC-सामना करने वाले कार्यों का स्वामित्व रखता है (नोटिफ़िकेशन, स्क्रीन रिकॉर्डिंग, माइक, स्पीच, AppleScript)।
  • ऑटोमेशन के लिए छोटा सतह क्षेत्र: Gateway + node कमांड्स, तथा UI ऑटोमेशन के लिए PeekabooBridge।
  • पूर्वानुमेय अनुमतियाँ: हमेशा वही साइन किया हुआ बंडल ID, launchd द्वारा लॉन्च किया गया, ताकि TCC ग्रांट्स स्थिर रहें।

यह कैसे काम करता है

Gateway + node ट्रांसपोर्ट

  • ऐप Gateway (local mode) चलाता है और node के रूप में उससे कनेक्ट होता है।
  • एजेंट क्रियाएँ node.invoke के माध्यम से की जाती हैं (जैसे system.run, system.notify, canvas.*)।

Node service + ऐप IPC

  • एक हेडलेस node host service Gateway WebSocket से कनेक्ट होता है।
  • system.run अनुरोधों को एक स्थानीय Unix सॉकेट के माध्यम से macOS ऐप तक अग्रेषित किया जाता है।
  • ऐप UI संदर्भ में exec करता है, आवश्यकता होने पर प्रॉम्प्ट दिखाता है, और आउटपुट लौटाता है।
आरेख (SCI):
Agent -> Gateway -> Node Service (WS)
                      |  IPC (UDS + token + HMAC + TTL)
                      v
                  Mac App (UI + TCC + system.run)

PeekabooBridge (UI ऑटोमेशन)

  • UI ऑटोमेशन एक अलग UNIX सॉकेट का उपयोग करता है जिसका नाम bridge.sock है और PeekabooBridge JSON प्रोटोकॉल।
  • होस्ट वरीयता क्रम (क्लाइंट-साइड): Peekaboo.app → Claude.app → OpenClaw.app → स्थानीय निष्पादन।
  • सुरक्षा: ब्रिज होस्ट्स के लिए एक अनुमत TeamID आवश्यक है; DEBUG-केवल same-UID एस्केप हैच PEEKABOO_ALLOW_UNSIGNED_SOCKET_CLIENTS=1 (Peekaboo परंपरा) द्वारा संरक्षित है।
  • विवरण के लिए देखें: PeekabooBridge usage

परिचालन प्रवाह

  • Restart/rebuild: SIGN_IDENTITY="Apple Development: <Developer Name> (<TEAMID>)" scripts/restart-mac.sh
    • मौजूदा इंस्टेंस को समाप्त करता है
    • Swift बिल्ड + पैकेज
    • LaunchAgent को लिखता/बूटस्ट्रैप/किकस्टार्ट करता है
  • एकल इंस्टेंस: यदि समान बंडल ID वाला कोई अन्य इंस्टेंस चल रहा हो तो ऐप प्रारंभ में ही बाहर निकल जाता है।

हार्डनिंग नोट्स

  • सभी विशेषाधिकारयुक्त सतहों के लिए TeamID मिलान की आवश्यकता को प्राथमिकता दें।
  • PeekabooBridge: PEEKABOO_ALLOW_UNSIGNED_SOCKET_CLIENTS=1 (केवल DEBUG) स्थानीय विकास के लिए same-UID कॉलर्स की अनुमति दे सकता है।
  • सभी संचार केवल स्थानीय रहते हैं; कोई नेटवर्क सॉकेट उजागर नहीं किए जाते।
  • TCC प्रॉम्प्ट केवल GUI ऐप बंडल से उत्पन्न होते हैं; पुनर्निर्माणों के बीच साइन किया हुआ बंडल ID स्थिर रखें।
  • IPC हार्डनिंग: सॉकेट मोड 0600, टोकन, peer-UID जाँच, HMAC चैलेंज/रिस्पॉन्स, छोटा TTL।