命令策略
命令策略¶
设备配对后,节点命令必须满足三个要求才能被调用:
- 节点必须在其经过身份验证的连接元数据(
connect.commands)中声明该命令。 - 该命令必须位于节点已配对设备记录上的已批准命令面中。
- Gateway 的平台与批准衍生允许列表必须包含所声明的命令。
使用 openclaw nodes pending 和 openclaw nodes approve <nodeRequestId> 来批准待批准的命令面。此请求 ID 与设备请求 ID 不同。初始的未批准命令面没有任何有效命令。在待批准的扩展期间,只有先前已批准且仍然被声明并允许的命令保持有效。在这些检查之后,本地执行批准和操作系统权限仍然适用。
各平台的默认允许列表(在插件默认值和 commands.allow/commands.deny 覆盖之前):
| 平台 | 默认允许的命令 |
|---|---|
| iOS | camera.list, location.get, device.info, device.status, contacts.search, calendar.events, reminders.list, photos.latest, motion.activity, motion.pedometer, system.notify |
| watchOS | device.info, device.status, system.notify |
| Android | camera.list, location.get, notifications.list, notifications.actions, system.notify, device.info, device.status, device.permissions, device.health, device.apps, contacts.search, calendar.events, callLog.search, reminders.list, photos.latest, motion.activity, motion.pedometer, mobile.ui.observe, mobile.ui.act |
| macOS | camera.list, camera.ptz.status, location.get, device.info, device.status, device.apps, contacts.search, calendar.events, reminders.list, photos.latest, motion.activity, motion.pedometer, system.notify, computer.act |
| Windows | camera.list, location.get, device.info, device.status, system.notify, computer.act |
| Linux | system.notify, computer.act(节点主机命令如 system.run 需要批准,见下文) |
这些行描述的是 Gateway 策略上限,而非每个节点应用所实现的命令。只有当连接的节点也声明该命令时,该命令才可用。具体来说,Android 仅在启用 Accessibility Control 时才通告移动 UI 命令,桌面节点仅在其本地 Computer Control 执行器启用时才通告 computer.act。当前 macOS 应用不会声明 macOS 策略行中列出的设备和个人数据命令族。
插件拥有的默认值仅在插件支持的命令面上扩展平台表:
| 插件 | 平台 | 默认允许的命令 |
|---|---|---|
| Canvas | macOS | canvas.present, canvas.hide, canvas.navigate |
Canvas 命令在 macOS 应用的原生面板中呈现托管的 widget 文档。iOS、Android、Windows、Linux 和未知平台不会收到 Canvas 插件默认值。
talk.ptt.start、talk.ptt.stop、talk.ptt.cancel 和 talk.ptt.once 默认允许任何通告 talk 能力或声明 talk.* 命令的节点使用,与平台标签无关。
桌面主机命令(macOS/Windows/Linux 上的 system.run、system.run.prepare、system.which、browser.proxy、browser.proxy.upload.v1、mcp.tools.call.v1、screen.snapshot 和 desktop.stream)不属于上述静态平台默认表的一部分。一旦操作员批准声明了这些命令的配对请求,它们就变为可用,之后节点的已批准命令集会将其在重新连接时继续保留。桌面共享在桌面节点上默认启用;Mac 应用在 设置 → 此 Mac → 功能 → 桌面共享 下提供其本地开关。
危险或隐私敏感性强的命令需要一次性持久选择加入 gateway.nodes.commands.allow,即使节点声明了它们:camera.snap、camera.clip、camera.ptz.control、screen.record、contacts.add、calendar.add、reminders.add、health.summary、sms.send、sms.search。gateway.nodes.commands.deny 始终优先于默认值和额外的允许列表条目。有关桌面访问的本地启用、配对、能力和工具策略门控,请参阅 已配对节点桌面、HealthKit 摘要 和 计算机使用。
插件拥有的节点命令可以添加 Gateway 节点调用策略。该策略在允许列表检查之后、转发到节点之前运行,因此原始 node.invoke、CLI 辅助工具和专用代理工具共享同一插件权限边界。危险的插件节点命令仍需要显式选择加入 gateway.nodes.commands.allow。
当节点扩展其已声明的命令、能力或权限后,
重新连接该节点,检查 openclaw nodes pending,并使用
openclaw nodes approve <nodeRequestId> 批准扩大后的范围。
移除声明不会授予新的访问权限,也不需要为扩展进行批准。
配置(openclaw.json)¶
节点相关设置位于 gateway.nodes 和 tools.exec 下:
{
gateway: {
nodes: {
// Auto-approve first-time node pairing from trusted networks (CIDR list).
// Disabled when unset. Only applies to first-time role:node requests
// with no requested scopes; does not auto-approve upgrades. This
// approves the device only: the node's command/capability surface still
// needs `openclaw nodes approve <requestId>` (see `openclaw nodes
// pending`), because device pairing alone must not grant commands.
// Silent same-host pairing behaves the same way. SSH-verified pairing
// and node-profile setup codes approve the initial surface, since both
// record explicit machine-ownership or admin consent.
pairing: {
autoApproveCidrs: ["192.168.1.0/24"],
// SSH-verified auto-approval (default: enabled). Approves first-time
// node pairing on an exact device-key match read back over SSH.
sshVerify: true,
},
// Trust agent-visible plugin tools published by paired nodes (default: true).
pluginTools: {
enabled: true,
},
// Persistently enable dangerous/privacy-heavy node commands.
commands: {
allow: ["camera.snap", "screen.record"],
// Block exact command names even if defaults or commands.allow include them.
deny: ["camera.clip"],
},
},
},
tools: {
exec: {
// Default exec host: "node" routes all exec calls to a paired node.
host: "node",
// Exec policy mode for node exec: allow only approved/allowlisted commands.
mode: "allowlist",
// Pin exec to a specific node (id or name). Omit to allow any node.
node: "build-node",
},
},
}
使用确切的节点命令名称。即使平台默认设置或 commands.allow 条目本应允许某个命令,commands.deny 也会移除该命令。已配对的节点默认可以发布代理可见的插件工具描述符,但每个描述符的命令仍必须位于该节点已批准命令范围内。设置 gateway.nodes.pluginTools.enabled: false 可忽略所有这些描述符。有关 Gateway 节点配对和命令策略字段详情,请参阅 Gateway 配置参考。
每个代理的 exec 节点覆盖:
权限映射¶
节点可以在 node.list / node.describe 中包含一个 permissions 映射,以权限名称为键(例如 screenRecording、accessibility、location),值为布尔值(true = 已授予)。
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 cl/openclaw