Hermes Agent : l'IA qui vit dans votre terminal (et répond sur Telegram)
Installer, configurer et sécuriser Hermes Agent sur Arch Linux avec Podman comme sandbox et Telegram comme interface. Le guide complet, étape par étape.

Il y a des outils qu’on installe par curiosité et qu’on finit par ne plus pouvoir quitter. Hermes Agent est de ceux-là.
Conçu par Nous Research, Hermes est un agent IA en ligne de commande avec une particularité rare : il apprend de vous. Il crée des compétences à partir de vos sessions, les améliore au fil du temps, se souvient de vos préférences entre les conversations. Et surtout — il répond sur Telegram pendant que vous êtes loin de votre machine.
Ce guide couvre l’installation complète sur Arch Linux, la configuration du gateway Telegram, la sécurisation avec Podman comme backend de conteneur isolé, et la mise en service via systemd. Rien n’est supposé acquis.
Ce qu’on va construire
Vous (Telegram) → Bot BotFather → Hermes Gateway (systemd)
↓
Hermes Agent (Python)
↓
Podman container (sandbox isolé)
↓
Votre répertoire de travail
À la fin de ce guide, vous pourrez envoyer un message à votre bot Telegram depuis n’importe où, et Hermes exécutera des commandes, cherchera sur le web, lira et écrira des fichiers — le tout confiné dans un répertoire et un conteneur que vous contrôlez.
Prérequis
- Arch Linux à jour (
sudo pacman -Syu) - Un compte Telegram
- Git, curl, et une connexion internet
- ~500 Mo de disque libre
0. Créer votre bot Telegram via BotFather
Tout bot Telegram commence par une conversation avec @BotFather, le gestionnaire officiel des bots.
- Ouvrez Telegram et cherchez @BotFather (vérifiez la coche bleue officielle)
- Envoyez
/newbot - Choisissez un nom d’affichage (ex :
Mon Hermes) - Choisissez un username unique se terminant par
bot(ex :mon_hermes_bot) - BotFather vous répond avec votre token — il ressemble à :
123456789:ABCdefGHIjklMNOpqrSTUvwxYZ
⚠️ Ce token est une clé privée. Quiconque le possède contrôle votre bot. Ne le commitez jamais dans un dépôt, ne le partagez pas.
Récupérer votre ID Telegram personnel
Hermes a besoin de votre ID numérique (pas votre @username) pour savoir à qui répondre.
Envoyez un message à @userinfobot — il vous répond instantanément avec votre ID, un nombre comme 775795424.
Notez-le, vous en aurez besoin dans quelques minutes.
1. Installer Hermes Agent
L’installeur officiel gère tout : Python, Node.js, dépendances, et la commande hermes.
curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash
Une fois terminé, rechargez votre shell :
source ~/.bashrc # ou source ~/.zshrc si vous utilisez zsh
Vérifiez que tout est en place :
hermes --version

