LangBot Docs
サンドボックス

サンドボックス設定

LangBot Box Runtime を設定し、Docker・nsjail・E2B、または明示的に有効化する非隔離 Host バックエンドを選択。

Box の設定は LangBot メインプロセスが管理し、Box Runtime が実際の実行を担当します。通常のデプロイでは、バックエンド、ワークスペースディレクトリ、セキュリティプロファイルだけを決めれば十分です。Docker、nsjail、E2B はサンドボックス環境を提供し、Host バックエンドは Box Runtime のホスト上でコマンドを直接実行します。

このページの box.* 設定はすべて data/config.yaml に記述します。ファイルの場所と読み込みの仕組みはシステム環境設定を参照してください。

推奨設定

box:
  enabled: true
  backend: 'local'        # Docker / Nsjail から利用可能なものを自動選択
  local:
    profile: 'default'
    host_root: './data/box'
    skills_root: 'skills'
  docker:
    cpu_limit_enabled: true
  • enabled:サンドボックスのマスタースイッチ。false にすると、サンドボックス組み込みツール、Skill の追加 / 編集、stdio MCP のホスティングなど Box 依存の機能はすべて無効になります。
  • backend:下記「バックエンドの選択」を参照。
  • local.profile:セキュリティプロファイル。ネットワーク、マウント、リソース制限を制御。
  • local.host_root:ホスト側のサンドボックス作業ディレクトリ。サンドボックス内では /workspace にマウントされます。
  • local.skills_root:Skill パッケージのディレクトリ。相対パスは host_root 配下に解決され、デフォルトは host_root/skills
  • docker.cpu_limit_enabled:Docker サンドボックスコンテナに CPU 制限を付けるかどうか。false にすると docker run --cpus を省略し、メモリと PID 制限は維持します。

Skill は Box Runtime が管理する skill store からのみ読み込まれます。Box Runtime またはバックエンドが利用できない場合、Skill 一覧は空になり、追加 / 編集 / register_skill も使えません。data/skills/ へのフォールバックは行いません。

バックエンドの選択

Box はローカルコンテナクラウドサンドボックス、または Box Runtime ホスト上のプロセスとして動作させられます。box.backend で使用する方式を指定します:

backend実行場所動作
local(既定)ローカルコンテナDocker / Nsjail から利用可能なものを自動選択(Docker 優先)
dockerローカルコンテナDocker を強制使用。Docker daemon が必要
nsjailローカルコンテナNsjail を強制使用(Linux のみ)。カスタムイメージ非対応
e2bクラウドE2B クラウドサンドボックスを使用。API キーが必要
hostBox Runtime ホストBox Runtime ユーザーの権限でローカルプロセスを直接起動。POSIX と sh が必要

local は「自動選択」のショートハンドであり、docker / nsjail と並列の 4 つ目のバックエンドではありません。試行対象は Docker と Nsjail だけで、host が自動選択されることはありません。ローカル系バックエンドは box.local.* のワークスペース設定を使い、クラウドバックエンドは box.e2b.* を使います。

hostサンドボックスではありません。コマンドは Box Runtime ユーザーのホスト権限を持ち、ファイルシステム、プロセス、ネットワーク、namespace、cgroup、rootfs、イメージの隔離はありません。読み取り専用マウントやハードディスククォータも保証されません。単一ユーザーかつ信頼できる入力を扱うローカル開発にのみ使用し、公開サービス、共有ホスト、信頼できないコードには使用しないでください。

backend は強制値です。docker を指定して Docker が使えない場合、Nsjail や E2B に自動でフォールバックしません。自動 fan-out するのは local だけです。

環境変数 BOX__BACKENDbox.backend を上書きできます(config.yaml より優先)。

セキュリティプロファイル

box.local.profile は Docker / Nsjail ローカルサンドボックスバックエンドのネットワーク、マウント、リソース制限を制御します:

Profileネットワークマウントリソース推奨シーン
defaultオフ読み書き既定制限既定の選択
offline_readonlyオフ読み取り専用より厳格信頼できないファイルの読み込み
network_basic基本ネットワーク読み書き既定制限API アクセス、依存関係インストール
network_extendedフルネットワーク読み書き緩和開発、デバッグ、複雑なタスク

最小権限を優先:ネットワークが不要なら default または offline_readonlyallowed_mount_roots には必要なディレクトリのみを追加。

Host バックエンドはこれらの隔離ポリシーを適用しません。profile、CPU / メモリ / PID 制限、読み取り専用 rootfs、ネットワーク無効化を設定しても、ホストプロセスにサンドボックス境界は作られません。

ローカルワークスペース設定(box.local.*)

Docker、Nsjail、Host はワークスペースパス設定を共有します。隔離とリソース設定は、選択したサンドボックスバックエンドが実施できる場合にのみ有効です:

設定項目既定値説明
local.profiledefaultDocker / Nsjail のセキュリティプロファイル。Host には対応する隔離なし
local.imageDocker バックエンドのカスタムイメージ。空 = プロファイル既定を使用
local.host_root./data/boxホスト作業ディレクトリのベース。サンドボックス内の /workspace にマップ
local.default_workspace既定ワークスペース名。空 = <host_root>/default
local.skills_rootskillsSkill パッケージディレクトリ。相対パスは host_root 配下に解決
local.allowed_mount_roots[host_root]Agent がマウント要求できるホストディレクトリの許可リスト
local.workspace_quota_mbnullワークスペースのディスククォータ(MB)。null = プロファイル既定。Host ではハードクォータを保証しない

Host バックエンド(信頼できるローカル開発)

Host は依存関係が最も少ないローカルオプションで、Docker や Nsjail は不要です。必ず明示的に選択します:

