Exec tool
Run shell commands in the workspace. Supports foreground + background execution viaprocess. If process is disallowed, exec runs synchronously
and ignores yieldMs/background. Background sessions are scoped per
agent; process only sees sessions from the same agent.
Parameters
command(required)workdir(defaults to cwd)env(key/value overrides)yieldMs(default 10000): auto-background after delaybackground(bool): background immediatelytimeout(seconds, default 1800): kill on expiry-
pty(bool): run in a pseudo-terminal when available (TTY-only CLIs, coding agents, terminal UIs) host(sandbox | gateway | node): where to execute-
security(deny | allowlist | full): enforcement mode forgateway/node -
ask(off | on-miss | always): approval prompts forgateway/node node(string): node id/name forhost=node-
elevated(bool): request elevated mode (gateway host);security=fullis only forced when elevated resolves tofull
hostdefaults tosandbox.elevatedis ignored when sandboxing is off (exec already runs on the host).-
gateway/nodeapprovals are controlled by~/.openclaw/exec-approvals.json. noderequires a paired node (companion app or headless node host).-
If multiple nodes are available, set
exec.nodeortools.exec.nodeto select one. -
On non-Windows hosts, exec uses
SHELLwhen set; ifSHELLisfish, it prefersbash(orsh) fromPATHto avoid fish-incompatible scripts, then falls back toSHELLif neither exists. -
Host execution (
gateway/node) rejectsenv.PATHand loader overrides (LD_*/DYLD_*) to prevent binary hijacking or injected code. -
Important: sandboxing is off by default. If sandboxing is off,
host=sandboxruns directly on the gateway host (no container) and does not require approvals. To require approvals, run withhost=gatewayand configure exec approvals (or enable sandboxing).
Config
-
tools.exec.notifyOnExit(default: true): when true, backgrounded exec sessions enqueue a system event and request a heartbeat on exit. -
tools.exec.approvalRunningNoticeMs(default: 10000): emit a single “running” notice when an approval-gated exec runs longer than this (0 disables). tools.exec.host(default:sandbox)-
tools.exec.security(default:denyfor sandbox,allowlistfor gateway + node when unset) tools.exec.ask(default:on-miss)tools.exec.node(default: unset)-
tools.exec.pathPrepend: list of directories to prepend toPATHfor exec runs. -
tools.exec.safeBins: stdin-only safe binaries that can run without explicit allowlist entries.
PATH handling
-
host=gateway: merges your login-shellPATHinto the exec environment.env.PATHoverrides are rejected for host execution. The daemon itself still runs with a minimalPATH:-
macOS:
/opt/homebrew/bin,/usr/local/bin,/usr/bin,/bin - Linux:
/usr/local/bin,/usr/bin,/bin
-
macOS:
-
host=sandbox: runssh -lc(login shell) inside the container, so/etc/profilemay resetPATH. OpenClaw prependsenv.PATHafter profile sourcing via an internal env var (no shell interpolation);tools.exec.pathPrependapplies here too. -
host=node: only non-blocked env overrides you pass are sent to the node.env.PATHoverrides are rejected for host execution. Headless node hosts acceptPATHonly when it prepends the node host PATH (no replacement). macOS nodes dropPATHoverrides entirely.
Session overrides (/exec)
Use /exec to set per-session defaults for
host,
security, ask, and node. Send /exec with no
arguments to show the current values.
Example:
Authorization model
/exec is only honored for authorized senders (channel
allowlists/pairing plus commands.useAccessGroups). It updates
session state only and does not write config. To hard-disable exec, deny it via
tool policy (tools.deny: ["exec"] or per-agent). Host approvals still apply unless
you explicitly set security=full and ask=off.
Exec approvals (companion app / node host)
Sandboxed agents can require per-request approval beforeexec runs on
the gateway or
node host. See Exec approvals for the policy,
allowlist, and UI flow.
When approvals are required, the exec tool returns immediately with
status: "approval-pending" and an approval id. Once approved (or denied / timed out),
the Gateway emits system events (Exec finished / Exec denied). If the
command is still running after tools.exec.approvalRunningNoticeMs, a single
Exec running notice is emitted.
Allowlist + safe bins
Allowlist enforcement matches resolved binary paths only (no basename matches). Whensecurity=allowlist, shell commands are auto-allowed only if every pipeline
segment is allowlisted or a safe bin. Chaining (;, &&,
||) and redirections are rejected in allowlist mode.
Examples
Foreground:apply_patch (experimental)
apply_patch is a subtool of exec for structured multi-file
edits.
Enable it explicitly:
- Only available for OpenAI/OpenAI Codex models.
-
Tool policy still applies;
allow: ["exec"]implicitly allowsapply_patch. - Config lives under
tools.exec.applyPatch.