Aller au contenu

« Trace install tas - Hermes Agent » : différence entre les versions

De Loic Wiki
Daneel (discussion | contributions)
Publication de la page Trace install tas - Hermes Agent
 
Daneel (discussion | contributions)
Documente le port local 5000 et le tunnel SSH pour AI Tester
 
(4 versions intermédiaires par le même utilisateur non affichées)
Ligne 5 : Ligne 5 :


== Statut opérationnel ==
== Statut opérationnel ==
Dernière mise à jour documentaire : '''13 juillet 2026'''.
Dernière mise à jour documentaire : '''16 juillet 2026'''.


Capacités actuellement actives et vérifiées :
Capacités actuellement actives et vérifiées :
Ligne 12 : Ligne 12 :
* [x] outils fichiers / terminal / mémoire / délégation
* [x] outils fichiers / terminal / mémoire / délégation
* [x] browser local embarqué
* [x] browser local embarqué
* [x] `browser_cdp` via Chrome dédié `hermes-cdp.service`
* [x] `browser_dialog` via le même endpoint CDP
* [x] STT local et TTS Edge
* [x] STT local et TTS Edge
* [x] `web_search` via backend `ddgs` sans clé API
* [x] `web_search` via backend `ddgs` sans clé API
* [x] `web_extract` via backend `tavily`


Capacités encore bloquées ou partielles :
Capacités encore bloquées ou partielles :
* [ ] `web_extract` avec backend dédié
* [ ] `image_generate`
* [ ] `image_generate`
* [ ] `browser_cdp` et `browser_dialog`
* [ ] `read_terminal` et `close_terminal` hors application desktop Hermes
* [ ] `read_terminal` et `close_terminal` hors application desktop Hermes
* [ ] `computer_use` dans ce gateway Telegram sans contexte desktop/X11
* [ ] `computer_use` dans ce gateway Telegram sans contexte desktop/X11
Ligne 24 : Ligne 25 :
== Accès ==
== Accès ==
* Local service : `127.0.0.1:8642`
* Local service : `127.0.0.1:8642`
* AI Tester local : `127.0.0.1:5000` lorsqu'une instance de l'application est lancée dans le conteneur
* Public HTTP : aucun par défaut
* Public HTTP : aucun par défaut
* Messagerie prévue : Telegram via un second bot dédié à créer
* Messagerie prévue : Telegram via un second bot dédié à créer
Ligne 29 : Ligne 31 :
== Ports ==
== Ports ==
* `8642` local uniquement
* `8642` local uniquement
* `5000` local uniquement, publié par le Quadlet pour AI Tester ; aucun accès direct depuis le LAN ou Internet
* `9222` non publié ; accessible uniquement sur le réseau Podman privé `hermes-net`
== Accès temporaire à AI Tester ==
Le Quadlet publie `127.0.0.1:5000:5000`. L'application Flask doit néanmoins être lancée dans le conteneur :
* `podman exec -d --user hermes --workdir /opt/data/ai-tester hermes uv run flask --app ai_tester.web run --host 0.0.0.0 --port 5000`
* contrôle depuis `tas` : `curl -I http://127.0.0.1:5000/`
Depuis une autre machine disposant d'un accès SSH à `tas` :
* ouvrir le tunnel : `ssh -L 5000:127.0.0.1:5000 tas`
* consulter ensuite `http://127.0.0.1:5000` dans le navigateur local
Le serveur Werkzeug utilisé est un serveur de développement sans protection adaptée à une exposition publique. Ne pas publier ce port sur `0.0.0.0` et ne pas l'ajouter directement à Caddy. Le processus Flask lancé avec `podman exec -d` n'est pas persistant et disparaît lors d'une recréation de `hermes.service`.


== Exécution / runtime ==
== Exécution / runtime ==
Quadlet systemd user : `hermes.container` ; unité générée : `hermes.service`.
Quadlets systemd user : `hermes.container` et `hermes-cdp.container` ; unités générées : `hermes.service` et `hermes-cdp.service`.
 
