节点
节点 是一台伴随设备(macOS/iOS/Android/无界面)以role: "node" 连接到网关的 WebSocket(与操作员使用同一端口),并通过 node.invoke 暴露命令接口(例如 canvas.*、camera.*、device.*、notifications.*、system.*)。协议详情见:网关协议。
旧版传输: Bridge 协议(TCP JSONL;已弃用/当前节点已移除)。
macOS 也可以运行在 节点模式:菜单栏应用连接到网关的 WS 服务器,并将其本地的 canvas/camera 命令作为节点暴露(因此 openclaw nodes … 可以针对这台 Mac 工作)。
备注:
- 节点属于外设,不是网关。它们不运行网关服务。
- Telegram/WhatsApp 等消息都通过 网关 到达,而非节点。
- 故障排除运行手册:/nodes/troubleshooting
配对 + 状态
WebSocket 节点使用设备配对。 节点在connect 时提供设备身份;网关会为 role: node 创建设备配对请求。通过设备 CLI(或 UI)批准。
快速 CLI:
nodes status当设备配对角色包含node时,会标记节点为 已配对。node.pair.*(CLI:openclaw nodes pending/approve/reject)是网关拥有的独立节点配对存储;它不是 WebSocketconnect握手的关卡。
远程节点主机(system.run)
当网关运行在一台机器上,而希望命令在另一台机器执行时,使用节点主机。模型仍连接到网关;当选择host=node 时,网关会将 exec 调用转发到节点主机。
运行分布
- 网关主机:接收消息,运行模型,路由工具调用。
- 节点主机:在节点机器上执行
system.run/system.which。 - 审批:在节点主机通过
~/.openclaw/exec-approvals.json强制执行。
启动节点主机(前台)
在节点机器上:通过 SSH 隧道访问远程网关(回环接口绑定)
如果网关绑定的是回环地址(gateway.bind=loopback,本地模式默认值),远程节点主机无法直接连接。请建立 SSH 隧道,并将节点主机指向隧道的本地端。
示例(节点主机 -> 网关主机):
openclaw node run支持令牌或密码认证。- 建议使用环境变量:
OPENCLAW_GATEWAY_TOKEN/OPENCLAW_GATEWAY_PASSWORD。 - 配置文件回退选项为:
gateway.auth.token/gateway.auth.password;远程模式还支持gateway.remote.token/gateway.remote.password。 - 旧版环境变量
CLAWDBOT_GATEWAY_*在节点主机认证解析时故意被忽略。
启动节点主机(服务)
配对 + 命名
在网关主机上操作:- 在
openclaw node run/openclaw node install使用--display-name(保存在节点的~/.openclaw/node.json中)。 - 使用
openclaw nodes rename --node <id|name|ip> --name "构建节点"(网关覆盖)。
允许列表命令
执行审批是每个节点主机独立的。在网关添加允许列表项:~/.openclaw/exec-approvals.json。
指定 exec 运行节点
配置默认(网关配置):host=node 的 exec 调用都会在节点主机上执行(受节点允许列表/审批限制)。
相关链接:
调用命令
底层(原始 RPC)调用示例:屏幕快照(canvas 截图)
如果节点显示 Canvas(WebView),canvas.snapshot 返回 { format, base64 }。
CLI 辅助(写入临时文件并打印 MEDIA:<路径>):
Canvas 控制命令
canvas present接受 URL 或本地文件路径(通过--target),并可选用--x/--y/--width/--height定位。canvas eval接收内联 JS(--js)或位置参数。
A2UI(Canvas)
- 仅支持 A2UI v0.8 JSONL 格式(v0.9/createSurface 请求被拒绝)。
照片 + 视频(节点相机)
照片(jpg):
mp4):
- 节点必须处于前台状态,
canvas.*和camera.*调用才生效(后台调用返回NODE_BACKGROUND_UNAVAILABLE)。 - 视频时长有限制(当前
<= 60s),以避免超大 base64 载荷。 - Android 会在可能时请求
CAMERA/RECORD_AUDIO权限;权限拒绝时返回*_PERMISSION_REQUIRED。
屏幕录制(节点)
节点支持screen.record(mp4)。示例:
screen.record需要节点应用处于前台。- Android 录制前会显示系统屏幕捕获提示。
- 屏幕录制限制为
<= 60s。 --no-audio禁用麦克风录音(iOS/Android 支持;macOS 使用系统声音录制)。- 多屏环境可用
--screen <索引>选择显示屏。
位置(节点)
节点在启用定位服务时支持location.get。
CLI 辅助:
- 定位默认关闭。
- “始终允许”需要系统权限;后台获取为尽力而为。
- 返回包含经纬度、精度(米)和时间戳。
短信(Android 节点)
Android 节点在用户授权短信权限且设备支持电话功能时,支持sms.send。
底层调用示例:
- 权限提示需在 Android 设备上接受后才会公开该能力。
- 没电话功能的 Wi-Fi 设备不会公开
sms.send。
Android 设备与个人数据命令
Android 节点启用相应权限后,可以提供更多命令分组: 可用分组:device.status、device.info、device.permissions、device.healthnotifications.list、notifications.actionsphotos.latestcontacts.search、contacts.addcalendar.events、calendar.addmotion.activity、motion.pedometerapp.update
- 运动命令受可用传感器能力限制。
app.update受权限和节点运行时策略限制。
系统命令(节点主机 / Mac 节点)
macOS 节点暴露system.run、system.notify 和 system.execApprovals.get/set。
无界面节点主机暴露 system.run、system.which 和 system.execApprovals.get/set。
示例:
system.run返回 stdout、stderr 和退出码。system.notify遵守 macOS 应用的通知权限状态。- 未识别的节点
platform/deviceFamily元数据使用保守默认允许列表,排除system.run和system.which。若需为未知平台启用这些命令,请通过gateway.nodes.allowCommands明确添加。 system.run支持--cwd、--env KEY=VAL、--command-timeout和--needs-screen-recording。- 对于 shell 包装器(
bash|sh|zsh ... -c/-lc),请求作用域的--env变量仅保留明确允许的变量(TERM,LANG,LC_*,COLORTERM,NO_COLOR,FORCE_COLOR)。 - 允许列表模式下,对已知的包装器(
env、nice、nohup、stdbuf、timeout),会保持内部可执行路径,而非包装器路径。如果拆包不安全,则不自动保存允许列表条目。 - Windows 节点主机允许列表模式,shell 包装执行(通过
cmd.exe /c)需要显式批准(仅允许条目不能自动批准包装器形式)。 system.notify支持--priority <passive|active|timeSensitive>和--delivery <system|overlay|auto>。- 节点主机会忽略
PATH覆盖,并剥离危险的启动/shell 变量(DYLD_*、LD_*、NODE_OPTIONS、PYTHON*、PERL*、RUBYOPT、SHELLOPTS、PS4)。如果需要额外的 PATH 项,请配置节点主机服务环境,或将工具安装到标准路径,而非通过--env传递PATH。 - macOS 节点模式下,
system.run受 macOS 应用中的执行审批控制(设置 → 执行审批)。 询问/允许列表/完全模式与无界面节点主机一致;拒绝时返回SYSTEM_RUN_DENIED。 - 无界面节点主机中,
system.run受~/.openclaw/exec-approvals.json执行审批管理。
Exec 节点绑定
当可用多个节点时,您可以将 exec 绑定到特定节点。 这会设置exec host=node 的默认节点(可针对具体代理覆写)。
全局默认:
权限映射
节点可在node.list / node.describe 中包含 permissions 映射,键名为权限名称(如 screenRecording、accessibility),值为布尔(true 表示已授权)。
无界面节点主机(跨平台)
OpenClaw 可运行一个无界面节点主机(无 UI)连接网关 WebSocket, 暴露system.run / system.which。适用于 Linux/Windows,或在服务器旁运行简易节点。
启动方式:
- 依然需要配对(网关会显示设备配对提示)。
- 节点主机将在
~/.openclaw/node.json中存储节点 ID、令牌、显示名称和网关连接信息。 - 执行审批通过本地的
~/.openclaw/exec-approvals.json强制执行 (详见 执行审批)。 - macOS 中无界面节点主机默认本地执行
system.run。设置环境变量OPENCLAW_NODE_EXEC_HOST=app可通过伴随应用的执行主机执行; 添加OPENCLAW_NODE_EXEC_FALLBACK=0可强制使用应用主机,如不可用则失败。 - 当网关 WS 启用 TLS,需加上
--tls/--tls-fingerprint。
Mac 节点模式
- macOS 菜单栏应用以节点身份连接网关 WS 服务器(使
openclaw nodes …可操作该 Mac)。 - 远程模式下,应用开启 SSH 隧道连接到网关端口的本地地址。