OpenClaw Execツール:ワークスペースでシェルコマンドを効率化
開発中にターミナルとエディタを行ったり来たりするのは、集中力が削がれる原因になりますよね。エージェントが直接コマンドを実行できれば便利ですが、勝手に危険な操作をされないか心配になることもあるはずです。
OpenClaw の exec ツールを使えば、ワークスペース内で安全かつ柔軟にシェルコマンドを実行できます。フォアグラウンド実行はもちろん、process を介したバックグラウンド実行にも対応しており、開発ワークフローを強力にサポートします。
Exec ツール
Section titled “Exec ツール”ワークスペース内でシェルコマンドを実行します。process を介したフォアグラウンドおよびバックグラウンド実行をサポートしています。
process が許可されていない場合、exec は同期的に実行され、yieldMs や background 設定は無視されます。
バックグラウンドセッションのスコープはエージェントごとに設定されます。process は同じエージェントからのセッションのみを認識します。
command(必須)workdir(デフォルトは cwd)env(キー/値による上書き)yieldMs(デフォルト 10000): 指定した遅延の後に自動的にバックグラウンドへ移行background(bool): 即座にバックグラウンドで実行timeout(秒、デフォルト 1800): 期限切れ時にプロセスを終了pty(bool): 利用可能な場合に擬似ターミナルで実行(TTY 専用の CLI、コーディングエージェント、ターミナル 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 または名前elevated(bool): 特権モードをリクエスト(Gateway ホスト)。security=fullは、特権アクセスがfullとして解決された場合にのみ強制されます。
注意点:
hostのデフォルトはautoです。セッションで Sandbox ランタイムがアクティブな場合は Sandbox、それ以外の場合は Gateway になります。elevatedを指定するとhost=gatewayが強制されます。これは、現在のセッションまたはプロバイダーで特権アクセスが有効な場合にのみ利用可能です。gatewayおよびnodeの承認は~/.openclaw/exec-approvals.jsonで管理されます。nodeには、ペアリングされた Node(コンパニオンアプリまたはヘッドレス Node ホスト)が必要です。- 複数の Node が利用可能な場合は、
exec.nodeまたはtools.exec.nodeを設定して選択してください。 exec host=nodeは、Node における唯一のシェル実行パスです。レガシーなnodes.runラッパーは削除されました。- Windows 以外のホストでは、
SHELLが設定されている場合にそれを使用します。SHELLがfishの場合、互換性のないスクリプトを避けるためにPATHからbash(またはsh)を優先的に探し、どちらも存在しない場合にのみSHELLにフォールバックします。 - Windows ホストでは、PowerShell 7 (
pwsh) の検出(Program Files, ProgramW6432, PATH の順)を優先し、次に Windows PowerShell 5.1 にフォールバックします。 - ホスト実行(
gateway/node)では、バイナリのハイジャックやコード注入を防ぐため、env.PATHおよびローダーの上書き(LD_*/DYLD_*)を拒否します。 - OpenClaw は、生成されたコマンド環境(PTY および Sandbox 実行を含む)に
OPENCLAW_SHELL=execを設定します。これにより、シェルやプロファイルルールで exec ツールのコンテキストを検出できます。 - 重要: Sandboxing はデフォルトでオフです。Sandboxing がオフの場合、暗黙的な
host=autoはgatewayとして解決されます。明示的なhost=sandboxは、Gateway ホストでサイレントに実行されるのではなく、エラーとして終了します。Sandboxing を有効にするか、承認設定を伴うhost=gatewayを使用してください。 - スクリプトのプリフライトチェック(Python や Node の一般的なシェル構文ミスの確認)は、有効な
workdir境界内のファイルのみを検査します。スクリプトパスがworkdir外になる場合、そのファイルのプリフライトはスキップされます。
tools.exec.notifyOnExit(デフォルト: true): true の場合、バックグラウンドの exec セッション終了時にシステムイベントをエンキューし、ハートビートをリクエストします。tools.exec.approvalRunningNoticeMs(デフォルト: 10000): 承認が必要な exec がこれより長く実行されている場合、単一の「実行中」通知を発行します(0 で無効)。tools.exec.host(デフォルト:auto。Sandbox ランタイムがアクティブな場合はsandbox、それ以外はgatewayに解決)tools.exec.security(デフォルト: Sandbox の場合はdeny、未設定時の Gateway および Node の場合はallowlist)tools.exec.ask(デフォルト:on-miss)tools.exec.node(デフォルト: 未設定)tools.exec.strictInlineEval(デフォルト: false): true の場合、python -c,node -e,ruby -e,perl -e,php -r,lua -e,osascript -eなどのインラインインタープリタ評価形式には常に明示的な承認が必要になります。allow-alwaysで通常のスクリプト呼び出しを許可していても、インライン評価形式は毎回プロンプトを表示します。tools.exec.pathPrepend: exec 実行時にPATHの先頭に追加するディレクトリのリスト(Gateway および Sandbox のみ)。tools.exec.safeBins: 明示的なホワイトリスト登録なしで実行できる、標準入力のみを使用する安全なバイナリ。詳細は Safe bins を参照してください。tools.exec.safeBinTrustedDirs:safeBinsのパスチェックで信頼される追加のディレクトリ。PATHエントリは自動的には信頼されません。組み込みのデフォルトは/binと/usr/binです。tools.exec.safeBinProfiles: セーフバイナリごとのオプションのカスタム引数ポリシー(minPositional,maxPositional,allowedValueFlags,deniedFlags)。
例:
{ tools: { exec: { pathPrepend: ["~/bin", "/opt/oss/bin"], }, },}PATH の扱い
Section titled “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 はプロファイルの読み込み後、内部環境変数(シェル補間なし)を介してenv.PATHを先頭に追加します。tools.exec.pathPrependもここに適用されます。host=node: ブロックされていない環境変数の上書きのみが Node に送信されます。ホスト実行ではenv.PATHの上書きは拒否され、Node ホストによって無視されます。Node 上で追加の PATH が必要な場合は、Node ホストのサービス環境(systemd/launchd)を設定するか、標準的な場所にツールをインストールしてください。
エージェントごとの Node バインディング(設定にはエージェントリストのインデックスを使用します):
openclaw config get agents.listopenclaw config set agents.list[0].tools.exec.node "node-id-or-name"コントロール UI: Nodes タブにある「Exec node binding」パネルからも同じ設定が可能です。
セッションの上書き (/exec)
Section titled “セッションの上書き (/exec)”/exec コマンドを使用して、host, security, ask, node のセッションごとのデフォルト値を設定できます。
引数なしで /exec を送信すると、現在の値が表示されます。
例:
/exec host=auto security=allowlist ask=on-miss node=mac-1/exec は、承認された送信者(チャネルのホワイトリスト/ペアリングおよび commands.useAccessGroups)に対してのみ許可されます。
これはセッション状態のみを更新し、設定ファイルには書き込みません。exec を完全に無効にするには、ツールポリシー(tools.deny: ["exec"] またはエージェントごとの設定)で拒否してください。明示的に security=full かつ ask=off に設定しない限り、ホストの承認ルールが適用されます。
実行の承認 (コンパニオンアプリ / Node ホスト)
Section titled “実行の承認 (コンパニオンアプリ / Node ホスト)”Sandbox 化されたエージェントが Gateway または Node ホストで exec を実行する前に、リクエストごとの承認を要求するように設定できます。
ポリシー、ホワイトリスト、および UI フローについては、Exec approvals を参照してください。
承認が必要な場合、exec ツールは即座に status: "approval-pending" と承認 ID を返します。承認(または拒否/タイムアウト)されると、Gateway はシステムイベント(Exec finished / Exec denied)を発行します。コマンドが tools.exec.approvalRunningNoticeMs を超えて実行されている場合は、単一の Exec running 通知が発行されます。
ホワイトリストとセーフバイナリ
Section titled “ホワイトリストとセーフバイナリ”手動のホワイトリスト強制は、解決されたバイナリパスのみに一致します(ベース名のみの一致は行いません)。security=allowlist の場合、パイプラインのすべてのセグメントがホワイトリストに登録されているか、セーフバイナリである場合にのみ、シェルコマンドが自動的に許可されます。チェーン(;, &&, ||)やリダイレクトは、すべてのトップレベルセグメントがホワイトリスト(セーフバイナリを含む)を満たさない限り、ホワイトリストモードでは拒否されます。リダイレクトは引き続きサポートされていません。
永続的な allow-always の信頼はこのルールをバイパスしません。チェーンされたコマンドでも、すべてのトップレベルセグメントが一致する必要があります。
autoAllowSkills は実行承認における別の便利なパスですが、手動のパスホワイトリストエントリとは異なります。厳格で明示的な信頼が必要な場合は、autoAllowSkills を無効にしたままにしてください。
用途に応じて 2 つのコントロールを使い分けてください:
tools.exec.safeBins: 標準入力のみを扱う小さなストリームフィルタ。tools.exec.safeBinTrustedDirs: セーフバイナリの実行パスとして信頼する明示的な追加ディレクトリ。tools.exec.safeBinProfiles: カスタムセーフバイナリ用の明示的な引数(argv)ポリシー。- ホワイトリスト: 実行パスに対する明示的な信頼。
safeBins を汎用的なホワイトリストとして扱わないでください。また、インタープリタやランタイムのバイナリ(例: python3, node, ruby, bash)を追加しないでください。これらが必要な場合は、明示的なホワイトリストエントリを使用し、承認プロンプトを有効にしたままにしてください。
openclaw security audit は、インタープリタ/ランタイムの safeBins エントリに明示的なプロファイルがない場合に警告を表示します。また、openclaw doctor --fix を使用して、不足しているカスタム safeBinProfiles エントリの雛形を作成できます。
jq のような広範な動作をするバイナリを safeBins に追加した場合も、openclaw security audit と openclaw doctor が警告を発します。
インタープリタを明示的にホワイトリストに登録する場合は、tools.exec.strictInlineEval を有効にして、インラインコード評価形式には常に新しい承認が必要になるようにしてください。
ポリシーの詳細と例については、Exec approvals および Safe bins versus allowlist を参照してください。
フォアグラウンド実行:
{ "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\nline2\n" }apply_patch
Section titled “apply_patch”apply_patch は、構造化された複数ファイル編集のための exec のサブツールです。
OpenAI および OpenAI Codex モデルではデフォルトで有効になっています。無効にしたい場合や、特定のモデルに制限したい場合にのみ設定を使用してください。
{ tools: { exec: { applyPatch: { workspaceOnly: true, allowModels: ["gpt-5.2"] }, }, },}注意点:
- OpenAI/OpenAI Codex モデルでのみ利用可能です。
- ツールポリシーは引き続き適用されます。
allow: ["write"]は暗黙的にapply_patchを許可します。 - 設定は
tools.exec.applyPatchの下にあります。 tools.exec.applyPatch.enabledはデフォルトでtrueです。OpenAI モデルでツールを無効にするにはfalseに設定してください。tools.exec.applyPatch.workspaceOnlyはデフォルトでtrue(ワークスペース内に限定)です。意図的にワークスペースディレクトリ外への書き込み/削除を許可したい場合にのみfalseに設定してください。
関連ドキュメント
Section titled “関連ドキュメント”- Exec Approvals — シェルコマンドの承認ゲート
- Sandboxing — サンドボックス環境でのコマンド実行
- Background Process — 長時間実行される exec と process ツール
- Security — ツールポリシーと特権アクセス
次のステップ
Section titled “次のステップ”設定やセキュリティについてさらに詳しく知りたい方は、上記の関連ドキュメントをチェックしてみてください。不明な点があれば、いつでも AI Setup Assistant に聞いてくださいね。
OpenClaw Expert
まだ解決しませんか?
このページで解決しない場合は、OpenClaw Expertに直接質問してください。