v0.21.4

Hermes Agent v0.21.4


Aperçu

v0.21.4 — The One-Gateway Patch. Publiée le 21 septembre 2026. Depuis la v0.21.3 : 5 071 commits hors merge · 5 169 fichiers modifiés (+312 961 / −62 855) · 1 812 PR fusionnées · 2 116 issues fermées, mesuré au commit 4b8a8134009a8727a289bcabeb0019fedd353128.

Ce tag existe pour les consommateurs en aval : les images Docker, Hermes Cloud et les déploiements hébergés se construisent tous à partir du tag de release le plus récent, donc les corrections de cette fenêtre doivent atterrir dans une version stable avant que les utilisateurs du cloud puissent en profiter. Le corps de la release dit explicitement que le récapitulatif complet est renvoyé à la v0.22.0, qui documentera tout à partir de la v0.21.0 — points forts, domaines fonctionnels et crédits des contributeurs. Cette page consigne à quoi sert ce tag, et les changements de la fenêtre qui tournent déjà sur votre machine sans être documentés nulle part.


Points forts

1. Convergence de la topologie gateway : un seul gateway hôte par machine

Le plus grand changement architectural de la fenêtre. Exactement un processus hermes gateway run par hôte et par utilisateur OS, qui sert tous les profiles ; le gateway run d’un profile secondaire s’y rattache désormais (il affiche son PID et l’ensemble des profiles servis, puis sort avec le code 0) au lieu de démarrer un second processus. gateway start --all et restart --all désignent cet unique multiplexeur de l’hôte, et ne balayent plus jamais un gateway lancé par un autre profile.

L’ancien interrupteur gateway.multiplex_profiles: false est retiré : il est toujours analysé, mais il ne peut plus épingler un processus gateway distinct — il se résout comme une clé non définie et journalise un avertissement. Un profile nommé ne peut pas installer une nouvelle unité gateway sans --force, et --standalone est supprimé. Le chemin de mise à niveau passe par hermes gateway migrate --multiplex --dry-run pour lire le plan, puis par hermes gateway migrate --multiplex pour l’appliquer — la convergence est définie par la topologie, non par le drapeau de configuration, donc relancer la commande constitue le chemin de récupération après une migration interrompue. PR #118273, #118097, #118433.

2. Connecteurs : brancher une application depuis la conversation

L’utilisateur demande dans le chat de connecter Notion et le backend exécute toute la connexion : il collecte les valeurs, affiche le lien de connexion, et l’agent peut appeler le nouvel outil dans le même tour. Le desktop, hermes --tui et la CLI classique dessinent tous la même étape de configuration. Le dépôt embarque un catalogue de 65 serveurs MCP audités, dont 55 utilisent OAuth (#111008).

3. Surface CLI et agent : sortie structurée, skills épinglés, mode journal

  • hermes chat -q "..." --format stream-json émet des événements JSONL sur stdout (init / text / tool_use / tool_result / result), l’enveloppe terminale portant les statistiques de tokens et un code de sortie — la CI peut ainsi consommer une exécution sans gratter l’écran (#90411).
  • skills.auto_load dans config.yaml épingle des skills comme entièrement chargés au début de chaque nouvelle session, sur la CLI, la TUI, le gateway, le cron et les agents API ; l’injection est résolue une fois par agent et stable au bit près, donc le cache de prompt survit (#92048).
  • hermes sessions set-journal-mode delete|wal convertit state.db (ou un autre stockage via --db) entre les modes journal WAL et DELETE hors ligne : elle refuse tant qu’un processus détient le fichier, nomme chaque détenteur, et relit les octets d’en-tête pour vérifier (#117684).

4. Isolation des profiles : une série de corrections P1

« Un seul backend, de nombreux profiles » amplifie les erreurs de portée, et cette fenêtre en a refermé un lot. #118275 fait que chaque route REST respecte le profile nommé par la requête — auparavant, POST /api/memory/reset?profile=worker_beta supprimait le MEMORY.md du profile de lancement, et les routes destructrices renvoient désormais 400 pour une cible non nommée sur un hôte multi-profile. #118373 rétablit la résolution OAuth du profile racine pour les profiles nommés, ce qui corrige les échecs No Codex credentials stored après mise à jour. #118246 fait que le Desktop se rattache au backend hôte au lieu de lancer un hermes serve par profile.

Améliorations

  • mcp.discovery_concurrency borne la concurrence des connexions MCP au démarrage (défaut 4, 0 pour illimité) : avec 8 serveurs stdio, la pointe mesurée passe de 8 à 4, ce qui élimine la tempête de processus (#117956).
  • Messages privés non autorisés à trois états : gateway.unauthorized_dm_behavior gagne decline, avec unauthorized_dm_decline_message pour le texte, et des surcharges par plateforme.
  • Fenêtre temporelle de session_search : nouvelles bornes after / before (dates ISO ou durées relatives comme 7d / 24h / 2w), plus une nouvelle tentative à correspondance OR assouplie quand la correspondance stricte ne trouve rien.
  • Desktop : sélecteur de police chat/interface (#111226), réduction dans la zone de notification (#118441), convocation du HUD par appui sur un modificateur (#118446), un tiroir de pile d’état par conversation (#118407), la désinstallation de plugin et la mise à jour du moteur local en un clic.
  • Un seul redémarrage de gateway par mise à jour : hermes -p X update et hermes -p Y update redémarrent le gateway hôte une seule fois à eux deux, la notification atteignant chaque profile servi (#118108).
  • Mises à jour du catalogue : LTX 2.5 et Kling O3 Standard rejoignent la famille vidéo FAL ; le catalogue de plugins a gagné une série de plugins communautaires, et chaque plugin et auteur dispose désormais de sa propre page, avec le README figé sur un commit audité.

Corrections

  • Un 429 du gateway managé sur image_generate et sur la vidéo FAL est reconnu comme une limite de débit et retenté une fois, au lieu de signaler que « le modèle n’est peut-être pas encore activé » (#118311).
  • Une notification post-mise à jour adressée à une plateforme qui ne se connecte jamais cesse de réessayer au lieu de journaliser toutes les 2 secondes à l’infini (#118312).
  • L’appel de titre automatique n’entre plus en course avec la réponse du tour sur un serveur de modèle auto-hébergé à emplacement unique (#117494).
  • Quand un provider rejette une image, seule la copie de la requête est dépouillée — la session n’est plus marquée comme non prise en charge par la vision (#118316).
  • Le TimeoutError d’un worker de compression n’est plus confondu avec un timeout de sondage (#118319) ; l’entretien des sessions tourne sur son propre pool, il ne peut donc plus affamer les corps de tour (#118318) ; l’historique de conversation survit à la récupération du codec ASCII (#118313).
  • Le nettoyage en lecture seule des objets git sous Windows (checkpoints, plugins, catalogue MCP, distributions de profile) n’échoue plus (#117609).

Mise à jour

hermes update                      # installations git
# Docker / Hermes Cloud : les images se construisent depuis ce tag
docker pull nousresearch/hermes-agent:v2026.9.21

Sur une machine qui fait tourner plusieurs profiles, commencez par hermes gateway status, puis lisez une fois hermes gateway migrate --multiplex --dry-run.

← Hermes Agent Changelog