Réseau privé :
* unité idempotente `hermes-network.service`
* réseau CNI `hermes-net` sur `10.89.12.0/24`
* IP CDP réservée : `10.89.12.2`
* les cycles de vie Hermes et CDP sont indépendants


Commande de démarrage :
Commande de démarrage :
Ligne 41 : Ligne 62 :
== Chemins de configuration ==
== Chemins de configuration ==
* `/home/loic/.config/containers/systemd/hermes.container`
* `/home/loic/.config/containers/systemd/hermes.container`
* `/home/loic/.config/containers/systemd/hermes-cdp.container`
* `/home/loic/.config/systemd/user/hermes-network.service`
* `/home/loic/hermes-config/hermes.env`
* `/home/loic/hermes-config/hermes.env`
* `/media/loic/nem/hermes/config.yaml`
* `/media/loic/nem/hermes/config.yaml`
Ligne 48 : Ligne 71 :
* `hermes.env` porte les secrets / variables Telegram
* `hermes.env` porte les secrets / variables Telegram
* `config.yaml` porte la configuration non secrète Hermes
* `config.yaml` porte la configuration non secrète Hermes
== Exploitation courante ==
Toutes les commandes ci-dessous sont exécutées avec le compte utilisateur `loic` ; ne pas ajouter `sudo` aux commandes `systemctl --user` ou `podman`.
=== Appliquer une modification de configuration ===
Après sauvegarde préalable du fichier concerné :
* modification de `config.yaml` ou `hermes.env` : `systemctl --user restart hermes.service`
* modification d'un fichier Quadlet `.container` : `systemctl --user daemon-reload`, puis redémarrer uniquement le service concerné
* vérifier ensuite : `systemctl --user is-active hermes.service hermes-cdp.service hermes-network.service`
=== Démarrage ===
* démarrer le réseau privé : `systemctl --user start hermes-network.service`
* démarrer Hermes : `systemctl --user start hermes.service`
* démarrer CDP : `systemctl --user start hermes-cdp.service`
* démarrage groupé : `systemctl --user start hermes-network.service hermes.service hermes-cdp.service`
=== Arrêt ===
* arrêt normal complet : `systemctl --user stop hermes-cdp.service hermes.service`
* il n'est normalement pas nécessaire d'arrêter `hermes-network.service`; le réseau persiste volontairement
* ne pas supprimer manuellement le conteneur `hermes` tant qu'un ancien conteneur utilisant `--network container:hermes` existe encore
=== Redémarrage ===
* redémarrer Hermes seul : `systemctl --user restart hermes.service`
* redémarrer Chrome CDP seul : `systemctl --user restart hermes-cdp.service`
* le redémarrage de l'un ne doit pas redémarrer ni bloquer l'autre
* après modification des Quadlets : `systemctl --user daemon-reload && systemctl --user restart hermes.service hermes-cdp.service`
=== État et journaux ===
* état synthétique : `systemctl --user is-active hermes-network.service hermes.service hermes-cdp.service`
* état détaillé Hermes : `systemctl --user status hermes.service --no-pager -l`
* état détaillé CDP : `systemctl --user status hermes-cdp.service --no-pager -l`
* logs Hermes : `journalctl --user -u hermes.service -n 100 --no-pager`
* logs CDP : `journalctl --user -u hermes-cdp.service -n 100 --no-pager`
* suivre les logs : `journalctl --user -f -u hermes.service -u hermes-cdp.service`
* état Podman : `podman ps --filter name=hermes`
=== Contrôles de santé ===
* vérifier le port local Hermes : `ss -ltn | rg ':8642'`
* vérifier CDP depuis Hermes : `podman exec hermes curl -fsS http://10.89.12.2:9222/json/version`
* la réponse CDP doit contenir `webSocketDebuggerUrl`
* vérifier que CDP n'est pas publié sur l'hôte : <nowiki>`podman inspect hermes-cdp --format '{{json .NetworkSettings.Ports}}'`</nowiki>
* vérifier l'IP privée CDP : <nowiki>`podman inspect hermes-cdp --format '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}'`</nowiki>
=== Mise à jour des images ===
* simulation : `podman auto-update --dry-run`
* mise à jour gérée : `systemctl --user start podman-auto-update.service`
* contrôler ensuite les trois services et les journaux
* sur Podman 4.6.2, si le dry-run mentionne un ancien ID absent, vérifier d'abord `podman ps -a` et l'état des services ; ne pas supprimer les données persistantes
=== Sauvegarde avant intervention ===
* Quadlets : `/home/loic/.config/containers/systemd/hermes.container` et `/home/loic/.config/containers/systemd/hermes-cdp.container`
* réseau : `/home/loic/.config/systemd/user/hermes-network.service`
* environnement : `/home/loic/hermes-config/hermes.env`
* configuration et données : `/media/loic/nem/hermes`
* conserver les sauvegardes hors du répertoire remplacé, par exemple dans `/home/loic/backups`
=== Retour arrière ===
* arrêter `hermes-cdp.service` puis `hermes.service`
* restaurer les fichiers sauvegardés sans supprimer `/media/loic/nem/hermes`
* exécuter `systemctl --user daemon-reload`
* redémarrer dans l'ordre réseau, Hermes, puis CDP
* vérifier les journaux et `/json/version` avant de conclure


