执行工具
在工作区中运行 shell 命令。通过 process 支持前台和后台执行。
如果 process 被禁止,exec 会同步运行,并忽略 yieldMs/background。
后台会话是按代理作用域的;process 仅能看到同一代理的会话。
参数
command(必填项)workdir(默认为当前工作目录)env(键/值覆盖)yieldMs(默认 10000): 延迟后自动后台运行background(布尔值): 立即后台运行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(布尔值): 请求提升权限(仅适用于gateway主机);当elevated设置为full时,security=full才会被强制执行
说明:
host默认为sandbox。- 当沙箱关闭时,
elevated会被忽略(exec已经在主机上运行)。 gateway/node的批准由~/.clawdbot/exec-approvals.json控制。node需要配对的节点(配套应用或无头节点主机)。- 如果有多个节点可用,可以设置
exec.node或tools.exec.node来选择一个。 - 在非 Windows 主机上,如果设置了
SHELL,则使用SHELL;如果SHELL是fish,则优先使用bash(或sh)从PATH中运行,以避免fish不兼容的脚本,否则回退到SHELL。
配置
tools.exec.notifyOnExit(默认: true): 为后台执行的会话在退出时加入系统事件并请求心跳。tools.exec.approvalRunningNoticeMs(默认: 10000): 当批准限制的执行运行时间超过此值时,发出一条“正在运行”的提示(0 表示禁用)。tools.exec.host(默认:sandbox)tools.exec.security(默认:deny对于 sandbox,allowlist对于 gateway + node 当未设置时)tools.exec.ask(默认:on-miss)tools.exec.node(默认: 未设置)tools.exec.pathPrepend: 要添加到PATH的目录列表,用于执行。tools.exec.safeBins: 仅接受标准输入的安全二进制文件,可以在不显式允许列表的情况下运行。 json5 { tools: { exec: { pathPrepend: [”~/bin”, “/opt/oss/bin”] } } } ``````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:在容器内运行sh -lc(登录 shell),因此/etc/profile可能会重置PATH。Clawdbot 在加载 profile 后会将env.PATH添加到前面;tools.exec.pathPrepend在此处也适用。host=node:仅将你传递的环境变量覆盖发送到节点。只有在执行调用已经设置了env.PATH时,tools.exec.pathPrepend才会生效。无头节点主机仅在PATH前缀包含节点主机的PATH时才接受PATH(不进行替换)。macOS 节点会完全忽略PATH的覆盖。
按代理绑定节点(在配置中使用代理列表的索引):```bash clawdbot config get agents.list clawdbot config set agents.list[0].tools.exec.node “node-id-or-name”
"控制UI:Nodes选项卡包含一个小型的“执行节点绑定”面板,用于相同设置。
## 会话覆盖 (`/exec`)
使用 `/exec` 为 `host`、`security`、`ask` 和 `node` 设置**会话级别的**默认值。
发送 `/exec` 且不带参数以显示当前值。
示例:
/exec host=gateway security=allowlist ask=on-miss node=mac-1
```"```
## 执行审批(配套应用 / 节点主机)
沙盒代理可以在网关或节点主机上运行 `exec` 命令之前,要求每次请求的审批。
有关策略、允许列表和用户界面流程,请参见 [执行审批](/tools/exec-approvals)。
当需要审批时,exec 工具会立即返回
`status: "approval-pending"` 和一个审批 ID。一旦获得批准(或被拒绝/超时),
网关会发出系统事件(`Exec finished` / `Exec denied`)。如果命令在 `tools.exec.approvalRunningNoticeMs` 之后仍在运行,
将发出一次 `Exec running` 的通知。```json
{"tool":"exec","command":"ls -la"}
背景 + 投票:
json
{“tool”:”exec”,”command”:”npm run build”,”yieldMs”:1000}
{“tool”:”process”,”action”:”poll”,”sessionId”:”
发送键(tmux 风格):```json
{"tool":"process","action":"send-keys","sessionId":"<id>","keys":["Enter"]}
{"tool":"process","action":"send-keys","sessionId":"<id>","keys":["C-c"]}
{"tool":"process","action":"send-keys","sessionId":"<id>","keys":["Up","Up","Enter"]}
```
提交(仅发送 CR):
json
{"tool":"process","action":"submit","sessionId":"<id>"}
Paste (bracketed by default):```json
{“tool”:”process”,”action”:”paste”,”sessionId”:”
## apply_patch(实验性)
`apply_patch` 是 `exec` 的一个子工具,用于结构化的多文件编辑。
需显式启用:
json5
{
tools: {
exec: {
applyPatch: { enabled: true, allowModels: ["gpt-5.2"] }
}
}
}
注意事项:
- 仅适用于 OpenAI/OpenAI Codex 模型。
- 工具策略仍然适用;
allow: ["exec"]隐含允许apply_patch。 - 配置位于
tools.exec.applyPatch下。