« Trace install tas - Hermes Agent » : différence entre les versions
Activation de web_extract via Tavily et mise a jour de la checklist Hermes |
Documente l activation de browser_cdp sur Hermes |
||
| 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 | ||
| Ligne 18 : | Ligne 20 : | ||
Capacités encore bloquées ou partielles : | Capacités encore bloquées ou partielles : | ||
* [ ] `image_generate` | * [ ] `image_generate` | ||
* [ ] `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 63 : | Ligne 64 : | ||
* 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` | * clé API Tavily injectée via `hermes.env` le `13 juillet 2026` | ||
* service `hermes-cdp.service` attaché au namespace réseau du conteneur Hermes le `13 juillet 2026` | |||
== Modèle LLM principal == | == Modèle LLM principal == | ||
| Ligne 75 : | Ligne 77 : | ||
* `web.search_backend: ddgs` | * `web.search_backend: ddgs` | ||
* `web.extract_backend: tavily` | * `web.extract_backend: tavily` | ||
* `browser.cdp_url: http://127.0.0.1:9222` | |||
Conséquences : | Conséquences : | ||
* `web_search` devient disponible sans clé API | * `web_search` devient disponible sans clé API | ||
* `web_extract` devient disponible via Tavily pour les URLs HTTP/HTTPS et le rendu markdown | * `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` | ||
== Intégration Telegram préparée == | == Intégration Telegram préparée == | ||
| Ligne 116 : | Ligne 119 : | ||
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 /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://127.0.0.1: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 128 : | Ligne 136 : | ||
* 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` et `extract_provider=tavily`, la recherche et l'extraction web sont activées | * 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://127.0.0.1:9222/json/version` renvoie un `webSocketDebuggerUrl` depuis le conteneur Hermes, la cible CDP est joignable | |||
* 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 136 : | Ligne 146 : | ||
* [x] activer `web_search` gratuit via `ddgs` | * [x] activer `web_search` gratuit via `ddgs` | ||
* [x] 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` | ||
* [ ] 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 : | ||
* `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) | ||
== Données / emplacements à sauvegarder == | == Données / emplacements à sauvegarder == | ||
Version du 13 juillet 2026 à 19:13
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 : 13 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`
- Public HTTP : aucun par défaut
- Messagerie prévue : Telegram via un second bot dédié à créer
Ports
- `8642` local uniquement
Exécution / runtime
Quadlet systemd user : `hermes.container` ; unité générée : `hermes.service`.
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/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
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` attaché au namespace réseau du conteneur Hermes le `13 juillet 2026`
Modèle LLM principal
Configuration Hermes actuellement retenue :
- provider : `custom`
- backend : API Ollama locale sur `http://host.containers.internal:11434/v1`
- modèle par défaut : `gemma4:e4b-it-q8_0_128k`
- contexte cible : `131072` tokens
Outils et backends activés
Activation explicite actuellement retenue dans `config.yaml` :
- `web.search_backend: ddgs`
- `web.extract_backend: tavily`
- `browser.cdp_url: http://127.0.0.1:9222`
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://127.0.0.1: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://127.0.0.1:9222/json/version` renvoie un `webSocketDebuggerUrl` depuis le conteneur Hermes, la cible CDP est joignable
- 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/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.