สถาปัตยกรรมIPCบนmacOSของOpenClaw¶
โมเดลปัจจุบัน: ซ็อกเก็ตUnixภายในเครื่องเชื่อมต่อ บริการโฮสต์โหนด กับ แอปmacOS เพื่อการอนุมัติการรันคำสั่งและ system.run. มี openclaw-mac เป็น CLI ดีบักสำหรับการค้นหา/ตรวจสอบการเชื่อมต่อ; การกระทำของเอเจนต์ยังคงไหลผ่าน WebSocket ของGateway(เกตเวย์) และ node.invoke. การทำอัตโนมัติของUIใช้ PeekabooBridge
เป้าหมาย¶
- แอปGUIเพียงอินสแตนซ์เดียวที่เป็นเจ้าของงานที่เกี่ยวข้องกับTCCทั้งหมด (การแจ้งเตือน การบันทึกหน้าจอ ไมโครโฟน การพูด AppleScript)
- พื้นผิวสำหรับการทำอัตโนมัติที่เล็ก: Gateway(เกตเวย์) + คำสั่งโหนด และ PeekabooBridge สำหรับการทำอัตโนมัติของUI
- สิทธิ์ที่คาดเดาได้: ใช้ bundle ID ที่ลงนามเดียวกันเสมอ เปิดโดย launchd เพื่อให้การอนุญาตของTCCคงอยู่
ทำงานอย่างไร¶
Gateway(เกตเวย์) + การขนส่งโหนด¶
- แอปรัน Gateway(เกตเวย์) (โหมดภายในเครื่อง) และเชื่อมต่อเข้าหาในฐานะโหนด
- การกระทำของเอเจนต์ดำเนินการผ่าน
node.invoke(เช่นsystem.run,system.notify,canvas.*)
บริการโหนด + IPCของแอป¶
- บริการโฮสต์โหนดแบบไม่มีหน้าจอเชื่อมต่อกับ WebSocket ของGateway(เกตเวย์)
- คำขอ
system.runถูกส่งต่อไปยังแอปmacOSผ่านซ็อกเก็ตUnixภายในเครื่อง - แอปดำเนินการรันคำสั่งในบริบทของUI แจ้งเตือนหากจำเป็น และส่งคืนเอาต์พุต
แผนภาพ (SCI):
Agent -> Gateway -> Node Service (WS)
| IPC (UDS + token + HMAC + TTL)
v
Mac App (UI + TCC + system.run)
PeekabooBridge (การทำอัตโนมัติของUI)¶
- การทำอัตโนมัติของUIใช้ซ็อกเก็ตUNIXแยกต่างหากชื่อ
bridge.sockและโปรโตคอล JSON ของPeekabooBridge - ลำดับความชอบของโฮสต์ (ฝั่งไคลเอนต์): Peekaboo.app → Claude.app → OpenClaw.app → การรันภายในเครื่อง
- ความปลอดภัย: โฮสต์ของบริดจ์ต้องมี TeamID ที่อยู่ในรายการอนุญาต; ช่องทางหลบหนี DEBUG-only แบบ same-UID ถูกคุ้มครองด้วย
PEEKABOO_ALLOW_UNSIGNED_SOCKET_CLIENTS=1(ธรรมเนียมของPeekaboo) - ดู: การใช้งานPeekabooBridge สำหรับรายละเอียด
โฟลว์การปฏิบัติงาน¶
- รีสตาร์ต/สร้างใหม่:
SIGN_IDENTITY="Apple Development: <Developer Name> (<TEAMID>)" scripts/restart-mac.sh - ฆ่าอินสแตนซ์ที่มีอยู่
- สร้างและแพ็กเกจด้วยSwift
- เขียน/บูตสแตรป/คิกสตาร์ต LaunchAgent
- อินสแตนซ์เดียว: แอปจะออกทันทีหากมีอินสแตนซ์อื่นที่มี bundle ID เดียวกันกำลังทำงาน
หมายเหตุการเสริมความแข็งแกร่ง¶
- แนะนำให้บังคับการตรงกันของTeamIDสำหรับพื้นผิวที่มีสิทธิ์พิเศษทั้งหมด
- PeekabooBridge:
PEEKABOO_ALLOW_UNSIGNED_SOCKET_CLIENTS=1(DEBUG-only) อาจอนุญาตผู้เรียกแบบ same-UID สำหรับการพัฒนาในเครื่อง - การสื่อสารทั้งหมดคงอยู่เฉพาะภายในเครื่อง; ไม่มีการเปิดพอร์ตเครือข่าย
- การแจ้งเตือนTCCเกิดจากบันเดิลแอปGUIเท่านั้น; รักษา bundle ID ที่ลงนามให้คงที่ข้ามการสร้างใหม่
- การเสริมความแข็งแกร่งของIPC: โหมดซ็อกเก็ต
0600, โทเคน, การตรวจสอบ peer-UID, การท้าทาย/ตอบกลับด้วยHMAC, TTL สั้น