box:
  enabled: true
  backend: 'host'
  local:
    host_root: './data/box'
    skills_root: 'skills'

WebUI、Agent ツール、呼び出し方法は変わりません。セッションスコープ、exec/read/write/edit/glob/grep、Skills、stdio MCP は既存の Box API をそのまま使います。違いは実行層だけです:

  • /workspaceworkdir、Skill のマウントパスは Box Runtime ホスト上の実パスに変換されます。
  • 子プロセスは最小限のパス、ロケール、端末環境と、リクエストで明示的に渡された変数だけを継承します。LangBot / Box の制御シークレットは自動継承されません。これは意図しない漏えいを減らしますが、ファイルシステム隔離を提供するものではありません。
  • exec と管理対象プロセスは個別のプロセスグループで起動します。タイムアウト、キャンセル、プロセス停止、セッション削除、Runtime 終了時には対応するプロセスツリーを終了します。
  • アイドルクリーンアップ、管理対象プロセスによる維持、persistent のルールは他のバックエンドと同じです。
  • ステータスレスポンスには unsafe_direct_execution: true が含まれ、サンドボックス隔離がないことを運用側で識別できます。

Host は Box Runtime が動作する環境を指します。LangBot がローカル stdio Box Runtime を管理する場合は現在のマシンです。Box Runtime 自体がコンテナ内で動作している場合、コマンドはそのコンテナ内で直接実行され、物理ホストへ自動的に抜けることはありません。

Host MVP は sh を備えた POSIX システム(Linux / macOS)をサポートします。Windows では WSL を使用してください。Windows ネイティブのプロセスバックエンドはまだサポートされていません。

外部 WebSocket Box Runtime で Host を使う場合、LangBot と Box Runtime の両方に同じ強力なランダム値の LANGBOT_BOX_CONTROL_TOKEN を設定してください。ローカル管理の stdio Runtime では追加のトークン設定は不要です。管理サンドボックス admission を有効にした Cloud 環境では、隔離能力と必須バックエンドの検証が継続され、Host がこれらを迂回することはありません。

Docker バックエンド設定(box.docker.*)

設定項目既定値説明
docker.cpu_limit_enabledtrueDocker バックエンドのみ有効。false の場合、サンドボックスコンテナは --cpus なしで起動しますが、--memory--pids-limit は引き続き適用されます。

クラウドバックエンド設定(box.e2b.*)

backend: 'e2b' を指定したうえで設定します:

設定項目既定値説明
e2b.api_keyE2B API キー。環境変数 E2B_API_KEY でも設定可
e2b.api_urlセルフホスト E2B のエンドポイント。環境変数 E2B_API_URL でも設定可
e2b.template既定の E2B テンプレート ID

E2B はホスト側に Docker や Nsjail を必要とせず、毎回の実行をリモートサンドボックスで行います。

Docker Compose デプロイ

Docker Compose では、サンドボックス設定は langbot サービス側に記述します。LangBot は起動時に INIT RPC で設定を langbot_box に転送します。

services:
  langbot_box:
    image: rockchin/langbot:latest
    container_name: langbot_box
    profiles: ["box", "all"]
    volumes:
      - ${LANGBOT_BOX_ROOT:-${PWD}/data/box}:${LANGBOT_BOX_ROOT:-${PWD}/data/box}
      - /var/run/docker.sock:/var/run/docker.sock
    command: ["uv", "run", "--no-sync", "-m", "langbot_plugin.cli.__init__", "box"]

  langbot:
    image: rockchin/langbot:latest
    volumes:
      - ./data:/app/data
    environment:
      - BOX__LOCAL__HOST_ROOT=${LANGBOT_BOX_ROOT:-${PWD}/data/box}
      - BOX__LOCAL__SKILLS_ROOT=skills
      - BOX__LOCAL__ALLOWED_MOUNT_ROOTS=${LANGBOT_BOX_ROOT:-${PWD}/data/box}
      - BOX__DOCKER__CPU_LIMIT_ENABLED=${LANGBOT_BOX_DOCKER_CPU_LIMIT_ENABLED:-true}

langbot_box は Docker daemon にアクセスします。docker.sock のマウントは信頼できる環境でのみ行い、Box のルートパスをホストと langbot_box コンテナ内で一致させてください。

外部の Box Runtime(リモートホストなど)に接続する場合は box.runtime.endpoint で URL を指定します:

box:
  runtime:
    endpoint: 'ws://192.168.1.10:5410'

環境変数

環境変数対応する設定
BOX__ENABLEDbox.enabled
BOX__BACKENDbox.backend
BOX__LOCAL__PROFILEbox.local.profile
BOX__LOCAL__IMAGEbox.local.image
BOX__LOCAL__HOST_ROOTbox.local.host_root
BOX__LOCAL__DEFAULT_WORKSPACEbox.local.default_workspace
BOX__LOCAL__SKILLS_ROOTbox.local.skills_root
BOX__LOCAL__ALLOWED_MOUNT_ROOTSbox.local.allowed_mount_roots、カンマ区切り
BOX__LOCAL__WORKSPACE_QUOTA_MBbox.local.workspace_quota_mb
BOX__DOCKER__CPU_LIMIT_ENABLEDbox.docker.cpu_limit_enabled
BOX__E2B__API_KEYbox.e2b.api_key
BOX__E2B__API_URLbox.e2b.api_url
BOX__E2B__TEMPLATEbox.e2b.template

langbot_box サービス側には BOX__*LANGBOT_BOX_* を設定しないでください。Box Runtime はこれらを直接読みません——設定は LangBot から INIT RPC 経由で渡されます。

On this page