Sandbox-Backends
Verantwortung
Der Agent muss Befehle ausführen und Code laufen lassen, aber beliebige Befehle dürfen nicht direkt auf den Host durchschlagen. Das Terminal-Werkzeug von Hermes unterstützt 6 Ausführungs-Backends, gewählt nach Sicherheits-/Isolations-/Kosten-Trade-off: Local (direkt auf dem Host), Docker (Container-Isolation), SSH (entfernte Maschine), Singularity (HPC-Container), Modal (Cloud-Sandbox, direct oder managed), Daytona (Cloud-Dev-Umgebung). Container-Härtung + Namespace-Isolation; gefährliche Befehle werden zudem von Approval-Callbacks abgefangen.
Schlüsseldateien
terminal_tool Kopfdoku:1-15— listet die sechs Backends local / docker / modal / ssh / singularity / daytona aufDocker Host-Zugriff-Detektion:260-290—_docker_volume_uses_host_path/_docker_has_host_access(erkennt, ob ein Bind Mount Host-Pfade freilegt)Singularity / Modal-Import:65-90—_get_scratch_dir(aus environments/singularity)environments/singularity.py— Singularity-Scratch-Verzeichnis und SIF-CacheModal-Modus-Auflösung:77-137—coerce_modal_mode/has_direct_modal_credentials/resolve_modal_backend_state(direct vs. managed)_DEFAULT_BROWSER_PROVIDER:12— Default-Provider ist localSubagenten-Approval-Callback:75-103—_subagent_auto_deny/_subagent_auto_approve(Kontrolle gefährlicher Befehle in der Sandbox)tools/daemon_pool.py— residenter Thread-Pool für Subagenten (trägt die Sandbox-Ausführung)tools/-Verzeichnis— terminal / close_terminal / read_terminal / tool_backend_helpers / environments/
Datenfluss
- Der Agent will einen Befehl ausführen →
tool_call terminal→tools/terminal_tool.py. - Das Backend wird gemäß Job-Konfiguration gewählt (local/docker/modal/ssh/singularity/daytona):
local: direkte Ausführung auf dem Host (schnellster Standard)docker:tools/terminal_tool.py:260prüft, ob ein Bind Mount Host-Pfade freilegt, und entscheidet darüber die Berechtigungenmodal:tools/tool_backend_helpers.py:102löst auf, ob direct (eigene Modal-Anmeldedaten des Nutzers) oder managed (vom Gateway verwaltet)singularity:tools/environments/singularity.pyrichtet Scratch und SIF einssh/daytona: Remote-/Cloud-Umgebung
- Gefährliche Befehle werden von Approval-Callbacks abgefangen – die Hauptschleife nutzt interaktive Approval; Subagenten sind per Default auto-deny (
tools/delegate_tool.py:75); Cron/Batch kann opt-in auto-approve aktivieren. - Die Befehlsausgabe wird in die Hauptschleife zurückgefüllt; lange Tasks können in den Hintergrund ausgelagert werden (
tools/daemon_pool.py).
Zusammenfassung
Die Sandbox-Schicht ist «Ausführungs-Isolation + Kontrolle gefährlicher Befehle»: 6 Backends decken Host bis HPC bis Cloud ab; Docker prüft Bind-Mounts gegen Rechteausweitung; Modal unterscheidet direct-/managed-Anmeldedaten; gefährliche Befehle laufen einheitlich über Approval-Callbacks. Subagenten und Cron laufen über den nicht-interaktiven Pfad auto-deny/auto-approve.