Hermes Agent v0.20.4
Aperçu
v0.20.4 — La release Glass. Publié le 18 août 2026. ~74 PR fusionnées · ~146 commits · ~265 fichiers modifiés (+21,697 / −2,217) depuis v0.20.3.
Un jour après le patch de la résilience est arrivée la fenêtre que personne n’avait demandée et que tout le monde espérait : le bureau arrête enfin de vous faire la guerre. La vedette, c’est Glass — un mode translucide macOS qui floute la fenêtre sans délaver le texte — et autour s’installent une barre latérale SESSIONS|BOTS à onglets permanents, un roster de bots enfin rangé (masquer, afficher, dissoudre), des discussions de groupe en Bot Mode qui ne perdent plus les tours de longue durée, un scan conseil NVIDIA SkillEvaluator à chaque installation de skill, le durcissement de l’envoi de médias cron (timeout configurable, pièces jointes survivantes aux exécutions manuelles), des correctifs de contention SessionDB qui débloquent les gateways coincés, un hermes update qui dit la vérité sur les branches parquées, et des notifications Kanban natives.
Il s’agit d’un patch release, les notes officielles sont donc brèves et la documentation complète et organisée arrivera avec v0.21.0. Cette page couvre les parties les plus précieuses de cette fenêtre.
Points forts
1. Glass sur le bureau — une translucidité qui reste lisible (macOS)
La translucidité des fenêtres correspondait autrefois à l’opacité native de la fenêtre, ce qui estompait toute la fenêtre — texte compris — si bien que quiconque avait un fond d’écran chargé devait en pratique la fixer à 0. Glass donne au curseur une seconde interprétation sur macOS : la fenêtre reste opaque au niveau natif, et ce sont les surfaces de fond du renderer qui s’amincissent par-dessus le matériau de vibrancy que chaque fenêtre de discussion porte déjà. Vous obtenez un flou mat pendant que le texte, les cartes, les popovers et le composer conservent tout leur contraste (#88744).
Une fois Glass activé, trois commandes le façonnent :
- Intensité — le même curseur, sur toute la plage. Au maximum, la teinte disparaît complètement : un flou nu, non teinté, le texte et les cartes restant opaques.
- Frost — Deep / Soft / Bright / Glare. macOS n’expose aucun réglage de rayon de flou : le matériau de vibrancy est donc la commande de frost.
- Zone — toute la fenêtre, ou la barre latérale seule (la forme du Finder : rail de verre, colonne de contenu opaque).
En régler un déclenche l’aperçu : l’overlay des réglages recouvre exactement l’effet que son curseur contrôle, si bien que maintenir le curseur estompe l’overlay et que la fenêtre en direct devient l’aperçu. Les nouveaux profiles macOS démarrent désormais avec Glass présélectionné — l’intensité reste par défaut à 0, donc rien ne change visiblement tant que vous ne bougez pas le curseur, et les profiles délibérément réglés sur « clair » restent clairs. Windows et Linux voient exactement le même curseur qu’aujourd’hui (#88956).
2. La barre latérale SESSIONS | BOTS devient une bande d’onglets — et les bots peuvent être masqués
La barre latérale gauche du bureau démarre désormais toujours avec SESSIONS | BOTS en onglets côte à côte dans une même zone. Le volet Bots porte un invariant de dock renforcé : lors de la première passe d’adoption de chaque démarrage, toute disposition empilée Sessions-par-dessus-Bots est relogée en onglet central — cette disposition ne doit plus jamais survivre à une mise à jour (#88872).
Le roster est aussi plus rangé : clic droit sur une ligne de bot → Hide Bot le retire du roster et de la bande des actifs (sans toucher aux @mentions, à l’appartenance aux groupes ni aux discussions ouvertes), et un bouton œil dans l’en-tête — affiché uniquement tant qu’au moins un bot est masqué — révèle les bots masqués en grisé, avec clic droit → Unhide Bot. L’état masqué se synchronise entre machines via profile.yaml ui_meta (#88800).
3. Les discussions de groupe en Bot Mode ne perdent plus les tours de longue durée
Un tour de membre d’une discussion de groupe était autrefois soumis à un délai fixe de 3 minutes ; un tour qui le dépassait renvoyait null, ce que la boucle round-robin traite comme un passage — si bien qu’une réponse terminée à la 7e minute n’avait nulle part où aller. Désormais, le délai s’étend tant que la session du membre signale visiblement inflight/running, plafonné à 20 minutes, et un tour qui expire quand même enregistre une base stranded récoltée dans la salle à la prochaine frontière de tour — en retard, jamais perdue, survivant aux rechargements de fenêtre (#88885). Autour : les messages des discussions de groupe rendent le Markdown (#88553), le routage des groupes inter-machines survit aux changements de connexion (#88921), un bot peut siéger dans plusieurs discussions de groupe à la fois (#88980), les discussions de groupe sont des lignes de premier rang façon Discord qui s’ouvrent dans la fenêtre principale (#88738), et elles peuvent enfin être dissoutes depuis l’interface (#88659).
4. NVIDIA SkillEvaluator : un second avis conseil à l’installation des skills
hermes skills install exécute désormais NVIDIA SkillEvaluator Tier 1 (PII, contrebande unicode, lint de scripts) comme scan conseil à chaque installation depuis le hub — les constats sont affichés avec file:line avant la confirmation d’installation, et l’installation se poursuit toujours. C’est délibérément un simple avertissement : le scanner PII en amont a des classes de faux positifs connues (syntaxe SSH comme [email protected], e-mails d’exemple dans la documentation, références op:// du gestionnaire de secrets), si bien que les constats éclairent votre décision sans la bloquer. Les constats de classe secrets (clés privées, clés cloud, jetons, chaînes de connexion avec identifiants) s’affichent en rouge avec un avertissement de revue explicite. Le scan est facultatif — sans le binaire skillevaluator, il dégénère en no-op silencieux — et peut être désactivé avec skills.tier1_advisory: false (#88573).
5. Durcissement de l’envoi de médias cron
Trois lacunes de livraison cron ont été comblées dans cette fenêtre :
- Timeout configurable : l’envoi des pièces jointes média avait une fenêtre fixe de 30 secondes que les gros exports (audio TTS long, gros PDF) faisaient exploser, journalisant un échec sans rien après les deux-points. Le timeout est désormais
HERMES_CRON_MEDIA_SEND_TIMEOUT→cron.media_send_timeout_seconds→ 300 s par défaut, et les timeouts enregistrent toujours une raison d’échec non vide (#88787). - Les exécutions manuelles ne perdent plus les pièces jointes :
hermes cron run <job-id>pouvait livrer le texte d’un job tout en laissant tomber silencieusement ses pièces jointes PDF/image et quand même rapporter un succès — l’expéditeur autonome ne signalait les échecs d’upload que danswarnings, que personne ne lisait. Les échecs de pièces jointes sont désormais visibles dans le statut d’exécution sur les deux voies de livraison (#88631). - Les déclenchements manqués sont visibles : quand le chemin de déclenchement hébergé ne peut pas atteindre le gateway, le job reçoit une estampille durable
last_fire_erroraffichée danscronjob list,hermes cron listet le dashboard — effacée à la prochaine exécution réussie (#88555).
6. SessionDB cesse de bloquer la boucle d’événements
Une flotte d’entreprise est tombée sur un gateway qui ne pouvait plus remonter : un arrêt sale en course avec une seconde instance faisait bloquer chaque redémarrage dans la migration de schéma v25 sur le thread de la boucle d’événements, le watchdog de vivacité de la boucle déclenchait la sortie 75, et le superviseur redémarrait droit dans le même état. SessionDB (initialisation du schéma + migration contre un state.db disputé) n’est plus jamais construit sur le thread de la boucle d’événements : en cas d’échec du cache, il démarre un bootstrap d’arrière-plan one-shot et attend jusqu’à 250 ms — une initialisation saine se termine dans la fenêtre, une initialisation disputée dégénère en None (tous les appelants le gèrent déjà) avec la boucle bloquée bien en dessous du timeout de sonde du watchdog (#88753).
7. hermes update dit la vérité sur les branches parquées
Sur un checkout source parqué sur une branche de fonctionnalité, hermes update faisait autrefois stash, sync, imprimait ✓ Code updated! — et laissait le checkout sur la branche périmée sans aucun des nouveaux codes de main. Il rebascule désormais automatiquement sur main quand la branche parquée peut être quittée sans risque prouvé (arbre propre + entièrement fusionnée), prévient fort et marque la mise à jour du code SKIPPED dans le cas contraire, et les lignes de résumé portent la vraie branche + le short-sha de HEAD pour que la dérive soit visible d’un coup d’œil :
✓ Update complete! [main @ 30fcf9580]
(#88928)
8. Les tâches Kanban vous préviennent nativement
Le bureau déclenche désormais une notification native du système d’exploitation quand une tâche Kanban se termine, atteint un blocage ou échoue — l’ensemble complet des événements du terminal (completed, blocked, gave_up, crashed, timed_out, block_loop_detected) avec une sévérité par type, si bien qu’un worker coincé sur un blocage pendant que vous êtes dans une autre app ne meurt plus en silence. Contrôlé par Réglages ▸ Notifications ▸ Notifications de plugins (#88765).
Améliorations
- Quarantaine du scan des skills de projet et héritage de confiance non interactif (sécurité) : les skills de projet sont désormais mis en quarantaine et analysés contre l’injection au moment du chargement, et les surfaces non interactives (cron/API/ACP) héritent de la décision de confiance humaine par dépôt au lieu d’inviter à confirmer ou d’accorder une confiance automatique — complétant les derniers éléments skills de l’épopée des skills locaux au projet (#88643).
- Les tours one-shot persistent : les tours one-shot
hermes chat -Q/-qpersistent désormais dans la session reprise — y compris la messagerie bot-à-bot de Bot Chat (#88763). - Les salles de discussion de groupe en Bot Mode affichent les photos de profile (#88746) ; les sessions Bot Mode masquées nées de la CLI restent hors de la barre latérale globale des sessions (#88677).
- Page de réglages Gateways du bureau : Gateway + Connexions s’unifient en une seule page au niveau machine (#88735, #88812) ; une seule ligne de roster par bot même quand un backend s’enregistre sous deux adresses (#88828).
- Providers : Muse Spark 1.2 rejoint le sélecteur organisé d’OpenRouter (#88600), et
api.meta.aipasse par l’API Responses pour la mise en cache des prompts (#88601).
Corrections
- Blocage du thread de la boucle d’événements SessionDB (voir le point fort 6) ; la fuite d’alias de modèle virtuel est colmatée à l’écriture, à la lecture et au cache de récupération (#88761) ; les sessions multiplexées sont désormais stockées dans le
state.dbdu profile propriétaire, pas à la racine (#88734). - La suppression de bot/profile sous Windows ne se solde plus par une erreur WinError 32 — la mémoire est libérée avant la suppression du répertoire (#88727).
- L’adaptateur OpenAI tolère les objets de réponse clairsemés ; le relay déballe les flux complétés paresseux et utilise les noms d’opérations managées canoniques (#85581, #85579, #85582).
- Bureau : plus de défaut local fantôme sur les bureaux de gateways distants (#88554) ; les profiles supprimés cessent de se reconnecter et les 404 en plein changement ne sont plus traités comme une suppression de session (#88638, #88699) ; le volet Bots ouvre toujours le Bot Chat canonique épinglé (#88690).
Mise à jour
hermes update
Après la mise à jour, lancez hermes doctor pour vérifier l’installation et redémarrez le gateway (hermes gateway) pour que les changements de plateforme prennent effet. Utilisateurs macOS : le mode Glass apparaît dans Apparence ▸ Translucidité de la fenêtre une fois que l’application de bureau s’est actualisée.