SÉRIE HERMES AGENT BRANCHE AVANCÉE 23/24

Hermes Agent : où Hermes exécute vraiment avec Docker et SSH

Repère où Hermes lance ses commandes, choisis entre local, Docker et SSH, puis vérifie la machine, le compte et le dossier réellement utilisés.

DANS CE TUTORIELAller à une étape

Tu demandes à Hermes de regarder un dossier. Avant de lui confier la suite, une question mérite une réponse précise : sur quelle machine va-t-il chercher ce dossier ? Le terminal depuis lequel tu lui parles ne suffit pas à le savoir.

Nous allons suivre un petit contrôle de repérage : relever le nom de la machine, le compte utilisé et le dossier courant. Tu choisiras un seul mode d’exécution pour l’essai. Il n’est pas nécessaire d’installer Docker et de louer un serveur pour comprendre les trois possibilités.

Ce que tu auras à la fin
Tu sauras situer Hermes et son terminal, choisir un environnement adapté à ta tâche et reconnaître un appel d’outil réellement exécuté au bon endroit.

1. Préparer un essai limité

Le parcours suppose qu’Hermes est déjà installé et répond à un modèle capable d’appeler des outils. Si ce n’est pas encore le cas, commence par l’installation, puis par le choix des premiers outils utiles.

Les commandes ci-dessous visent Linux ou un terminal Linux dans WSL. Sous Windows, ouvre bien la distribution dans laquelle tu utilises Hermes. L’exemple principal lance Hermes directement dans cet environnement ; son hébergement dans un conteneur est expliqué plus bas.

Nous utilisons le profil default. Si tu travailles avec un autre profil, remplace default dans toutes les commandes. Ferme sa conversation en cours avant de modifier son backend, puis ouvre une nouvelle session pour l’essai.

Terminal · relever la configuration actuelle
hermes -p default config get terminal.backend
hermes -p default config show

Note le backend actuel et garde une copie de ton fichier de configuration avant de le modifier. hermes -p default config edit permet d’ouvrir ce fichier dans ton éditeur. Ne publie pas son contenu complet pour demander de l’aide : il peut contenir des informations propres à ton installation.

Ce que cet essai va faire
Les vérifications demandées à l’agent se limitent à hostname, id -un et pwd : nom de machine, compte et dossier courant. Nous ne lui demandons ni installation, ni écriture de fichier. Hermes conserve toutefois son fonctionnement habituel, notamment l’enregistrement de la session ; Docker peut créer son conteneur au premier appel.

2. Situer l’agent et son terminal

Le backend du terminal désigne l’environnement auquel Hermes confie ses commandes. Le modèle peut demander un appel d’outil ; le backend détermine où cette commande sera lancée.

En local, la commande tourne dans l’environnement qui héberge Hermes. Avec le backend Docker, elle tourne dans un conteneur. Avec SSH, elle est transmise au compte choisi sur une machine distante. Le résultat revient ensuite à Hermes, qui peut te l’expliquer.

Où la commande s’exécute-t-elle ?

Trois possibilités pour le terminal. Ici, Hermes est lancé sur l’hôte et Docker utilise un moteur local.

En local, Hermes et son terminal partagent l’environnement de l’hôte. Avec le backend Docker local, le terminal est dans un conteneur sur cet hôte ; les montages et permissions déterminent ses accès. Avec SSH, Hermes envoie la commande à un compte sur une autre machine. Dans les trois cas, le résultat revient à Hermes. Changer de backend ne déplace pas automatiquement l’agent lui-même.

Le schéma prend le cas d’un moteur Docker local. Si tu as configuré Docker pour piloter un moteur distant, il faut aussi tenir compte de cette autre machine. De même, « local » peut désigner ton VPS si c’est sur ce VPS qu’Hermes est lancé.

Deux usages de Docker à distinguer

Héberger Hermes dans Docker place le programme Hermes lui-même dans un conteneur. Choisir le backend Docker règle l’environnement de ses commandes terminal. Ce sont deux choix différents, qui peuvent se combiner. La documentation Docker d’Hermes détaille le premier ; ce tuto porte sur le second.

Le choix du terminal ne déplace pas non plus tous les services utilisés par l’agent : le modèle, un serveur MCP ou un autre outil peuvent avoir leur propre emplacement.

3. Choisir le lieu du travail

Pars du dossier sur lequel tu veux travailler et de l’environnement dont il a besoin. Pour notre premier contrôle, il suffit de choisir la ligne qui correspond à ton cas.