== Volumes / persistance ==
== Volumes / persistance ==
Ligne 62 : Ligne 147 :
* second bot Telegram dédié avec token distinct de l'instance OpenClaw existante
* second bot Telegram dédié avec token distinct de l'instance OpenClaw existante
* package Python `ddgs` installé via `hermes tools post-setup ddgs` le `13 juillet 2026`
* package Python `ddgs` installé via `hermes tools post-setup ddgs` le `13 juillet 2026`
* clé API Tavily injectée via `hermes.env` le `13 juillet 2026`
* service `hermes-cdp.service` indépendant, relié à Hermes par `hermes-net` depuis le `16 juillet 2026`


== Modèle LLM principal ==
== Modèle LLM principal ==
Ligne 73 : Ligne 160 :
Activation explicite actuellement retenue dans `config.yaml` :
Activation explicite actuellement retenue dans `config.yaml` :
* `web.search_backend: ddgs`
* `web.search_backend: ddgs`
* `web.extract_backend: tavily`
* `browser.cdp_url: http://10.89.12.2:9222`


Conséquences :
Conséquences :
* `web_search` devient disponible sans clé API
* `web_search` devient disponible sans clé API
* `web_extract` n'a pas encore de backend dédié, donc la recherche web est activée mais l'extraction avancée reste à compléter
* `web_extract` devient disponible via Tavily pour les URLs HTTP/HTTPS et le rendu markdown
* `browser_cdp` et `browser_dialog` deviennent disponibles sans exposer CDP sur le réseau hôte


Backends non activés à ce stade :
Backends non activés à ce stade :
* aucun backend `image_gen`
* aucun backend `image_gen`
* aucun `browser.cdp_url`


== Intégration Telegram préparée ==
== Intégration Telegram préparée ==
Ligne 97 : Ligne 186 :
* `TELEGRAM_HOME_CHANNEL=5910858583`
* `TELEGRAM_HOME_CHANNEL=5910858583`
* `TELEGRAM_BOT_TOKEN=...` configuré pour `@LoicHermesBot`
* `TELEGRAM_BOT_TOKEN=...` configuré pour `@LoicHermesBot`
* `TAVILY_API_KEY=...` configurée sans etre documentée en clair dans cette page


