サンドボックスバックエンド
源码版本v2026.7.20
職務
agent はコマンドを実行し、コードを走らせるが、任意のコマンドをホスト機に直接叩かせてはいけない。Hermes のターミナルツールは 6 種の実行バックエンドをサポートし、安全/隔離/コストのトレードオフで選ぶ:Local(本機直実行)、Docker(コンテナ隔離)、SSH(遠隔機)、Singularity(HPC コンテナ)、Modal(クラウドサンドボックス、direct または managed)、Daytona(クラウド開発環境)。コンテナ硬化 + 名前空間隔離で、危険コマンドは承認コールバックでブロックする。
主要ファイル
terminal_tool ヘッダドキュメント:1-15— local / docker / modal / ssh / singularity / daytona の 6 バックエンドを列挙Docker host アクセス検出:260-290—_docker_volume_uses_host_path/_docker_has_host_access(bind mount がホストパスを露出するか検出)Singularity / Modal インポート:65-90—_get_scratch_dir(environments/singularity から)environments/singularity.py— Singularity scratch ディレクトリと SIF キャッシュModal モード解析:77-137—coerce_modal_mode/has_direct_modal_credentials/resolve_modal_backend_state(direct vs managed)_DEFAULT_BROWSER_PROVIDER:12— デフォルト provider は localサブエージェント承認コールバック:75-103—_subagent_auto_deny/_subagent_auto_approve(サンドボックス内実行の危険コマンド管理)tools/daemon_pool.py— サブエージェント常駐スレッドプール(サンドボックス実行を担う)tools/ ディレクトリ— terminal / close_terminal / read_terminal / tool_backend_helpers / environments/
データフロー
- agent がコマンド実行を決める → tool_call
terminal→tools/terminal_tool.py。 - ジョブ設定でバックエンドを選ぶ(local/docker/modal/ssh/singularity/daytona):
local:ホスト直実行(最速、デフォルト)docker:tools/terminal_tool.py:260が bind mount がホストパスを露出するか検出し、権限を決めるmodal:tools/tool_backend_helpers.py:102で direct(ユーザー自身の Modal クレデンシャル)か managed(ゲートウェイ管理)かを解析singularity:tools/environments/singularity.pyで scratch と SIF を準備ssh/daytona:遠隔/クラウド環境
- 危険コマンドは承認コールバックでブロック——主ループは対話的承認。サブエージェントはデフォルト auto-deny(
tools/delegate_tool.py:75)、cron/バッチは opt-in で auto-approve 可能。 - コマンド出力を主ループに戻す。長タスクはバックグラウンド化可能(
tools/daemon_pool.py)。
まとめ
サンドボックス層は「実行隔離 + 危険コマンド管理」:6 バックエンドが本機から HPC、クラウドまでをカバー。Docker は bind mount を検出して権限昇格を防止、Modal は direct/managed のクレデンシャルを区別、危険コマンドは統一的に承認コールバックを経る。サブエージェントと cron は auto-deny/auto-approve の非対話パスを走る。