Ton besoinMode à essayerCe qu’il faut avoir avant
Travailler dans l’environnement où Hermes est déjà lancéLocalUn dossier connu et un compte dont tu comprends les droits
Exécuter dans un environnement conteneuriséDockerUn moteur Docker accessible depuis le terminal d’Hermes
Travailler sur un serveur ou une autre machineSSHUne machine existante, un compte autorisé et une connexion SSH fonctionnelle

Un conteneur n’est pas une garantie d’isolation absolue : les dossiers montés et les secrets transmis restent accessibles selon les droits accordés. Une machine distante, elle, déplace le travail ; elle ne corrige pas les permissions du compte utilisé. Nous vérifierons donc les accès avant d’aller au-delà du repérage.

4. Préparer seulement le mode retenu

Lis la branche qui te concerne, puis rejoins l’étape 5. Les commandes config set changent la configuration du profil : ce ne sont pas de simples affichages.

Option A — Local

Dans le terminal où tu lanceras Hermes, place-toi dans le dossier choisi. Remplace le chemin ci-dessous par un dossier existant. Le premier relevé te servira de point de comparaison.

Terminal · à adapter pour le mode local
cd "/chemin/vers/ton-dossier"
hostname
id -un
pwd
hermes -p default config set terminal.backend local

Garde ce terminal ouvert pour lancer Hermes à l’étape 5. En ligne de commande, le dossier de lancement compte ; ne suppose pas qu’un terminal.cwd enregistré suffira à imposer le chemin attendu. Le contrôle par pwd permettra de constater celui qui est réellement utilisé.

Option B — Docker local

Si Docker n’est pas installé, utilise la procédure officielle adaptée à ton système : Docker Engine sous Linux, ou Docker Desktop avec son intégration WSL sous Windows. Reviens ici lorsque le moteur est disponible depuis le même environnement que la commande hermes.

Terminal · vérifier le moteur Docker
docker version
docker context show

docker version doit afficher les informations du client et du serveur. Un client installé seul ne suffit pas. Vérifie aussi que le contexte sélectionné correspond au moteur local prévu ; un contexte est une destination Docker, pas seulement un nom d’affichage.

Avant la bascule, relis les éventuels montages et variables déjà configurés pour Docker. Pour cet essai de repérage, n’ajoute pas de dossier personnel ni de secret. Une configuration existante peut déjà en partager : changer uniquement le backend ne les efface pas.

Terminal · choisir le backend Docker
hermes -p default config set terminal.backend docker

Le premier appel peut prendre davantage de temps si l’image configurée doit être téléchargée. Le résultat attendu est un conteneur utilisable, pas un accès automatique à tous les fichiers de ton hôte. Nous garderons les réglages d’image et de ressources hors de ce premier essai ; les options sont détaillées dans la configuration officielle du backend Docker.

Option C — SSH

Tu dois déjà disposer d’une machine distante et d’un compte auquel tu es autorisé à te connecter. Remplace les quatre valeurs de l’exemple : adresse, compte, port et chemin de ta clé privée sur la machine qui lance Hermes. Le fichier de clé doit exister ; le nom donné ici est un exemple.

Terminal · renseigner ta connexion SSH
export TERMINAL_SSH_HOST="serveur.example.com"
export TERMINAL_SSH_USER="ton-compte"
export TERMINAL_SSH_PORT="22"
export TERMINAL_SSH_KEY="$HOME/.ssh/id_ed25519"

ssh -i "$TERMINAL_SSH_KEY" -p "$TERMINAL_SSH_PORT" \
  "$TERMINAL_SSH_USER@$TERMINAL_SSH_HOST"

Lors d’une première connexion, compare l’empreinte du serveur avec celle fournie par son administrateur ou ton hébergeur avant de l’accepter. Une fois connecté, relève les trois informations suivantes, puis quitte la session distante avec exit.

Terminal distant · relever le point de comparaison
hostname
id -un
pwd
exit

Tu es revenu dans le terminal qui lancera Hermes. Vérifie maintenant que l’authentification fonctionne sans demande interactive. Si ta clé a une phrase secrète, elle doit notamment être utilisable via ton agent SSH.

Terminal local · vérifier l’accès non interactif
ssh -o BatchMode=yes -i "$TERMINAL_SSH_KEY" \
  -p "$TERMINAL_SSH_PORT" \
  "$TERMINAL_SSH_USER@$TERMINAL_SSH_HOST" \
  'hostname; id -un; pwd'

Si cette commande échoue, règle la connexion avant de continuer. Si elle réussit, choisis SSH :

Terminal local · choisir le backend SSH
hermes -p default config set terminal.backend ssh

Les variables exportées restent dans ce terminal et ses processus enfants. Lance donc Hermes depuis ce même terminal. Elles ne constituent pas encore une configuration permanente ; tu pourras ensuite les enregistrer dans le .env du profil selon la documentation SSH.