== Procédure pour finaliser le second bot ==
== Procédure pour finaliser le second bot ==
Ligne 113 : Ligne 203 :
Commandes utiles :
Commandes utiles :
* `systemctl --user status hermes.service --no-pager -l`
* `systemctl --user status hermes.service --no-pager -l`
* `systemctl --user status hermes-cdp.service --no-pager -l`
* `systemctl --user restart hermes.service`
* `systemctl --user restart hermes.service`
* `systemctl --user restart hermes-cdp.service`
* `journalctl --user -u hermes.service -n 100 --no-pager`
* `journalctl --user -u hermes.service -n 100 --no-pager`
* `journalctl --user -u hermes-cdp.service -n 100 --no-pager`
* `ss -ltn | rg 8642`
* `ss -ltn | rg 8642`
* `podman exec hermes /opt/hermes/.venv/bin/python -c "from tools.web_tools import check_web_api_key; print(check_web_api_key())"`
* `podman exec hermes /opt/hermes/.venv/bin/python -c "from tools.web_tools import check_web_api_key; print(check_web_api_key())"`
* `podman exec hermes /opt/hermes/.venv/bin/python -c "from tools.web_tools import _get_search_backend,_get_extract_backend; print(_get_search_backend(), _get_extract_backend())"`
* `podman exec hermes curl -fsS http://10.89.12.2:9222/json/version`
* `podman exec hermes /opt/hermes/.venv/bin/python -c "from tools.browser_cdp_tool import _browser_cdp_check; print(_browser_cdp_check())"`


Interprétation rapide :
Interprétation rapide :
Ligne 123 : Ligne 219 :
* si un conflit de token apparaît, s'assurer que le bot Hermes n'est pas le même que celui d'OpenClaw
* si un conflit de token apparaît, s'assurer que le bot Hermes n'est pas le même que celui d'OpenClaw
* si Telegram est bien pris en compte, les logs montrent une phase de connexion du type `Connecting to Telegram`
* si Telegram est bien pris en compte, les logs montrent une phase de connexion du type `Connecting to Telegram`
* si `check_web_api_key()` renvoie `True` avec `search_provider=ddgs`, la recherche web est activée même sans clé API
* si `check_web_api_key()` renvoie `True` avec `search_provider=ddgs` et `extract_provider=tavily`, la recherche et l'extraction web sont activées
* si `curl http://10.89.12.2:9222/json/version` renvoie un `webSocketDebuggerUrl` depuis le conteneur Hermes, la cible CDP est joignable
* ne pas rétablir `--network container:hermes` : un conteneur CDP dépendant empêcherait Podman de recréer Hermes lors d'une mise à jour
* si `_browser_cdp_check()` renvoie `True`, `browser_cdp` et `browser_dialog` doivent etre exposes par Hermes


== Plan d'activation des potentiels ==
== Plan d'activation des potentiels ==
Ligne 131 : Ligne 230 :
* [x] basculer sur le modèle local `gemma4:e4b-it-q8_0_128k`
* [x] basculer sur le modèle local `gemma4:e4b-it-q8_0_128k`
* [x] activer `web_search` gratuit via `ddgs`
* [x] activer `web_search` gratuit via `ddgs`
* [ ] choisir et brancher un backend `web_extract`
* [x] choisir et brancher un backend `web_extract`
* [x] fournir un endpoint CDP persistant pour `browser_cdp`
* [ ] choisir et brancher un backend `image_generate`
* [ ] choisir et brancher un backend `image_generate`
* [ ] fournir un endpoint CDP persistant si l'on veut `browser_cdp`
* [ ] décider si un contexte desktop dédié doit être exposé à Hermes
* [ ] décider si un contexte desktop dédié doit être exposé à Hermes


Intervention attendue de Loïc pour débloquer la suite :
Intervention attendue de Loïc pour débloquer la suite :
* `web_extract` : fournir un choix de provider et sa config (`TAVILY_API_KEY`, `FIRECRAWL_API_KEY`, `EXA_API_KEY`, ou une URL `SEARXNG_URL` si une instance maison existe)
* `image_generate` : fournir un provider et un secret ou une auth exploitable dans le conteneur (`OPENAI_API_KEY`, `FAL_KEY`, ou auth Codex dans Hermes)
* `image_generate` : fournir un provider et un secret ou une auth exploitable dans le conteneur (`OPENAI_API_KEY`, `FAL_KEY`, ou auth Codex dans Hermes)
* `browser_cdp` : fournir une cible CDP réelle et durable (`browser.cdp_url`)


