Gateway
OpenShell
OpenShell はマネージドサンドボックスバックエンドです。Docker コンテナを
ローカルで実行する代わりに、OpenClaw はサンドボックスのライフサイクルを openshell CLI に委任し、
リモート環境のプロビジョニングと SSH 経由でのコマンド実行を行います。
この Plugin は、汎用の SSH バックエンド と同じ SSH トランスポートおよび
リモートファイルシステムブリッジを再利用し、OpenShell のライフサイクル
(sandbox create/get/delete/ssh-config)と、オプションの mirror
ワークスペース同期モードを追加します。
前提条件
- OpenShell Plugin がインストールされていること(
openclaw plugins install @openclaw/openshell-sandbox) openshellCLI がPATH上にあること(またはplugins.entries.openshell.config.commandでカスタムパスを指定)- サンドボックスへのアクセス権を持つ OpenShell アカウント
- ホスト上で OpenClaw Gateway が実行されていること
クイックスタート
openclaw plugins install @openclaw/openshell-sandbox{ agents: { defaults: { sandbox: { mode: "all", backend: "openshell", scope: "session", workspaceAccess: "rw", }, }, }, plugins: { entries: { openshell: { enabled: true, config: { from: "openclaw", mode: "remote", }, }, }, },}Gateway を再起動します。次のエージェントターンで OpenClaw が OpenShell サンドボックスを作成し、ツール実行をそこへルーティングします。次のコマンドで確認します。
openclaw sandbox listopenclaw sandbox explainワークスペースモード
これは OpenShell における最も重要な選択です。
mirror(デフォルト)
plugins.entries.openshell.config.mode: "mirror" では、ローカルワークスペースが
正規の状態として維持されます。
execの前に、OpenClaw がローカルワークスペースをサンドボックスへ同期します。execの後に、OpenClaw がリモートワークスペースをローカルへ同期します。- ファイルツールはサンドボックスブリッジを経由しますが、ターン間ではローカルが信頼できる唯一の情報源となります。
開発ワークフローに最適です。OpenClaw 外部で行ったローカル編集は次回の 実行時に反映され、サンドボックスは Docker バックエンドに近い動作をします。
トレードオフ:実行ターンごとにアップロードとダウンロードのコストが発生します。
remote
mode: "remote" では、OpenShell ワークスペースが正規の状態となります。
- 最初のサンドボックス作成時に、OpenClaw がローカルからリモートワークスペースへ 一度だけ初期データを投入します。
- その後、
exec、read、write、edit、apply_patchは リモートワークスペースを直接操作します。OpenClaw はリモートの変更を ローカルへ同期しません。 - プロンプト処理時のメディア読み取りも引き続き機能します(ファイル/メディアツールは サンドボックスブリッジ経由で読み取ります)。
長時間実行するエージェントや CI に最適です。ターンごとのオーバーヘッドが低く、 ホスト上のローカル編集によってリモート状態が暗黙に上書きされることもありません。
モードの選択
mirror |
remote |
|
|---|---|---|
| 正規のワークスペース | ローカルホスト | リモート OpenShell |
| 同期方向 | 双方向(実行ごと) | 1 回限りの初期データ投入 |
| ターンごとの負荷 | 高い(アップロード+ダウンロード) | 低い(リモートを直接操作) |
| ローカル編集の反映 | あり(次回の実行時) | なし(再作成するまで) |
| 最適な用途 | 開発ワークフロー | 長時間実行するエージェント、CI |
設定リファレンス
すべての OpenShell 設定は plugins.entries.openshell.config 配下にあります。
| キー | 型 | デフォルト | 説明 |
|---|---|---|---|
mode |
"mirror" または "remote" |
"mirror" |
ワークスペース同期モード |
command |
string |
"openshell" |
openshell CLI のパスまたは名前 |
from |
string |
"openclaw" |
初回作成時のサンドボックスソース |
gateway |
string |
未設定 | OpenShell Gateway 名(トップレベルの --gateway) |
gatewayEndpoint |
string |
未設定 | OpenShell Gateway エンドポイント(トップレベルの --gateway-endpoint) |
policy |
string |
未設定 | サンドボックス作成用の OpenShell ポリシー ID |
providers |
string[] |
[] |
サンドボックス作成時に関連付けるプロバイダー名(重複排除され、エントリごとに --provider フラグを 1 つ指定) |
gpu |
boolean |
false |
GPU リソースを要求(--gpu) |
autoProviders |
boolean |
true |
作成時に --auto-providers(false の場合は --no-auto-providers)を渡す |
remoteWorkspaceDir |
string |
"/sandbox" |
サンドボックス内の主要な書き込み可能ワークスペース |
remoteAgentWorkspaceDir |
string |
"/agent" |
エージェントワークスペースのマウントパス(ワークスペースアクセスが rw でない場合は読み取り専用) |
timeoutSeconds |
number |
120 |
openshell CLI 操作のタイムアウト |
remoteWorkspaceDir と remoteAgentWorkspaceDir は絶対パスである必要があり、
管理対象ルート /sandbox または /agent の配下に収まらなければなりません。その他の絶対パスは
拒否されます。
サンドボックスレベルの設定(mode、scope、workspaceAccess)は、他のバックエンドと同様に
agents.defaults.sandbox 配下にあります。完全な対応表については
サンドボックス化を参照してください。
例
最小構成のリモート設定
{ agents: { defaults: { sandbox: { mode: "all", backend: "openshell", }, }, }, plugins: { entries: { openshell: { enabled: true, config: { from: "openclaw", mode: "remote", }, }, }, },}GPU を使用するミラーモード
{ agents: { defaults: { sandbox: { mode: "all", backend: "openshell", scope: "agent", workspaceAccess: "rw", }, }, }, plugins: { entries: { openshell: { enabled: true, config: { from: "openclaw", mode: "mirror", gpu: true, providers: ["openai"], timeoutSeconds: 180, }, }, }, },}カスタム Gateway を使用するエージェント単位の OpenShell
{ agents: { defaults: { sandbox: { mode: "off" }, }, list: [ { id: "researcher", sandbox: { mode: "all", backend: "openshell", scope: "agent", workspaceAccess: "rw", }, }, ], }, plugins: { entries: { openshell: { enabled: true, config: { from: "openclaw", mode: "remote", gateway: "lab", gatewayEndpoint: "https://lab.example", policy: "strict", }, }, }, },}ライフサイクル管理
# すべてのサンドボックスランタイムを一覧表示(Docker + OpenShell)openclaw sandbox list # 有効なポリシーを確認openclaw sandbox explain # 再作成(リモートワークスペースを削除し、次回使用時に再度初期データを投入)openclaw sandbox recreate --allremote モードでは、再作成が特に重要です。対象スコープの正規の
リモートワークスペースが削除され、次回使用時にローカルから新しいワークスペースへ
初期データが投入されます。mirror モードではローカルが正規の状態として維持されるため、
再作成は主にリモート実行環境をリセットします。
次のいずれかを変更した後は再作成してください。
agents.defaults.sandbox.backendplugins.entries.openshell.config.fromplugins.entries.openshell.config.modeplugins.entries.openshell.config.policy
セキュリティ強化
ミラーモードのファイルシステムブリッジはローカルワークスペースのルートを固定し、 読み取り、書き込み、ディレクトリ作成、削除、名前変更の前に、正規パスを (realpath を使用して)毎回再確認し、パス途中のシンボリックリンクを拒否します。シンボリックリンクの 差し替えやワークスペースの再マウントによって、ミラー対象ツリー外へファイルアクセスを リダイレクトすることはできません。
現在の制限事項
- OpenShell バックエンドではサンドボックスブラウザーはサポートされません。
sandbox.docker.bindsは OpenShell には適用されません。バインドが設定されている場合、 サンドボックスの作成は失敗します。sandbox.docker.*配下の Docker 固有のランタイム設定(envを除く)は、 Docker バックエンドにのみ適用されます。
仕組み
- OpenClaw はサンドボックス名を指定して
sandbox getを実行します(設定されている--gateway/--gateway-endpointを含む)。失敗した場合は、sandbox createで作成し、--name、--from、設定されている場合は--policy、 有効な場合は--gpu、--auto-providers/--no-auto-providers、および設定済みの プロバイダーごとに 1 つの--providerフラグを渡します。 - OpenClaw はサンドボックス名を指定して
sandbox ssh-configを実行し、SSH 接続情報を取得します。 - コアが SSH 設定を一時ファイルへ書き込み、汎用 SSH バックエンドと同じ リモートファイルシステムブリッジを介して SSH セッションを開きます。
mirrorモード:実行前にローカルからリモートへ同期し、実行後にリモートから同期を戻します。remoteモード:作成時に一度だけ初期データを投入し、その後はリモート ワークスペースを直接操作します。
関連項目
- サンドボックス化 - モード、スコープ、バックエンドの比較
- サンドボックス、ツールポリシー、昇格の比較 - ブロックされたツールのデバッグ
- マルチエージェントのサンドボックスとツール - エージェント単位のオーバーライド
- サンドボックス CLI -
openclaw sandboxコマンド