Exec tool
ワークスペース内でシェルコマンドを実行します。process によるフォアグラウンド実行とバックグラウンド実行に対応しています。
process が許可されていない場合、exec は同期実行され、yieldMs/background は無視されます。
バックグラウンドセッションはエージェントごとにスコープ分けされます。process は同じエージェントのセッションだけを参照できます。
パラメーター
command(必須)workdir(デフォルトは cwd)env(キー/値の上書き)yieldMs(デフォルト 10000): 遅延後に自動でバックグラウンド化background(bool): 即座にバックグラウンド化timeout(秒、デフォルト 1800): 期限切れで強制終了pty(bool): 利用可能な場合は疑似端末で実行(TTY 専用 CLI、coding agents、terminal UI)host(auto | sandbox | gateway | node): 実行場所security(deny | allowlist | full):gateway/nodeの強制モードask(off | on-miss | always):gateway/nodeの承認プロンプトnode(string):host=node用の node id/nameelevated(bool): 昇格モードを要求する(サンドボックスを抜けて設定済みホストパスへ実行する)。security=fullが強制されるのは、elevated がfullに解決された場合のみです
hostのデフォルトはautoです: セッションで sandbox runtime が有効なら sandbox、そうでなければ gateway になります。autoはデフォルトのルーティング戦略であり、ワイルドカードではありません。1 回ごとのhost=nodeはautoから許可されます。1 回ごとのhost=gatewayは、sandbox runtime が有効でない場合にのみ許可されます。- 追加設定がなくても、
host=autoはそのまま「ちゃんと動作」します: sandbox がなければgatewayに解決され、sandbox が動作中なら sandbox 内にとどまります。 elevatedは、設定済みホストパスへサンドボックスを抜けます。デフォルトはgateway、tools.exec.host=node(またはセッションのデフォルトがhost=node)のときはnodeです。現在のセッション/プロバイダーで昇格アクセスが有効な場合にのみ利用できます。gateway/nodeの承認は~/.openclaw/exec-approvals.jsonによって制御されます。nodeには paired node(companion app または headless node host)が必要です。- 利用可能な node が複数ある場合は、
exec.nodeまたはtools.exec.nodeを設定して 1 つ選択してください。 exec host=nodeは node に対する唯一のシェル実行経路です。従来のnodes.runラッパーは削除されました。- Windows 以外のホストでは、exec は
SHELLが設定されていればそれを使います。SHELLがfishの場合は、 fish 非互換スクリプトを避けるため、PATH上のbash(またはsh)を優先し、 どちらも存在しない場合にSHELLへフォールバックします。 - Windows ホストでは、exec はまず PowerShell 7(
pwsh)を検出します(Program Files、ProgramW6432、次に PATH)、 その後 Windows PowerShell 5.1 へフォールバックします。 - ホスト実行(
gateway/node)では、バイナリーハイジャックや注入コードを防ぐため、env.PATHと loader 上書き(LD_*/DYLD_*)を拒否します。 - OpenClaw は、spawn されたコマンド環境(PTY と sandbox 実行を含む)に
OPENCLAW_SHELL=execを設定するため、シェル/プロファイルのルール側で exec-tool コンテキストを検出できます。 - 重要: sandboxing はデフォルトでオフです。sandboxing がオフの場合、暗黙の
host=autoはgatewayに解決されます。明示的なhost=sandboxは、黙って gateway host で実行されるのではなく、クローズドに失敗します。sandboxing を有効にするか、承認付きでhost=gatewayを使ってください。 - スクリプトの事前チェック(よくある Python/Node のシェル構文ミス向け)は、実効
workdir境界内のファイルだけを検査します。 スクリプトパスがworkdirの外に解決される場合、そのファイルの事前チェックはスキップされます。 - 今すぐ開始する長時間実行の作業は、一度だけ開始し、
有効なら、コマンドが出力を出すか失敗したときの自動完了 wake に任せてください。
ログ、状態、入力、介入には
processを使ってください。sleep ループ、timeout ループ、繰り返しポーリングで スケジューリングを模倣しないでください。 - 後で実行する、またはスケジュールに従うべき作業には、
execの sleep/delay パターンではなく cron を使ってください。
config
tools.exec.notifyOnExit(デフォルト: true): true の場合、バックグラウンド化された exec セッションは終了時に system event をキューに積み、heartbeat を要求します。tools.exec.approvalRunningNoticeMs(デフォルト: 10000): 承認ゲート付き exec がこれより長く動作したとき、1 回だけ「running」通知を出します(0 で無効)。tools.exec.host(デフォルト:auto。sandbox runtime が有効ならsandbox、そうでなければgatewayに解決)tools.exec.security(デフォルト: sandbox ではdeny、未設定時の gateway + node ではfull)tools.exec.ask(デフォルト:off)- 承認なしの host exec は gateway + node のデフォルトです。承認/allowlist 動作を使いたい場合は、
tools.exec.*とホスト側の~/.openclaw/exec-approvals.jsonの両方を厳しくしてください。詳細は Exec approvals を参照してください。 - YOLO は
host=auto由来ではなく、ホストポリシーのデフォルト(security=full,ask=off)由来です。gateway または node へのルーティングを強制したい場合は、tools.exec.hostを設定するか/exec host=...を使ってください。 tools.exec.node(デフォルト: 未設定)tools.exec.strictInlineEval(デフォルト: false): true の場合、python -c、node -e、ruby -e、perl -e、php -r、lua -e、osascript -eのようなインラインインタープリター eval 形式は常に明示的な承認が必要です。allow-alwaysにより無害なインタープリター/スクリプト呼び出しを永続化することはできますが、インライン eval 形式は毎回引き続きプロンプトされます。tools.exec.pathPrepend: exec 実行時にPATHの先頭へ追加するディレクトリー一覧(gateway + sandbox のみ)。tools.exec.safeBins: 明示的な allowlist 項目なしで実行できる、stdin 専用の安全なバイナリー。挙動の詳細は Safe bins を参照してください。tools.exec.safeBinTrustedDirs:safeBinsのパス検査で信頼する追加の明示ディレクトリー。PATH項目は自動では決して信頼されません。組み込みデフォルトは/binと/usr/binです。tools.exec.safeBinProfiles: safe bin ごとの任意のカスタム argv ポリシー(minPositional,maxPositional,allowedValueFlags,deniedFlags)。
PATH の扱い
host=gateway: ログインシェルのPATHを 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(ログインシェル)を実行するため、/etc/profileがPATHをリセットする場合があります。 OpenClaw は、profile 読み込み後に内部 env var を使ってenv.PATHを先頭追加します(シェル補間なし)。tools.exec.pathPrependもここで適用されます。host=node: 渡した env 上書きのうちブロックされていないものだけが node に送られます。env.PATHの上書きは ホスト実行では拒否され、node host では無視されます。node で追加の PATH 項目が必要な場合は、 node host サービス環境(systemd/launchd)を設定するか、標準的な場所にツールをインストールしてください。
セッション上書き(/exec)
/exec を使うと、host、security、ask、node のセッションごとのデフォルトを設定できます。
引数なしで /exec を送ると、現在の値が表示されます。
例:
認可モデル
/exec は認可された送信者に対してのみ有効です(チャンネルの allowlist/pairing と commands.useAccessGroups)。
これはセッション状態のみを更新し、config には書き込みません。exec を強制的に無効化するには、tool
policy(tools.deny: ["exec"] またはエージェント単位)で拒否してください。
security=full と ask=off を明示的に設定しない限り、ホスト承認は引き続き適用されます。
Exec approvals(companion app / node host)
サンドボックス化されたエージェントでは、exec が gateway または node host 上で実行される前に、リクエストごとの承認を要求できます。
ポリシー、allowlist、UI フローについては Exec approvals を参照してください。
承認が必要な場合、exec tool は
status: "approval-pending" と承認 id を返して即座に戻ります。承認されると(または拒否/タイムアウトされると)、
Gateway は system event(Exec finished / Exec denied)を発行します。コマンドが
tools.exec.approvalRunningNoticeMs を超えてまだ動作している場合は、1 回だけ Exec running 通知が発行されます。
ネイティブの承認カード/ボタンを持つチャンネルでは、エージェントはまずその
ネイティブ UI に依存すべきであり、manual /approve コマンドを含めるのは、tool の
結果がチャット承認を利用できないと明示した場合、または manual approval が
唯一の経路である場合に限るべきです。
Allowlist + safe bins
手動 allowlist の強制は、解決済みバイナリーパスのみに一致します(basename 一致はありません)。security=allowlist の場合、すべてのパイプライン区間が
allowlist 済みまたは safe bin のときにのみ、シェルコマンドは自動許可されます。連結(;, &&, ||)とリダイレクトは、
各トップレベル区間が allowlist を満たす場合(safe bins を含む)を除き、allowlist モードでは拒否されます。
リダイレクトは引き続き未対応です。
永続的な allow-always の信頼でも、このルールは回避できません。連結コマンドでは依然として、各
トップレベル区間の一致が必要です。
autoAllowSkills は exec approvals における別の利便性パスです。これは
手動のパス allowlist 項目と同じではありません。厳格で明示的な信頼を求めるなら、autoAllowSkills は無効のままにしてください。
2 つの制御は用途が異なります。
tools.exec.safeBins: 小さな stdin 専用ストリームフィルター。tools.exec.safeBinTrustedDirs: safe-bin 実行ファイルパス用の明示的な追加信頼ディレクトリー。tools.exec.safeBinProfiles: カスタム safe bins 用の明示的な argv ポリシー。- allowlist: 実行ファイルパスへの明示的な信頼。
safeBins を汎用 allowlist として扱わないでください。また、インタープリター/ランタイムのバイナリー(たとえば python3、node、ruby、bash)を追加しないでください。そうしたものが必要なら、明示的な allowlist 項目を使い、承認プロンプトは有効のままにしてください。
openclaw security audit は、インタープリター/ランタイムの safeBins 項目に明示的な profile が欠けている場合に警告し、openclaw doctor --fix は不足しているカスタム safeBinProfiles 項目を雛形生成できます。
openclaw security audit と openclaw doctor は、jq のような広い挙動を持つバイナリーを明示的に safeBins に戻した場合も警告します。
インタープリターを明示的に allowlist する場合は、インラインコード eval 形式に毎回新しい承認が必要になるよう tools.exec.strictInlineEval を有効にしてください。
完全なポリシー詳細と例については、Exec approvals と Safe bins versus allowlist を参照してください。
例
フォアグラウンド:apply_patch
apply_patch は、構造化された複数ファイル編集のための exec の subtool です。
OpenAI および OpenAI Codex モデルではデフォルトで有効です。config を使うのは、
無効化したい場合、または特定モデルに制限したい場合だけです。
- OpenAI/OpenAI Codex モデルでのみ利用可能です。
- tool policy は引き続き適用されます。
allow: ["write"]は暗黙にapply_patchも許可します。 - config は
tools.exec.applyPatch配下にあります。 tools.exec.applyPatch.enabledのデフォルトはtrueです。OpenAI モデルでこのツールを無効にするにはfalseに設定してください。tools.exec.applyPatch.workspaceOnlyのデフォルトはtrue(ワークスペース内限定)です。apply_patchでワークスペースディレクトリー外に書き込みまたは削除したい意図がある場合にのみ、falseに設定してください。
関連
- Exec Approvals — シェルコマンドの承認ゲート
- Sandboxing — サンドボックス環境でのコマンド実行
- Background Process — 長時間実行の exec と process tool
- Security — tool policy と昇格アクセス