== Données / emplacements à sauvegarder ==
== Données / emplacements à sauvegarder ==
* `/home/loic/.config/containers/systemd/hermes.container`
* `/home/loic/.config/containers/systemd/hermes.container`
* `/home/loic/.config/containers/systemd/hermes-cdp.container`
* `/home/loic/.config/systemd/user/hermes-network.service`
* `/home/loic/hermes-config/hermes.env`
* `/home/loic/hermes-config/hermes.env`
* `/media/loic/nem/hermes`
* `/media/loic/nem/hermes`

Dernière version du 16 juillet 2026 à 23:22

Trace install tas - Hermes Agent

Rôle

Agent IA outillé exposé via sa gateway de messagerie, avec état persistant sur disque dédié.

Statut opérationnel

Dernière mise à jour documentaire : 16 juillet 2026.

Capacités actuellement actives et vérifiées :

  • [x] gateway Telegram dédiée via `@LoicHermesBot`
  • [x] modèle local Ollama via `gemma4:e4b-it-q8_0_128k`
  • [x] outils fichiers / terminal / mémoire / délégation
  • [x] browser local embarqué
  • [x] `browser_cdp` via Chrome dédié `hermes-cdp.service`
  • [x] `browser_dialog` via le même endpoint CDP
  • [x] STT local et TTS Edge
  • [x] `web_search` via backend `ddgs` sans clé API
  • [x] `web_extract` via backend `tavily`

Capacités encore bloquées ou partielles :

  • [ ] `image_generate`
  • [ ] `read_terminal` et `close_terminal` hors application desktop Hermes
  • [ ] `computer_use` dans ce gateway Telegram sans contexte desktop/X11

Accès

  • Local service : `127.0.0.1:8642`
  • AI Tester local : `127.0.0.1:5000` lorsqu'une instance de l'application est lancée dans le conteneur
  • Public HTTP : aucun par défaut
  • Messagerie prévue : Telegram via un second bot dédié à créer

Ports

  • `8642` local uniquement
  • `5000` local uniquement, publié par le Quadlet pour AI Tester ; aucun accès direct depuis le LAN ou Internet
  • `9222` non publié ; accessible uniquement sur le réseau Podman privé `hermes-net`

Accès temporaire à AI Tester

Le Quadlet publie `127.0.0.1:5000:5000`. L'application Flask doit néanmoins être lancée dans le conteneur :

  • `podman exec -d --user hermes --workdir /opt/data/ai-tester hermes uv run flask --app ai_tester.web run --host 0.0.0.0 --port 5000`
  • contrôle depuis `tas` : `curl -I http://127.0.0.1:5000/`

Depuis une autre machine disposant d'un accès SSH à `tas` :

  • ouvrir le tunnel : `ssh -L 5000:127.0.0.1:5000 tas`
  • consulter ensuite `http://127.0.0.1:5000` dans le navigateur local

Le serveur Werkzeug utilisé est un serveur de développement sans protection adaptée à une exposition publique. Ne pas publier ce port sur `0.0.0.0` et ne pas l'ajouter directement à Caddy. Le processus Flask lancé avec `podman exec -d` n'est pas persistant et disparaît lors d'une recréation de `hermes.service`.

Exécution / runtime

Quadlets systemd user : `hermes.container` et `hermes-cdp.container` ; unités générées : `hermes.service` et `hermes-cdp.service`.

Réseau privé :

  • unité idempotente `hermes-network.service`
  • réseau CNI `hermes-net` sur `10.89.12.0/24`
  • IP CDP réservée : `10.89.12.2`
  • les cycles de vie Hermes et CDP sont indépendants