2. Premier lancement et configuration du modèle LLM
Lancez Hermes une première fois pour déclencher l’assistant de configuration :
hermes setup
L’assistant vous guidera pour :
- Choisir un provider LLM — OpenRouter est recommandé pour sa flexibilité (accès à 200+ modèles dont Claude, GPT-4o, Gemini). Créez un compte sur openrouter.ai et copiez votre clé API. Personnellement j’utilise le Coding Plan de Z.ai avec GLM5-1. Mais il faut reconnaître qu’il est un peu laggy.
- Choisir un modèle — pour commencer,
anthropic/claude-opus-4.6ougoogle/gemini-flash-1.5sont d’excellents choix rapport qualité/prix.
💡 Vous pouvez changer de modèle à tout moment avec
hermes modelsans toucher à votre configuration.
Testez que l’agent répond correctement avant de passer à Telegram :
hermes
> Bonjour, qui es-tu ?
Si vous obtenez une réponse cohérente, la configuration LLM est bonne. Ctrl+C pour quitter.
3. Configurer le gateway Telegram
Hermes inclut une gateway de messagerie — un processus qui écoute en permanence les plateformes configurées et route les messages vers l’agent.
Lancez l’assistant de configuration du gateway :
hermes gateway setup
Sélectionnez Telegram et renseignez :
- Bot token — le token fourni par BotFather à l’étape 0
- Allowed users — votre ID Telegram numérique (ex :
775795424)
L’assistant écrit ces valeurs dans ~/.hermes/.env.
Vérifiez que tout est bien en place :
grep -i telegram ~/.hermes/.env
Vous devez voir :
TELEGRAM_BOT_TOKEN=123456789:ABCdef...
TELEGRAM_ALLOWED_USERS=775795424
⚠️ Piège classique : le token Telegram ressemble à
123456789:ABCdef...— un ID numérique, un deux-points, puis une chaîne alphanumérique. Si votre token ne contient pas de deux-points, il est invalide. Retournez chez BotFather avec/mybots→ votre bot → API Token.
4. Tester le gateway en foreground
Avant de le confier à systemd, testez le gateway en direct pour voir les logs en temps réel :
hermes gateway
Envoyez un message à votre bot sur Telegram. Vous devez voir dans le terminal :
INFO gateway.run: Connecting to telegram...
INFO gateway.platforms.telegram: [Telegram] Connected as @mon_hermes_bot
Puis, dès que vous envoyez un message, l’agent répond. Si c’est le cas : félicitations, tout fonctionne.
Ctrl+C pour arrêter.
5. Sécuriser : Podman comme backend de conteneur
Par défaut, Hermes exécute les commandes directement sur votre machine (backend local). C’est pratique mais risqué : l’agent peut lire, écrire, et exécuter dans n’importe quel répertoire.
Avec Podman comme backend, chaque commande s’exécute dans un conteneur isolé :
- Système de fichiers séparé
- Toutes les capabilities Linux supprimées (
--cap-drop ALL) - Pas d’escalade de privilèges
- Limite de 256 processus
- Le host est protégé

