コンテンツへスキップ
ガイド

OpenClawのexecツール

Sandbox、gateway、nodeの間でホストを解決する変更を伴うシェルサーフェス、denyからfullまでの5つのポリシーモード、自動レビュアー、厳格なインラインeval、パスの扱い、セッションごとの上書き

8分で読めます

execは、エージェントを実際に動けるようにするツールであり、最も注意を払うべきツールでもあります。execはシェルであり、ファイルを書き込みます。そして、どこで実行されるかは固定の答えではなく、解決によって決まる問題です。ここでは、パラメーター、配置のルール、5つのポリシーモードとその1つに組み込まれたレビュアー、そして制限を厳しくはできても決して緩められないセッションコマンドを紹介します。

パラメーターと配置

  • 必須のパラメーターはコマンドだけです。作業ディレクトリ、環境変数の上書き、バックグラウンドに移るまでの待機時間、即時バックグラウンド化のフラグ、呼び出しごとのタイムアウト(秒)、ターミナル専用プログラム向けの疑似端末フラグ、askモード、nodeの指定、elevatedフラグがそれに加わります。タイムアウトを0にすると、その呼び出しではプロセスのタイムアウトが無効になります。
  • hostパラメーターが取る値はauto、sandbox、gateway、nodeだけで、ホスト名を選ぶものではありません。autoは、エージェントとセッションの上書きを含めて設定済みのホストを継承し、それもautoの場合は、サンドボックスのランタイムが有効ならサンドボックスに、そうでなければgatewayに解決されます。一方、サンドボックスを必須とするセッションは、どの場合でもサンドボックス内にとどまります。
  • サンドボックスのランタイムが有効な間、autoはexecをサンドボックス内にとどめ、呼び出しごとのgatewayやnodeへの上書きを拒否します。そのため、どちらかを強制するには、設定でホストを明示的に指定する必要があります。nodeで実行するには、runコマンドに対応した、ペアリング済みで接続中のnodeが必要です。対象となるnodeが複数接続されている場合は、設定またはセッションごとにターゲットを選択する必要があります。
  • ホストでの実行では、バイナリの乗っ取りを防ぐためにパスとローダーの環境変数の上書きを拒否し、ページャーの上書きは実行ファイル名を渡すのではなく空の値に正規化し、シェルのプロファイルがexecのコンテキストを検出できるようにマーカー変数を設定します。gatewayでは、ログインシェルのパスをマージしつつ、シークレットらしき変数を除外して取得した起動時のスナップショットを読み込みます。
execは変更を伴うシェルサーフェスです。コマンドは、選択したホストまたはサンドボックスのファイルシステムが許す場所ならどこでも、ファイルを作成、編集、削除できます。

5つのモードとレビュアー

modeキーは正規のポリシー設定で、ほかのすべてはここから導かれます。denyはexecを完全にブロックします。allowlistは、許可リストに載ったコマンドかsafe-binのコマンドだけを実行し、何も尋ねません。askは、許可リストに一致するものを直接実行し、それ以外はすべて人間に回します。autoは、一致するものを直接実行し、対象となる不一致をネイティブのレビュアーに渡します。レビュアーはallow、deny、askのいずれかを返し、allowは低リスクまたは中リスクのコマンドを1回だけ実行し、denyはエージェントが回避するのではなく尊重しなければならない理由を返します。1つのセッションで3回連続して拒否されると、3回目のコマンドは人間にエスカレーションされます。fullは通常のポリシープロンプトなしで実行されます。gatewayとnodeで承認なしのホストexecがデフォルトになっているのは、autoホストのためではなく、ホストポリシーのデフォルト値のためです。gatewayでは、コマンドはレビューの前に、変更可能なファイルのバインドチェックを通過する必要があります。ディスパッチチェーン全体がレビュー時にバインドされて起動前に再チェックされ、保護された実行ファイルは解決済みの実パスで、書き込み可能な実行ファイルはさらにコンテンツハッシュでも照合されます。そのため、検索パス上でより前に新しい実行ファイルが現れると、承認済みの実行は拒否されます。シェルコマンドのラッパー、環境変数の代入、その他のバインドできないチェーンはレビュアーを通らず、代わりに1回限りの人間による承認の経路をたどります。

インラインeval、パス、セッション

  • 厳格なインラインevalは別個のオプトインで、デフォルトではオフです。通常のホスト承認の評価が行われるとき、ポリシーがfullとoffを許可していても、認識されたインラインのインタープリター形式にはレビュアーによる承認か明示的な承認が必要になります。これは一般的なインタープリターとキャリアのevalフラグを対象とし、インラインevalの形式が永続的な許可ルールになることはありません。
  • パスの扱いはホストごとに異なります。gatewayはログインシェルのパスをマージし、実行の直前に設定済みのディレクトリを安全に先頭へ追加します。sandboxはコンテナ内でログインシェルを実行するため、プロファイルがパスをリセットすることがあり、設定済みのエントリーはプロファイルの読み込み後に先頭へ追加されます。nodeホストはパスの上書きを完全に無視するため、追加のエントリーはnodeサービスの環境に置きます。
  • セッションコマンドは配置のデフォルトをセッションごとに設定しますが、securityとaskは現在のメッセージにのみ適用されます。このコマンドは認可された送信者からのものだけが受け付けられ、外部の送信者は配置のデフォルトを保存できますが、内部のクライアントには管理スコープが必要です。セッションに権限モードがある場合、ターンごとの上書きはそれを厳しくすることしかできず、決して緩めることはできません。

OpenClawのexec承認はこれらのモードがつながる承認フローで、OpenClawの高度なexec承認はその背後にあるsafe-binとバインドのルールです。

よくある2つの誤解

1つ目は、ファイルツールが書き込みの経路だと思い込むことです。ファイルツールを無効にしてもexecは読み取り専用にはなりません。シェルは、選択したホストが許す場所ならどこにでも書き込むからです。2つ目は、サンドボックス化が有効だと思い込むことです。サンドボックス化はデフォルトでオフなので、暗黙のautoホストはgatewayに解決されます。一方、明示的にsandboxを要求した場合は、黙ってホスト上で実行されるのではなくフェイルクローズします。構造化パッチのサブツールも同じ理由で知っておく価値があります。writeツールを許可すると暗黙的にこのサブツールも許可されますが、writeを拒否してもこのサブツールは拒否されないからです。execを完全に無効にするかどうかはツールポリシーで決めることで、フルアクセスのセッション以外では、ホスト承認の最低基準が引き続き適用されます。OpenClawのサンドボックス化の解説では分離の仕組みを、OpenClawのスキルでは通常これらのコマンドを動かす指示ファイルを解説しています。

Dialiでは

Dialiでは、各アシスタントが専用のランタイムで動作し、設定はダッシュボードから生成され、リリースごとに置き換えられます。そのため、エージェントが到達できるシェルはそのお客様のランタイムだけで、それ以外にはありません。DialiのマネージドOpenClawホスティングではホスト型アシスタントを、Dialiのセキュリティではそれを囲む境界を説明しています。

  • ファイルツールを無効にしても、シェルは読み取り専用になりません。
  • サンドボックス化はデフォルトでオフ。その場合、autoはgatewayを意味します。
  • ターンごとの上書きはポリシーを厳しくするだけで、決して緩めません。
今すぐ始める

読むだけでなく、作ってみましょう

エージェントを設定してチャネルを選べば、いつも開いているアプリの中でエージェントが働き始めます。