Qu'est-ce que l'agent Hermes et pourquoi Docker est la bonne façon de l'exécuter
Agent Hermès est un agent d'IA autonome de Nous Research avec une boucle d'apprentissage intégrée. Contrairement aux agents apatrides qui recommencent à zéro à chaque exécution, Hermes crée une bibliothèque de compétences persistante. Chaque tâche accomplie peut devenir une compétence réutilisable, rendant l'agent sensiblement plus performant au fil du temps.
Exécuter Hermes sans système d'exploitation fonctionne, mais cela crée de réels problèmes :
- L'état des compétences et l'historique des conversations sont liés au système de fichiers d'une seule machine
- La reproduction de l'environnement lors des reconstructions VPS nécessite un travail manuel
- Aucune isolation de processus signifie qu'un sous-processus incontrôlé peut affecter votre hôte
Docker résout les trois. Un conteneur correctement configuré vous offre la portabilité, l'isolation et, avec la bonne stratégie de volume, un état d'apprentissage persistant qui survit aux mises à jour d'images.
Deux modes Docker expliqués – Choisissez avant de commencer
La plupart des guides ignorent complètement cette décision et passent à docker run. Ne le faites pas. Les deux modes ont des profils de sécurité et opérationnels très différents.
| Mode 1 : Hermès à l'intérieur du conteneur | Mode 2 : Docker comme bac à sable du terminal | |
|---|---|---|
| Qu'est-ce qui court où | Hermes + son runtime en direct à l'intérieur du conteneur | Hermès fonctionne sur l'hôte ; Docker crée des conteneurs sandbox jetables pour les tâches du terminal |
| Isolement | Hermès lui-même est isolé | Seule la sortie des tâches du terminal est isolée |
| Gestion de l'État | Les volumes gèrent tout | Le système de fichiers hôte contient l'état Hermès |
| Recommandé pour | Production VPS, déploiements en équipe | Développement local, expérimentation rapide |
| DOCKER_HOST nécessaire | Non | Oui (configuration du conteneur frère) |
Règle générale : Si vous effectuez un déploiement sur un VPS ou souhaitez un environnement de production reproductible, utilisez le mode 1. Si vous exécutez Hermes localement et souhaitez qu'il fasse tourner les bacs à sable Docker pour l'exécution de code, utilisez le mode 2.
Mode 1 – Hermès fonctionnant à l’intérieur d’un conteneur
Hermès et toutes ses dépendances vivent à l'intérieur de l'image. Vous gérez l'état via des volumes nommés. La stratégie de redémarrage du conteneur le maintient en vie lors des redémarrages. C'est le modèle de production le plus courant.
- Séparation nette de l'hôte : aucune écriture accidentelle sur votre machine
- Portabilité totale ; redéployer n'importe où avec le même fichier de composition
- Frais généraux légèrement plus élevés que l'exécution native
Mode 2 – Docker en tant que bac à sable backend de terminal
Ici, Hermes s'exécute directement sur l'hôte (ou dans un conteneur) et appelle le démon Docker pour faire tourner des conteneurs éphémères pour l'exécution du shell. Vous le configurez en définissant DOCKER_HOST pour qu'Hermes puisse atteindre le démon :
export DOCKER_HOST=unix:///var/run/docker.sock # Linux
export DOCKER_HOST=tcp://host.docker.internal:2375 # Windows/Mac (Docker Desktop)
Note de sécurité : Le montage du socket Docker à l'intérieur d'un conteneur accorde un accès quasi-root à l'hôte. Ne faites cela que dans des environnements dans lesquels vous faites entièrement confiance à la charge de travail du conteneur.
Conditions préalables et configuration de l'environnement
Avant d'extraire une image, confirmez :
- Moteur Docker 24+ ou Docker Bureau 4.26+
- Une clé API LLM prête : OpenAI (
OPENAI_API_KEY), Anthropic (Anthropic_API_KEY) ou un point de terminaison Ollama local - Accès Internet sortant sur le port 443 (pour les appels API LLM)
- Au moins 2 Go de RAM alloué au conteneur (4 Go recommandés pour les configurations basées sur Ollama)
Configuration spécifique à Windows (Docker Desktop + WSL2)
Windows est l'endroit où la plupart des déploiements Docker s'interrompent discrètement. Surveillez ceux-ci :
Traduction du chemin du volume
Docker Desktop sous Windows traduit les chemins via WSL2. Utilisez des chemins de style Linux dans les fichiers de composition — évitez les chemins de style Windows (C:\Users\...) dans les définitions de composition volumes:.
# Correct — Docker Desktop translates this automatically
volumes:
- hermes_data:/root/.hermes
Socket ou tube nommé
Sous Windows, Docker expose un canal nommé, pas un socket Unix. Pour le mode 2, définissez :
DOCKER_HOST=npipe:////./pipe/docker_engine
Limites de mémoire WSL2
Docker Desktop sous Windows définit par défaut WSL2 sur 50 % de la RAM de l'hôte. Si Hermes se sent lent, ajoutez un .wslconfig dans votre profil utilisateur Windows :
[wsl2]
memory=4GB
processors=2
Démarrage rapide – Exécutez l'agent Hermes avec Docker en 5 minutes
Extrayez l'image officielle et exécutez l'assistant de configuration :
# Pull the latest image
docker pull nousresearch/hermes-agent:latest
# Run with a persistent volume for state
docker run -it \
-v hermes_home:/root/.hermes \
-e OPENAI_API_KEY=your_key_here \
nousresearch/hermes-agent:latest
Le assistant de configuration se lance dès la première exécution. Il vous demandera de :
- Sélectionnez votre fournisseur LLM (OpenAI, Anthropic, Ollama ou point de terminaison personnalisé)
- Saisissez votre clé API ou l'URL de votre point de terminaison
- Configurer le backend du terminal (sandbox natif ou Docker)
Une fois terminé, vérifiez que la session fonctionne :
> hello
Hermes devrait répondre et confirmer que sa bibliothèque de compétences est initialisée. Si vous voyez skill store empty sur un nouveau conteneur, c'est normal : les compétences s'accumulent au fil de l'utilisation.
Déploiement en production avec Docker Compose
La commande nue docker run fonctionne pour les tests. Pour tout ce qui est persistant, utilisez Compose.
version: "3.9"
services:
hermes:
image: nousresearch/hermes-agent:latest
container_name: hermes-agent
restart: unless-stopped
stdin_open: true
tty: true
environment:
# Use environment secrets — never hardcode keys in compose files
OPENAI_API_KEY: ${OPENAI_API_KEY}
Anthropic_API_KEY: ${Anthropic_API_KEY}
HERMES_LOG_LEVEL: info
volumes:
- hermes_home:/root/.hermes # Config + conversation history
- hermes_skills:/root/.hermes/skills # Skill store — see next section
deploy:
resources:
limits:
memory: 2G
cpus: "1.5"
healthcheck:
test: ["CMD", "hermes", "--health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 15s
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
volumes:
hermes_home:
hermes_skills:
Stockez vos clés API dans un fichier .env (jamais engagé dans le contrôle de version) :
OPENAI_API_KEY=sk-...
Anthropic_API_KEY=sk-ant-...
Préserver les compétences d'Hermes lors des reconstructions de conteneurs
C’est le problème de production le plus négligé. Hermes stocke les compétences acquises séparément de la configuration générale. Montez explicitement ces chemins :
| Chemin | Contient | Faut-il persister ? |
|---|---|---|
| /root/.hermes | Configuration, historique des sessions | Oui |
| /root/.hermes/compétences | Bibliothèque de compétences acquises | Critique |
| /root/.hermes/mémoire | Stockage de mémoire à long terme | Oui |
Lors de la mise à jour de l'image :
docker compose pull
docker compose up -d # Named volumes persist automatically
Topologie avancée – Configuration hôte-Docker (conteneur frère)
Cette architecture est utilisée lorsque vous souhaitez qu'Hermes orchestre des conteneurs frères pour l'exécution de code isolé, par exemple pour exécuter en toute sécurité du code soumis par l'utilisateur.
┌─────────────────────────────────┐
│ Docker Host │
│ │
│ ┌──────────────┐ │
│ │ hermes-agent │◄──socket──────┤── /var/run/docker.sock
│ │ container │ │
│ └──────┬───────┘ │
│ │ docker run (sibling) │
│ ┌──────▼───────┐ │
│ │ sandbox-1 │ (ephemeral) │
│ └──────────────┘ │
└─────────────────────────────────┘
Composez la configuration pour cette topologie :
services:
hermes:
image: nousresearch/hermes-agent:latest
restart: unless-stopped
environment:
OPENAI_API_KEY: ${OPENAI_API_KEY}
DOCKER_HOST: unix:///var/run/docker.sock
HERMES_TERMINAL_BACKEND: docker
volumes:
- hermes_home:/root/.hermes
- /var/run/docker.sock:/var/run/docker.sock # Socket mount
group_add:
- "999" # docker group GID — adjust to match your host
Notes de sécurité pour la production :
- Restreindre l'accès aux sockets à l'aide d'un proxy de socket Docker (par exemple,
Tecnativa/docker-socket-proxy) pour limiter les appels d'API qu'Hermes peut effectuer - N’exposez jamais le socket Docker dans des environnements multi-locataires
- Définissez
userns-remapsur le démon Docker si vous avez besoin d'une isolation plus forte de l'hôte
Connecter Hermès à Claude via Telegram Bot
Aucun guide écrit ne couvre actuellement ce sujet – il est uniquement présenté sous forme vidéo. Voici la configuration complète.
Étape 1 : Créer un bot Telegram
Parlez à @BotFather sur Telegram :
/newbot
→ Name: Hermes Agent
→ Username: your_hermes_bot
→ Save the token: 123456:ABC-DEF...
Étape 2 : Obtenez votre jeton Claude OAuth
Dans votre console Anthropic, générez une clé API avec la portée claude-3-5-sonnet ou claude-opus-4. Définissez-le comme Anthropic_API_KEY.
Étape 3 : Ajoutez la configuration Telegram à votre fichier de composition
environment:
Anthropic_API_KEY: ${Anthropic_API_KEY}
HERMES_LLM_PROVIDER: Anthropic
HERMES_TELEGRAM_TOKEN: ${TELEGRAM_BOT_TOKEN}
HERMES_TELEGRAM_ALLOWED_USERS: "your_telegram_user_id"
Étape 4 : Trouvez votre identifiant Telegram
Message @userinfobot sur Telegram — il répond avec votre identifiant d'utilisateur numérique.
Étape 5 : Démarrez le bot
docker compose up -d
Envoyez un message à votre bot sur Telegram. Hermès répondra via le backend Claude. La restriction HERMES_TELEGRAM_ALLOWED_USERS garantit que seul votre compte peut interagir avec l'agent.
Déploiement multi-architecture (ARM64 / Oracle Free Tier / Raspberry Pi)
L'image nousresearch/hermes-agent est livrée sous forme de manifeste multi-arch. ARM64 est pris en charge — extrayez-le explicitement sur les hôtes ARM :
# Oracle Free Tier (Ampere A1) or Raspberry Pi 4/5
docker pull --platform linux/arm64 nousresearch/hermes-agent:latest
# Verify the architecture
docker inspect nousresearch/hermes-agent:latest | grep Architecture
Niveau Oracle toujours gratuit est la meilleure option d'hébergement sans frais pour Hermes en 2026. L'instance Ampere A1 vous offre 4 cœurs ARM64 et 24 Go de RAM – plus que suffisant pour un déploiement Hermes persistant avec un fournisseur LLM distant.
Problèmes connus spécifiques à ARM :
- Certaines quantifications du modèle Ollama (Q8) s'exécutent plus lentement sur ARM ; préférez Q4_K_M pour l'inférence locale
- Si vous appuyez sur
exec format error, confirmez que vous utilisez l'indicateur--platform linux/arm64. - Docker Desktop sur Apple Silicon gère ARM de manière native – aucun indicateur de plate-forme n'est nécessaire
Gérer des flux de travail d'agent complexes ? EasyClaw vous couvre
L'exécution d'Hermes Agent dans Docker est une configuration puissante, mais l'orchestration de plusieurs agents d'IA, la gestion des pipelines de compétences et le maintien d'une mémoire persistante dans des flux de travail complexes sont là où la plupart des équipes se heurtent à un mur. EasyClaw est une plate-forme d'agents d'IA native pour ordinateur de bureau conçue exactement pour cela : une coordination multi-agents de niveau production sans les problèmes d'infrastructure.
- Orchestration visuelle pour les pipelines multi-agents – pas de conflits YAML
- Mémoire persistante et bibliothèques de compétences qui survivent aux sessions
- Fonctionne entièrement sur votre machine : pas de verrouillage dans le cloud, pas de fuite de données
- Intégrations natives avec Telegram, Slack et webhooks personnalisés
- Planification, surveillance et inspection des journaux intégrées
Dépannage des pannes courantes de Docker de l'agent Hermes
Un tableau de référence des pannes que vous êtes le plus susceptible de rencontrer :
| Échec | Symptôme | Diagnostic | Réparer |
|---|---|---|---|
| Erreur d'extraction d'image | manifest unknown |
docker pull nousresearch/hermes-agent:latest échoue |
Vérifiez Docker Hub pour les balises valides actuelles ; essayez --platform linux/amd64 |
| Autorisation de volume refusée | Le conteneur se ferme avec une erreur d'autorisation sur /root/.hermes |
docker run --rm -v hermes_home:/data busybox ls -la /data |
docker volume rm hermes_home et recréer, ou corriger avec chown via un conteneur d'initialisation de Busybox |
| Échec de l'authentification LLM | 401 Unauthorized dans les journaux |
docker logs hermes-agent | grep -i auth |
Vérifiez que la clé API est correctement définie dans .env ; vérifier les espaces de début et de fin |
| L'assistant d'installation se bloque | L'assistant vous invite mais n'accepte aucune entrée | N / A | Assurez-vous que les indicateurs -it sont définis sur docker run ; composer nécessite stdin_open: true + tty: true |
| LLM inaccessible | Connection refused vers Ollama ou un point de terminaison local |
docker exec hermes-agent curl http://host.docker.internal:11434 |
Utilisez host.docker.internal au lieu de localhost ; ajoutez --add-host si nécessaire |
| Compétences qui ne persistent pas | Bibliothèque de compétences vide après reconstruction | docker volume ls — vérifier que le volume existe |
Assurez-vous que le volume hermes_skills est nommé (pas de montage lié) et que le fichier de composition y fait référence |
| Erreur de format d'exécution ARM | exec /usr/local/bin/hermes: exec format error |
docker inspect image | grep Architecture |
Tirez à nouveau avec --platform linux/arm64 |
| Autorisation de socket refusée | permission denied /var/run/docker.sock |
ls -la /var/run/docker.sock sur l'hôte |
Ajouter un utilisateur de conteneur au groupe Docker via group_add dans composer |
Foire aux questions
Q : Mes compétences Hermès survivront-elles à un docker compose pull && up -d ?
R : Oui, à condition que vos compétences soient stockées dans un volume nommé (pas un montage lié ou un volume anonyme). La configuration de composition dans ce guide utilise hermes_skills comme volume nommé, que Docker conserve automatiquement lors des mises à jour d'image.
Q : Puis-je exécuter plusieurs instances Hermes sur le même hôte ?
R : Oui. Attribuez à chaque instance un container_name distinct et des volumes nommés distincts. Vous devrez également vous assurer qu’ils n’entrent pas en conflit sur les ports exposés. Chaque instance accumule sa propre bibliothèque de compétences indépendante.
Q : Hermes Agent prend-il en charge les LLM locaux via Ollama dans Docker ?
R : Oui. Exécutez Ollama en tant que service distinct dans la même pile de composition et pointez Hermes vers http://Ollama:11434 (en utilisant le DNS interne de Docker). Évitez de pointer vers localhost depuis l'intérieur d'un conteneur - utilisez le nom du service ou host.docker.internal pour Ollama côté hôte.
Q : Est-il sécuritaire de monter le socket Docker dans le conteneur Hermes ?
R : Le montage par socket accorde au conteneur des privilèges proches de la racine sur votre hôte. C'est acceptable sur un VPS mono-utilisateur où vous contrôlez toutes les charges de travail. Dans les environnements partagés ou multi-locataires, utilisez un proxy de socket (par exemple, Tecnativa/docker-socket-proxy) pour mettre sur liste blanche uniquement les appels d'API dont Hermes a besoin.
Q : Quelle est la spécification minimale du serveur pour un déploiement Hermes de production ?
R : Avec un fournisseur LLM distant (OpenAI/Anthropic), 1 vCPU et 2 Go de RAM sont réalisables. Pour un backend Ollama auto-hébergé, vous aurez besoin d'au moins 8 Go de RAM et d'un processeur raisonnablement moderne. Le niveau gratuit Ampere A1 d'Oracle (4 cœurs, 24 Go) couvre confortablement les deux scénarios sans frais.
Q : Comment puis-je sauvegarder les compétences acquises et la mémoire d'Hermès ?
R : Utilisez docker run --rm -v hermes_skills:/data -v $(pwd):/backup busybox tar czf /backup/hermes-skills-backup.tar.gz /data. Exécutez-le en tant que tâche cron planifiée sur votre hôte pour des sauvegardes automatisées avant toute mise à jour d'image.
Réflexions finales : liste de contrôle et prochaines étapes
La boucle d'apprentissage est ce qui différencie Hermes de tous les autres agents que vous avez exécutés dans Docker. La configuration ci-dessus garantit que la boucle est réellement accumule - pas de réinitialisation - chaque fois que vous envoyez une mise à jour.
Avant d'appeler un déploiement prêt pour la production, confirmez :
- ☐ Volumes nommés créés pour
hermes_homeethermes_skills - ☐ Clés API stockées dans
.env, non codées en dur dans composer - ☐ Politique
restart: unless-stoppedactive - ☐ Réussite du bilan de santé :
docker inspect hermes-agent --format='{{.State.Health.Status}}' - ☐ Rotation des journaux configurée (
max-size,max-file) - ☐ Limites de ressources définies pour éviter l'épuisement de la mémoire
- ☐ Assistant de configuration terminé et première session de discussion vérifiée
- ☐ (Si mode 2) Montage du socket Docker confirmé et proxy de socket pris en compte
Prochaines étapes pour obtenir de la valeur immédiatement :
- Exécutez quelques tâches réelles (résumé de fichiers, révision de code, recherche sur le Web) pour alimenter la bibliothèque de compétences.
- Après 10 à 15 tâches, exécutez
hermes skills listpour voir ce qui a été appris - Consultez le Nous Research GitHub pour consulter les documents de configuration d'agent couvrant les modèles de compétences personnalisés et le réglage de la mémoire.
- Si vous bénéficiez de l'offre gratuite Oracle, configurez un
docker compose pull && docker compose up -dbasé sur cron pour des mises à jour d'images sans temps d'arrêt tout en préservant l'état appris.