5.1 Installer Podman sur Arch
sudo pacman -S podman podman-compose fuse-overlayfs slirp4netns
Vérifiez l’installation :
podman --version
podman info --format '{{.Host.CgroupsVersion}}'
# Attendu : 2
5.2 Configurer les namespaces utilisateur (rootless)
Podman fonctionne sans daemon root — c’est l’un de ses grands avantages sur Docker. Il a besoin de plages d’UIDs/GIDs pour les namespaces de conteneurs.
Vérifiez si c’est déjà configuré pour votre utilisateur :
cat /etc/subuid | grep $(whoami)
cat /etc/subgid | grep $(whoami)
Si ces fichiers sont vides ou ne contiennent pas votre nom d’utilisateur :
sudo usermod --add-subuids 100000-165535 --add-subgids 100000-165535 $(whoami)
Vérifiez à nouveau — vous devez voir une ligne comme :
andrea:100000:65536
5.3 Activer le socket Podman
systemctl --user enable --now podman.socket
5.4 Exposer Podman comme docker pour Hermes
Hermes appelle le binaire docker en dur. La solution propre sur Arch est un symlink :
sudo ln -s /usr/bin/podman /usr/local/bin/docker
Vérifiez :
docker --version
# Doit afficher : podman version X.X.X
5.5 Configurer Hermes pour utiliser le backend Docker/Podman
hermes config set terminal.backend docker
hermes config set terminal.docker_image python:3.11-slim
Ou éditez directement ~/.hermes/config.yaml :
terminal:
backend: docker
docker_image: python:3.11-slim
container_cpu: 1
container_memory: 2048 # 2 Go — ajustez selon vos besoins
container_persistent: true # Le conteneur survit entre les sessions
💡
container_persistent: truesignifie que les packages installés et les fichiers créés dans le conteneur survivent entre les sessions. Pratique pour ne pas tout réinstaller à chaque fois.
5.6 Tester l’isolation
Lancez Hermes en CLI et testez :
hermes
> Crée un fichier /tmp/test.txt avec le contenu "hello"
Vérifiez ensuite sur votre host que le fichier n’existe pas dans /tmp/test.txt — il est dans le conteneur, pas sur votre machine. C’est exactement le comportement attendu.
6. Restreindre le répertoire de travail
Même avec Podman, il est utile de définir un répertoire de travail par défaut pour le gateway — le répertoire dans lequel l’agent opère quand il reçoit des messages Telegram.
Ajoutez cette ligne dans ~/.hermes/.env :
MESSAGING_CWD=/home/andrea/projets/mon-projet
Remplacez le chemin par le répertoire qui vous convient. L’agent utilisera ce répertoire comme point de départ pour toutes ses opérations.
7. Installer le gateway comme service systemd
Pour que le bot réponde même quand votre terminal est fermé, on installe le gateway comme service utilisateur systemd.
hermes gateway install
Cette commande crée le fichier d’unité dans ~/.config/systemd/user/hermes-gateway.service.
Inspectez-le pour vérifier qu’il charge bien votre .env :
cat ~/.config/systemd/user/hermes-gateway.service
Vous devez voir les variables PATH, VIRTUAL_ENV et HERMES_HOME dans les lignes Environment=.
Démarrez et activez le service :
systemctl --user enable --now hermes-gateway
systemctl --user status hermes-gateway
Le statut doit afficher active (running).
8. Survivre à la déconnexion et au sleep
8.1 Activer le linger (déconnexion / reboot)
Par défaut, les services utilisateur systemd s’arrêtent quand votre session se termine. Le linger permet au service de continuer à tourner sans session active :
sudo loginctl enable-linger $USER
Vérifiez :
loginctl show-user $USER | grep Linger
# Attendu : Linger=yes
8.2 Survivre au sleep (suspend to RAM)
Quand la machine se met en veille, la connexion Telegram se coupe. Il faut dire au service de redémarrer proprement après la reprise.
Éditez le service avec un override (ne modifiez jamais le fichier principal directement) :
systemctl --user edit hermes-gateway
Dans l’éditeur, ajoutez :
[Unit]
After=sleep.target
Sauvegardez, puis rechargez :
systemctl --user daemon-reload
systemctl --user restart hermes-gateway
À la prochaine sortie de veille, le service redémarre automatiquement et la connexion Telegram est rétablie. Les messages envoyés pendant la veille sont mis en file côté Telegram et livrés en rafale au réveil.
9. Commandes utiles au quotidien
# Statut du gateway
systemctl --user status hermes-gateway
# Logs en direct (très utile pour déboguer)
journalctl --user -u hermes-gateway -f --no-pager
# Redémarrer après un changement de config
systemctl --user restart hermes-gateway
# Changer de modèle LLM à la volée
hermes model
# Lancer Hermes en CLI (session interactive)
hermes
# Voir les skills disponibles
hermes tools
10. Référence de dépannage
| Symptôme | Cause probable | Solution |
|---|---|---|
Bot ne répond pas, service active | Token invalide | Le token doit contenir un : — récupérez-le via BotFather /mybots |
InvalidToken dans les logs | Token mal copié (pas de deux-points) | Corrigez TELEGRAM_BOT_TOKEN dans ~/.hermes/.env |
Service crash en boucle (start-limit-hit) | Erreur au démarrage | journalctl --user -u hermes-gateway -n 50 pour voir la cause |
| Bot répond “unauthorized” | Votre ID n’est pas dans ALLOWED_USERS | Vérifiez avec @userinfobot et corrigez TELEGRAM_ALLOWED_USERS |
docker: command not found | Symlink absent | sudo ln -s /usr/bin/podman /usr/local/bin/docker |
| Conteneur ne démarre pas | subuid/subgid manquants | sudo usermod --add-subuids 100000-165535 ... |
| Bot ne répond plus après le sleep | After=sleep.target absent | Section 8.2 — éditer le service avec l’override |
| Bot ne démarre pas après reboot | Linger désactivé | sudo loginctl enable-linger $USER |
Conclusion
En moins d’une heure, vous avez un agent IA :
- Accessible depuis Telegram — depuis votre téléphone, de n’importe où
- Isolé dans Podman — les commandes s’exécutent dans un conteneur, pas sur votre host
- Confiné dans un répertoire —
MESSAGING_CWDlimite le rayon d’action - Résilient — systemd le relance automatiquement, linger le maintient après déconnexion, le hook sleep le réveille après la mise en veille
Ce qui m’a frappé avec Hermes, c’est la cohérence de l’ensemble. Ce n’est pas un wrapper autour d’une API — c’est un vrai système avec une boucle d’apprentissage, une gestion des sessions, des skills qui s’améliorent. Nous Research a construit quelque chose qui ressemble à ce qu’on imaginait quand on parlait d‘“assistant IA personnel” il y a cinq ans.
La prochaine étape pour moi : explorer le système de skills — des procédures que l’agent crée lui-même et réutilise, un peu comme si vous lui appreniez de nouveaux réflexes. Mais ça, c’est pour un prochain article.
Ressources
- Documentation officielle Hermes Agent
- GitHub NousResearch/hermes-agent
- OpenRouter — accès multi-modèles
- Documentation Podman rootless