macOS 应用使用本地 Unix socket 连接节点宿主服务与 macOS 应用,用于 exec 审批和 system.run。Agent 动作仍通过 Gateway WebSocket 和 node.invoke 流转。
架构目标
- 单一 GUI 应用实例拥有所有 TCC 相关工作(通知、屏幕录制、麦克风、语音、AppleScript)
- 自动化的小型接口:Gateway + 节点命令,加上 PeekabooBridge 用于 UI 自动化
- 可预测的权限:始终使用相同的已签名 Bundle ID,由 launchd 启动
工作原理
Gateway + 节点传输
- 应用运行 Gateway(本地模式)并作为节点连接
- Agent 动作通过
node.invoke执行(如system.run、system.notify、canvas.*)
节点服务 + 应用 IPC
Agent -> Gateway -> Node Service (WS)
| IPC (UDS + token + HMAC + TTL)
v
Mac App (UI + TCC + system.run)
- 无头节点宿主服务连接 Gateway WebSocket
system.run请求通过本地 Unix socket 转发到 macOS 应用- 应用在 UI 上下文中执行,必要时提示用户,返回输出
PeekabooBridge(UI 自动化)
- 使用独立 UNIX socket(
bridge.sock)和 PeekabooBridge JSON 协议 - 客户端优先顺序:Peekaboo.app → Claude.app → OpenClaw.app → 本地执行
- 安全:bridge 宿主要求允许的 TeamID
安全加固
- socket 模式
0600,token,peer-UID 检查,HMAC 挑战/响应,短 TTL - 所有通信仅限本地;不暴露网络 socket
- TCC 提示仅来自 GUI 应用 bundle;保持签名 Bundle ID 稳定
操作流程
# 重启/重建
SIGN_IDENTITY="Apple Development: <Developer Name> (<TEAMID>)" scripts/restart-mac.sh相关链接
- platform-macos — macOS 平台总览
- platform-mac-peekaboo — PeekabooBridge 集成