Exec 工具
在工作區執行 shell 指令。支援透過process 工具進行前台與背景執行。如果 process 不被允許,exec 會同步執行並忽略 yieldMs/background。背景會話按 Agent 劃分範圍;process 只會看到同一 Agent 的會話。
參數
command(必填)workdir(預設為 cwd)env(鍵值覆寫)yieldMs(預設 10000):延遲後自動轉入背景background(bool):立即轉入背景timeout(秒,預設 1800):超過時終止進程pty(bool):在可用時在虛擬終端中執行(只有 TTY CLI、編碼 Agent、終端 UI)host(sandbox | gateway | node):執行位置security(deny | allowlist | full):針對gateway/node的執行模式ask(off | on-miss | always):針對gateway/node的核准提示node(字串):host=node的節點 ID/名稱elevated(bool):要求提權模式(gateway host);security=full只在 elevated 解析為full時強制執行
host預設為sandbox。- 當沙盒關閉時會忽略
elevated(exec 已在 host 上執行)。 gateway/node核准由~/.openclaw/exec-approvals.json控制。node需要配對的節點(companion app 或 headless node host)。- 如果有多個節點可用,設定
exec.node或tools.exec.node以選擇一個。 - 在非 Windows 主機上,當設定
SHELL時 exec 會使用它;如果SHELL是fish,會優先使用PATH中的bash(或sh)來避免與 fish 不相容的指令碼,如果都不存在則回退到SHELL。 - Host 執行(
gateway/node)會拒絕env.PATH和載入器覆寫(LD_*/DYLD_*)以防止二進位檔案劫持或注入程式碼。 - 重要:沙盒預設是關閉的。如果沙盒關閉,
host=sandbox直接在 gateway host 上執行(無容器)且不需要核准。要求核准,請使用host=gateway執行並設定 exec 核准(或啟用沙盒)。
設定
tools.exec.notifyOnExit(預設:true):為真時,背景化的 exec 會話會在退出時排入系統事件並要求心跳。tools.exec.approvalRunningNoticeMs(預設:10000):當核准限制的 exec 執行時間超過此時間時發出單一「執行中」通知(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:不需要顯式 allowlist 項目即可執行的 stdin 專用安全二進位檔案。
PATH 處理
host=gateway:將登入 shell 的PATH合併到 exec 環境中。env.PATH覆寫對 host 執行會被拒絕。Daemon 本身仍使用最小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 透過內部環境變數(無 shell 內插)在設定檔來源後前置env.PATH;tools.exec.pathPrepend也適用這裡。host=node:只有非封鎖的環境覆寫會被傳送到節點。env.PATH覆寫對 host 執行會被拒絕。Headless 節點主機只有在前置節點主機 PATH 時才接受PATH(無替換)。macOS 節點完全捨棄PATH覆寫。
會話覆寫(/exec)
使用 /exec 為 host、security、ask 和 node 設定每個會話的預設值。
發送不帶引數的 /exec 以顯示目前值。
範例:
授權模型
/exec 只被授權的寄件者認可(channel allowlist/配對加上 commands.useAccessGroups)。
它只更新會話狀態而不寫入 config。要硬停用 exec,透過工具策略否定它(tools.deny: ["exec"] 或 per-agent)。Host 核准仍適用,除非您明確設定 security=full 和 ask=off。
Exec 核准(companion app / node host)
沙盒化的 Agent 可以在 exec 在 gateway 或 node host 執行之前要求每個要求的核准。 請見 Exec approvals 了解策略、allowlist 和 UI 流程。 當需要核准時,exec 工具立即回傳status: "approval-pending" 和核准 ID。一旦核准(或拒絕/逾時),
Gateway 發出系統事件(Exec finished / Exec denied)。如果指令在 tools.exec.approvalRunningNoticeMs 後仍在執行,會發出單一 Exec running 通知。
Allowlist + safe bins
Allowlist 執行只匹配解析的二進位檔案路徑(無基名稱匹配)。當security=allowlist 時,shell 指令只有在每個管道段都被 allowlist 或是 safe bin 時才會自動允許。
Chaining(;、&&、||)和重定向在 allowlist 模式下被拒絕。
範例
前台:apply_patch(實驗性)
apply_patch 是 exec 的子工具,用於結構化的多檔案編輯。
明確啟用它:
- 只適用於 OpenAI/OpenAI Codex 模型。
- 工具策略仍適用;
allow: ["exec"]隱含允許apply_patch。 - Config 位於
tools.exec.applyPatch。