Exec 工具
在工作区中运行 shell 命令。通过process 支持前台 + 后台执行。
如果 process 被禁用,exec 会同步运行并忽略 yieldMs/background。
后台会话按 agent 隔离;process 只能看到同一 agent 的会话。
参数
command(必填)workdir(默认 cwd)env(key/value 覆盖)yieldMs(默认 10000):延迟后自动转为后台background(bool):立即转为后台timeout(秒,默认 1800):到期强制终止pty(bool):可用时使用伪终端(TTY-only CLI、coding agent、终端 UI)host(sandbox | gateway | node):执行位置security(deny | allowlist | full):对gateway/node的执行策略ask(off | on-miss | always):对gateway/node的审批提示node(string):host=node的 node id/nameelevated(bool):请求 elevated 模式(gateway 主机);仅当 elevated 解析为full时才强制security=full
host默认sandbox。- 关闭沙箱时
elevated会被忽略(exec 已运行在宿主机)。 gateway/node的审批由~/.openclaw/exec-approvals.json控制。node需要已配对的 node(伴侣应用或无 UI node host)。- 若有多个 node,可设置
exec.node或tools.exec.node选择。 - 在非 Windows 主机上,exec 优先使用
SHELL;若SHELL为fish,会优先使用PATH中的bash(或sh) 以避免 fish 不兼容脚本,若不存在才回退SHELL。 - 重要:沙箱默认 关闭。如果关闭沙箱,
host=sandbox会直接在 gateway 主机上运行 (无容器)且 不需要审批。要启用审批,请使用host=gateway并配置 exec 审批(或开启沙箱)。
配置
tools.exec.notifyOnExit(默认:true):为后台 exec 会话在退出时排队系统事件并请求 heartbeat。tools.exec.approvalRunningNoticeMs(默认:10000):当需审批的 exec 运行超过此时间时发送一次“running”提示(0 禁用)。tools.exec.host(默认:sandbox)tools.exec.security(默认:沙箱为deny,gateway + node 未设置时为allowlist)tools.exec.ask(默认:on-miss)tools.exec.node(默认:未设置)tools.exec.pathPrepend:为 exec 运行时在PATH前置的目录列表。tools.exec.safeBins:仅 stdin 的安全二进制,可在无明确 allowlist 条目时运行。
PATH 处理
host=gateway:把你的登录 shellPATH合并到 exec 环境中(除非 exec 调用已设置env.PATH)。守护进程本身仍使用最小PATH:- macOS:
/opt/homebrew/bin、/usr/local/bin、/usr/bin、/bin - Linux:
/usr/local/bin、/usr/bin、/bin
- macOS:
host=sandbox:在容器内运行sh -lc(登录 shell),因此/etc/profile可能重置PATH。 OpenClaw 通过内部 env 变量在 profile 解析后前置env.PATH(不做 shell 插值);tools.exec.pathPrepend也生效。host=node:仅传递你提供的 env 覆盖。tools.exec.pathPrepend只有在 exec 调用已设置env.PATH时才生效。 无 UI node host 只接受对 PATH 的前置(不允许替换);macOS node 会完全丢弃 PATH 覆盖。
会话覆盖(/exec)
用 /exec 为 会话级 的 host、security、ask、node 设置默认值。
发送 /exec 且不带参数可查看当前值。
示例:
授权模型
/exec 仅对 授权发送者 生效(频道 allowlist/配对 + commands.useAccessGroups)。它只更新 会话状态,不会写入配置。要硬性禁用 exec,请通过工具策略拒绝(tools.deny: ["exec"] 或按 agent 设置)。除非你明确设置 security=full 且 ask=off,否则宿主机审批仍会生效。
Exec 审批(伴侣应用 / node host)
沙箱化 agent 可要求在 gateway 或 node host 上执行exec 前进行逐次审批。
参见 Exec 审批 了解策略、allowlist 与 UI 流程。
当需要审批时,exec 工具会立即返回
status: "approval-pending" 与审批 id。一旦批准(或拒绝/超时),Gateway 会发送系统事件(Exec finished / Exec denied)。若命令运行时间超过 tools.exec.approvalRunningNoticeMs,会发送一次 Exec running 提示。
Allowlist + 安全 bin
Allowlist 仅匹配 解析后的二进制路径(不匹配 basename)。当security=allowlist 时,只有每个管道片段都在 allowlist 中或是安全 bin 时,shell 命令才会被自动允许。allowlist 模式下会拒绝链式(;、&&、||)与重定向。
示例
前台:apply_patch(实验性)
apply_patch 是 exec 的子工具,用于结构化多文件编辑。
需显式开启:
- 仅对 OpenAI/OpenAI Codex 模型可用。
- 工具策略仍生效;
allow: ["exec"]会隐式允许apply_patch。 - 配置位于
tools.exec.applyPatch。