Backends de bac à sable
Responsabilité
L'agent doit exécuter des commandes, lancer du code, sans laisser des commandes arbitraires s'abattre sur la machine hôte. L'outil terminal d'Hermes supporte 6 backends d'exécution, à choisir selon le compromis sécurité / isolation / coût : Local (exécution directe sur l'hôte), Docker (isolation par conteneur), SSH (machine distante), Singularity (conteneur HPC), Modal (bac à sable cloud, direct ou managed), Daytona (environnement de dev cloud). Durcissement du conteneur + isolation par espace de noms ; les commandes dangereuses sont en plus interceptées par un callback d'approbation.
Fichiers clés
doc en-tête terminal_tool:1-15— liste les six backends local / docker / modal / ssh / singularity / daytonadétection d'accès Docker host:260-290—_docker_volume_uses_host_path/_docker_has_host_access(détecte si un bind mount expose un chemin de l'hôte)import Singularity / Modal:65-90—_get_scratch_dir(depuis environments/singularity)environments/singularity.py— répertoire scratch et cache SIF pour Singularityrésolution du mode Modal:77-137—coerce_modal_mode/has_direct_modal_credentials/resolve_modal_backend_state(direct vs managed)_DEFAULT_BROWSER_PROVIDER:12— provider par défaut : localcallback d'approbation sous-agent:75-103—_subagent_auto_deny/_subagent_auto_approve(contrôle des commandes dangereuses exécutées dans le bac à sable)tools/daemon_pool.py— pool de threads résident pour les sous-agents (qui porte l'exécution en bac à sable)répertoire tools/— terminal / close_terminal / read_terminal / tool_backend_helpers / environments/
Flux de données
- L'agent décide d'exécuter une commande → tool_call
terminal→tools/terminal_tool.py. - Sélection du backend selon la config du job (local/docker/modal/ssh/singularity/daytona) :
local: exécution directe sur l'hôte (le plus rapide, par défaut)docker:tools/terminal_tool.py:260détecte si le bind mount expose un chemin de l'hôte, décide des permissions en conséquencemodal:tools/tool_backend_helpers.py:102résout direct (propres credentials Modal de l'utilisateur) vs managed (géré par la passerelle)singularity:tools/environments/singularity.pyprépare scratch et SIFssh/daytona: environnement distant / cloud
- Les commandes dangereuses sont interceptées par le callback d'approbation — la boucle principale utilise une approbation interactive ; le sous-agent est auto-deny par défaut (
tools/delegate_tool.py:75), avec auto-approve opt-in pour cron / batch. - La sortie de la commande est réinjectée dans la boucle principale ; les tâches longues peuvent être lancées en arrière-plan (
tools/daemon_pool.py).
Résumé
La couche bac à sable est « isolation d'exécution + contrôle des commandes dangereuses » : 6 backends couvrent de l'hôte local jusqu'au HPC et au cloud ; Docker détecte les bind mounts pour éviter une escalation de privilèges ; Modal distingue credentials direct/managed ; les commandes dangereuses passent toutes par un callback d'approbation. Les sous-agents et cron empruntent le chemin non interactif auto-deny / auto-approve.