Piloter son agent depuis un train : guide de terrain du WebUI communautaire

Vous êtes dans le train du retour quand la question vous frappe : ce cron job a-t-il vraiment tourné ce matin ? Le téléphone sort de la poche. Rien dans votre boîte de réception. Aucun bot Telegram configuré non plus. Vous attendez donc d’être à votre bureau — le temps que le dîner efface complètement la question.
Le problème n’est pas que Hermes ne puisse pas être utilisé à distance. C’est que « à distance » signifie le plus souvent assembler un tunnel plus un frontend, et la plupart des gens ne s’en donnent jamais la peine. Un projet communautaire compresse tout cela en trois commandes : Hermes WebUI, environ 18K étoiles, un backend Python avec du JavaScript simple côté front, aucune étape de build, aucun bundler, le tout tournant sur la configuration et les modèles Hermes que vous avez déjà.
Ce que c’est, et pourquoi l’installation vaut le coup
Vous retrouvez la disposition familière à trois panneaux : les sessions et la navigation à gauche, le chat au centre, un explorateur de fichiers d’espace de travail à droite. Les contrôles de modèle, de profile et d’espace de travail se trouvent dans le pied de saisie, ce qui les garde visibles pendant que vous tapez, et un anneau circulaire affiche l’utilisation du contexte en un coup d’œil. Tout le reste vit dans le Hermes Control Center, ouvert depuis un bouton en bas de la barre latérale.
La caractéristique principale, c’est une quasi-parité 1:1 avec la CLI : ce que vous savez faire dans un terminal, vous pouvez la plupart du temps le faire ici. Épingler, archiver et regrouper des sessions en projets ; rechercher et prévisualiser des skills, les modifier sur place ; éditer MEMORY.md et USER.md ; créer, mettre en pause et inspecter des cron jobs avec l’historique d’exécution et les alertes de fin ; changer et cloner des profiles ; l’autocomplétion des commandes slash comme /compress, /model, /new et /theme.
Sur un téléphone, c’est réellement responsive : la barre latérale se replie en un tiroir coulissant sous 640px, les cibles tactiles restent à au moins 44px, et l’explorateur de fichiers devient un panneau qui glisse depuis la droite. Il est aussi livré comme PWA installable, ce qui lui donne l’allure d’une application plutôt que d’une page web une fois posé sur votre écran d’accueil.
Trois commandes pour installer — et le prouver d’abord en local
git clone https://github.com/nesquena/hermes-webui.git hermes-webui
cd hermes-webui
python3 bootstrap.py
bootstrap.py s’occupe des parties pénibles : il détecte Hermes et lance l’installateur officiel s’il est absent, trouve ou crée un environnement Python avec les dépendances du WebUI, démarre le serveur et attend /health, puis ouvre votre navigateur sur un assistant de première exécution. Ajoutez --no-browser si vous préférez qu’il s’en abstienne.
Si vous préférez gérer un démon, le dépôt fournit aussi ctl.sh, plus commode sur une VM auto-hébergée parce qu’il n’a besoin ni de fuser ni de pkill :
./ctl.sh start # démon en arrière-plan, PID dans ~/.hermes/webui.pid
./ctl.sh status # PID, uptime, hôte/port liés, chemin des logs, /health
./ctl.sh logs --lines 100 # affiche la fin de ~/.hermes/webui.log
./ctl.sh restart
./ctl.sh stop
Le serveur se lie à 127.0.0.1:8787 par défaut — autrement dit, obtenez une session qui fonctionne en local avant de penser à l’accès distant. Le health check est toujours disponible pour vérifier à la main :
curl http://127.0.0.1:8787/health
Distant et mobile : deux chemins, dont aucun n’exige un port ouvert
La valeur sûre, c’est le tunnel SSH. Le serveur reste sur la boucle locale et vous l’atteignez depuis l’extérieur :
ssh -N -L 8787:127.0.0.1:8787 user@your-server
Ouvrez ensuite http://127.0.0.1:8787 dans votre navigateur local. Vous n’avez même pas besoin d’un client SSH de bureau sur le téléphone — beaucoup d’applications de terminal mobile savent maintenir un tunnel ouvert.
L’option confortable, c’est Tailscale. Placez le serveur et le téléphone sur le même tailnet et liez le service à toutes les interfaces :
HERMES_WEBUI_HOST=0.0.0.0 HERMES_WEBUI_PASSWORD='pick-your-own' ./ctl.sh start
Naviguez ensuite depuis le téléphone vers http://<server-tailscale-ip>:8787. Notez les deux conditions de cette seconde moitié : le mot de passe n’est pas optionnel, et le port 8787 ne devrait exister qu’à l’intérieur du tailnet — résistez à l’envie de l’ouvrir dans un groupe de sécurité cloud.
Sécurité : sans friction sur localhost, verrouillée dès que vous passez à distance
Le modèle de sécurité est rafraîchissant d’honnêteté sur son intention : l’authentification par mot de passe est désactivée par défaut, parce que l’accès localhost n’en a jamais eu besoin. Passer à distance, cela veut dire activer les choses vous-même.
HERMES_WEBUI_PASSWORDen variable d’environnement, ou un mot de passe défini dans le panneau Settings ;- passkeys / WebAuthn : connectez-vous avec le mot de passe, enregistrez une passkey dans Settings, et dès qu’il en existe au moins une vous pouvez abandonner le mot de passe pour un mode passkey uniquement (le mot de passe étant conservé comme voie de récupération) ;
- OIDC natif, configuré via
webui_oidc.issuer,client_id,allow_claimetallow_values— les quatre sont requis pour qu’OIDC s’active, et le démarrage vous avertit si la configuration est partielle ; - après connexion, vous recevez un cookie HTTP-only signé HMAC avec un TTL de 24 heures, des en-têtes de sécurité sur les réponses, une limite de corps POST de 20MB, et des assets CDN épinglés par des hashes SRI.
Un avertissement mérite l’attention : si vous le placez derrière un reverse proxy, n’utilisez pas l’authentification basique du proxy. Les mises à jour de la PWA récupèrent le service worker, et l’authentification du proxy bloque ces requêtes, ce qui laisse une application installée sur un écran blanc après une mise à jour. La documentation inclut les étapes de récupération — et c’est pourquoi Tailscale ou un tunnel est la voie recommandée.
Si vous êtes déjà rompu à la plomberie de l’accès distant, l’article sur OAuth via SSH peut vous épargner quelques heures.
Où sont les limites
Le bootstrap ne prend pas en charge Windows natif. Utilisez Linux, macOS ou WSL2. Un guide Windows natif maintenu par la communauté existe, mais vous y êtes livré à vous-même.
Le chat ne passe pas par un serveur API externe par défaut. Le WebUI exécute l’agent Hermes dans son propre processus, en lisant directement votre configuration HERMES_HOME. Si vous disposez déjà d’un endpoint compatible OpenAI, deux usages sont pris en charge : l’ajouter dans Settings comme provider personnalisé avec son URL de base et son token bearer, ou router le chat via un serveur Hermes Gateway API en cours d’exécution avec HERMES_WEBUI_CHAT_BACKEND=gateway. Le second chemin ne livre pas encore une délégation complète de la boucle d’agent — une issue est ouverte à ce sujet — donc considérez ce mode comme praticable, mais non identique à une exécution locale.
Les alternatives natives mobiles sont encore jeunes. Un dépôt d’application téléphone est apparu le 19 septembre avec un PRD et aucune implémentation, et il existe des expérimentations Android plus anciennes. Pour l’instant, le WebUI est la voie la plus mature et la plus activement maintenue, et il dispose d’une entrée dans notre annuaire de l’écosystème.
Quatre-vingt-dix minutes à partir d’ici
Retour dans le train : installez le WebUI, rejoignez Tailscale, ajoutez-le à votre écran d’accueil. La prochaine fois que vous vous demanderez si ce cron job a tourné, vous vérifierez depuis votre poche — et pendant que vous y êtes, demandez-lui de transformer les logs de build en échec en trois conclusions et de vous les envoyer.
Si Hermes lui-même n’est pas encore installé, commencez par le guide d’installation ; si vous voulez pointer votre bureau et vos clients distants vers un seul backend, la référence de la commande gateway couvre le sujet. Faire tourner un agent à distance devrait être la partie facile.