OpenClaw macOS IPC 架構
目前模型: 本機 Unix socket 連接節點主機服務與 macOS 應用程式,用於執行核准和 system.run。openclaw-mac 除錯 CLI 可用於探索/連線檢查;代理程式操作仍透過 Gateway WebSocket 和 node.invoke 進行。UI 自動化使用 PeekabooBridge。
目標
- 單一 GUI 應用程式實例擁有所有面向 TCC 的工作(通知、螢幕錄製、麥克風、語音辨識、AppleScript)。
- 提供精簡的自動化介面:Gateway + 節點指令,加上 PeekabooBridge 的 UI 自動化。
- 可預測的權限:始終使用相同的已簽章 bundle ID,由 launchd 啟動,確保 TCC 授權持續有效。
運作方式
Gateway + 節點傳輸
- 應用程式執行 Gateway(本機模式)並以節點身分連線。
- 代理程式操作透過
node.invoke執行(例如system.run、system.notify、canvas.*)。
節點服務 + 應用程式 IPC
- 無頭節點主機服務透過 Gateway WebSocket 連線。
system.run請求透過本機 Unix socket 轉發至 macOS 應用程式。- 應用程式在 UI 環境中執行命令,必要時顯示提示,並回傳輸出。
架構圖(SCI):
Agent -> Gateway -> Node Service (WS)
| IPC (UDS + token + HMAC + TTL)
v
Mac App (UI + TCC + system.run)
PeekabooBridge(UI 自動化)
- UI 自動化使用名為
bridge.sock的獨立 UNIX socket 及 PeekabooBridge JSON 協定。 - Host 偏好順序(客戶端):Peekaboo.app → Claude.app → OpenClaw.app → 本機執行。
- 安全性:Bridge host 要求允許的 TeamID;DEBUG 模式下的同 UID 備援受
PEEKABOO_ALLOW_UNSIGNED_SOCKET_CLIENTS=1保護(Peekaboo 慣例)。 - 請參閱:PeekabooBridge 用法。
操作流程
- 重啟/重建:
SIGN_IDENTITY="Apple Development: <Developer Name> (<TEAMID>)" scripts/restart-mac.sh- 終止現有實例
- Swift 建構 + 打包
- 寫入/bootstrap/kickstart LaunchAgent
- 單一實例:若另一個相同 bundle ID 的實例正在運行,應用程式會提前退出。
強化說明
- 所有特權介面建議要求 TeamID 比對。
- PeekabooBridge:
PEEKABOO_ALLOW_UNSIGNED_SOCKET_CLIENTS=1(僅限 DEBUG)允許同 UID 呼叫者進行本機開發。 - 所有通訊皆僅限本機;不公開網路 socket。
- TCC 提示僅來自 GUI 應用程式 bundle;在各次重新建構間保持已簽章 bundle ID 穩定。
- IPC 強化:socket 模式
0600、token、peer-UID 檢查、HMAC 挑戰/回應、短 TTL。