内置工具
Exec 工具
Exec 工具让你能在工作区中执行 Shell 命令。它支持前台执行和后台执行(通过 process 工具配合)。如果 process 工具被禁用,exec 会以同步方式运行,并忽略 yieldMs 和 background 参数。后台会话按智能体(agent)隔离——每个智能体只能看到自己创建的会话。
参数说明
以下是 exec 工具支持的所有参数:
command(必需):要执行的命令workdir(默认:当前工作目录):命令执行的工作目录env(可选):环境变量键值对,用于覆盖默认环境yieldMs(默认:10000):超时自动 转入后台的毫秒数background(布尔值):设为true可立即在后台执行timeout(秒,默认:1800):命令超时时间,到期后自动终止pty(布尔值):在伪终端中运行,适用于需要 TTY 的 CLI 工具、编码智能体、终端 UI 程序host(sandbox | gateway | node):命令执行的目标位置security(deny | allowlist | full):gateway和node模式下的安全策略ask(off | on-miss | always):gateway和node模式下的审批提示策略node(字符串):当host=node时,指定节点的 ID 或名称elevated(布尔值):请求提升权限模式(仅网关主机);只有当elevated实际生效为full时,才会强制security=full
重要说明
host默认为sandbox(沙盒环境)- 当沙盒功能关闭时,
elevated参数会被忽略(因为exec已经在主机上运行了) gateway和node的审批策略由~/.openclaw/exec-approvals.json文件控制- 使用
node需要先配对节点(伴侣应用或无头节点主机) - 如果有多个可用节点,需要设置
exec.node或tools.exec.node来指定 - 在非 Windows 系统上,
exec会优先使 用SHELL环境变量;但如果SHELL是fish,会改为使用PATH中的bash(或sh),以避免 fish 脚本兼容性问题;如果都找不到,才回退到SHELL - 在 Windows 系统上,
exec会优先查找 PowerShell 7 (pwsh)(搜索顺序:Program Files、ProgramW6432、PATH),找不到则回退到 Windows PowerShell 5.1 - 主机执行模式(
gateway/node)会拒绝env.PATH和加载器覆盖(LD_*/DYLD_*),以防止二进制劫持或代码注入 - OpenClaw 会在执行的命令环境中设置
OPENCLAW_SHELL=exec(包括 PTY 和沙盒执行),这样你的 shell 配置文件就能检测到这是exec工具触发的 - 重要:沙盒功能默认关闭。如果沙盒关闭但仍显式配置或请求
host=sandbox,现在会直接报错,而不是静默地回退到网关主机执行。请启用沙盒功能,或改用host=gateway并配置审批策略 - 脚本预检(用于检测常见的 Python/Node shell 语法错误)只检查
workdir范围内的文件。如果脚本路径解析到了workdir之外,该文件会跳过预检
配置选项
你可以在配置文件中设置以下选项:
tools.exec.notifyOnExit(默认:true):设为true时,后台执行的会话在退出时会发送系统事件通知并请求心跳tools.exec.approvalRunningNoticeMs(默认:10000): 当需要审批的命令运行超过此时长后,发出一条"运行中"通知(设为0可禁用)tools.exec.host(默认:sandbox)tools.exec.security(默认:沙盒模式为deny,网关和节点模式未设置时为allowlist)tools.exec.ask(默认:on-miss)tools.exec.node(默认:未设置)tools.exec.pathPrepend:在执行前预置到PATH的目录列表(仅限gateway和sandbox模式)tools.exec.safeBins:仅从标准输入读取的安全二进制文件列表,无需显式加入允许列表即可运行。详见安全二进制文件tools.exec.safeBinTrustedDirs:为安全二进制文件路径检查额外指定信任目录。PATH中的条目不会自动受信任。内置默认值为/bin和/usr/bintools.exec.safeBinProfiles:为自定义安全二进制文件配置 argv 策略(支持minPositional、maxPositional、allowedValueFlags、deniedFlags)
配置示例:
{
tools: {
exec: {
pathPrepend: ["~/bin", "/opt/oss/bin"],
},
},
}
PATH 环境变量处理
不同执行模式下 PATH 的处理方式有所不同:
host=gateway:会合并你登录 shell 的PATH到执行环境中。主机执行模式会拒绝env.PATH覆盖。守护进程本身使用精简的PATH:- macOS:
/opt/homebrew/bin、/usr/local/bin、/usr/bin、/bin - Linux:
/usr/local/bin、/usr/bin、/bin
- macOS:
host=sandbox:在容器内以登录 shell 模式运行sh -lc,所以/etc/profile可能会重置PATH。OpenClaw 会通过内部环境变量(不做 shell 插值)在配置文件加载后预置env.PATH;tools.exec.pathPrepend在这里也生效host=node:只发送你传递的非阻塞环境变量覆盖到节点。主机执行拒绝env.PATH覆盖,节点主机也会忽略它们。如果需要在节点上添加额外的 PATH 条目,请配置节点主机服务环境(systemd/launchd)或将工具安装到标准位置
为特定智能体绑定节点(使用配置中的智能体列表索引):
openclaw config get agents.list
openclaw config set agents.list[0].tools.exec.node "node-id-or-name"
在控制 UI 的节点选项卡中,也有一个小型的"Exec 节点绑定"面板可以进行相同的设置。
会话覆盖(/exec 命令)
使用 /exec 命令可以为当前会话设置 host、security、ask 和 node 的默认值。直接发送 /exec 不带参数可查看当前设置。
示例:
/exec host=gateway security=allowlist ask=on-miss node=mac-1
授权模型
/exec 命令只对授权发送者生效(即通过通道允许列表/配对且启用了 commands.useAccessGroups 的用户)。它只更新会话状态,不会写入配置文件。如果你想完全禁用 exec,需要通过工具策略拒绝(设置 tools.deny: ["exec"] 或按智能体配置)。除非你显式设置 security=full 和 ask=off,否则主机审批策略仍然有效。