Exec ツール
Exec ツールの使用法、stdin モード、TTY サポート
ワークスペースでシェルコマンドを実行します。''process'' によるフォアグラウンド + バックグラウンド実行をサポートします。
''process'' が許可されていない場合、''exec'' は同期的に実行され、''yieldMs''/''background'' を無視します。
バックグラウンドセッションはエージェントごとにスコープされます;''process'' は同じエージェントからのセッションのみを表示します。
パラメータ
- ''command'' (required)
- ''workdir''(デフォルトは cwd)
- ''env''(キー/値のオーバーライド)
- ''yieldMs''(デフォルト 10000):遅延後に自動バックグラウンド
- ''background''(ブール):即座にバックグラウンド
- ''timeout''(秒、デフォルト 1800):期限切れで強制終了
- ''pty''(ブール):利用可能な場合に疑似端末で実行(TTY のみの CLI、コーディングエージェント、ターミナル UI)
- ''host'' (''sandbox | gateway | node''): where to execute
- ''security''(''deny | allowlist | full''):''gateway''/''node'' の強制モード
- ''ask''(''off | on-miss | always''):''gateway''/''node'' の承認プロンプト
- ''node''(文字列):''host=node'' のノード id/名前
- ''elevated''(ブール):昇格モードを要求(ゲートウェイホスト);''security=full'' は elevated が ''full'' に解決された場合にのみ強制されます
Notes:
- ''host'' のデフォルトは ''sandbox'' です。
- サンドボックスがオフの場合、''elevated'' は無視されます(exec は既にホストで実行されています)。
- ''gateway''/''node'' の承認は ''~/.openclaw/exec-approvals.json'' によって制御されます。
- ''node'' はペアのノード(コンパニオンアプリまたはヘッドレスノードホスト)が必要です。
- 複数のノードが利用可能な場合、''exec.node'' または ''tools.exec.node'' を設定して選択します。
- Windows 以外のホストでは、exec は設定されている場合 ''SHELL'' を使用します;''SHELL'' が ''fish'' の場合、''bash''(または ''sh'')を
''PATH'' から優先し、fish 互換性のないスクリプトを回避し、どちらも存在しない場合は ''SHELL'' にフォールバックします。
- ホスト実行(''gateway''/''node'')は ''env.PATH'' とローダーオーバーライド(''LD_*''/''DYLD_*'')を拒否し、
バイナリハイジャックやコード注入を防ぎます。
- 重要:サンドボックスは''デフォルトでオフ''です。サンドボックスがオフの場合、''host=sandbox'' は
ゲートウェイホストで直接実行され(コンテナなし)、承認を必要としません。承認を要求するには、
''host=gateway'' で実行し、exec 承認を設定します(またはサンドボックスを有効にします)。
Config
- ''tools.exec.notifyOnExit''(デフォルト:true):true の場合、バックグラウンド化された exec セッションは終了時にシステムイベントをエンキューし、ハートビートを要求します。
- ''tools.exec.approvalRunningNoticeMs''(デフォルト:10000):承認が必要な exec がこの時間より長く実行された場合、単一の「実行中」通知を発行します(0 で無効化)。
- ''tools.exec.host''(デフォルト:''sandbox'')
- ''tools.exec.security''(sandbox のデフォルト:''deny''、gateway + node の未設定時のデフォルト:''allowlist'')
- ''tools.exec.ask''(デフォルト:''on-miss'')
- ''tools.exec.node''(デフォルト:未設定)
- ''tools.exec.pathPrepend'':exec 実行時に ''PATH'' に追加するディレクトリのリスト。
- ''tools.exec.safeBins'':明示的な許可リストエントリなしで実行できる stdin のみのセーフバイナリ。
Example:
{
tools: {
exec: {
pathPrepend: ["~/bin", "/opt/oss/bin"],
},
},
}PATH handling
- ''host=gateway'':ログインシェルの ''PATH'' を exec 環境にマージします。''env.PATH'' オーバーライドは
ホスト実行では拒否されます。デーモン自体は最小限の ''PATH'' で実行されます:
- macOS:''/opt/homebrew/bin''、''/usr/local/bin''、''/usr/bin''、''/bin''
- Linux:''/usr/local/bin''、''/usr/bin''、''/bin''
- ''host=sandbox'':コンテナ内で ''sh -lc''(ログインシェル)を実行するため、''/etc/profile'' が ''PATH'' をリセットする可能性があります。
OpenClaw は内部環境変数を介してプロファイルソース後に ''env.PATH'' を追加します(シェル補間なし);
''tools.exec.pathPrepend'' もここで適用されます。
- ''host=node'':渡したブロックされていない環境オーバーライドのみがノードに送信されます。''env.PATH'' オーバーライドは
ホスト実行では拒否されます。ヘッドレスノードホストは ''PATH'' をノードホスト PATH に
追加する場合のみ受け入れます(置換なし)。macOS ノードは ''PATH'' オーバーライドを完全にドロップします。
エージェントごとのノードバインディング(設定でエージェントリストインデックスを使用):
openclaw config get agents.list openclaw config set agents.list[0].tools.exec.node "node-id-or-name"
コントロール UI:ノードタブには同じ設定用の小さな「Exec ノードバインディング」パネルが含まれています。
セッションオーバーライド(`/exec`)
''/exec'' を使用して、''host''、''security''、''ask''、''node'' の''セッションごとの''デフォルトを設定します。
引数なしで ''/exec'' を送信して現在の値を表示します。
Example:
/exec host=gateway security=allowlist ask=on-miss node=mac-1
認可モデル
''/exec'' は''認可された送信者''に対してのみ有効です(チャンネル許可リスト/ペアリング + ''commands.useAccessGroups'')。
セッション状態のみを更新し、設定には書き込みません。exec を完全に無効にするには、ツール
ポリシーで拒否します(''tools.deny: ["exec"]'' またはエージェントごと)。明示的に
''security=full'' と ''ask=off'' を設定しない限り、ホスト承認は引き続き適用されます。
Exec 承認(コンパニオンアプリ / ノードホスト)
サンドボックス化されたエージェントは、''exec'' がゲートウェイまたはノードホストで実行される前にリクエストごとの承認を要求できます。
ポリシー、許可リスト、UI フローについては ''Exec 承認'' を参照してください。
承認が必要な場合、exec ツールは即座に
''status: "approval-pending"'' と承認 id を返します。承認(または拒否/タイムアウト)されると、
ゲートウェイはシステムイベント(''Exec finished'' / ''Exec denied'')を発行します。コマンドが
''tools.exec.approvalRunningNoticeMs'' 以降も実行されている場合、単一の ''Exec running'' 通知が発行されます。
許可リスト + セーフバイナリ
許可リストの強制は解決されたバイナリパスのみに一致します(ベース名の一致はありません)。
''security=allowlist'' の場合、シェルコマンドはすべてのパイプラインセグメントが
許可リストにあるかセーフバイナリである場合にのみ自動許可されます。チェーン('';''、''&&''、''||'')とリダイレクトは
許可リストモードでは拒否されます。
Examples
フォアグラウンド:
{ "tool": "exec", "command": "ls -la" }バックグラウンド + ポーリング:
{"tool":"exec","command":"npm run build","yieldMs":1000}
{"tool":"process","action":"poll","sessionId":"<id>"}キー送信(tmux スタイル):
{"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 のみ送信):
{ "tool": "process", "action": "submit", "sessionId": "<id>" }ペースト(デフォルトでブラケット付き):
{ "tool": "process", "action": "paste", "sessionId": "<id>", "text": "line1
line2
" }apply_patch (experimental)
''apply_patch'' は ''exec'' のサブツールで、構造化されたマルチファイル編集を行います。
明示的に有効にします:
{
tools: {
exec: {
applyPatch: { enabled: true, allowModels: ["gpt-5.2"] },
},
},
}Notes:
- OpenAI/OpenAI Codex モデルでのみ利用可能です。