5. Observer un appel réellement exécuté

Quel que soit le mode retenu, vérifie que l’outil terminal est activé, puis ouvre une nouvelle conversation dans le même profil et le même terminal.

Terminal · ouvrir la session de contrôle
hermes -p default tools
hermes -p default chat

À demander à Hermes · repérer son terminal
Utilise uniquement l’outil terminal pour exécuter hostname, id -un et pwd. Affiche les trois sorties en indiquant ce que chacune représente. Ne lis aucun autre fichier, n’installe rien et ne modifie aucun fichier. Si un appel échoue, arrête-toi et montre l’erreur sans essayer de la corriger.

Observe l’appel de l’outil et sa sortie, puis l’explication d’Hermes. Une phrase comme « je suis sur ton serveur » sans appel visible ne constitue pas un contrôle.

Ce que tu dois pouvoir comparer
  • Local : la machine et le compte correspondent à ton relevé ; le dossier doit être celui prévu pour la session.
  • Docker : les sorties appartiennent au conteneur. Le compte peut être différent de celui de l’hôte ; root dans le conteneur ne suffit pas, à lui seul, à décrire ses droits sur l’hôte.
  • SSH : machine et compte correspondent à ta connexion directe. Le dossier courant peut différer : relève son chemin avant de désigner des fichiers.

Les noms de machine ne sont pas des preuves d’identité uniques. En cas de doute avec Docker, utilise docker ps dans un second terminal local pour repérer le conteneur de cette session. Tu peux y exécuter toi-même docker exec NOM_DU_CONTENEUR hostname, après avoir remplacé le nom, puis comparer la sortie. Ne choisis pas un conteneur au hasard si plusieurs sessions existent.

6. Définir le dossier avant la vraie tâche

Le terminal répond au bon endroit : il reste à lui donner le bon chemin. Un chemin de ton PC n’est pas automatiquement disponible dans un conteneur ou sur un serveur. Même deux chemins écrits de façon identique peuvent désigner des fichiers différents.

Pour une première tâche, choisis un dossier de test dans l’environnement vérifié. Donne son chemin absolu à Hermes et précise l’action attendue, par exemple lister son contenu sans rien modifier. Si le dossier n’existe pas ou n’est pas accessible, demande un arrêt et le message d’erreur ; tu décideras ensuite s’il faut le créer, le partager ou corriger le chemin.

Dans Docker, partager un dossier de l’hôte passe par un montage. Définis précisément le dossier source, sa destination dans le conteneur et si l’écriture est nécessaire. Avec SSH, vérifie les droits du compte distant sur le dossier visé. Le succès des trois commandes de repérage ne valide ni ces accès ni l’ensemble des capacités du backend.

Retrouver la configuration de départ

À la fin de l’essai, ferme la conversation. Si tu avais changé de backend uniquement pour ce contrôle, remets la valeur relevée à l’étape 1, puis ouvre une nouvelle session. Pour revenir au local, par exemple :

Terminal · revenir au local si c’était ton réglage initial
hermes -p default config set terminal.backend local

Cette commande ne supprime ni les conteneurs ni les données distantes. Elle change le backend retenu pour les prochaines sessions.

Retrouver la cause d’un blocage

Ce que tu observesCe que tu vérifies d’abord
Hermes répond, mais aucun outil ne s’exécuteOutil terminal activé, modèle capable d’appeler des outils, nouvelle session après modification
Docker affiche le client mais ne joint pas le serveurMoteur démarré, contexte choisi, accès depuis le même environnement qu’Hermes
L’image Docker ne démarre pasMessage d’erreur exact, nom de l’image configurée, disponibilité et compatibilité de cette image
SSH fonctionne à la main, mais pas avec BatchMode=yesClé sélectionnée, agent SSH, compte, port et absence de demande interactive
Hermes semble utiliser un autre backendMême profil partout ; éventuelle variable TERMINAL_ENV ou autre surcharge d’environnement ; processus relancé
Le dossier est introuvableChemin dans l’environnement d’exécution, montage Docker éventuel ou permissions distantes

Suite logique

Avant chaque nouvelle tâche, garde trois repères : où tourne Hermes, où tourne son terminal, quel dossier est réellement accessible. Tu peux alors donner une consigne concrète et interpréter un échec sans changer plusieurs réglages au hasard.

Si tu veux ensuite exposer Hermes à d’autres clients ou interfaces, poursuis avec Hermes comme brique d’intégration.

Les commandes de ce parcours sont proposées pour être reproduites ; elles ne constituent pas le compte rendu d’un essai local, Docker ou SSH réalisé pour cet article. Références : configuration des backends, outils et toolsets, profils et hébergement Docker.

↑ Revenir au sommaire