Commande de démarrage :

  • `gateway run`

Image :

  • `docker.io/nousresearch/hermes-agent:latest`

Chemins de configuration

  • `/home/loic/.config/containers/systemd/hermes.container`
  • `/home/loic/.config/containers/systemd/hermes-cdp.container`
  • `/home/loic/.config/systemd/user/hermes-network.service`
  • `/home/loic/hermes-config/hermes.env`
  • `/media/loic/nem/hermes/config.yaml`

Sources de vérité :

  • le quadlet gère le runtime Podman rootless
  • `hermes.env` porte les secrets / variables Telegram
  • `config.yaml` porte la configuration non secrète Hermes

Exploitation courante

Toutes les commandes ci-dessous sont exécutées avec le compte utilisateur `loic` ; ne pas ajouter `sudo` aux commandes `systemctl --user` ou `podman`.

Appliquer une modification de configuration

Après sauvegarde préalable du fichier concerné :

  • modification de `config.yaml` ou `hermes.env` : `systemctl --user restart hermes.service`
  • modification d'un fichier Quadlet `.container` : `systemctl --user daemon-reload`, puis redémarrer uniquement le service concerné
  • vérifier ensuite : `systemctl --user is-active hermes.service hermes-cdp.service hermes-network.service`

Démarrage

  • démarrer le réseau privé : `systemctl --user start hermes-network.service`
  • démarrer Hermes : `systemctl --user start hermes.service`
  • démarrer CDP : `systemctl --user start hermes-cdp.service`
  • démarrage groupé : `systemctl --user start hermes-network.service hermes.service hermes-cdp.service`

Arrêt

  • arrêt normal complet : `systemctl --user stop hermes-cdp.service hermes.service`
  • il n'est normalement pas nécessaire d'arrêter `hermes-network.service`; le réseau persiste volontairement
  • ne pas supprimer manuellement le conteneur `hermes` tant qu'un ancien conteneur utilisant `--network container:hermes` existe encore

Redémarrage

  • redémarrer Hermes seul : `systemctl --user restart hermes.service`
  • redémarrer Chrome CDP seul : `systemctl --user restart hermes-cdp.service`
  • le redémarrage de l'un ne doit pas redémarrer ni bloquer l'autre
  • après modification des Quadlets : `systemctl --user daemon-reload && systemctl --user restart hermes.service hermes-cdp.service`

État et journaux

  • état synthétique : `systemctl --user is-active hermes-network.service hermes.service hermes-cdp.service`
  • état détaillé Hermes : `systemctl --user status hermes.service --no-pager -l`
  • état détaillé CDP : `systemctl --user status hermes-cdp.service --no-pager -l`
  • logs Hermes : `journalctl --user -u hermes.service -n 100 --no-pager`
  • logs CDP : `journalctl --user -u hermes-cdp.service -n 100 --no-pager`
  • suivre les logs : `journalctl --user -f -u hermes.service -u hermes-cdp.service`
  • état Podman : `podman ps --filter name=hermes`

Contrôles de santé

  • vérifier le port local Hermes : `ss -ltn | rg ':8642'`
  • vérifier CDP depuis Hermes : `podman exec hermes curl -fsS http://10.89.12.2:9222/json/version`
  • la réponse CDP doit contenir `webSocketDebuggerUrl`
  • vérifier que CDP n'est pas publié sur l'hôte : `podman inspect hermes-cdp --format '{{json .NetworkSettings.Ports}}'`
  • vérifier l'IP privée CDP : `podman inspect hermes-cdp --format '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}'`

Mise à jour des images

  • simulation : `podman auto-update --dry-run`
  • mise à jour gérée : `systemctl --user start podman-auto-update.service`
  • contrôler ensuite les trois services et les journaux
  • sur Podman 4.6.2, si le dry-run mentionne un ancien ID absent, vérifier d'abord `podman ps -a` et l'état des services ; ne pas supprimer les données persistantes

Sauvegarde avant intervention

  • Quadlets : `/home/loic/.config/containers/systemd/hermes.container` et `/home/loic/.config/containers/systemd/hermes-cdp.container`
  • réseau : `/home/loic/.config/systemd/user/hermes-network.service`
  • environnement : `/home/loic/hermes-config/hermes.env`
  • configuration et données : `/media/loic/nem/hermes`
  • conserver les sauvegardes hors du répertoire remplacé, par exemple dans `/home/loic/backups`

Retour arrière

  • arrêter `hermes-cdp.service` puis `hermes.service`
  • restaurer les fichiers sauvegardés sans supprimer `/media/loic/nem/hermes`
  • exécuter `systemctl --user daemon-reload`
  • redémarrer dans l'ordre réseau, Hermes, puis CDP
  • vérifier les journaux et `/json/version` avant de conclure

Volumes / persistance

  • `/media/loic/nem/hermes:/opt/data`

Contenu notable dans la persistance :

  • `config.yaml`
  • historiques / sessions Hermes
  • mémoire et skills synchronisés par Hermes

Dépendances

  • Podman rootless
  • Ollama local via `http://host.containers.internal:11434/v1`
  • second bot Telegram dédié avec token distinct de l'instance OpenClaw existante
  • package Python `ddgs` installé via `hermes tools post-setup ddgs` le `13 juillet 2026`
  • clé API Tavily injectée via `hermes.env` le `13 juillet 2026`
  • service `hermes-cdp.service` indépendant, relié à Hermes par `hermes-net` depuis le `16 juillet 2026`

Modèle LLM principal

Configuration Hermes actuellement retenue :

Outils et backends activés

Activation explicite actuellement retenue dans `config.yaml` :

Conséquences :

  • `web_search` devient disponible sans clé API
  • `web_extract` devient disponible via Tavily pour les URLs HTTP/HTTPS et le rendu markdown
  • `browser_cdp` et `browser_dialog` deviennent disponibles sans exposer CDP sur le réseau hôte

Backends non activés à ce stade :

  • aucun backend `image_gen`

Intégration Telegram préparée

Configuration locale maintenant active :

  • fichier dédié : `/home/loic/hermes-config/hermes.env`
  • allowlist utilisateur configurée sur l'identifiant Telegram de Loïc : `5910858583`
  • canal home Telegram préparé sur `5910858583`
  • bot dédié configuré : `@LoicHermesBot`

Important :

  • le token du bot dédié est maintenant renseigné dans `hermes.env`
  • il faut un bot distinct de `@LoicBoBBot` pour éviter le conflit `getUpdates` avec OpenClaw

Variables prévues dans `hermes.env` :

  • `TELEGRAM_ALLOWED_USERS=5910858583`
  • `TELEGRAM_HOME_CHANNEL=5910858583`
  • `TELEGRAM_BOT_TOKEN=...` configuré pour `@LoicHermesBot`
  • `TAVILY_API_KEY=...` configurée sans etre documentée en clair dans cette page

Procédure pour finaliser le second bot

Bot dédié déjà créé et validé :

  • nom : `Hermes`
  • username : `@LoicHermesBot`

Pour refaire la procédure sur une autre instance :

  • créer un bot dédié via `@BotFather`
  • renseigner `TELEGRAM_BOT_TOKEN` dans `/home/loic/hermes-config/hermes.env`
  • `systemctl --user daemon-reload`
  • `systemctl --user restart hermes.service`
  • vérifier `journalctl --user -u hermes.service -n 100 --no-pager`

Procédure de relance / diagnostic

Commandes utiles :

  • `systemctl --user status hermes.service --no-pager -l`
  • `systemctl --user status hermes-cdp.service --no-pager -l`
  • `systemctl --user restart hermes.service`
  • `systemctl --user restart hermes-cdp.service`
  • `journalctl --user -u hermes.service -n 100 --no-pager`
  • `journalctl --user -u hermes-cdp.service -n 100 --no-pager`
  • `ss -ltn | rg 8642`
  • `podman exec hermes /opt/hermes/.venv/bin/python -c "from tools.web_tools import check_web_api_key; print(check_web_api_key())"`
  • `podman exec hermes /opt/hermes/.venv/bin/python -c "from tools.web_tools import _get_search_backend,_get_extract_backend; print(_get_search_backend(), _get_extract_backend())"`
  • `podman exec hermes curl -fsS http://10.89.12.2:9222/json/version`
  • `podman exec hermes /opt/hermes/.venv/bin/python -c "from tools.browser_cdp_tool import _browser_cdp_check; print(_browser_cdp_check())"`

Interprétation rapide :

  • si le service tourne mais logue `No messaging platforms enabled`, le token Telegram n'est pas encore actif
  • si le service refuse de démarrer après ajout du token, vérifier d'abord le format du token et l'unicité du bot
  • si un conflit de token apparaît, s'assurer que le bot Hermes n'est pas le même que celui d'OpenClaw
  • si Telegram est bien pris en compte, les logs montrent une phase de connexion du type `Connecting to Telegram`
  • si `check_web_api_key()` renvoie `True` avec `search_provider=ddgs` et `extract_provider=tavily`, la recherche et l'extraction web sont activées
  • si `curl http://10.89.12.2:9222/json/version` renvoie un `webSocketDebuggerUrl` depuis le conteneur Hermes, la cible CDP est joignable
  • ne pas rétablir `--network container:hermes` : un conteneur CDP dépendant empêcherait Podman de recréer Hermes lors d'une mise à jour
  • si `_browser_cdp_check()` renvoie `True`, `browser_cdp` et `browser_dialog` doivent etre exposes par Hermes

Plan d'activation des potentiels

Checklist de suivi :

  • [x] sécuriser le runtime rootless + backups de config
  • [x] activer Telegram dédié
  • [x] basculer sur le modèle local `gemma4:e4b-it-q8_0_128k`
  • [x] activer `web_search` gratuit via `ddgs`
  • [x] choisir et brancher un backend `web_extract`
  • [x] fournir un endpoint CDP persistant pour `browser_cdp`
  • [ ] choisir et brancher un backend `image_generate`
  • [ ] décider si un contexte desktop dédié doit être exposé à Hermes

Intervention attendue de Loïc pour débloquer la suite :

  • `image_generate` : fournir un provider et un secret ou une auth exploitable dans le conteneur (`OPENAI_API_KEY`, `FAL_KEY`, ou auth Codex dans Hermes)

Données / emplacements à sauvegarder

  • `/home/loic/.config/containers/systemd/hermes.container`
  • `/home/loic/.config/containers/systemd/hermes-cdp.container`
  • `/home/loic/.config/systemd/user/hermes-network.service`
  • `/home/loic/hermes-config/hermes.env`
  • `/media/loic/nem/hermes`

Sauvegarde

Avant modification de la config critique :

  • sauvegarder le quadlet Hermes
  • sauvegarder `hermes.env`
  • sauvegarder la persistance `/media/loic/nem/hermes`

Restauration

  • restaurer `hermes.container`
  • restaurer `hermes.env`
  • restaurer `/media/loic/nem/hermes`
  • recharger systemd user
  • relancer `hermes.service`

Rollback

Si l'intégration Telegram du second bot casse Hermes :

  • recommenter `TELEGRAM_BOT_TOKEN` dans `/home/loic/hermes-config/hermes.env`
  • redémarrer `hermes.service`
  • revenir au backup du quadlet si nécessaire

Maintenance documentaire

Lors d'un changement d'image, de provider LLM, de chemin de persistance, de port local, de bot Telegram ou de stratégie d'allowlist, mettre à jour cette page et la trace centrale.

Trace documentaire

Cette page fait partie de Trace install tas.