hermes@agent:~/.hermes$ cat hermes.md

Hermes Agent : le guide de référence du praticien (2026)

# Un guide de référence consacré à Hermes Agent, l’agent d’IA open source auto-améliorant de Nous Research : authentification auprès des fournisseurs, fichiers de configuration, système de compétences et utilisation comme passerelle de messagerie multiplateforme.

author: words: 57364 read_time: 287m updated: 2026-09-25 12:13
$ less hermes.md

TL;DR : Hermes Agent est un agent d’IA open source auto-améliorant développé par Nous Research. Il fonctionne comme une CLI et comme un gateway de messagerie multiplateforme, conserve sur disque une identité durable et une mémoire persistante, agrège des skills qui s’améliorent à l’usage et fonctionne avec n’importe quel fournisseur LLM compatible OpenAI — Nous Portal, OpenRouter, Anthropic, GitHub Copilot, z.ai, Kimi, MiniMax, DeepSeek, Qwen Cloud, Hugging Face, Google, xAI/SuperGrok ou votre propre endpoint auto-hébergé.1219 La version actuelle est la v0.21.5 (tag v2026.9.24, 24 septembre 2026), un correctif cumulatif de la branche v0.21 ; la section Nouveautés de la v0.21.5 présente les changements, puis les sections consacrées aux versions les répertorient de la plus récente à la plus ancienne.52 Pour la plupart des nouveaux utilisateurs, la principale difficulté concerne l’authentification auprès des fournisseurs : avec le tag v2026.9.24, Hermes propose 39 fournisseurs dans sa liste de sélection statique et l’étend automatiquement à partir de 38 plugins de fournisseurs intégrés, auxquels s’ajoutent les endpoints personnalisés et trois parcours d’authentification distincts (clé API dans .env, OAuth via hermes model ou endpoint personnalisé dans config.yaml).53 Le modèle d’authentification est la première chose à maîtriser : tout le reste dépend du fournisseur résolu.

Hermes Agent fonctionne comme un environnement d’exécution d’agent complet, et non comme une simple surcouche de chat. Il lit votre système de fichiers, exécute des commandes dans des backends sandboxés, extrait des données du Web, lance des sous-agents, exécute des tâches cron planifiées, communique avec Telegram/Discord/Slack/WhatsApp/Signal/Email depuis un seul processus gateway et crée ses propres skills à partir de son expérience.1 La CLI est une interface de terminal construite sur une boucle de conversation dans run_agent.py ; le gateway est un processus de longue durée qui transmet les messages des plateformes de messagerie à cette même boucle de conversation.3

La différence entre une utilisation occasionnelle et experte de Hermes repose sur cinq systèmes. Maîtrisez-les et Hermes deviendra un puissant multiplicateur d’efficacité :

  1. Résolution du fournisseur : comment les flux d’authentification sont associés aux appels API
  2. Hiérarchie de configuration : config.yaml + .env + auth.json + SOUL.md + AGENTS.md
  3. Système de tools et de toolsets : ce que l’agent peut faire, avec des autorisations propres à chaque plateforme
  4. Système de skills : la mémoire procédurale que l’agent crée et fait évoluer
  5. Gateway + cron + profiles : exécuter Hermes là où vous vivez, et pas seulement là où vous vous trouvez

Points clés

  • L’authentification auprès des fournisseurs suit trois parcours, pas un seul. Clé API dans .env, OAuth via hermes model/hermes auth ou endpoint personnalisé dans config.yaml. Choisissez le parcours adapté à votre fournisseur, pas celui qui vous semble le plus familier.
  • Une seule commande suffit pour changer de fournisseur. hermes model vous guide de manière interactive parmi tous les fournisseurs pris en charge, y compris les connexions OAuth, tandis que /model provider:model permet de changer de modèle en cours de session sans perdre l’historique.2
  • Deux fichiers constituent l’interface de configuration modifiable par l’utilisateur. ~/.hermes/config.yaml contient les paramètres et ~/.hermes/.env les secrets. auth.json, SOUL.md, MEMORY.md et skills/ sont gérés directement par Hermes : vous pouvez modifier SOUL.md manuellement, mais l’agent lui-même intervient sur le reste.4
  • Hermes succède à OpenClaw. Si vous effectuez une migration, hermes claw migrate importe automatiquement plus de 30 catégories d’état.5
  • Par défaut, les tâches auxiliaires utilisent votre modèle principal. La vision, la classification des approbations, la compression et les titres de session s’exécutent sous forme d’appels LLM « auxiliary » distincts et, avec ce tag, auto les dirige tous vers votre modèle de chat principal — aucune configuration n’est nécessaire, mais avec les modèles de raisonnement coûteux, ces tâches annexes augmentent sensiblement les coûts. Lorsque cela compte, affectez à chaque emplacement auxiliary.<task> un modèle rapide et peu coûteux.434

Chaque section ci-dessous s’appuie sur la documentation en amont disponible sur hermes-agent.nousresearch.com/docs et sur l’arborescence des sources à l’adresse github.com/NousResearch/hermes-agent. Chaque affirmation factuelle comporte une note de bas de page renvoyant vers la page précise en amont dont elle est issue.

Choisissez votre parcours

Ce dont vous avez besoin Où aller
Installer Hermes Installation — programme d’installation en une ligne ou étapes manuelles
Vous connecter à un fournisseur Authentification et fournisseurs — la section pour laquelle vous êtes ici
Changer de modèle en cours de session La commande hermes auth et Endpoints personnalisés et auto-hébergés pour la syntaxe de /model
Exécuter un LLM local Endpoints personnalisés et auto-hébergés — Ollama, vLLM, SGLang, llama.cpp, LM Studio
Connecter des plateformes de messagerie Gateway de messagerie — Telegram, Discord, Slack, WhatsApp, Signal, Google Chat, LINE, SimpleX Chat, ntfy, Buzz (28 dans le tableau comparatif de la documentation)
Écrire ou installer un skill Système de skills — divulgation progressive + hub de skills
Consulter la référence détaillée de chaque commande CLI Poursuivez votre lecture — ou accédez directement aux Commandes CLI

Fonctionnement de Hermes : le modèle mental

Hermes s’articule autour d’une boucle de conversation unique que chaque point d’entrée peut invoquer. Ces points d’entrée sont la CLI (cli.py), le gateway de messagerie (gateway/run.py), l’adaptateur ACP pour l’intégration aux éditeurs, l’exécuteur de traitements par lots et un serveur API.3 Tous finissent par appeler AIAgent.run_conversation() dans run_agent.py, qui :

  1. Construit le prompt système à partir de SOUL.md, MEMORY.md, USER.md, des skills, des fichiers de contexte et des instructions relatives aux outils via agent/prompt_builder.py (la réorganisation de septembre 2026 l’a déplacé dans le nouveau package agent/)3
  2. Détermine le fournisseur d’exécution via runtime_provider.py — c’est à cette étape que sont sélectionnés votre mode d’authentification, l’URL de base et le mode API3
  3. Appelle le fournisseur à l’aide de l’un des trois modes API : chat_completions, codex_responses ou anthropic_messages3
  4. Achemine tous les appels d’outils renvoyés via model_tools.py et le registre central des outils (tools/registry.py)3
  5. Répète la boucle jusqu’à ce que le modèle produise une réponse finale, puis enregistre la session dans SQLite avec FTS53

Il est essentiel de comprendre cette boucle, car chaque fonctionnalité — personnalités, mémoire, skills, compression, solution de repli — se rattache à l’une de ces étapes. Lorsque vous examinez une clé de configuration et vous demandez à quoi elle sert, la réponse est généralement : « C’est un réglage de l’étape 1, 2, 3 ou 4 de la boucle ci-dessus. »

Un cœur indépendant de la plateforme. Une seule classe AIAgent dessert la CLI, le gateway, ACP, l’exécution par lots et le serveur API. Les différences propres aux plateformes résident dans le point d’entrée, et non dans l’agent lui-même.3 C’est pourquoi les mêmes commandes slash fonctionnent dans le terminal et dans Telegram — elles sont acheminées depuis un COMMAND_REGISTRY partagé dans hermes_cli/commands.py.6

La structure des dossiers constitue le système. Hermes stocke tout sous ~/.hermes/ (ou $HERMES_HOME pour les profiles autres que celui par défaut) :4

~/.hermes/
├── config.yaml        # Settings (model, terminal, TTS, compression, etc.)
├── .env               # API keys and secrets
├── auth.json          # OAuth provider credentials (Nous Portal, Codex, Anthropic)
├── SOUL.md            # Primary agent identity (slot #1 in system prompt)
├── memories/          # Persistent memory (MEMORY.md, USER.md)
├── skills/            # Bundled + agent-created + hub-installed skills
├── cron/              # Scheduled jobs
├── sessions/          # Gateway session state
└── logs/              # agent.log, gateway.log, errors.log (secrets auto-redacted)

Chaque fichier ci-dessus remplit un rôle précis ; aucun ne fait double emploi. Si vous cherchez où Hermes stocke un élément donné, il se trouve dans l’un d’eux.


Nouveautés de la v0.21.5 (récapitulatif du 24 septembre)

Hermes Agent v0.21.5 (tag v2026.9.24, 24 septembre 2026) est la version actuelle, la troisième mise à jour cumulative légère de la branche v0.21.x : « Ce tag regroupe dans une version stable destinée aux utilisateurs en aval les quelque 460 PR fusionnées depuis la v0.21.4. » Les notes éditorialisées sont une nouvelle fois reportées à la v0.22.0. Voici les changements destinés aux opérateurs, vérifiés dans le code source au niveau de ce tag :5253

  • La mémoire Hindsight quitte l’arborescence principale. Le fournisseur Hindsight intégré et l’extra pip hermes-agent[hindsight] ont été supprimés ; Hindsight s’installe désormais depuis le catalogue de plugins et est maintenu par Vectorize ; les notes de version ne le mentionnent pas. Si votre configuration définit memory.provider: hindsight, hermes update installe le plugin du catalogue dans le répertoire d’accueil de chaque profile qui le référence. S’il manque encore, le premier démarrage de l’agent l’installe, sauf si security.allow_lazy_installs vaut false (dans ce cas, exécutez hermes plugins install hindsight). Les paramètres, les clés .env et les données de mémoire restent intacts. Consultez Fournisseurs de mémoire externes.
  • gateway.multiplex_profiles: false n’est plus pris en charge. Le gateway le remplace directement par true et affiche une seule fois un avis encadré. Un profile nommé qui doit conserver son propre gateway définit gateway.standalone: true dans son fichier config.yaml ; pour mettre hors ligne un profile desservi sans arrêter l’hôte, hermes -p <name> gateway stop le place désormais en attente. Consultez Gateway de messagerie.
  • Nouveaux modèles dans les sélecteurs Nous et OpenRouter : GPT-6 Sol et GPT-6 Luna (chacun avec une variante -pro), ainsi que Claude Opus 5.5.
  • La compatibilité des plugins reste inchangée : plugins.allow_deprecated_imports: true fonctionne toujours.

Mise à jour : hermes update ou la commande d’installation en une ligne ; les images Docker et Hermes Cloud sont construites à partir de nousresearch/hermes-agent:v2026.9.24.52

Nouveautés de la v0.21.4 (le deuxième correctif cumulatif)

Hermes Agent v0.21.4 (tag v2026.9.21, 21 septembre 2026) est le deuxième correctif cumulatif délibérément léger de la branche v0.21.x. Selon sa propre présentation : « Version corrective. Ce tag regroupe les quelque 1 800 PR fusionnées depuis la v0.21.3 dans une version stable et balisée destinée aux consommateurs en aval (images Docker, Hermes Cloud, déploiements hébergés). » La période écoulée depuis la v0.21.3 compte « 5 071 commits hors fusion » répartis dans « 5 169 fichiers modifiés », ainsi que « 1 812 PR fusionnées » et « 2 116 tickets fermés ». Par nombre de commits, il s’agit du deuxième plus grand intervalle entre deux tags de l’histoire du projet, derrière les 5 139 commits de la v0.21.1 ; par nombre de PR fusionnées, c’est le plus grand. Le récit éditorial est de nouveau reporté, dans les termes exacts suivants : « Les notes de version éditorialisées complètes couvrant cette période seront publiées avec la v0.22.0, qui documentera tout depuis la v0.21.0 » et « Rien de cette période n’est omis. » La note énumère toutefois ce qu’elle ne documente pas, et chaque élément ci-dessous a été vérifié dans le code source au niveau du tag ; lorsqu’un élément modifie une section existante de ce guide, le lien figure directement dans le texte.5051

  • Un gateway par hôte, et Desktop s’y rattache au lieu d’en relancer un. La règle est la suivante : un seul hermes serve et un seul hermes gateway run par hôte et par utilisateur du système d’exploitation, chacun multiplexant tous les profile. Elle est appliquée par une nouvelle couche singleton à l’échelle de l’hôte : un verrou d’hôte conservé pendant toute la durée de vie du processus gagnant, ainsi qu’un enregistrement de rendez-vous contenant (pid, createTime). Une deuxième invocation peut ainsi prouver que le propriétaire est bien le même processus toujours actif et s’y rattacher au lieu d’occuper un deuxième port. L’obsolescence est prouvée, jamais supposée, et l’application Desktop applique le même principe de son côté en se rattachant au backend déjà actif sur l’hôte plutôt que d’en lancer un deuxième. La section Gateway de messagerie détaille ce mécanisme.51
  • Les connecteurs deviennent une opération unique gérée par le backend, avec une seule carte de configuration. Un appel à l’outil manage_connections pilote sur le backend une machine à états de connexion reposant uniquement sur les données, tandis que Desktop, TUI et CLI l’affichent tous sous la forme de la même carte de configuration : un champ par identifiant manquant, le bouton d’action de la carte restant désactivé tant que tous les champs obligatoires ne contiennent pas de texte. Consultez la sous-section sur l’offre gratuite de Nous.51
  • --format stream-json : des exécutions ponctuelles lisibles par une machine. hermes chat -q ... --format stream-json émet un objet JSON par ligne de stdout pour les exécuteurs de CI et les orchestrateurs : un événement system/init, puis des deltas text / événements tool_use / tool_result, et enfin une enveloppe terminale result contenant le code de sortie, le texte final et les statistiques de tokens. Les diagnostics et l’identifiant de session restent sur stderr, la sortie des outils est limitée à 5 000 caractères par événement, l’option implique --quiet, exige -q ou --query-file (code de sortie 2 en leur absence) et ne peut pas être combinée avec --tui. Le tableau des options de hermes chat inclut cette option.51
  • skills.auto_load épingle des skills dans chaque session. Les noms répertoriés sous skills.auto_load dans config.yaml sont chargés intégralement dans chaque nouvelle session — CLI, TUI, gateway, cron et API de la même manière — et résolus une seule fois lors de la construction initiale du prompt. Une sous-section consacrée aux skills épinglés est ajoutée au système de skills.51
  • Une option decline pour les messages privés non autorisés. unauthorized_dm_behavior accepte désormais une troisième valeur en plus de pair et ignore : decline envoie un refus poli, puis ne répond plus à cet expéditeur pendant 24 heures. Consultez la section Autorisation et appairage des utilisateurs.51
  • mcp.discovery_concurrency limite les connexions de découverte MCP. La valeur par défaut est 4, tandis que 0 signifie « illimité » ; chaque serveur configuré se connecte toujours, mais ils ne le font plus tous simultanément. Consultez la section Intégration MCP.51
  • session_search prend en charge les bornes temporelles et une nouvelle tentative de rappel. Le schéma de découverte accepte des bornes after/before (au format ISO ou sous forme de durées relatives telles que 7d) et, lorsqu’une requête de plusieurs mots ne renvoie aucun résultat, une nouvelle tentative recherche N’IMPORTE LEQUEL des termes au lieu d’appliquer le ET implicite de FTS5 à tous les termes. Consultez la section Recherche dans les sessions.51
  • hermes sessions set-journal-mode delete|wal : le convertisseur de journal hors ligne. Il s’agit de la procédure en libre-service pour un fichier state.db bloqué dans le mauvais mode de journal SQLite — auparavant, il fallait exécuter manuellement PRAGMA journal_mode=DELETE. Arrêtez d’abord le gateway, le dashboard et chaque CLI : la commande refuse de s’exécuter tant qu’un processus étranger détient la base de données, effectue le basculement sans attendre la fermeture des processus qui l’ont ouverte, puis vérifie les octets d’en-tête SQLite. Windows ne dispose d’aucune analyse des détenteurs ; la commande y refuse donc de s’exécuter jusqu’à ce que vous transmettiez --force, après avoir vous-même arrêté tous les processus Hermes. hermes doctor renvoie désormais vers cette commande. La ligne hermes sessions de la section Commandes de premier niveau l’inclut.51
  • Desktop : un paramètre de police, des mises à jour du moteur en un clic et la désinstallation des plugins. Les paramètres accueillent un champ de famille de polices, conservé séparément pour chaque profile dans desktop.font_family : il remplace la police sans-serif du thème dans le chat et l’interface, la liste de suggestions commence par des polices favorisant l’accessibilité (OpenDyslexic, Atkinson Hyperlegible, Lexend), et une valeur vide laisse le thème décider. Le runtime géré du modèle local affiche un bouton « Mettre à jour le moteur » lorsqu’une mise à jour est disponible ; si celle-ci échoue, le bouton reste visible afin de permettre une nouvelle tentative directe. Enfin, le hub Plugins permet de désinstaller un plugin après confirmation dans une boîte de dialogue.51
  • Catalogues vidéo : LTX 2.5 et Kling O3. Le plugin vidéo FAL ajoute ltx-2.5 (le modèle audio-vidéo open source de Lightricks : audio natif, génération d’une vidéo à partir d’une image jusqu’à 20 s / 4K, préréglages de mouvement de caméra, offre économique — fal refuse les clips de plus de 10 s en 1440p/2160p) et kling-o3 (la gamme de pointe de Kuaishou, en offre premium : narration native à plusieurs plans, audio facultatif, 3 à 15 s).51
  • Le catalogue de plugins devient un répertoire distribué et un site web. Le répertoire plugin-catalog/ du dépôt est passé de 9 entrées dans v2026.9.14 à 228 pour ce tag — un YAML contrôlé par plugin, épinglé sur un SHA de commit précis — et le site de documentation génère désormais une page par plugin et par auteur, chacune affichant le README du plugin depuis le commit épinglé. Les dix plugins communautaires cités dans la version figurent tous dans le catalogue au niveau de ce tag. La section Système de plugins en fournit les détails.51
  • Et une vaste série de correctifs portant sur l’isolation des profile et du multiplexage, cron, kanban, Desktop et state.db, que la version se contente de mentionner comme une catégorie ; il reviendra à la v0.22.0 d’en établir le relevé éditorialisé.50

L’annulation de la compatibilité des plugins n’a toujours pas été intégrée durant cette période. COMPAT_MANIFEST.md, compat_manifest.json et les couches de compatibilité sont tous présents dans v2026.9.21 ; les seules modifications apportées à hermes_cli/plugin_compat.py pendant cette période sont un cache d’analyse à l’échelle du processus (un gateway multiplexé découvre les plugins une fois par profile servi, et la nouvelle analyse du code source de chaque plugin ajoutait environ 0,4 s par profile au démarrage) et l’utilisation de chemins de résultats au format POSIX sous Windows (#112576). La condition de date et l’échappatoire par booléen littéral restent inchangées : plugins.allow_deprecated_imports: true permet donc toujours de charger les plugins concernés. L’encadré sur la compatibilité de la section Système de plugins présente l’état actuel.42

La procédure de mise à jour reste inchangée : hermes update (pour les installations git) ou le programme d’installation shell pour les nouvelles installations ; les images Docker et Hermes Cloud sont construites à partir de ce tag (nousresearch/hermes-agent:v2026.9.21).50

Nouveautés de la v0.21.3 (le correctif du 14 septembre)

Hermes Agent v0.21.3 (tag v2026.9.14, 14 septembre 2026) couvre trois jours supplémentaires de main dans une note composée de deux éléments. Cette version a été publiée parce que les agents Cloud se mettent automatiquement à jour vers le tag de version le plus récent et que les correctifs de connexion au gateway distant devaient leur parvenir. (1) Les sessions distantes du dashboard ne sont plus révoquées par des rafales d’actualisation : les deux chemins d’actualisation du gateway (le contrôle par cookie et la route bearer native de Desktop) regroupent désormais les requêtes simultanées portant le même token d’actualisation rotatif en une seule opération. Ainsi, une rafale provoquée par la sortie de veille de Desktop ne peut plus rejouer auprès du Portal un token déjà renouvelé, déclencher la détection de réutilisation et révoquer toute la session. L’actualisation s’exécute par ailleurs en dehors de la boucle d’événements, de sorte qu’un fournisseur d’identité lent ne bloque plus /api/status. (2) Les processus de longue durée cessent de créer des handles d’écriture en double pour state.db : les lecteurs du gateway, du backend dashboard/desktop, d’ACP et de CLI se connectent en lecture seule, tandis que les processus d’écriture internes partagent le handle du registre. Statistiques de la période : « 1 036 commits hors fusion » répartis dans « 2 642 fichiers modifiés » et « 338 PR fusionnées ». Tout le reste est délibérément reporté : la version cite ce qu’elle ne documente pas (sélecteurs d’effort de raisonnement dans chaque sélecteur de modèle, PKCE OAuth d’OpenRouter, décodage HEIF/HEIC/AVIF, vague d’ajouts au catalogue FAL, tableaux collés dans Slack et API des sessions d’agents, refus du mode WAL de state.db sur les systèmes de fichiers inter-VM, entre autres) et s’engage à en fournir un relevé éditorialisé, dans les termes exacts suivants : « Les notes de version éditorialisées complètes couvrant cette période seront publiées avec la v0.22.0, qui documentera tout depuis la v0.21.0 » et « Rien de cette période n’est omis. »49

Et l’échéance de compatibilité des plugins est arrivée comme prévu. La suppression annoncée pour le 14 septembre 2026 par la v0.21.1 a pris effet sous la forme d’une condition de date dans le code distribué, et non d’une annulation dans le code : au niveau du tag v2026.9.14, hermes_cli/plugin_compat.py contient COMPAT_REMOVAL_DATE = 2026-09-14, et removal_in_effect() renvoie true à partir de cette date (ou dès que le fichier manifeste disparaît). Tout plugin externe concerné est donc désormais désactivé au chargement, avec l’avertissement rouge. Ce qui ne s’est PAS encore produit : l’annulation qui supprime réellement les anciens chemins d’importation. COMPAT_MANIFEST.md, compat_manifest.json et les couches de compatibilité sont encore tous présents au niveau du tag — ainsi que dans v2026.9.21 et sur main au 22 septembre — ce qui explique pourquoi plugins.allow_deprecated_imports: true fonctionne toujours comme échappatoire : les anciens chemins continuent d’être résolus dès lors que le chargeur est autorisé à poursuivre. Deux pièges : la clé doit être un booléen YAML littéral (le code n’accepte que le booléen True ; une chaîne entre guillemets telle que "true" ou "false" est considérée comme absente, conformément au commentaire du code « Literal boolean only »), et cette échappatoire disparaîtra dès l’intégration de l’annulation, puisque les chemins eux-mêmes n’existeront plus. L’encadré sur la compatibilité de la section Système de plugins présente l’état actuel.4249

Nouveautés de la v0.21.2 (la version corrective de state.db)

Hermes Agent v0.21.2 (tag v2026.9.11, 11 septembre 2026) vise avant tout à réparer ce que la v0.21.0 avait cassé. Les notes de version le disent sans détour : « La v0.21.0 comportait une refonte majeure de la gestion des connexions au stockage des sessions qui, sur certaines installations, a fragilisé state.db : des processus d’écriture secondaires annulaient mutuellement leurs verrous, des bases de données saines étaient signalées comme corrompues et une seule ligne défectueuse suffisait à faire échouer sessions list. Cette version élimine cette catégorie de problèmes et regroupe tout ce qui a rejoint main au cours des quatre jours suivant la v0.21.1. » Contrairement aux notes volontairement succinctes de la v0.21.1, celles-ci présentent leurs propres points forts ; les statistiques de cette période font état de « 947 commits hors fusion », répartis sur « 1 869 fichiers modifiés », et de « 312 PR fusionnées » provenant de « 140 contributeurs ». Quant au bilan éditorial de toute la série v0.21.x, il reviendra toujours à la v0.22.0.48

  • La campagne de fiabilisation de state.db : six PR et 44 problèmes résolus. Les recommandations destinées aux opérateurs figurent en premier dans les notes de version, et vous devriez également les suivre : si votre state.db a été endommagé sous la version 0.21.0 ou 0.21.1, exécutez hermes doctor — l’outil distingue désormais les dommages structurels de ceux affectant l’index de recherche en texte intégral, au lieu de tout qualifier de « corruption d’écriture FTS ». Il vous oriente aussi vers hermes sessions recover --inspect-only (hors ligne, non destructif et rattaché au profile ; cette commande vérifie la lisibilité des tables canoniques sans créer de base de données de sortie) lorsqu’une reconstruction ne suffit pas. La correction des causes profondes élimine tous les processus d’écriture secondaires du stockage : les gateways de profile écrivaient toutes les 5 secondes l’état des salons hébergés dans le state.db racine. Cette coordination réside désormais dans un fichier shared-state.db dédié, de sorte que les gateways de profile n’ouvrent jamais le stockage principal des sessions en écriture ; le dashboard tente d’abord une ouverture en lecture seule ; la protection du cycle de vie de cron passe par le registre des connexions suivies plutôt que par un appel brut à open() sur une base de données active (qui annulait les verrous POSIX du gateway — la recette classique pour corrompre SQLite) ; enfin, doctor --fix refuse tout checkpoint dont il ne peut garantir la sûreté. Au-delà des processus d’écriture : les dommages affectant l’index FTS dégradent désormais la recherche, puis entraînent une reconstruction ultérieure de l’index, au lieu de bloquer entièrement l’échange ; une ligne corrompue ne fait plus échouer sessions list, l’exportation ou les insights (les lignes défectueuses affichent ?, accompagné d’un avertissement indiquant la session concernée) ; les sessions ne se lient jamais à la base de données d’un autre profile et ne la consultent jamais ; enfin, une ouverture en lecture seule ne prend plus le verrou d’écriture, si bien qu’une exécution ponctuelle de hermes derrière un gateway très sollicité est passée d’un blocage suivi d’un échec après 4 à 20 s à 0,01 s.48
  • Renforcement de l’isolation entre plusieurs profiles. Depuis la v0.19.0, ce guide reprend l’affirmation du projet selon laquelle le routage par profile offre à chacun « une configuration, des skills, une mémoire et des secrets totalement isolés ». En v0.21.2, cette promesse comportait encore des failles, désormais corrigées : les bots des profiles secondaires héritaient des listes d’autorisation du profile par défaut, les adaptateurs pouvaient envoyer des identifiants à l’hôte du profile par défaut, les serveurs MCP via stdio recevaient les secrets du coffre-fort du profile par défaut, la livraison MEDIA: pouvait joindre le fichier .env, auth.json ou state.db d’un autre profile, les callbacks des webhooks et de Feishu pouvaient s’écarter du profile routé, et les profiles secondaires pouvaient récupérer le jeton Nous bearer d’un profile voisin dans les mémos propres au processus (#107609-#107630). Si vous exécutez plusieurs profiles sous un même gateway multiplexé, c’est dans cette version que la promesse d’isolation devient réellement effective.48
  • Le coffre-fort d’identifiants qui dissimule les mots de passe. L’agent peut désormais se connecter, payer et renseigner des adresses dans le navigateur à partir de 1Password, Bitwarden ou du coffre-fort local de Hermes sans jamais voir aucun secret. Les codes d’authentification à deux facteurs proviennent d’une clé d’authentification enregistrée (TOTP : une graine en base32 ou un URI otpauth://totp ; le protocole HOTP fondé sur un compteur est refusé) ou sont demandés dans votre interface utilisateur. Chaque backend transmet à l’agent la même structure — les métadonnées de connexion accompagnées d’un identifiant opaque associé à un espace de noms (vault_ en local, op:, bw:), le mot de passe n’étant récupéré qu’au moment de remplir le champ ; les gestionnaires externes restent verrouillés jusqu’à ce que vous les déverrouilliez pour la session, et le mot de passe principal « n’est jamais un argument d’outil, n’apparaît jamais dans argv et n’est jamais conservé ». Cette fonctionnalité s’appuie sur le travail effectué autour de SecretSource dans la v0.19.0, qui avait retiré les clés API des providers du fichier .env en texte brut ; le coffre-fort en fait maintenant autant pour les identifiants de navigation de l’agent.48
  • Un catalogue de plugins sélectionnés et épinglés par SHA. hermes plugins browse répertorie « toutes les entrées sélectionnées du catalogue de plugins », hermes plugins search interroge le catalogue et hermes plugins install accepte les noms du catalogue en plus des URL Git et des références owner/repo. hermes plugins pack complète l’ensemble avec des « ensembles de plugins déclaratifs et partageables » : un fichier hermes-pack.yaml unique épingle un ensemble de plugins sur des SHA de commit précis, pack install les déploie sous forme d’installations épinglées ordinaires tout en maintenant le consentement aux capacités séparément pour chaque plugin, pack export génère un pack à partir de l’installation actuelle et pack show permet d’en effectuer une simulation. Le bloc de commandes de la section Système de plugins contient les nouvelles sous-commandes.48
  • Offre gratuite de Nous et premier lancement guidé. Les nouvelles installations bénéficient immédiatement d’une inférence et de connecteurs gratuits, avec une seule commande pour se connecter ; /login fonctionne depuis une conversation et les outils des connecteurs (Gmail, Linear, Notion et les autres) sont accessibles par recherche au moyen de tool_search. Le premier lancement guidé de l’application de bureau est conditionné par HERMES_GUEST_ONBOARDING=1, et seule la valeur littérale 1 l’active : le propre test de l’application vérifie que 'true', '0' et une valeur vide le laissent tous désactivé. La décision prise au lancement est inscrite dans l’environnement du backend démarré afin qu’une valeur héritée ne puisse jamais s’y propager. Consultez Nous Tool Gateway.48
  • Fin des démarrages en rafale du backend de l’application de bureau. Bot Mode lançait auparavant un backend ou établissait une connexion avec celui-ci pour chaque profile au démarrage et à chaque actualisation de la liste ; survoler la liste des bots lançait un backend pour chaque ligne, et un changement de profile pouvait démarrer un doublon du backend principal. Tous ces problèmes ont été corrigés dans cette version.48

La procédure de mise à jour reste inchangée : hermes update depuis une installation existante, ou le programme d’installation shell pour une nouvelle installation.48

Nouveautés de la v0.21.1 (le patch récapitulatif)

Hermes Agent v0.21.1 (tag v2026.9.7, 7 septembre 2026) est volontairement succincte : une « version corrective » qui « regroupe l’état actuel de la branche main depuis la v0.21.0 pour les déploiements basés sur des tags et les utilisateurs en aval ». Le corps du texte fournit les statistiques de la période — « 5 139 commits hors fusion dans 4 364 fichiers modifiés (+601 014 / -768 419) » et « 632 PR fusionnées » — puis reporte la suite du récit : « Les notes de version complètes et organisées pour cette période seront publiées avec la v0.22.0. » Il s’agit donc de la plus grande période jamais couverte entre deux tags dans l’histoire du projet (aucune période antérieure entre tags adjacents ne dépasse les 2 790 commits hors fusion de v2026.7.20..v2026.7.30), publiée avec les notes de version les plus courtes. En attendant que la v0.22.0 en fournisse le compte rendu organisé, les six ensembles ci-dessous regroupent les changements qui influent sur votre utilisation de Hermes avec ce tag, chacun ayant été vérifié dans le code source.41

  • Le code source a été décomposé, et le délai de compatibilité des plugins a expiré le 14 septembre. La décomposition de septembre 2026 (PR #102117) a scindé les grands modules du dépôt en fichiers spécialisés : un nouveau package agent/ contient les composants internes de la boucle de conversation (214 modules de premier niveau, auxquels s’ajoutent sept sous-packages ; prompt_builder.py se trouve désormais dans agent/prompt_builder.py, tandis que run_agent.py reste le fichier d’origine de AIAgent), les analyseurs des sous-commandes de CLI ont été déplacés dans un package hermes_cli/subcommands/ (61 modules), la liste statique CANONICAL_PROVIDERS a été déplacée de hermes_cli/models.py vers hermes_cli/models_catalog_static.py (la liste elle-même reste inchangée : 39 entrées statiques, toujours complétées automatiquement à partir des 39 dossiers de plugins de fournisseurs inclus), et delegate_task a été réparti dans une douzaine de modules tools/delegate_tool_*. Les chemins d’importation internes ne constituent pas une API stable ; un nouveau fichier COMPAT_MANIFEST.md à la racine du dépôt réexporte donc 1 148 noms publics « moved-lazy » depuis leurs anciens chemins de module, chacun émettant un HermesPluginCompatWarning une fois par nom et par processus lors de sa résolution. Cette couche de compatibilité était temporaire, et sa suppression a pris effet comme prévu le 14 septembre 2026, six jours après le tag — non pas sous la forme d’un rétablissement du code, mais au moyen d’une condition de date déjà intégrée au code publié. Depuis cette date, tout plugin tiers concerné n’est pas chargé : la bannière de CLI, hermes doctor et hermes update affichent un avertissement rouge qui nomme le plugin désactivé, l’application de bureau affiche une fenêtre modale unique et hermes plugins list indique le motif. Si vous utilisez des plugins externes, vérifiez-les : hermes plugins compat <path> affiche chaque occurrence sous la forme file:line, avec l’ancien chemin -> le nouveau chemin, et renvoie le code de sortie 1 tant qu’il en reste (--json produit une sortie exploitable par une machine ; exécutez la commande sans argument pour analyser l’ensemble des plugins installés). La solution de secours pour un plugin dont l’auteur n’a pas encore effectué la migration consiste à définir plugins.allow_deprecated_imports: true dans config.yaml, et elle fonctionne toujours : le changement qui supprime réellement les anciens chemins d’importation n’a toujours pas été intégré au 22 septembre (vérification effectuée jusqu’au tag v2026.9.21 et sur main) ; les anciens chemins continuent donc d’être résolus dès que le chargeur est autorisé à poursuivre. Les détails sur les conséquences figurent dans la section Nouveautés de la v0.21.2 ci-dessus ; la section Système de plugins contient l’encadré sur l’état actuel.42
  • Les conversations du gateway ne sont désormais plus renouvelées par des minuteurs, quelles que soient les circonstances. La documentation sur le cycle de vie des sessions énonce désormais explicitement le contrat : « L’inactivité et le temps écoulé ne provoquent jamais le renouvellement d’une conversation. /new et /reset créent une limite explicite ; la compression du contexte continue de gérer les historiques longs. L’ancienne configuration des minuteurs est ignorée. Le type de données SessionResetPolicy existant est une donnée de compatibilité inerte, et non une politique appliquée à l’exécution. » Les limites sont explicites et définies par l’utilisateur ; si vous avez conservé des minuteurs de réinitialisation de session datant d’OpenClaw lors d’une migration avec hermes claw migrate, ils constituent désormais des données inertes. Consultez la section Gateway de messagerie.43
  • L’autorisation MCP bénéficie désormais d’un flux par code d’appareil. hermes mcp login <name> accepte à présent --flow {browser,device} : browser correspond au flux PKCE existant, device à une connexion par code d’appareil conforme à la RFC 8628 pour les machines sur lesquelles un rappel de navigateur n’est pas pratique, et cette option remplace la configuration oauth.flow du serveur. Cette période a également renforcé le reste de la surface d’authentification MCP : la propriété du profile est appliquée dans toutes les sessions OAuth, les caches de métadonnées OAuth mal formés sont ignorés au lieu de bloquer un serveur, et l’application de bureau relaie l’OAuth de MCP par l’intermédiaire de rappels locaux au client. Autre changement connexe : -t/--toolsets filtre désormais également les serveurs MCP configurés qui sont effectivement lancés ; une exécution ponctuelle de hermes -z -t <toolsets> évite donc le démarrage à froid des serveurs dont elle n’a pas besoin. Le bloc de commandes de la section Intégration MCP inclut maintenant login et reauth [--all], deux commandes antérieures à cette période, mais qui n’avaient pas encore été documentées ici.44
  • La délégation décrit désormais honnêtement le travail en arrière-plan. Six changements améliorent la fiabilité de delegate_task, tous relevés dans le code source de l’outil de délégation au niveau du tag. (1) Par défaut, un lot en arrière-plan renvoie UNE seule notification d’achèvement ; l’activation de delegation.independent_completions divise l’appel en unités d’achèvement : les tâches partageant une même valeur group sont réunies et signalées ensemble, tandis que chaque tâche non groupée est signalée individuellement à mesure qu’elle se termine. Ce comportement par défaut est intentionnel — le code source précise qu’une avalanche de notifications par tâche « fragmentait les orchestrateurs qui n’avaient rien prévu pour les gérer ». (2) Les processus en arrière-plan d’un enfant sont arrêtés lors de sa fermeture, sauf si l’enfant les transmet au parent avec process_manage(action="handoff") ; les processus restants non transmis sont nommés dans le résultat sous orphaned_processes, tandis que les processus enfants terminés sans que leur sortie ait jamais été lue apparaissent sous unread_completions, accompagnés de la fin de leur sortie. Selon la docstring du code source, le principe retenu est que le parent « doit l’apprendre de l’environnement d’exécution », plutôt que de se fier à l’affirmation « watcher running » d’un enfant. (3) delegation.fallback_providers devient une véritable option de configuration : null hérite de la chaîne du parent pour les enfants non épinglés, [] désactive le fallback, et un enfant épinglé par fournisseur, endpoint ou modèle ne bénéficie d’aucun fallback, sauf si ce paramètre en déclare un. (4) La chaîne de fallback de l’enfant est résolue au moyen du normaliseur canonique ; les entrées mal formées sont donc supprimées au lieu d’empêcher un lancement. (5) Un plantage au milieu d’une unité ne fait plus perdre les enfants ayant terminé : chaque enfant achevé d’une unité qui en comporte plusieurs est enregistré durablement sur la propre ligne de l’unité et reste présent dans le résultat récupéré en tant que résultat partiel. (6) Les subagents n’héritent jamais du niveau de cache des prompts d’une heure : un enfant délégué est ramené au niveau de 5 minutes, car le niveau d’une heure est tarifé pour une personne qui s’absente, et non pour une vague d’enfants exécutés en parallèle.45
  • Fournisseurs et modèles. Les catalogues accueillent GPT-6 Astra et Astra Pro d’OpenAI, avec les variantes de niveau de vitesse -fast/-flex (« prix multiplié par 2, niveau prioritaire » / « prix multiplié par 0,5, niveau flexible ») dans les catalogues Nous Portal et OpenRouter. Sur la route OAuth de ChatGPT/Codex, Astra est réservé selon le compte (seule la découverte en direct propre au compte peut l’annoncer) et bénéficie d’une variante facultative -900k dans le sélecteur, qui fait passer la fenêtre annoncée de 272K à environ 900K, valeur vérifiée en conditions réelles ; le suffixe n’est jamais transmis au serveur. S’y ajoutent : anthropic/claude-fable-5.1, google/gemini-3.7-flash et gemini-3.8-flash, qwen/qwen3.8-max-0902 et qwen3.8-flash, ainsi que la famille Muse Spark 1.3 de Meta (contexte de 1M, variantes de contributeurs incluses), accompagnée d’un plugin de fournisseur Meta muse-image pour la génération d’images. Tavily fait son apparition comme backend de recherche et d’extraction web (TAVILY_API_KEY ; le fonctionnement sans clé est possible lorsque Tavily est sélectionné via hermes tools). Un environnement d’exécution llama.cpp géré fait des modèles locaux une voie de premier ordre (binaires officiels, un seul llama-server supervisé, configuration en un clic depuis l’application de bureau), tandis que les fournisseurs de processus externes hors arborescence disposent de leur propre branche de résolution. Sur le plan opérationnel : les catalogues distants du sélecteur sont désormais actualisés toutes les 20 minutes (model_catalog.ttl_minutes, valeur par défaut : 20 ; l’ancienne clé ttl_hours n’est prise en compte que lorsqu’un utilisateur l’a explicitement définie).46
  • Application de bureau : annotez la page, contrôlez la session. Le navigateur intégré propose désormais un mode de commentaire : cliquez sur Annotate, puis sur n’importe quel élément de la page active (ou tracez une zone) et saisissez une note ; les commentaires enregistrés restent visibles sous forme de repères numérotés et n’envoient jamais de tour de conversation par eux-mêmes. Lorsque vous avez terminé, « Add N comments » transfère le lot vers l’éditeur, avec une capture d’écran recadrée pour chaque repère ; chaque commentaire associé à un élément comprend son sélecteur CSS, son balisage et les styles calculés pertinents pour la mise en page, afin que l’agent retrouve l’élément dans votre code source au lieu de le deviner à partir d’une image (les mots de passe, les valeurs masquées et les attributs évoquant des clés sont expurgés avant que le balisage ne quitte la page). Les lots plus volumineux sont regroupés par zone de la page : une vingtaine de commentaires deviennent ainsi quelques unités de travail qui touchent généralement des fichiers distincts — ce qui permet de les distribuer sans risque à des workers parallèles. Autour de cette fonctionnalité s’ajoutent : des commandes de session structurées, des commandes d’automatisation des sessions, la création de sessions par glisser-déposer, une vue d’importation de sessions pour les transcriptions provenant d’agents de programmation tiers, display.resume_last_session (valeur par défaut : true ; un démarrage à froid rouvre la dernière conversation ou page), une demande de consentement lors de la première ouverture proposant browser.use_real_profile lorsqu’un panneau Browser s’ouvre alors que cette option est désactivée, un catalogue intégré de skills facultatifs sous Capabilities -> Skills avec installation en un clic, ainsi qu’une nouvelle interface de bureau en russe (les 17 catalogues de langues de CLI restent inchangés).47

La procédure de mise à jour reste inchangée : exécutez hermes update depuis une installation existante, ou utilisez le programme d’installation shell pour une nouvelle installation. Il reviendra à la v0.22.0 de fournir le compte rendu organisé de cette période ; les ensembles ci-dessus regroupent les changements applicables au niveau de ce tag.41

Nouveautés de la v0.21.0 (The Pantheon Release)

Hermes Agent v0.21.0 (tag v2026.8.31, 31 août 2026) est la version actuelle regroupant les nouvelles fonctionnalités et constitue le récapitulatif de référence vers lequel toute la série v0.20.x renvoyait jusqu’ici : « Cette version rassemble tous les correctifs d’infrastructure des tags v0.20.1 à v0.20.6 ; ces étapes sont désormais intégralement documentées ici. » Elle s’inscrit dans la continuité de The Herald : « La v0.20.0 a fait de Hermes le héraut : il parlait et transmettait les messages aux autres agents. Dans la v0.21.0, les dieux se réunissent. » Voici les statistiques exactes : « Depuis la v0.20.0 : environ 5 800 commits · environ 2 475 PR fusionnées · environ 5 680 fichiers modifiés · environ 869 000 insertions · environ 135 000 suppressions · environ 2 100 issues clôturées · plus de 760 contributeurs ».35

La version est organisée par domaine fonctionnel ; ce résumé suit la même structure. Lorsqu’une fonctionnalité modifie une section permanente de ce guide, un lien est fourni directement dans le texte.

  • Bot Mode : vos agents forment désormais une société intégrée. Bot Mode, auparavant fourni par le plugin hermes-bots dans la version v0.20.3, devient une composante activée par défaut de l’application de bureau. Chaque profile d’agent reçoit un nom, un visage d’avatar déterministe assorti de commandes de génération aléatoire et de verrouillage, ainsi qu’une place dans une liste partagée ; vous pouvez créer des discussions de groupe dans le style de Discord, où plusieurs bots et vous-même échangez dans un même salon, mentionner n’importe quel bot avec @ depuis la zone de rédaction, puis attribuer un nom et une image aux salons. Le sous-ensemble de fonctionnalités comprend des cartes de messages entre agents indiquant leur auteur, des avis de remise côté expéditeur, une hydratation donnant la priorité à l’affichage pour des réveils instantanés, un volet Routines et une reconstruction fondée sur le système de conception de l’application. Comme l’indique la version elle-même : « Auparavant, le “multi-agent” désignait de la plomberie ; désormais, il ressemble à une application de chat remplie de collègues. »35
  • hermes peer : des messages privés de bot à bot entre vos agents. Tout agent Hermes peut envoyer un message à n’importe quel autre agent à l’aide de son identifiant, quels que soient les profiles et gateways, depuis le CLI ou au sein d’une conversation : demandez à votre bot de recherche de transmettre ses résultats à votre bot de programmation, puis consultez sa réponse là où vous vous trouvez. « Les réponses arrivent dans le Bot Chat canonique de chaque agent : les conversations entre agents sont donc durables et consultables, et non envoyées sans suivi. » La commande hermes peer (ajout, affichage et suppression de peers, ainsi que dm) figure dans le tableau des commandes de premier niveau.35
  • Des tâches cron qui se souviennent. Les tâches planifiées cessent d’avoir une mémoire de poisson rouge : les agents cron chargent et mettent à jour une mémoire persistante comme tous les autres agents, continuity=true transmet le résultat de chaque exécution à la suivante afin qu’un moniteur puisse éliminer les doublons par rapport à ce qu’il a déjà signalé, chaque tâche bénéficie d’un bloc-notes persistant, les tâches en mode moniteur ignorent entièrement le LLM lorsqu’aucun changement n’est détecté, l’effort de raisonnement peut être fixé pour chaque tâche et le résultat cron peut parvenir au Bot Chat canonique d’un bot, où celui-ci répond réellement. La section Tâches planifiées (Cron) documente désormais le fonctionnement exact de chacun de ces éléments pour ce tag.3537
  • Orchestration en direct des subagents. delegate_task se dote d’actions de contrôle : afficher les agents enfants en cours d’exécution, réorienter l’un d’eux à la volée ou l’arrêter prématurément tout en conservant son résultat partiel. Les résultats des agents enfants peuvent être validés par rapport à un schéma JSON, le coût de chaque délégation apparaît dans les résultats et les valeurs par défaut passent à 250 itérations par subagent et 10 agents enfants simultanés (les limites unifiées qui ont remplacé max_async_children dans la v0.19.0).3538
  • Le centre de commande MCP. Les serveurs MCP et le catalogue sont réunis sur une même page de l’application de bureau, avec import par glisser-déposer de type « collez n’importe quoi », vérifications d’état en arrière-plan vous invitant à vous réauthentifier avant l’échec d’un appel d’outil, vue superposée des coûts et de l’utilisation de l’ensemble du parc (estimation des tokens de schéma et utilisation sur 30 jours par serveur), ainsi que des liens profonds hermes:// permettant d’installer un serveur MCP après confirmation explicite. Consultez Intégration de MCP.35
  • Une vague d’améliorations pour le CLI. Ctrl+P ouvre une palette de commandes avec recherche approximative (également accessible avec /palette), le sélecteur /model filtre les résultats à mesure que vous saisissez du texte, /status affiche le mode de raisonnement, les approbations en attente et l’utilisation du contexte, tandis que la barre d’état peut afficher en temps réel le pourcentage de réussite du cache, la latence et le nombre de tokens par seconde, avec un réglage pour chaque champ. S’y ajoutent un arrêt d’urgence global, l’épinglage et le désépinglage des sessions, des textes indicatifs tournants dans la zone de rédaction et des animaux de compagnie dans le terminal. Précision concernant la nomenclature : la présentation de la version désigne le vérificateur d’approbation en mode simulation par hermes approval-check ; dans ce tag, cette fonctionnalité correspond à hermes approvals test — aucune sous-commande approval-check n’existe.3540
  • L’agent pilote le navigateur de l’application de bureau. Le navigateur intégré n’est plus une simple fenêtre que l’agent peut uniquement observer : Hermes y navigue, clique et lit directement son contenu, tandis que les pages peuvent être ouvertes dans votre navigateur système avec des menus contextuels complets pour les liens.35
  • Six nouveaux fournisseurs et une vague d’enrichissements du catalogue de modèles. Meta Model API (Muse Spark), CommandCode, Tencent TokenPlan, Nebius Token Factory, Ramp Router et Actual Computer. Trois d’entre eux (Meta AI, CommandCode et Actual Computer) avaient été intégrés lors de précédentes étapes de regroupement et figuraient déjà dans la matrice complète des fournisseurs ; la matrice inclut désormais Tencent TokenPlan, Nebius Token Factory et Ramp Router, ainsi que la nouvelle offre Alibaba Token Plan mentionnée dans la documentation. Les catalogues accueillent GLM-5.3-Flash, qwen3.8-max/flash, Gemini 3.7 Flash, MiniMax M3 free, Nemotron 3.5 Lightning et Muse Spark 1.2. Deux évolutions structurelles les accompagnent : model_overrides dans config.yaml vous permet de modifier la fenêtre de contexte ou la tarification de n’importe quel modèle sans attendre une nouvelle version, et les fournisseurs peuvent désormais être distribués sous forme de paquets installés avec pip et détectés par des points d’entrée ; un registre unifié de garde-fous de sélection avertit également, dans toutes les interfaces de sélection, lorsqu’un modèle s’entraîne sur vos données.3536
  • Renforcement généralisé de la sécurité. Toute écriture dans les fichiers protégés d’instructions des agents (AGENTS.md, skills et espaces de stockage de mémoire) nécessite désormais systématiquement une approbation, afin qu’un agent victime d’une injection de prompt ne puisse pas réécrire discrètement ses propres consignes permanentes ; une vaste campagne de masquage comble les failles de divulgation de secrets dans les erreurs du terminal, la lecture des fichiers .env, les checkpoints et les journaux ACP ; le système d’approbation reconnaît désormais les commandes Windows destructrices ; les autorisations macOS persistent après les mises à jour grâce à une identité de signature TCC stable (hermes desktop --setup-tcc-identity) ; enfin, l’entrée Blender du catalogue MCP et son skill ont été supprimés à la suite d’une compromission en amont. Consultez Renforcement de la sécurité pour connaître les détails propres à ce tag.3539
  • Maturation du gateway. Slack bénéficie de cartes dynamiques natives (réponses véritablement diffusées en continu, ainsi que cartes de plan et de tâches facultatives) et de la désactivation des aperçus de liens sortants ; Telegram reçoit un sélecteur intégré qui permet de rechercher chaque commande et chaque skill au moyen de @botname, en contournant la limite du menu de commandes de Telegram ; le canal de relais gagne en maturité (initialisation native des plugins, opérations sur les cartes dynamiques avec diffusion continue des brouillons, segmentation par plage de session et restauration de la transcription STT des messages vocaux) ; une socket de contrôle du gateway permet aux consommateurs du parc d’interroger le gateway et aux outils de mise à jour de le suspendre proprement au lieu d’arrêter brutalement toute son arborescence de processus ; enfin, le mécanisme de récupération des tours capture les piles des workers bloqués lorsque le watchdog se déclenche.35
  • Une vague de skills. Huit skills de productivité récupérés (document-to-action-items, meeting-action-items, email-inbox-triage, github-issue-to-pr, weekly-review-planning, competitor-news-monitor, product-price-monitor, social-media-content-calendar), des clients API dérivés de HAR (« observez une fois un site web, puis appelez directement son API caché sans navigateur »), publish-site, session-librarian, blocked-page-recovery, merge-reconciler, plan-interrogation, ainsi qu’un linter consultatif pour SKILL.md lors de la création.35

Annulé dans cette série (non livré) : le mode Model Council (/council) et le context engine DCP ont tous deux été intégrés, puis annulés ; le serveur gateway exclusivement WS (#94245) a été fusionné, puis annulé (#96118), de sorte que FastAPI reste sur le chemin de démarrage de l’application de bureau — en revanche, la relecture des événements marqués par un numéro de séquence (#94219) et la reconnexion sans perte de l’application de bureau via WebSocket ONT bien été livrées. Electron est revenu à la version 40.10.2. Si des contenus de la communauté consacrés aux versions v0.20.x mentionnaient l’un de ces éléments, sachez qu’ils ne figurent pas dans cette version.35

La procédure de mise à jour ne change pas : utilisez hermes update depuis une installation existante ou le programme d’installation shell pour une nouvelle installation. La sous-section récapitulative située sous la version The Herald ci-dessous demeure le relevé, tag par tag, des apports de chaque étape.35

Nouveautés de la v0.20.0 (version The Herald)

Hermes Agent v0.20.0 (tag v2026.8.3, 3 août 2026) était la version fonctionnelle précédant le regroupement complet opéré par la v0.21.0 ; les v0.20.1 (13 août) et v0.20.2 (16 août) sont des tags de stabilisation qui s’appuient sur celle-ci, tandis que les v0.20.3 (tag v2026.8.16.2, publiée le 17 août), v0.20.4 (tag v2026.8.18, 18 août), v0.20.5 (tag v2026.8.19, publiée le 21 août) et v0.20.6 (tag v2026.8.27, 27 août) poursuivent cette série de regroupements avec leurs propres lots de fonctionnalités — consultez la sous-section ci-dessous. La période écoulée depuis la v0.19.0 couvre environ 3 650 commits, 1 400 PR fusionnées et 1 200 issues clôturées grâce à plus de 650 contributeurs.55

Trois changements rendent obsolètes les instructions données dans les versions précédentes de ce guide. Lisez-les avant toute autre chose :

  • Node 26 est désormais requis. Le programme d’installation fixe NODE_VERSION="26" et refuse les environnements d’exécution plus anciens avec le message « Node.js … is too old (Hermes requires Node >=26). » Les programmes d’installation, heal et upgrade appliquent tous cette exigence. Notez que la page d’installation du site de documentation indique encore Node v22 — le script d’installation et les notes de version sont les sources les plus récentes et font autorité.55
  • pip et Homebrew ont été abandonnés, pas seulement dépréciés. Citation exacte : « brew + pip/PyPI wheel channels retired (shell installer / Docker / Nix are the supported channels). » Si votre installation repose encore sur pip ou brew, ce canal ne reçoit plus aucune version.55
  • La limite par défaut des itérations d’appel d’outils est passée de 90 à 500. Les longues exécutions autonomes ne se heurtent plus à une barrière artificielle, et tous les seuils de pression budgétaire ci-dessous sont calculés en fonction de ce nouveau plafond. read_file utilise également une limite par défaut de 2 000 lignes au lieu de 500.55

Le reste de la version :

  • Voix conversationnelle. TTS en streaming avec interruption vocale et mots d’activation traités sur l’appareil.55
  • A2A v1.0. Un plugin de protocole de communication entre agents, qui répond à la demande de longue date de l’issue #514.55
  • Webhooks sortants signés. hermes webhook ne prenait auparavant en charge que les événements entrants ; la v0.20.0 ajoute des webhooks de cycle de vie sortants signés par HMAC pour les événements de session, de tour et d’outil.55
  • Citations étayées. Un nouveau skill doté d’un mode de vérification des faits.55
  • Vague d’améliorations du CLI pour les utilisateurs avancés. !command exécute immédiatement une commande shell sans consommer de tour du modèle ; /init analyse le projet et crée ou met à jour un fichier AGENTS.md ; /diff affiche les modifications indexées, l’ensemble des modifications ou celles de la session depuis n’importe quelle interface ; /context détaille ce qui occupe la fenêtre de contexte ; /focus propose une vue aux sorties réduites permettant de récupérer les lignes masquées ; Ctrl+S met de côté une invite en cours de rédaction. hermes import-agent migre une configuration Claude Code ou Codex CLI en une seule commande.55
  • Ajouts à l’interface de gestion des secrets. Une source de secrets reposant sur une commande auxiliaire et compatible avec tous les coffres, la rotation des jetons en une seule commande avec des erreurs de démarrage exploitables, un cache de secours chiffré et facultatif pour Bitwarden, des clés injectées depuis un coffre et limitées au dossier personnel de chaque profile, ainsi que la parité des SecretRef ${env:VAR} entre config.yaml et la configuration MCP. Le modèle d’authentification à trois voies présenté ci-dessous reste inchangé.55
  • Démarrage à chaud plus rapide. Le démarrage à froid de hermes -w est passé d’environ 14 s à 1,8 s.55
  • L’application de bureau est devenue une plateforme. Des artefacts avec des cartes versionnées et un aperçu dynamique exécuté dans une sandbox, un SDK de plugins avec Kanban comme premier plugin de bureau, un raccourci clavier global de saisie rapide, plusieurs fenêtres d’interface graphique, un mode backend distant SSH et une connexion native conforme à la RFC 8252.55

Les regroupements des v0.20.3, v0.20.4, v0.20.5 et v0.20.6 (17-27 août)

Après la v0.20.0, le projet a adopté un rythme soutenu de regroupements assortis de tags, et ceux-ci ne se limitaient pas à la stabilisation. Les quatre ont reporté leurs notes éditorialisées de la même manière — chacun indiquait que « full curated release notes for this window will ship with v0.21.0 » — et la v0.21.0 les a désormais livrées : la section Nouveautés de la v0.21.0 ci-dessus constitue le récapitulatif éditorialisé de toute cette période (la version confirme que ces fenêtres « are fully documented here »). Les blocs ci-dessous sont conservés comme relevé contemporain de chaque tag — ils indiquent précisément les apports de chacun, que les notes éditorialisées regroupent.54233035

v0.20.3 (environ 250 commits et 125 PR depuis la v0.20.2) :

  • Migration vers le SDK MCP 2.x, avec prise en charge du protocole sans état du 28 juillet 2026. Hermes adopte la génération actuelle du SDK MCP et communique selon la révision sans état du protocole.54
  • Bot Mode est fourni sous la forme d’un plugin intégré (hermes-bots) qui embarque le protocole central de collaboration.54
  • Un plugin de fournisseur CommandCode rejoint le catalogue de fournisseurs.54
  • Contrats d’exécution Cua Driver 0.20 pour l’utilisation de l’ordinateur, ainsi qu’un renforcement de la gestion de l’environnement d’exécution Python des sous-processus (isolation de PYTHONHOME/PYTHONPATH).54
  • Fiabilité : autoréparation du planificateur cron (récupération après EMFILE, rapprochement des revendications obsolètes, réarmement des tâches bloquées), corrections des pertes de données lors du transfert de sessions, autoréparation des connexions au gateway distant depuis l’application de bureau et vague de portages dans l’écosystème (analyse de sécurité à l’installation des plugins, /worktree, préservation des modifications manuelles par /rollback, lecture des fichiers UTF-16).54

v0.20.4 (environ 146 commits et 74 PR depuis la v0.20.3) :

  • La surface en verre de l’application de bureau : effets de verre mat et de translucidité, avec un sélecteur de givre et une présélection pour macOS.54
  • Une barre latérale à onglets SESSIONS|BOTS permettant de masquer ou d’afficher chaque bot, ainsi que des corrections apportées aux discussions de groupe de Bot Mode (tours de membres de longue durée, rendu Markdown, routage entre machines).54
  • Analyse consultative NVIDIA SkillEvaluator Tier 1 lors de l’installation des skills — des vérifications de licence et de sécurité s’exécutent lorsque vous installez un skill.54
  • Renforcement de l’envoi de médias par cron (délai d’expiration configurable, pièces jointes lors des exécutions manuelles, signalement des déclenchements manqués), corrections de SessionDB concernant le thread de la boucle d’événements et les conflits d’accès, transparence de hermes update sur les branches mises en attente et notifications natives du système d’exploitation pour Kanban.54

v0.20.5 (environ 746 commits et 323 PR depuis la v0.20.4) :

  • Le niveau web sans clé : la recherche web fonctionne sur les nouvelles installations sans aucune clé API — une rotation gratuite entre 5 fournisseurs avec basculement en anneau.23
  • Une vague de finitions du CLI : sélecteur approximatif /model, palette de commandes avec Ctrl+P et /status plus détaillé.23
  • Bot Mode gagne en maturité : fils de discussion dans les salles de groupe, résumés de conversation repliables, avatars aux visages informes et pièces jointes PDF/fichiers par glisser-déposer.23
  • Outils pour les flottes et les worktree : reçus de hermes update, hermes update --plan (les notes de version parlent de vérification « fleet --plan » ; l’option appartient à hermes update, et non à une commande fleet, et l’aide de son analyseur indique qu’elle « Show the update plan and exit without changing anything »), ainsi que hermes worktree list/prune.2327
  • Les tâches cron bénéficient d’une mémoire persistante et d’un effort de raisonnement propre à chaque tâche, ainsi que de règles de discipline d’exécution et de protections contre le blocage de l’environnement d’exécution, inspirées des conclusions de l’évaluation Composio, d’un mécanisme de clarification à plusieurs questions, du fournisseur sans authentification et indépendant d’opencode, et d’améliorations des performances de l’application de bureau (hydratation de Bot Mode donnant la priorité à l’affichage, React Compiler dans les deux moteurs de rendu).23

v0.20.6 (tag v2026.8.27, 27 août — environ 1 313 commits et 525 PR depuis la v0.20.5) :

La version se décrit explicitement comme une « Patch release. This tag rolls up the ~525 PRs merged since v0.20.5 into a stable tagged release for downstream consumers », et sa propre description évalue cette période à environ 1 313 commits répartis sur quelque 1 557 fichiers (+177 113 / −21 682), soit environ 525 PR fusionnées.30 Voici les principales nouveautés mentionnées dans cette description :

  • Navigation avec le profile réel soumise au consentement — la navigation locale peut utiliser votre profile Chromium par défaut, avec sous Windows un processus de fermeture soumis à votre approbation.30
  • Le navigateur de l’application de bureau dispose de sa propre fenêtre système, ainsi que d’un moteur géré de mises à jour distantes SSH et d’un rail de profiles pour les flottes.30
  • Extension du catalogue MCP distant : plus de 50 serveurs hébergés par des fournisseurs et vérifiés en conditions réelles, notamment Cloudflare, Grafana Cloud, Better Stack et Railway.30
  • Chiffrement facultatif des secrets stockés par le trousseau du système d’exploitation — fini les demandes du trousseau macOS à chaque lancement.30
  • Nouveaux modèles dans les sélecteurs : GLM-5.3-Flash, MiniMax M3 free et MiniMax H3 Max video.30
  • Mise en cache des résultats avec TTL pour web_search/web_extract et tool_search à requêtes multiples avec recherche par racine lexicale.30
  • La compression lean-tail est désormais utilisée par défaut — la section Compression du contexte ci-dessous documente la configuration correspondant à ce tag.3031
  • Les backends de terminal sont devenus modulaires — consultez Backends de terminal.3032
  • Transparence des outils de mise à jour et des flottes : les outils de mise à jour suspendent les gateways au moyen du socket de contrôle au lieu de mettre fin à toute leur arborescence de processus, tandis que les installations gérées par image ou paquet refusent les mises à jour sur place non sécurisées.30
  • Accusés de réception durables des incidents cron avec des erreurs plus claires en cas de divergence du code, contrôles du déploiement des aperçus de liens Slack et identités de conteneur Docker partagées.30

La procédure de mise à jour reste inchangée : hermes update depuis une installation existante, ou le programme d’installation shell pour une nouvelle installation.542330

Nouveautés de la v0.19.0 (The Quicksilver Release)

Hermes Agent v0.19.0 (tag v2026.7.20, 20 juillet 2026) tire son nom de la vitesse du dieu messager lui-même : cette version repose avant tout sur la réactivité pure, avec une réduction d’environ 80 % du délai avant le premier token lors du premier échange, sur toutes les plateformes. Autour de cet axe central viennent s’ajouter la gestion de la facturation dans le terminal, la récupération des secrets depuis des gestionnaires de mots de passe, les approbations intelligentes par défaut, des sous-agents observables et une livraison des réponses résistante aux plantages. Depuis la v0.18.0, cette période est la plus importante de l’histoire du projet : environ 2 245 commits, 1 065 PR fusionnées, 3 300 issues clôturées et plus de 450 contributeurs de la communauté.56

  • Environ 80 % plus rapide avant le premier token, partout. Le délai à froid entre l’envoi et l’exécution est passé d’environ 4,3 s à 0,9 s sur le CLI, le gateway, la TUI, l’application de bureau et cron : la détection des fonctionnalités de Discord a été retirée du chemin critique, la vérification d’Ollama est ignorée pour les fournisseurs connus comme n’utilisant pas Ollama et les opérations bloquantes ont été supprimées de l’initialisation de l’agent. La latence perçue a également fait l’objet d’une optimisation spécifique : les modèles de raisonnement diffusent désormais leur réflexion en direct par défaut (display.show_reasoning est activé), tandis que la zone de réponse s’actualise à chaque token plutôt qu’à chaque ligne.56
  • Vague d’optimisations du rendu sur l’application de bureau et la TUI. L’application de bureau a bénéficié d’une refonte des performances répartie sur une vingtaine de PR : consommation du processeur divisée par 14 dans le séparateur de Markdown diffusé grâce à une analyse lexicale incrémentielle par blocs, diffs virtualisés dans le volet de révision, changement de session réactif même avec de longues transcriptions et suppression des nouveaux rendus de la barre latérale et des lignes d’outils à chaque token. La TUI affiche désormais le Markdown diffusé de manière incrémentielle, bloc par bloc.56
  • Les installations via pip et Homebrew sont obsolètes. Ces deux méthodes ont été qualifiées d’installations « héritées non prises en charge », dont la suppression était prévue. Cette suppression a depuis eu lieu dans la v0.20.0 : les canaux brew et pip/PyPI wheel ont été retirés ; seuls le programme d’installation shell, Docker et Nix restent pris en charge.5655
  • Les secrets peuvent provenir de votre gestionnaire de mots de passe. Une nouvelle interface extensible SecretSource récupère les secrets de Bitwarden et de 1Password (références op://) au chargement. Elle permet d’utiliser simultanément plusieurs coffres, avec un ordre de priorité déterministe, des avertissements en cas de conflit et la traçabilité de chaque variable : les clés API ne doivent donc plus nécessairement résider dans un fichier .env en texte brut. De futurs fournisseurs de coffres pourront être ajoutés sous forme de plugins.56
  • Les approbations intelligentes sont désormais activées par défaut. Lorsque Hermes souhaite exécuter une commande signalée, un réviseur LLM indépendant l’évalue au lieu de vous demander de confirmer chacune d’elles ; chaque verdict ne couvre que cette commande précise. Des règles de refus définies par l’utilisateur bloquent les commandes correspondantes, même en mode YOLO ; /deny <reason> transmet le motif de votre refus afin que l’agent rectifie son approche ; enfin, l’action d’approbation pre_tool_call du plugin, réintroduite avec des clés de règles, soumet un appel d’outil à la validation d’une personne.56
  • Facturation dans le terminal : /subscription et /topup. Gérez votre formule Nous Portal sans quitter le terminal : consultez votre offre et votre quota restant, visualisez précisément le coût d’un passage à l’offre supérieure ou la date d’effet d’un passage à l’offre inférieure, puis appliquez la modification avec possibilité de l’annuler. L’application de bureau bénéficie d’un onglet équivalent dans les paramètres de facturation.56
  • Observez les sous-agents travailler sans jamais perdre une réponse terminée. Les exécutions lancées par delegate_task produisent des fichiers de transcription en direct que vous pouvez consulter avec tail -f dès le démarrage des sous-agents : chaque appel d’outil, résultat et réponse diffusée figure dans un journal lisible dédié à chaque enfant. Les résultats des délégations en arrière-plan persistent après un redémarrage. Les réponses finales du gateway sont par ailleurs consignées dans un registre des obligations de livraison au sein de state.db, puis renvoyées au démarrage suivant si le gateway s’interrompt en cours d’envoi. L’option de configuration max_async_children est obsolète au profit de limites unifiées de concurrence des délégations.56
  • Un seul gateway, plusieurs profiles. Un gateway multiplexé unique partageant un même token de bot peut acheminer des guildes, canaux ou fils de discussion précis vers différents profiles, chacun disposant de sa propre configuration, de ses skills, de sa mémoire et de ses secrets entièrement isolés, avec une option de remplacement GATEWAY_MULTIPLEX_PROFILES. L’index de routage a été déplacé dans state.db ; sessions.json n’est désormais plus qu’un miroir hérité facultatif.56
  • Vague de nouveaux fournisseurs et modèles. Fireworks AI bénéficie désormais d’une intégration native (estimation des coûts et deuxième place dans le sélecteur de fournisseurs), aux côtés de DeepInfra et Upstage Solar. Les catalogues accueillent GPT-5.6 (Sol/Terra/Luna + Pro, intégré de bout en bout), grok-4.5 (disponibilité générale), kimi-k3 (kimi-k2.x est retiré) et Claude Sonnet 5 entièrement intégré. Un indicateur enabled: false propre à chaque fournisseur et la configuration excluded_providers retirent les fournisseurs inutilisés des sélecteurs /model et du processus de résolution.56
  • L’intensité du raisonnement devient réglable. Les nouveaux niveaux d’effort max et ultra sont disponibles sur toutes les interfaces, avec des réglages propres à chaque modèle dans la configuration, un niveau d’effort par emplacement dans les préréglages MoA (les conseillers approfondissent leur réflexion tandis que le synthétiseur reste rapide), un effort par tâche pour les modèles auxiliaires et une commande /reasoning limitée à la session dans le CLI.56
  • Évolutions du CLI et de MCP. hermes sessions export exporte aux formats Markdown, Quarto, HTML, prompt uniquement et trace Hugging Face, avec un nettoyage facultatif via --redact ; /model --once permet de remplacer le modèle pour un seul échange ; les appels de slash-skills peuvent s’enchaîner (/skill-a /skill-b do XYZ) ; --safe-mode facilite le dépannage ; hermes config get/unset complètent la gestion de la configuration ; hermes serve devient un véritable backend headless ; enfin, les outils MCP adoptent la convention de nommage mcp__server__tool.56

Si vous effectuez une mise à niveau depuis la v0.18.x, deux changements méritent votre attention en priorité : une installation avec pip ou Homebrew est désormais signalée comme héritée et non prise en charge — migrez vers le programme d’installation en une ligne — et max_async_children est obsolète au profit des limites unifiées de concurrence des délégations. Tout le reste est additif : les principales raisons d’effectuer la mise à niveau sont la réduction d’environ 80 % de la latence du premier échange, les approbations intelligentes et le registre de livraison qui protège les réponses terminées contre les plantages.


Nouveautés de la v0.18.0 (The Judgment Release)

Hermes Agent v0.18.0 (tag v2026.7.1, 1er juillet 2026) tire son nom du jugement : l’agent vérifie son propre travail au lieu d’en revendiquer la réussite, tandis que le raisonnement en ensemble devient réellement observable. Cette version résorbe également l’intégralité du retard P0/P1, soit environ 692 éléments de priorité maximale résolus en douze jours.22

  • Mixture-of-Agents comme modèle de premier ordre. MoA peut désormais être sélectionné comme n’importe quel autre modèle dans toutes les interfaces, et le raisonnement de l’ensemble est visible : la sortie complète de chaque modèle de référence s’affiche dans son propre bloc étiqueté, avec diffusion de la réponse en direct. Vous pouvez ainsi observer l’ensemble réfléchir au lieu de recevoir une réponse fusionnée opaque.22
  • Contrats d’achèvement pour /goal. Avant de signaler qu’un objectif est atteint, l’agent vérifie son propre travail en exécutant les contrôles du projet au lieu de simplement revendiquer sa réussite : il applique son jugement à lui-même.22
  • /learn — décrivez n’importe quoi pour en faire un skill. Transformez un processus en skill réutilisable en le décrivant ; les skills générés respectent automatiquement les conventions du fichier CONTRIBUTING.md du dépôt.22
  • Chronologie /journey. Un historique visuel de la mémoire et des skills au fil du temps, avec des fonctions d’édition, ainsi qu’un graphe de mémoire dans l’application de bureau.22
  • Déploiement en éventail des sous-agents en arrière-plan. Déléguez plusieurs tâches exécutées simultanément sans interrompre la conversation : l’unique sous-agent en arrière-plan de la v0.17.0 devient toute une flotte.22
  • Projects dans l’application de bureau. Des Projects de développement de premier ordre, organisés selon un modèle projet/dépôt/couloir.22
  • Gateway avec mise à l’échelle jusqu’à zéro. Les gateways peuvent passer en veille lorsqu’ils sont inactifs et coordonner leur drainage pour assurer des déploiements fluides : une avancée importante pour toute personne exécutant Hermes comme service permanent.22
  • Prise en charge de Google Vertex AI. Accès à Gemini par l’intermédiaire de comptes de service GCP, avec actualisation automatique du token OAuth2, désormais intégré au catalogue des fournisseurs.22
  • Commande d’édition /prompt. Ouvre $EDITOR pour rédiger des prompts multilignes au lieu de lutter avec la ligne de saisie.22

Si vous effectuez une mise à niveau depuis la v0.17.x, aucun de ces changements ne rompt le CLI. Les principales raisons d’effectuer la mise à niveau sont les contrats d’achèvement — des objectifs qui se vérifient eux-mêmes —, MoA comme modèle de premier ordre avec des ensembles observables et /learn pour enregistrer des skills.


Nouveautés de la v0.17.0 (The Reach Release)

Hermes Agent v0.17.0 (tag v2026.6.19, 19 juin 2026) doit son nom à l’élargissement de la portée de l’agent : nouveaux canaux de messagerie, nouveaux fournisseurs de modèles et contrôle plus poussé de l’application de bureau et du tableau de bord. Cette version complète la v0.16.x ; l’interface CLI reste inchangée.21

  • Nouveaux canaux de messagerie. iMessage fonctionne désormais sans relais Mac grâce à Photon Spectrum (OAuth par code d’appareil, hermes photon login) ; l’API WhatsApp Business Cloud est un adaptateur Meta officiel qui supprime la nécessité d’un processus de passerelle ; SimpleX prend maintenant en charge les groupes, les pièces jointes natives, le regroupement des textes et l’acceptation automatique ; enfin, Raft rejoint les plateformes intégrées sous forme de plugin, avec une conception de canal de réveil garantissant contractuellement la confidentialité.21
  • Nouveaux modèles et fournisseurs. Le catalogue accueille z-ai/glm-5.2 (contexte de 1M), anthropic/claude-fable-5, laguna-m.1, nemotron-3-ultra et grok-composer-2.5-fast (le modèle de Cursor via OAuth xAI, contexte de 200k). Le modèle xAI par défaut devient grok-build-0.1, tandis que les modèles adaptatifs Anthropic suivent désormais le contrat de raisonnement moderne (ils n’envoient jamais de champ reasoning).21
  • Application de bureau et tableau de bord. L’application de bureau ajoute des sous-agents en arrière-plan, avec des « fenêtres de suivi » diffusant en direct l’activité déléguée (delegate_task(background=true)), un sélecteur de modèle Composer, des raccourcis clavier reconfigurables, des notifications natives du système d’exploitation, des brouillons de rédaction propres à chaque fil, des thèmes du VS Code Marketplace ainsi qu’une interface en japonais et en chinois traditionnel. Le tableau de bord ajoute un éditeur complet de profile (modèle/skills/MCPs sans modifier config.yaml), un sélecteur global de profile, un Skills Hub repensé avec analyse de sécurité, des Automation Blueprints (modèles paramétrables utilisables depuis un formulaire, une commande slash, une conversation ou la documentation) et une connexion sécurisée qui renvoie une erreur 401 derrière la protection OAuth.21
  • Skills et outils. image_generate peut désormais modifier et transformer une image source, et non plus seulement en créer une de toutes pièces, avec tous les fournisseurs d’images pris en charge ; l’outil memory bénéficie d’un tableau operations permettant d’ajouter, de remplacer ou de supprimer des éléments par lots atomiques en un seul appel ; un nouveau skill simplify-code exécute en parallèle une passe de révision et de nettoyage confiée à trois agents, conditionnée par un niveau de risque fondé sur le principe de la barrière de Chesterton ; enfin, le booléen write_approval remplace l’option ternaire write_mode.21
  • Architecture. Les sous-agents en arrière-plan renvoient immédiatement un identifiant et réinjectent leur résultat dans un nouveau tour ; un gestionnaire de sollicitation MCP permet de demander une confirmation en cours d’appel d’outil, tandis que les outils MCP qui se connectent tardivement sont exposés entre les tours sans compromettre le cache ; cron devient un CronScheduler extensible doté d’un fournisseur de cron géré Chronos ; enfin, un nouveau périmètre Managed (/etc/hermes) permet à un administrateur de verrouiller une configuration que l’utilisateur ne peut pas modifier, parallèlement à un relais Gateway-Gateway destiné aux topologies à plusieurs gateway.21
  • Nouvelles commandes. /version, /billing (facturation interactive dans le terminal), hermes photon login (authentification iMessage) et hermes curator run --consolidate : la consolidation est désormais facultative, si bien que la curation courante en arrière-plan ne consomme aucun token.21
  • Sécurité. La v0.17.0 corrige un contournement de la liste de refus par échappement shell, bloque par défaut les opérations en l’absence de modules d’approbation ou d’adaptateurs gateway appliquant leur propre politique, assainit l’environnement des sous-processus exécutant les scripts de tâches cron, masque les secrets dans les journaux de débogage des requêtes, recherche les motifs d’exfiltration dans les configurations stdio MCP et met à jour urllib3 ainsi que PyJWT afin de corriger plusieurs CVE.21

Si vous effectuez une mise à niveau depuis la v0.16.x, rien ici ne rompt l’interface CLI : il s’agit de nouveaux canaux, modèles et points d’accès autour du même agent. iMessage sans relais, les adaptateurs WhatsApp officiels et le périmètre Managed destiné aux administrateurs sont les principales raisons d’effectuer la mise à niveau.


Nouveautés de la v0.16.0 (The Surface Release)

Hermes Agent v0.16.0 (tag v2026.6.5, 5 juin 2026) doit son nom aux nouvelles interfaces proposées pour interagir avec l’agent, qui reste centré sur CLI. La grande nouveauté : Hermes n’est plus limité au terminal.20

  • Application de bureau native. Hermes Desktop est une nouvelle application Electron pour macOS, Linux et Windows, qui s’installe en un clic et se met à jour directement depuis l’application. Elle propose une fenêtre de chat en streaming, le glisser-déposer de fichiers, le collage d’images depuis le presse-papiers, une palette Cmd+K, une liste des sessions avec archivage et recherche, ainsi qu’un sélecteur de modèle dans la barre d’état. Elle peut se connecter à distance à une gateway Hermes par l’intermédiaire d’un WebSocket sécurisé, avec une authentification par OAuth ou par nom d’utilisateur et mot de passe, des hôtes distants propres à chaque profile et des sessions simultanées sur plusieurs profiles reliées par des références @session inter-profiles. L’interface de bureau propose également une traduction intégrale en chinois simplifié (简体中文) au moyen d’une couche i18n typée (display.language ; l’anglais reste la langue par défaut).20
  • Panneau d’administration dans le navigateur. Le tableau de bord web local évolue d’une simple vue d’état vers un panneau d’administration complet : catalogue MCP avec commandes d’activation et de désactivation, gestion des identifiants, création de webhooks et de hooks, configuration de la mémoire, commandes de la gateway et page System avec vérification préalable aux mises à jour et Debug Share en un clic. Une nouvelle page Channels permet de configurer depuis le navigateur chaque plateforme de messagerie de la gateway (Telegram, Discord, Slack et les autres). L’authentification est désormais extensible : connexion par nom d’utilisateur et mot de passe, fournisseur OIDC générique auto-hébergé, hermes dashboard register pour un client OAuth auto-hébergé et rotation des sessions à l’aide de refresh tokens.20
  • Nouvelles commandes CLI et slash. /undo [N] revient sur les N derniers tours utilisateur avec préremplissage et suppression réversible ; la commande fonctionne dans CLI, la TUI et sur les plateformes de messagerie. Une interface par défaut configurable (cli ou tui) est ajoutée, avec l’option --cli pour la remplacer ponctuellement ; la TUI bénéficie d’une commande /model unifiée et d’une fenêtre superposée Sessions. hermes portal devient un alias lisible du parcours d’intégration de Nous Portal, lequel propose désormais les options Quick Setup et Full Setup au premier lancement. Deux outils de diagnostic font aussi leur apparition : hermes prompt-size et hermes sessions optimize.20
  • Nouveaux modèles et fournisseurs. Le sélecteur accueille deepseek-v4-flash, MiniMax-M3 (contexte de 1M, fournisseurs MiniMax natifs), qwen3.7-plus (Nous + OpenRouter) et gemini-3.5-flash (OAuth Gemini + clé API). Un fournisseur OAuth xAI Grok de premier ordre rejoint le lanceur de l’application de bureau ; le sélecteur de modèle prend en charge la recherche approximative sur toutes les interfaces ; les fournisseurs proposant plusieurs points de terminaison sont regroupés sur une seule ligne ; enfin, l’actualisation du catalogue passe d’une fréquence quotidienne à une fréquence horaire.20 (Depuis, la v0.21.1 a de nouveau modifié cette fréquence : les catalogues distants du sélecteur sont actualisés toutes les 20 minutes, model_catalog.ttl_minutes.46)
  • Skills allégés et divulgation progressive. Le jeu de skills par défaut abandonne les skills redondants ou obsolètes (Spotify devient un plugin natif, Linear passe à hermes mcp install linear et plusieurs entrées périmées sont supprimées), transfère davantage de skills vers la catégorie facultative et ajoute dans le frontmatter un filtre de pertinence environments: (kanban/docker/s6), qui écarte de l’index les skills propres à un contexte jusqu’à ce qu’ils soient demandés. NVIDIA/skills figure désormais parmi les sources fiables par défaut du Skills Hub, aux côtés d’OpenAI, Anthropic et HuggingFace. Les outils MCP et ceux des plugins bénéficient d’une divulgation progressive et ciblée ; un bug d’MCP qui indiquait à tort la réussite de l’authentification OAuth alors qu’aucun token n’avait été obtenu est également corrigé.20
  • Sécurité. La v0.16.0 impose une version corrigée de Starlette (≥1.0.1) pour la CVE-2026-48710 (BadHost), retire de la boucle d’événements les vérifications d’URL contre les SSRF dans les parcours asynchrones, supprime de l’environnement des sous-processus le bearer token d’inférence Bedrock, ajoute bws_cache.json au dispositif de protection de lecture des fichiers, ajoute docker restart/stop/kill à la liste des motifs dangereux et assainit les caractères Unicode invisibles dans le contenu validé des skills. Cette version corrige 2 problèmes P0 et 62 problèmes P1, dont 16 liés à la sécurité.20

Si vous effectuez une mise à niveau depuis la v0.15.x, rien ici ne constitue un changement incompatible pour l’interface CLI elle-même ; il s’agit de nouvelles interfaces et de nouveaux fournisseurs autour du même agent. L’application de bureau et le panneau d’administration justifient la mise à niveau si vous souhaitez proposer Hermes à des utilisateurs qui ne travaillent pas dans un terminal ou administrer une gateway distante depuis un navigateur.

Nouveautés de la v0.14.0 (The Foundation Release)

La v0.14.0 ne repose pas tant sur une fonctionnalité phare que sur la simplification de la configuration et l’élargissement des environnements dans lesquels Hermes peut fonctionner.19 Principales évolutions opérationnelles :

  • Installation et démarrage allégés. pip install hermes-agent fonctionne depuis PyPI, les adaptateurs lourds s’installent à la demande lors de leur première utilisation et le processus de lancement diffère suffisamment d’opérations pour réduire le démarrage à froid d’environ 19 secondes. (Depuis, la v0.19.0 a rendu obsolètes les installations avec pip — consultez la section Installation.)
  • Les abonnements peuvent devenir des points de terminaison API locaux. hermes proxy transforme les fournisseurs reposant sur OAuth, tels que Claude Pro, ChatGPT Pro et SuperGrok, en un point de terminaison local compatible avec OpenAI pour des outils comme Codex, Aider, Cline et Continue.
  • La portée de la gateway s’étend. LINE et SimpleX Chat rejoignent la gateway (le tableau comparatif des plateformes dans la documentation en recense 28 au tag v2026.8.31 ; la section Gateway de messagerie précise ce que ce nombre englobe), Microsoft Teams est intégré de bout en bout, la récupération de l’historique Discord est activée par défaut et les invites clarify de Telegram/Discord utilisent désormais des boutons natifs.
  • La vérification au moment de l’écriture progresse. Après une modification, Hermes peut afficher, pour chaque tour, un récapitulatif des mutations de fichiers et les diagnostics sémantiques du serveur de langage avant le tour suivant, ce qui le rapproche d’un fonctionnement d’agent fondé sur des preuves.
  • Les outils de bureau et multimédias s’enrichissent. computer_use fonctionne par l’intermédiaire de cua-driver pour les fournisseurs autres que Anthropic, video_generate est unifié derrière des backends extensibles et vision_analyze envoie les pixels bruts aux modèles réellement capables de les interpréter.

Installation

Le programme d’installation en une ligne constitue la méthode d’installation prise en charge. Il gère Python, uv, Node.js, ripgrep, ffmpeg, le clonage du dépôt, l’environnement virtuel et la commande globale hermes.7

curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash

Les installations via pip et Homebrew sont obsolètes depuis la version v0.19.0. Le paquet PyPI introduit par la version v0.14.0 (pip install hermes-agent) et la formule Homebrew sont désormais signalés comme des installations « anciennes non prises en charge » : toutes les interfaces affichent un avertissement (sans blocage) lorsque Hermes en détecte une, et l’arrêt de la publication sur PyPI/Homebrew est prévu. Si vous avez effectué l’installation via pip ou brew, migrez vers le programme d’installation ci-dessus.56

Compatible avec Linux, macOS, WSL2 et Android/Termux (le programme d’installation détecte automatiquement Termux et utilise un ensemble de paquets Android testé).7 Windows natif est désormais une plateforme de niveau Tier 1, plutôt que la version bêta préliminaire livrée avec la v0.14.0 : installez-le avec iex (irm https://hermes-agent.nousresearch.com/install.ps1). La documentation souligne toutefois une restriction : la prise en charge de macOS est réservée aux Mac avec Apple Silicon, les Mac Intel n’étant pas pris en charge.55 Historiquement, la v0.14.0 a ajouté la prise en charge native de Windows en version bêta préliminaire via un programme d’installation PowerShell, mais WSL2 reste la recommandation la plus sûre pour un usage en production jusqu’à ce que la solution Windows gagne en maturité.19

Une fois l’installation terminée :

source ~/.bashrc    # or ~/.zshrc
hermes              # Start chatting

Le seul prérequis est git. Le programme d’installation fournit automatiquement Python 3.11 via uv (sans sudo), Node.js 26 (pour l’automatisation du navigateur et la passerelle WhatsApp), ripgrep et ffmpeg. Depuis la v0.20.0, Node 26 est la version minimale obligatoire : le programme d’installation refuse toute version antérieure et installe à la place une version de Node gérée par Hermes.557

Vérifier l’installation

hermes --version    # Check version (global flag; there is no `version` subcommand)
hermes doctor       # Diagnose config/dependency issues
hermes status       # Show current configuration + auth state
hermes dump         # Copy-pasteable setup summary for debugging

hermes doctor vous indique précisément ce qui manque et comment y remédier.7 Lorsque vous demandez de l’aide, hermes dump est la commande de diagnostic à coller dans un ticket GitHub ou une discussion Discord : elle produit un résumé en texte brut de l’ensemble de votre configuration, dont les secrets sont masqués.8

Installation manuelle

Si vous avez besoin d’un contrôle total — version personnalisée de Python, extras spécifiques, intégration à Nix/NixOS — la procédure manuelle est documentée étape par étape dans le guide d’installation du projet d’origine.7 Voici les principaux extras facultatifs que vous pouvez combiner avec uv pip install -e ".[<extras>]" :

Extra Fonctionnalités ajoutées
all Tous les éléments ci-dessous
messaging gateway Telegram et Discord
cron Analyse des expressions Cron
cli Interface à menus dans le terminal pour l’assistant de configuration
modal Backend d’exécution dans le cloud Modal
voice Entrée microphone CLI et lecture audio
tts-premium Voix premium ElevenLabs
honcho Mémoire native pour l’IA (intégration Honcho)
mcp Prise en charge de Model Context Protocol
homeassistant Intégration à Home Assistant
acp Prise en charge de l’intégration aux éditeurs ACP
slack Messagerie Slack
pty Prise en charge du terminal PTY (outils CLI interactifs)
dev pytest et utilitaires de test
termux Ensemble de paquets Android testé (comprend cron, cli, pty, mcp, honcho, acp)

La commande d’installation pour Termux est différente : elle utilise pip avec un fichier de contraintes, et non uv pip :

python -m pip install -e ".[termux]" -c constraints-termux.txt

En effet, sur Android, .[all] installe faster-whisper via l’extra voice, qui dépend de paquets wheel ctranslate2 non publiés pour Android.7


Authentification et fournisseurs

Au tag v2026.9.7, hermes_cli/models_catalog_static.py contient 39 entrées statiques CANONICAL_PROVIDERS à la ligne 311 (la décomposition de septembre 2026 a déplacé la liste hors de hermes_cli/models.py ; les entrées elles-mêmes restent inchangées, y compris tencent-tokenplan de la v0.21.0) et complète automatiquement cette liste à partir de plugins/model-providers/ (39 dossiers intégrés ; neuf d’entre eux — actual, alibaba-coding-plan, commandcode, deepinfra, meta-ai, nebius-token-factory, opencode-free, router, upstage — n’ont aucune entrée statique et sont intégrés par l’extension automatique, car ils utilisent le type d’authentification api_key par défaut). Les tableaux de la page de documentation consacrée aux fournisseurs recensent 45 fournisseurs cloud et sur abonnement, ainsi qu’une ligne pour les endpoints personnalisés. La page présente séparément les serveurs locaux et auto-hébergés (Ollama, vLLM, SGLang, llama.cpp, LM Studio, LiteLLM, ClawRouter et tout endpoint compatible avec OpenAI).26 Au tag v2026.9.24, la liste statique contient toujours 39 entrées, mais plugins/model-providers/ ne compte plus que 38 dossiers : le fournisseur sans clé opencode-free a été supprimé le 18 septembre, car l’offre gratuite d’OpenCode rejette désormais le trafic anonyme provenant d’un autre client que le sien.53 À cela s’ajoutent les endpoints personnalisés et trois parcours d’authentification distincts. Voici l’ensemble des options d’authentification, classées par parcours afin que vous puissiez trouver celle qui correspond à vos besoins.

Les trois parcours d’authentification

Chaque fournisseur dans Hermes suit l’un de ces trois modes d’authentification :

Parcours 1 — clé API dans .env. Placez votre clé dans ~/.hermes/.env ; Hermes la lit au démarrage. Ce parcours est utilisé par OpenRouter, AI Gateway, z.ai/GLM, Kimi/Moonshot, MiniMax (ainsi que MiniMax China), Alibaba Cloud/DashScope, Kilo Code, OpenCode Zen, OpenCode Go, DeepSeek, Hugging Face, Google/Gemini et la plupart des fournisseurs tiers.2 Depuis la v0.19.0, la clé n’a plus besoin d’être stockée dans un fichier en texte brut : une interface SecretSource extensible peut récupérer les secrets depuis Bitwarden ou 1Password (références op://) au chargement, avec la prise en charge simultanée de plusieurs coffres-forts, un ordre de priorité déterministe, des avertissements en cas de conflit et la provenance de chaque variable — .env reste la solution de secours. (Ce mécanisme se distingue du jeton d’amorçage Bitwarden Secrets Manager de la v0.15.0, qui regroupait les clés des fournisseurs derrière un seul jeton ; SecretSource remplace le fichier en texte brut lui-même, et de futurs fournisseurs de coffres-forts pourront être ajoutés sous forme de plugins.)56

Parcours 2 — OAuth via hermes model ou hermes auth. Lance un flux de code d’appareil, ouvre un navigateur et stocke les identifiants dans ~/.hermes/auth.json (avec la possibilité d’importer les identifiants existants d’outils comme Claude Code ou Codex CLI). Ce parcours est utilisé par Nous Portal, OpenAI Codex (compte ChatGPT), GitHub Copilot et Anthropic (Claude Pro/Max).2

Parcours 3 — endpoint personnalisé dans config.yaml. Pour tout API compatible avec OpenAI — Ollama, vLLM, SGLang, llama.cpp, LM Studio, proxy LiteLLM, Together AI, Groq, Azure OpenAI ou votre propre serveur auto-hébergé. La configuration s’effectue une seule fois via hermes model → Custom endpoint, puis elle est enregistrée dans config.yaml.2

Matrice complète des fournisseurs

Cette matrice couvre les fournisseurs répertoriés dans les tableaux de la page de documentation, avec la procédure de configuration exacte de chacun ; le sélecteur du tag en propose davantage que la documentation (voir le décompte ci-dessus), et tout service compatible avec OpenAI peut passer par la ligne consacrée aux endpoints personnalisés.226

Fournisseur Parcours d’authentification Configuration
Nous Portal OAuth hermes model (connexion OAuth, sur abonnement)
OpenAI Codex OAuth hermes model (code d’appareil ChatGPT, utilise les modèles Codex)
GitHub Copilot OAuth ou jeton hermes model (code d’appareil OAuth), ou COPILOT_GITHUB_TOKEN / GH_TOKEN / gh auth token
GitHub Copilot ACP Sous-processus local hermes model (nécessite copilot CLI dans PATH + copilot login)
Anthropic OAuth ou clé API hermes model (privilégie les identifiants Claude Code), ou ANTHROPIC_API_KEY, ou jeton de configuration ANTHROPIC_TOKEN
OpenRouter Clé API OPENROUTER_API_KEY dans ~/.hermes/.env
AI Gateway (Vercel) Clé API AI_GATEWAY_API_KEY dans ~/.hermes/.env (fournisseur : ai-gateway)
z.ai / GLM (ZhipuAI) Clé API GLM_API_KEY dans ~/.hermes/.env (fournisseur : zai)
Kimi / Moonshot Clé API KIMI_API_KEY dans ~/.hermes/.env (fournisseur : kimi-coding). La v0.19.0 ajoute kimi-k3 aux catalogues (kimi-k2.x a été retiré).56
MiniMax (global) Clé API MINIMAX_API_KEY dans ~/.hermes/.env (fournisseur : minimax)
MiniMax China Clé API MINIMAX_CN_API_KEY dans ~/.hermes/.env (fournisseur : minimax-cn)
Alibaba Cloud (Qwen) Clé API DASHSCOPE_API_KEY dans ~/.hermes/.env (fournisseur : alibaba, alias : dashscope, qwen)
Kilo Code Clé API KILOCODE_API_KEY dans ~/.hermes/.env (fournisseur : kilocode)
OpenCode Zen Clé API OPENCODE_ZEN_API_KEY dans ~/.hermes/.env (fournisseur : opencode-zen)
OpenCode Go Clé API OPENCODE_GO_API_KEY dans ~/.hermes/.env (fournisseur : opencode-go)
DeepSeek Clé API DEEPSEEK_API_KEY dans ~/.hermes/.env (fournisseur : deepseek)
Hugging Face Clé API HF_TOKEN dans ~/.hermes/.env (fournisseur : huggingface, alias : hf)
Google / Gemini Clé API GOOGLE_API_KEY ou GEMINI_API_KEY dans ~/.hermes/.env (fournisseur : gemini)
Fireworks AI Clé API Fournisseur de premier plan avec estimation des coûts et colonnes de prix mises en cache dans le sélecteur de modèles ; placé en 2e position dans les sélecteurs de fournisseurs. Nouveau dans la v0.19.0.56
DeepInfra Clé API Fournisseur de premier plan avec une intégration renforcée. Nouveau dans la v0.19.0.56
Upstage Solar Clé API Fournisseur de premier plan. Nouveau dans la v0.19.0.56
xAI (Grok) Fournisseur natif / OAuth SuperGrok Fournisseur de premier plan avec accès direct à API et catalogue de modèles (v0.9.0+). La v0.14.0 ajoute OAuth SuperGrok et porte la fenêtre de contexte de grok-4.3 à 1 M pour les comptes éligibles.21619 La v0.17.0 ajoute grok-composer-2.5-fast (modèle de Cursor via OAuth xAI, contexte de 200 000) et remplace le modèle xAI par défaut par grok-build-0.1.21 Dans la v0.19.0, grok-4.5 passe en disponibilité générale dans le catalogue.56
xAI Custom Voices Clé API Fournisseur TTS avec clonage vocal. Nouveau dans la v0.13.0 ; configurez-le sous tts: dans config.yaml et fournissez la clé xAI dans .env.18
Xiaomi MiMo Fournisseur natif Fournisseur de premier plan avec assistant de configuration et catalogue de modèles. MiMo v2 Pro gratuit sur Nous Portal pour les tâches auxiliaires (v0.9.0+).1615
Google AI Studio Clé API GOOGLE_API_KEY ou GEMINI_API_KEY dans ~/.hermes/.env. Accès direct à Gemini avec longueurs de contexte détectées automatiquement via le registre models.dev (v0.8.0+).15
Qwen OAuth (Portal) OAuth hermes model → « Qwen OAuth (Portal) » (fournisseur : qwen-oauth ; connexion PKCE dans le navigateur réutilisant une connexion locale à Qwen CLI). Fournisseur OAuth prenant en charge les requêtes au portail (v0.8.0+). Le parcours DashScope avec clé API ci-dessus a été renommé d’Alibaba Cloud à Qwen Cloud dans la v0.14.0 ; les clés de configuration existantes continuent de fonctionner.151926
OpenCode Free (supprimé) Sans clé Supprimé le 18 septembre 2026 et absent des tags v2026.9.21 et v2026.9.24. Une configuration qui mentionne encore opencode-free, free ou opencode_free produit une erreur signalant la suppression ; passez à opencode-zen (paiement à l’usage, OPENCODE_ZEN_API_KEY) ou à opencode-go (abonnement, OPENCODE_GO_API_KEY) via hermes model. Le fournisseur avait été introduit au cours du cycle de la v0.20.5 sous la désignation « the opencode-free zero-auth provider ».2353
OpenAI API (direct) Clé API OPENAI_API_KEY dans ~/.hermes/.env (fournisseur : openai-api, OPENAI_BASE_URL facultatif)26
Google Vertex AI OAuth2 / ADC hermes model → « Google Vertex AI » (fournisseur : vertex ; OAuth2 via le JSON d’un compte de service ou Application Default Credentials, facturé à votre projet GCP)26
Azure AI Foundry Endpoint + clé hermes model → « Azure AI Foundry » (fournisseur : azure-foundry ; utilise votre endpoint et votre clé Azure OpenAI / Foundry ; le sélecteur le décrit comme « OpenAI-style or Anthropic-style endpoint »)26
AWS Bedrock Identifiants AWS hermes model → « AWS Bedrock » (fournisseur : bedrock ; chaîne standard d’identifiants AWS via boto3, IAM ou clé API ; Claude, Nova, Llama, DeepSeek)26
NVIDIA NIM / Build Clé API NVIDIA_API_KEY dans ~/.hermes/.env (fournisseur : nvidia ; Nemotron et autres modèles hébergés sur NIM à l’adresse build.nvidia.com, ou endpoint NIM local via le remplacement de l’URL de base)26
Ollama Cloud OAuth ou clé API hermes model → « Ollama Cloud » (fournisseur : ollama-cloud ; collez OLLAMA_API_KEY et sélectionnez un modèle parmi les modèles cloud détectés)26
StepFun Step Plan Clé API STEPFUN_API_KEY dans ~/.hermes/.env (fournisseur : stepfun ; modèles d’agent et de programmation via le API Step Plan)26
MiniMax (OAuth) OAuth hermes model → « MiniMax (OAuth) » (fournisseur : minimax-oauth ; connexion PKCE dans le navigateur pour le Coding Plan, région globale ou chinoise)26
Meta AI Clé API MODEL_API_KEY dans ~/.hermes/.env (fournisseur : meta-ai ; Meta Model API, famille Muse Spark)26
NovitaAI Clé API NOVITA_API_KEY dans ~/.hermes/.env (provider : novita ; plus de 200 modèles, Model API, Agent Sandbox, GPU Cloud)26
Arcee AI Clé API ARCEEAI_API_KEY dans ~/.hermes/.env (provider : arcee ; alias : arcee-ai, arceeai ; modèles Trinity)26
GMI Cloud Clé API GMI_API_KEY dans ~/.hermes/.env (provider : gmi ; alias : gmi-cloud, gmicloud). Utilisez l’identifiant exact du modèle renvoyé par l’endpoint /v1/models de GMI26
Actual Computer Clé API ou daemon local ACTUAL_API_KEY dans ~/.hermes/.env pour le relais hébergé, ou ACTUAL_BASE_URL=http://127.0.0.1:8080 pour le daemon local sans clé sur l’interface loopback (provider : actual ; alias : actual-computer, actualcomputer, aci)26
Tencent TokenHub Clé API TOKENHUB_API_KEY dans ~/.hermes/.env (provider : tencent-tokenhub ; alias : tencent, tokenhub, tencentmaas ; Hy3 Preview)26
CommandCode Clé API COMMANDCODE_API_KEY dans ~/.hermes/.env (provider : commandcode, alias commandcode-chat ; modèles Claude via commandcode-anthropic, alias commandcode-claude). Fonctionne avec les offres GOAT/Pro/Max/Provider, mais pas avec l’offre Go à 1 $, qui ne donne pas accès à API. Le plugin est arrivé dans la fenêtre de sortie de la v0.20.3.5426
Alibaba Cloud (Coding Plan) Clé API DASHSCOPE_API_KEY (provider : alibaba-coding-plan, alias alibaba_coding) ; une référence de facturation distincte, sur un endpoint différent de celui du provider DashScope alibaba26
Tencent TokenPlan Clé API TOKENPLAN_API_KEY dans ~/.hermes/.env (provider : tencent-tokenplan, alias : tokenplan, tencent-lkeap ; aperçu de Hy4 via l’endpoint Messages de Anthropic sur api.lkeap.cloud.tencent.com). Nouveau dans la v0.21.0 ; le sélecteur regroupe TokenHub et TokenPlan sous une seule ligne d’affichage « Tencent Hy »3536
Nebius Token Factory Clé API NEBIUS_API_KEY dans ~/.hermes/.env (provider : nebius-token-factory ; alias : nebius, nebius-tf, tokenfactory). Nouveau dans la v0.21.03536
Ramp Router Clé API RAMP_ROUTER_API_KEY dans ~/.hermes/.env (provider : router ; alias : ramp-router, ramp, router.com). Gateway LLM natif d’OpenAI Responses de Ramp sur api.router.com, avec un catalogue dynamique propre au compte : les identifiants de modèles valides sont ceux que renvoie /v1/models pour votre clé, si bien que le sélecteur les récupère au lieu de les coder en dur. Nouveau dans la v0.21.03536
Alibaba Cloud (Token Plan) Clé API ALIBABA_TOKEN_PLAN_API_KEY dans ~/.hermes/.env (provider : alibaba-token-plan ; endpoint pour la Chine continentale : alibaba-token-plan-cn) — l’offre Model Studio à quota fixe de tokens, une troisième référence Alibaba aux côtés de alibaba et alibaba-coding-plan36
Endpoint personnalisé config.yaml hermes model → « Endpoint personnalisé » (enregistré dans config.yaml). La liste des services compatibles avec OpenAI dans la documentation comprend Together AI, Groq, Cerebras (https://api.cerebras.ai/v1), Mistral, Azure OpenAI, LocalAI et Jan26
Depuis la v0.19.0, vous pouvez également masquer les providers que vous n’utilisez pas : un indicateur enabled: false propre à chaque provider et une clé de configuration excluded_providers les retirent des sélecteurs /model et de la résolution intégrée des providers.56

Anthropic : trois méthodes d’authentification

Anthropic dispose de sa propre section, car Hermes propose trois voies distinctes pour accéder à Claude, et il est essentiel de choisir la bonne. D’après la documentation en amont :2

# Method 1: API key (pay-per-token)
export ANTHROPIC_API_KEY=***
hermes chat --provider anthropic --model claude-sonnet-4-6

# Method 2: OAuth through hermes model (preferred)
# Uses Claude Code's credential store when available
hermes model

# Method 3: Manual setup-token (fallback/legacy)
export ANTHROPIC_TOKEN=***
hermes chat --provider anthropic

# Auto-detect Claude Code credentials
hermes chat --provider anthropic   # reads Claude Code files automatically

Lorsque vous choisissez Anthropic OAuth via hermes model, Hermes privilégie le magasin d’identifiants de Claude Code au lieu de copier le token dans ~/.hermes/.env. Les identifiants Claude actualisables restent ainsi actualisables.2 Si vous utilisez déjà Claude Code sur la même machine, c’est la solution la plus propre.

Pour définir Anthropic de manière permanente dans config.yaml :

model:
  provider: "anthropic"
  default: "claude-sonnet-4-6"

--provider claude et --provider claude-code fonctionnent également comme raccourcis pour --provider anthropic.2

GitHub Copilot : deux modes

Copilot est pris en charge selon deux modes : l’accès direct à API de Copilot (recommandé) et Copilot ACP (qui lance le CLI Copilot local comme sous-processus).2

# Direct Copilot API
hermes chat --provider copilot --model gpt-5.4

# Copilot ACP (requires the Copilot CLI in PATH + an existing copilot login)
hermes chat --provider copilot-acp --model copilot-acp

D’après la documentation en amont, l’authentification est vérifiée dans l’ordre suivant :2 1. Variable d’environnement COPILOT_GITHUB_TOKEN 2. Variable d’environnement GH_TOKEN 3. Variable d’environnement GITHUB_TOKEN 4. Solution de repli CLI gh auth token 5. Connexion par code d’appareil OAuth via hermes model

Le type de token est important. Le API Copilot ne prend pas en charge les Personal Access Tokens classiques (ghp_*). Les types pris en charge sont les tokens OAuth (gho_*), les PAT à granularité fine (github_pat_* avec l’autorisation Copilot Requests) et les tokens GitHub App (ghu_*). Si gh auth token renvoie un token ghp_*, utilisez plutôt hermes model pour vous authentifier via OAuth.2

Providers d’IA chinois (prise en charge native)

Hermes intègre la prise en charge de z.ai/GLM, Kimi/Moonshot, MiniMax (endpoints mondiaux et chinois) et Alibaba Cloud, avec des identifiants de provider dédiés.2

# z.ai / ZhipuAI GLM
hermes chat --provider zai --model glm-5                 # Requires: GLM_API_KEY

# Kimi / Moonshot AI
hermes chat --provider kimi-coding --model kimi-for-coding   # Requires: KIMI_API_KEY

# MiniMax (global)
hermes chat --provider minimax --model MiniMax-M2.7          # Requires: MINIMAX_API_KEY

# MiniMax (China)
hermes chat --provider minimax-cn --model MiniMax-M2.7       # Requires: MINIMAX_CN_API_KEY

# Alibaba Cloud / DashScope (Qwen)
hermes chat --provider alibaba --model qwen3.5-plus          # Requires: DASHSCOPE_API_KEY

Les URL de base peuvent être remplacées à l’aide des variables d’environnement GLM_BASE_URL, KIMI_BASE_URL, MINIMAX_BASE_URL, MINIMAX_CN_BASE_URL ou DASHSCOPE_BASE_URL.2

Z.AI détecte automatiquement l’endpoint. Lorsque vous utilisez le provider z.ai/GLM, Hermes teste plusieurs endpoints (mondiaux, chinois et variantes destinées au codage) pour trouver celui qui accepte votre clé API. L’endpoint fonctionnel est automatiquement mis en cache : la plupart des utilisateurs n’ont donc pas besoin de GLM_BASE_URL.2

xAI (Grok) active automatiquement la mise en cache des prompts. Lorsque l’URL de base contient x.ai, Hermes envoie l’en-tête x-grok-conv-id avec chaque requête afin de la diriger vers le même serveur pendant une session de conversation, ce qui permet de réutiliser les prompts système et l’historique mis en cache.2 Cette opération est automatique ; aucune configuration n’est nécessaire.

La commande hermes auth

hermes auth est la commande de gestion des identifiants pour les pools et les identifiants OAuth.6

hermes auth                              # Interactive wizard
hermes auth list                         # Show all credential pools
hermes auth list openrouter              # Show one provider's pool
hermes auth add openrouter --api-key sk-or-v1-xxx
hermes auth add anthropic --type oauth
hermes auth remove openrouter 2          # Remove by index
hermes auth reset openrouter             # Clear cooldowns

Les pools d’identifiants permettent d’effectuer une rotation entre plusieurs clés API ou tokens OAuth pour un même provider. Ils sont utiles pour répartir les limites de débit entre plusieurs clés sans modifier le code.6 Les anciennes commandes hermes login / hermes logout ont été supprimées ; utilisez désormais hermes auth.6

Endpoints personnalisés et auto-hébergés

Hermes fonctionne avec tout endpoint API compatible avec OpenAI. Si un serveur implémente /v1/chat/completions, vous pouvez y connecter Hermes.2

Configuration interactive (recommandée) :

hermes model
# Select "Custom endpoint (self-hosted / VLLM / etc.)"
# Enter: API base URL, API key, Model name

Configuration manuelle dans config.yaml :

model:
  default: your-model-name
  provider: custom
  base_url: http://localhost:8000/v1
  api_key: your-key-or-leave-empty-for-local

Les deux méthodes enregistrent les paramètres dans config.yaml, qui constitue la source unique de vérité pour le modèle principal, le provider et l’URL de base.2 Les anciennes variables d’environnement OPENAI_BASE_URL et LLM_MODEL ne sont plus lues pour configurer le modèle principal : utilisez hermes model ou modifiez directement config.yaml.2 (OPENAI_BASE_URL + OPENAI_API_KEY restent prises en compte comme solution de repli pour la voie de routage auxiliaire provider: "main" ; ne les supprimez donc pas sans vérification si vous les utilisez dans ce cadre.)4

Changement d’endpoint personnalisé en cours de session :

/model custom:qwen-2.5             # Custom endpoint with explicit model
/model custom                      # Auto-detect the model from the endpoint
/model custom:local:qwen-2.5       # Named custom provider "local"
/model custom:work:llama3          # Named custom provider "work"
/model openrouter:claude-sonnet-4  # Back to a cloud provider

/model custom (sans nom de modèle) interroge /v1/models sur le API de votre endpoint et sélectionne automatiquement le modèle si un seul est chargé — utile pour les serveurs locaux qui exécutent un modèle unique.2

Serveurs LLM locaux (modèles de configuration)

La documentation officielle propose des guides de configuration complets pour Ollama, vLLM, SGLang, llama.cpp et LM Studio. Voici les principales commandes que vous utiliserez réellement. Chacune est conçue pour produire un endpoint opérationnel vers lequel Hermes peut pointer.2

Ollama — la solution locale la plus simple, sans aucune configuration :

ollama pull qwen2.5-coder:32b
OLLAMA_CONTEXT_LENGTH=32768 ollama serve   # Raise from 4k default
hermes model   # Custom endpoint → http://localhost:11434/v1 → qwen2.5-coder:32b

Piège majeur avec Ollama : par défaut, Ollama utilise des fenêtres de contexte très limitées (4 096 tokens avec moins de 24 Go de VRAM). Vous devez augmenter cette valeur via OLLAMA_CONTEXT_LENGTH ou un Modelfile — le API compatible avec OpenAI n’accepte pas la longueur du contexte transmise par le client ; Hermes ne peut donc pas la définir à votre place.2 Pour utiliser un agent, prévoyez au moins 16k–32k.

vLLM — service GPU haute performance :

pip install vllm
vllm serve meta-llama/Llama-3.1-70B-Instruct \
  --port 8000 \
  --max-model-len 65536 \
  --tensor-parallel-size 2 \
  --enable-auto-tool-choice \
  --tool-call-parser hermes

L’appel d’outils nécessite --enable-auto-tool-choice et --tool-call-parser <name>. Analyseurs pris en charge : hermes (Qwen 2.5, Hermes 2/3), llama3_json, mistral, deepseek_v3, deepseek_v31, xlam, pythonic. Sans ces options, les appels d’outils seront renvoyés sous forme de texte brut.2

SGLang — service rapide avec RadixAttention pour réutiliser le cache KV :

pip install "sglang[all]"
python -m sglang.launch_server \
  --model meta-llama/Llama-3.1-70B-Instruct \
  --port 30000 \
  --context-length 65536 \
  --tp 2 \
  --tool-call-parser qwen

Piège avec SGLang : la valeur par défaut de max_tokens est 128. Définissez --default-max-tokens sur le serveur ou configurez model.max_tokens dans config.yaml si les réponses sont tronquées.2

llama.cpp / llama-server — CPU et Metal sur Apple Silicon :

./build/bin/llama-server \
  --jinja -fa \
  -c 32768 \
  -ngl 99 \
  -m models/qwen2.5-coder-32b-instruct-Q4_K_M.gguf \
  --port 8080 --host 0.0.0.0

--jinja est requis pour l’appel d’outils. Sans cette option, llama-server ignore entièrement le paramètre tools et le modèle tente d’appeler des outils en écrivant du JSON dans le texte de sa réponse — que Hermes ne peut pas interpréter comme de véritables appels d’outils.2

LM Studio — application de bureau avec interface graphique :

Démarrez le serveur depuis l’application LM Studio (onglet Developer → Start Server), ou via CLI : lms server start (démarre sur le port 1234) et lms load qwen2.5-coder --context-length 32768.2 Faites ensuite pointer hermes model vers http://localhost:1234/v1.

Piège majeur avec LM Studio : LM Studio lit la longueur du contexte dans les métadonnées du modèle, mais de nombreux modèles GGUF indiquent des valeurs par défaut de 2048 ou 4096. Définissez toujours explicitement la longueur du contexte dans les paramètres du modèle LM Studio — cliquez sur l’icône d’engrenage à côté du sélecteur de modèle, réglez « Context Length » sur au moins 16384 (de préférence 32768), puis rechargez le modèle.2

Fournisseurs personnalisés nommés

Si vous utilisez plusieurs endpoints personnalisés (par exemple, un serveur de développement local et un serveur GPU distant), définissez-les comme fournisseurs personnalisés nommés dans config.yaml :2

custom_providers:
  - name: local
    base_url: http://localhost:8080/v1
    # api_key omitted — Hermes uses "no-key-required" for keyless local servers
  - name: work
    base_url: https://gpu-server.internal.corp/v1
    api_key: corp-api-key
    api_mode: chat_completions      # optional, auto-detected from URL
  - name: anthropic-proxy
    base_url: https://proxy.example.com/anthropic
    api_key: proxy-key
    api_mode: anthropic_messages    # for Anthropic-compatible proxies

Vous pouvez ensuite passer de l’un à l’autre en cours de session grâce à la syntaxe triple :

/model custom:local:qwen-2.5
/model custom:work:llama3-70b
/model custom:anthropic-proxy:claude-sonnet-4

Vous pouvez également sélectionner les fournisseurs personnalisés nommés depuis le menu interactif de hermes model.2

Architecture de fournisseurs extensible (v0.13.0+)

La version v0.13.0 fournit une ABC ProviderProfile, ainsi qu’un dossier plugins/model-providers/, afin que des fournisseurs d’inférence tiers puissent être ajoutés sans modifier le cœur du système.18 Si un fournisseur propose un mode API compatible avec OpenAI, Anthropic ou Codex, vous pouvez implémenter une sous-classe de ProviderProfile qui déclare le parcours d’authentification, l’URL de base, le catalogue de modèles et les en-têtes de mise en cache ; Hermes la résout par le même chemin runtime_provider.py que celui utilisé par les fournisseurs intégrés. C’est le changement architectural à l’origine de l’élargissement des fournisseurs dans la version v0.13.0 : au lieu de modifier le cœur du système pour ajouter un fournisseur, vous distribuez un plugin.

Proxy local compatible avec OpenAI (v0.14.0+)

hermes proxy expose un endpoint local compatible avec OpenAI, adossé au fournisseur OAuth auquel Hermes est déjà connecté — Claude Pro, ChatGPT Pro, SuperGrok ou un autre fournisseur compatible configuré.19 Ainsi, les outils qui attendent un API de type OpenAI, notamment Codex CLI, Aider, Cline, Continue ou des scripts personnalisés, peuvent réutiliser l’authentification Hermes associée à votre abonnement sans clé API distincte. Considérez le proxy comme une infrastructure de développement locale : choisissez délibérément son adresse d’écoute, ne l’exposez pas largement et tenez compte des conditions propres à chaque fournisseur.

Détection de la longueur du contexte

D’après la documentation officielle, deux paramètres sont constamment confondus :2

  • context_length — la fenêtre de contexte totale (budget combiné de tokens d’entrée et de sortie, par exemple 1 000 000 pour Claude Opus 4.7 ou 200 000 pour Sonnet 4.6). Hermes s’en sert pour décider quand compresser l’historique.
  • model.max_tokens — la limite de sortie (nombre maximal de tokens que le modèle peut générer dans une seule réponse). Elle est sans rapport avec la longueur de l’historique.

Définissez context_length lorsque la détection automatique détermine une taille de fenêtre incorrecte :

model:
  default: "qwen3.5:9b"
  base_url: "http://localhost:8080/v1"
  context_length: 131072      # tokens

Hermes utilise une chaîne de résolution multisource pour détecter les fenêtres de contexte : remplacement par la configuration → fournisseur personnalisé par modèle → cache persistant → endpoint /models → Anthropic /v1/models → API OpenRouter → Nous Portal → models.dev (registre géré par la communauté pour plus de 3800 modèles) → valeurs par défaut de secours (128K).2 Le système tient compte du fournisseur ; un même modèle peut donc avoir des limites de contexte différentes selon le service qui le propose (par exemple, claude-opus-4.6 dispose de 1M directement chez Anthropic, mais de 128K sur GitHub Copilot).2

Routage intelligent des modèles : rotation des fournisseurs et repli

Hermes ne vous limite pas à un seul modèle chez un seul fournisseur. Le routage intelligent des modèles regroupe les mécanismes qui déterminent quel fournisseur et quel modèle traitent effectivement une requête donnée : les pools d’identifiants répartissent la charge entre les clés, un repli configuré prend le relais lorsque le fournisseur principal échoue, et les emplacements auxiliaires ci-dessous acheminent les tâches secondaires vers des modèles moins coûteux, indépendamment de votre modèle principal.26 Configurez ces trois éléments ensemble – ils font la différence entre un agent qui s’arrête lorsqu’il atteint une limite de débit et un agent qui poursuit son travail.

Pools d’identifiants. Lorsque vous disposez de plusieurs clés API pour un même fournisseur, configurez une stratégie de rotation via hermes auth. Vous répartirez ainsi les limites de débit entre plusieurs clés.6

Modèle de repli. Configurez une solution de secours provider:model vers laquelle Hermes basculera automatiquement si votre modèle principal échoue (limites de débit, erreurs du serveur, échecs d’authentification) :2

fallback_model:
  provider: openrouter            # required
  model: anthropic/claude-sonnet-4  # required
  # base_url: http://localhost:8000/v1    # optional, for custom endpoints
  # api_key_env: MY_CUSTOM_KEY           # optional, env var name

Le repli change de modèle et de fournisseur en cours de session sans perdre votre conversation. Il ne se déclenche qu’une seule fois au maximum par session.2 Fournisseurs pris en charge pour le repli : openrouter, nous, openai-codex, copilot, copilot-acp, anthropic, huggingface, zai, kimi-coding, minimax, minimax-cn, deepseek, ai-gateway, opencode-zen, opencode-go, kilocode, alibaba, custom.2

Modèles auxiliaires

Hermes utilise des modèles « auxiliaires » pour les tâches secondaires : analyse d’images (vision), classification des demandes d’approbation de commandes dangereuses, compression du contexte, génération des titres de session, insertion de balises audio TTS, mise en correspondance des skill, répartition des outils MCP, ainsi que la famille de spécification et de décomposition Kanban.434 Par défaut (auxiliary.*.provider: "auto"), chaque tâche auxiliaire s’exécute sur votre modèle de chat principal – le même fournisseur et le même modèle que vous avez choisis dans hermes model. La documentation indique explicitement que ce comportement remplace l’ancienne détection automatique d’un fournisseur bon marché : « Les versions précédentes orientaient les utilisateurs d’agrégateurs (OpenRouter, Nous Portal) vers un fournisseur par défaut peu coûteux côté fournisseur. Cela créait de la confusion… auto utilise désormais le modèle principal pour tout le monde, tandis que les remplacements par tâche dans config.yaml restent prioritaires. »34 Aucune configuration n’est nécessaire pour commencer ; le compromis concerne le coût – avec les modèles de raisonnement coûteux, les tâches auxiliaires entraînent des dépenses non négligeables. Lorsque cela compte, affectez donc chaque tâche à un modèle rapide et peu coûteux. Deux anciennes tâches auxiliaires n’utilisent désormais plus du tout de LLM : l’extraction web (« web_extract et les instantanés du navigateur tronquent les contenus longs de manière déterministe et stockent le texte intégral afin de permettre sa lecture page par page avec read_file – sans intervention de LLM ») et la recherche de sessions (l’outil à format unique renvoie directement le contenu de la base de données). Leurs anciens blocs auxiliary.web_extract.* et auxiliary.session_search.* ont disparu des paramètres par défaut – les valeurs résiduelles dans un fichier config.yaml existant sont « des vestiges sans conséquence qui sont ignorés » – et l’emplacement flush_memories est lui aussi absent des paramètres par défaut de cette version.34

Vous pouvez configurer le modèle et le fournisseur utilisés par chaque tâche auxiliaire. Chaque emplacement auxiliaire utilise les mêmes paramètres : provider, model, base_url (ainsi que api_key, timeout, extra_body et un paramètre reasoning_effort propre à chaque tâche).434

auxiliary:
  vision:                          # vision_analyze + browser screenshots
    provider: "auto"               # "auto" (= main model), "openrouter", "nous", "main", etc.
    model: ""                      # e.g. "openai/gpt-4o", "google/gemini-2.5-flash"
    base_url: ""                   # Custom OpenAI-compatible endpoint
    api_key: ""                    # Falls back to OPENAI_API_KEY
    timeout: 120
    download_timeout: 30
  approval:                        # dangerous-command approval classifier
    provider: "auto"
    model: ""
    timeout: 30
  compression:                     # summarizer -- legacy compression.summary_* keys migrate here (config v17)
    provider: "auto"
    model: ""
    base_url: ""
    timeout: 120
  title_generation:                # auto-generated session titles after the first exchange
    enabled: true                  # set false to disable auto-titles
    provider: "auto"
    model: ""
    language: ""                   # empty follows the conversation; e.g. "English" pins titles to one language
  tts_audio_tags:    { provider: "auto", model: "" }  # Gemini 3.1 TTS hidden audio-tag insertion
  skills_hub:        { provider: "auto", model: "" }  # skill matching and search
  mcp:               { provider: "auto", model: "" }  # MCP tool dispatch
  triage_specifier:  { provider: "auto", model: "" }  # hermes kanban specify: rough one-liner into a concrete spec, promoted to todo
  kanban_decomposer: { provider: "auto", model: "" }  # hermes kanban decompose: triage task into a graph of child tasks routed to specialist profiles
  profile_describer: { provider: "auto", model: "" }  # hermes profile describe --auto: 1-2 sentence profile descriptions

D’autres emplacements spécialisés suivent la même structure – goal_judge (évalue si le contrat /goal est satisfait), curator (le fork de vérification de l’utilisation des skill), background_review (le fork d’auto-amélioration exécuté après chaque tour), review (le sous-agent chargé de la révision via /review), moa_reference et moa_aggregator (Mixture-of-Agents), memory_query_rewrite, ainsi que monitor – et vous n’avez pas du tout besoin de modifier manuellement YAML : exécutez hermes model, puis choisissez « Configure auxiliary models » afin d’accéder à un sélecteur interactif pour chaque tâche.34

L’option de fournisseur "main" signifie « utiliser le même fournisseur que mon agent principal » – elle est valable uniquement dans auxiliary:, compression: et les entrées de repli principales (fallback_providers:, ou l’ancien fallback_model:). Elle n’est pas valable pour le paramètre de premier niveau model.provider. Si votre modèle principal utilise un endpoint personnalisé compatible avec OpenAI, définissez provider: custom dans votre section model:.4

Pourquoi est-ce important ? Puisque auto s’appuie déjà sur votre modèle principal, l’ancien piège selon lequel « il faut configurer OpenRouter, sinon les tâches auxiliaires se dégradent silencieusement » a disparu – le compromis porte désormais sur le coût. Si votre modèle principal est un modèle de raisonnement onéreux, confiez les tâches secondaires gourmandes en échanges à un modèle rapide et bon marché :

auxiliary:
  vision:
    provider: "openrouter"
    model: "google/gemini-2.5-flash"
  compression:
    provider: "openrouter"
    model: "google/gemini-2.5-flash"

Système de configuration

Hermes dispose d’un système de configuration en couches. Il est essentiel d’en comprendre l’ordre de priorité, car les couches supérieures remplacent les couches inférieures, et l’une d’elles est un registre global de fournisseurs qui n’apparaît pas dans config.yaml.

Organisation des fichiers de configuration

Selon la documentation officielle, voici les fichiers qui composent une configuration Hermes :4

~/.hermes/
├── config.yaml       # All settings (model, terminal, TTS, compression, memory, toolsets, ...)
├── .env              # Secrets (API keys, bot tokens, passwords)
├── auth.json         # OAuth provider credentials (Nous Portal, Codex, Anthropic)
├── SOUL.md           # Primary agent identity (slot #1 in system prompt)
├── memories/         # Persistent memory (MEMORY.md, USER.md)
├── skills/           # Bundled + agent-created + hub-installed skills
├── cron/             # Scheduled jobs
├── sessions/         # Gateway session state
└── logs/             # agent.log, gateway.log, errors.log (secrets auto-redacted)

config.yaml ou .env — lorsque les deux définissent un même paramètre, config.yaml l’emporte pour les paramètres non secrets.4 La règle est la suivante : - Secrets (clés API, tokens de bots, mots de passe) → .env - Tout le reste (modèle, backend du terminal, paramètres de compression, limites de mémoire, toolsets) → config.yaml

Les secrets peuvent être référencés depuis config.yaml à l’aide d’une interpolation de type shell :4

auxiliary:
  vision:
    api_key: ${GOOGLE_API_KEY}
    base_url: ${CUSTOM_VISION_URL}
  delegation:
    api_key: ${DELEGATION_KEY}

Gestion de la configuration

hermes config                # View current configuration
hermes config show           # Same as above
hermes config edit           # Open config.yaml in your editor
hermes config set KEY VAL    # Set a specific value
hermes config get KEY        # Print a single value (v0.19.0+)
hermes config unset KEY      # Remove a key so the default applies again (v0.19.0+)
hermes config path           # Print the config file path
hermes config env-path       # Print the .env file path
hermes config check          # Check for missing options (after updates)
hermes config migrate        # Interactively add missing options

Exemples :4

hermes config set model anthropic/claude-opus-4
hermes config set terminal.backend docker
hermes config set OPENROUTER_API_KEY sk-or-...   # Saves to .env

hermes config check et hermes config migrate sont les commandes à exécuter après chaque hermes update : elles détectent les nouvelles options de configuration qui ne figurent pas encore dans votre fichier.6

Ordre de priorité de la configuration

Hermes charge la configuration depuis plusieurs sources. Lorsque plusieurs sources définissent la même valeur, celle qui a la priorité la plus élevée l’emporte :4

  1. Arguments CLI — hermes chat --model anthropic/claude-sonnet-4 (remplacement pour une seule exécution)
  2. Variables d’environnement — appliquées au démarrage du processus
  3. config.yaml — le fichier de paramètres principal
  4. .env — secrets uniquement
  5. Valeurs par défaut intégrées — appliquées lorsqu’aucune autre source ne définit de valeur

Les options CLI l’emportent toujours pour l’exécution concernée. config.yaml constitue la source de référence à long terme.

Localisation (v0.13.0+)

La version v0.13.0 a ajouté 7 langues pour les messages de CLI et du gateway : chinois (simplifié), japonais, allemand, espagnol, français, ukrainien et turc.18 La version v0.14.0 traduit toutes les commandes du gateway ainsi que le tableau de bord web, ajoute 8 langues supplémentaires et porte leur nombre total à 16.19 Dans le tag v2026.8.31, l’arborescence locales/ contient 17 catalogues de messages – l’anglais et 16 traductions (af, ar, de, es, fr, ga, hu, it, ja, ko, pt, ru, tr, uk, zh-hant, zh).33 À l’heure actuelle, la documentation n’est traduite qu’en zh-Hans. La langue est déterminée à partir des variables d’environnement LC_ALL / LANG ou d’une clé locale: explicite dans config.yaml. L’anglais reste la langue par défaut et la source de référence pour toute chaîne qui n’a pas encore été traduite.

Profiles — plusieurs instances Hermes isolées

Les profiles vous permettent de disposer de plusieurs instances Hermes isolées, chacune avec sa propre configuration, ses propres sessions, skills, sa propre mémoire et son propre PID de gateway. Vous pouvez ainsi exécuter côte à côte un « Hermes professionnel » et un « Hermes personnel » sans que l’un puisse accéder à l’état de l’autre.6

hermes profile list
hermes profile create work --clone                  # Clone from current profile
hermes profile use work                             # Set sticky default
hermes profile alias work --name h-work             # Create wrapper script
hermes profile export work -o work-backup.tar.gz
hermes profile import work-backup.tar.gz --name restored
hermes -p work chat -q "Hello from work profile"    # One-off without switching

Chaque profile dispose de son propre HERMES_HOME (~/.hermes-<name>/ par défaut), ce qui permet à plusieurs profiles d’exécuter simultanément le gateway sans interférer les uns avec les autres.63

Depuis la version v0.21.2, la frontière d’isolation est renforcée : un ensemble de correctifs a éliminé de véritables fuites entre profiles dans les configurations avec gateway multiplexé, où des profiles secondaires pouvaient hériter des listes d’autorisation du profile par défaut, envoyer des identifiants à son hôte, transmettre les secrets de son coffre-fort à des serveurs MCP stdio ou joindre les fichiers .env/auth.json/state.db d’un autre profile à un envoi MEDIA: (#107609-#107630). Si vous multiplexez des profiles, le tag v0.21.2 est celui à partir duquel l’isolation annoncée est effectivement garantie – consultez Nouveautés de la version v0.21.2.48


Commandes CLI

Cette section constitue la référence pratique des commandes CLI de premier niveau. Pour consulter la référence officielle issue du code, reportez-vous à la référence des commandes CLI.6

Options globales

hermes [global-options] <command> [subcommand/options]
Option Description
--version, -V Affiche la version et quitte
--profile <name>, -p <name> Sélectionne le profile Hermes à utiliser
--resume <session>, -r <session> Reprend une session à partir de son ID ou de son titre
--continue [name], -c [name] Reprend la session la plus récente (ou recherche un titre correspondant)
--worktree, -w Démarre dans un worktree git isolé
--in <dir> Accède à DIR avant de démarrer ou de reprendre une session. Associée à --resume latest ou -c, cette option sélectionne la session la plus récente de l’espace de travail de DIR, puis maintient la session dans DIR (sans restaurer le répertoire de travail enregistré)27
--ignore-user-config Ignore ~/.hermes/config.yaml et revient aux valeurs par défaut intégrées (les identifiants stockés dans .env sont toujours chargés)27
--ignore-rules Désactive l’injection automatique de AGENTS.md, SOUL.md, .cursorrules, de la mémoire et des skills préchargés27
--tui Lance la TUI moderne à la place du REPL classique27
--cli Force le REPL prompt_toolkit classique (remplace display.interface=tui)27
--dev Avec --tui : exécute les sources TypeScript via tsx (sans build de distribution)27
--yolo Ignore les demandes d’approbation pour les commandes dangereuses
--safe-mode Option de dépannage — démarre Hermes dans un mode sécurisé minimal afin d’isoler les problèmes de démarrage (v0.19.0+)56
--pass-session-id Inclut l’ID de session dans le prompt système de l’agent

Commandes de premier niveau

Commande Fonction
hermes chat Conversation interactive ou ponctuelle
hermes model Choix interactif du fournisseur et du modèle par défaut
hermes gateway Exécution ou gestion du gateway de messagerie
hermes setup Assistant de configuration interactif
hermes auth Gestion des identifiants — ajout, affichage, suppression, réinitialisation et définition de la stratégie
hermes status Affichage de l’état de l’agent, de l’authentification et des plateformes
hermes cron Inspection et déclenchement du planificateur cron
hermes webhook Gestion des abonnements webhook dynamiques
hermes doctor Diagnostic des problèmes de configuration et de dépendances
hermes dump Résumé de la configuration, prêt à copier-coller pour l’assistance ou le débogage
hermes logs Consultation, suivi en direct et filtrage des journaux de l’agent, du gateway et des erreurs
hermes config Affichage, modification, migration et interrogation de la configuration
hermes pairing Approbation ou révocation des codes d’appairage de messagerie
hermes skills Parcours, installation, publication et audit des skills
hermes honcho Gestion de la mémoire Honcho entre les sessions. Conditionnée par un plugin : la documentation précise que « les sous-commandes propres aux plugins (par exemple hermes honcho) s’enregistrent automatiquement lorsque leur fournisseur est actif » ; elle n’apparaît donc pas dans hermes --help sauf si Honcho est le fournisseur de mémoire actif6
hermes memory Configuration du fournisseur de mémoire externe
hermes acp Exécution de Hermes en tant que serveur ACP (intégration à un éditeur)
hermes mcp Gestion de la configuration du serveur MCP ; exécution de Hermes en tant que serveur MCP
hermes plugins Gestion des plugins
hermes tools Configuration des outils activés pour chaque plateforme
hermes sessions Parcours, exportation, nettoyage et suppression des sessions. La v0.19.0 étend hermes sessions export aux formats Markdown, Quarto, HTML, prompt uniquement et trace Hugging Face, avec une passe facultative --redact de suppression des secrets ainsi que des filtres par ancienneté, espace de travail et plateforme56 ; hermes sessions recover reconstruit les données de session canoniques depuis un state.db endommagé dans une NOUVELLE base de données distincte, hors ligne et sans opération destructive, tandis que --inspect-only indique si les tables canoniques sont lisibles sans en créer une (procédure de récupération recommandée depuis la v0.21.2)48 ; hermes sessions set-journal-mode delete\|wal (période de la v0.21.4) convertit hors ligne un stockage entre les modes WAL et journal de restauration — la commande refuse d’agir tant qu’un processus externe détient la base de données ou un fichier annexe, change de mode sans attendre la fermeture des processus qui l’ont ouverte, vérifie ensuite les octets 18/19 de l’en-tête SQLite et accepte --db pour cibler un stockage autre que celui par défaut. Arrêtez d’abord le gateway, le dashboard et chaque CLI ; sous Windows, où aucune détection des processus détenteurs n’est disponible, la commande refuse d’agir tant que vous n’avez pas fourni --force après avoir vous-même arrêté tous les processus Hermes. Le dispatch fonctionne volontairement hors ligne afin que la commande n’ouvre jamais le stockage qu’elle convertit, et hermes doctor oriente désormais vers cette commande51
hermes insights Affichage des analyses de tokens, de coûts et d’activité
hermes claw Utilitaires de migration OpenClaw
hermes profile Gestion des profiles (plusieurs instances isolées)
hermes completion Affichage des scripts d’autocomplétion du shell (bash/zsh)
hermes whatsapp Configuration et appairage du pont WhatsApp
hermes --version (-V) Affichage des informations de version. Il s’agit d’une option globale, pas d’une sous-commande : dans le tag v2026.8.31, l’ensemble _BUILTIN_SUBCOMMANDS ne comporte aucune entrée version et le chemin de démarrage rapide reconnaît uniquement --version / -V27
hermes update Récupération du code le plus récent et réinstallation des dépendances
hermes uninstall Suppression de Hermes du système (--full supprime également la configuration et les données)
hermes backup Sauvegarde complète de la configuration, des sessions, des skills et de la mémoire (v0.9.0+)16
hermes import Restauration depuis une archive de sauvegarde — pour migrer entre des machines ou revenir à un état antérieur (v0.9.0+)16
hermes dashboard Lancement du dashboard web local permettant de gérer l’agent depuis un navigateur (v0.9.0+)16
hermes serve Exécution sans interface du serveur API backend — depuis la v0.19.0, il ne compile ni ne monte plus l’interface web56
hermes debug share Envoi d’un rapport de débogage complet vers un pastebin afin de le partager lors d’un dépannage (v0.9.0+)16
hermes approvals Outils de demande d’approbation : suggest analyse l’historique des approbations pour proposer des entrées command_allowlist ; test simule la décision d’approbation d’une commande sans l’exécuter (« ne l’exécute jamais », avec --backend et --json). Les notes de version de la v0.21.0 présentent cette simulation sous le nom hermes approval-check, mais aucune sous-commande approval-check n’existe dans le tag v2026.8.31 — l’interface disponible est hermes approvals test2740
hermes bundles Création, affichage et gestion des bundles de skills (alias regroupant plusieurs skills sous une même commande slash /<name>)27
hermes checkpoints Inspection, nettoyage et effacement de ~/.hermes/checkpoints/, le stockage fantôme utilisé par /rollback ; exécutez la commande sans argument pour obtenir un aperçu de son état27
hermes computer-use Gestion du backend Computer Use (cua-driver) (macOS/Windows/Linux)27
hermes console Ouverture de la console de commandes sécurisée de Hermes27
hermes curator Maintenance des skills en arrière-plan (curator) : état, exécution, pause et épinglage27
hermes egress Gestion du pare-feu d’injection d’identifiants sortants iron-proxy pour les sandboxes de terminal distantes (désactivé par défaut)27
hermes fallback Gestion des fournisseurs de secours, sollicités en cas d’échec du modèle principal27
hermes hooks Inspection et gestion des hooks de scripts shell : list, test <event>, revoke et doctor (bit d’exécution, liste d’autorisation, dérive mtime, validité de JSON, durée d’une exécution synthétique)27
hermes import-agent Importation dans Hermes d’une configuration Claude Code (~/.claude) ou Codex CLI (~/.codex)27
hermes desktop (alias gui) Compilation et lancement de l’application de bureau Electron native27
hermes kanban Tableau de collaboration entre plusieurs profiles (tâches, liens, commentaires), avec des tableaux, un graphe d’essaim (swarm : workers parallèles → vérificateur → synthétiseur) et un dispatcher27
hermes login / hermes logout Obsolètes. Utilisez hermes auth pour gérer les identifiants, hermes model pour sélectionner un fournisseur ou hermes setup pour une configuration complète27
hermes lsp Gestion du Language Server Protocol : status, list, install <server>, install-all et restart (arrête les clients LSP en cours d’exécution ; la prochaine modification les relance)27
hermes migrate Migration de la configuration pour les modèles retirés ou les paramètres obsolètes27
hermes moa Configuration des emplacements de fournisseurs et de modèles Mixture of Agents (préréglages nommés pouvant être sélectionnés dans le sélecteur de modèle)27
hermes journey (alias learning, memory-graph) Chronologie des skills appris et des souvenirs au fil du temps27
hermes monitoring Inspection du suivi du gateway (exportation de l’état de santé et des diagnostics) ; status affiche les paramètres, l’état des exportations et les mesures de masquage27
hermes pause / hermes resume Arrêt d’urgence : pause interrompt le dispatch cron/kanban et les nouveaux tours du gateway ; resume lève l’interruption27
hermes peer Messages privés de bot à bot entre plusieurs machines : add, list et remove gèrent les gateways Hermes pairs, tandis que dm envoie un message à un agent sur l’un d’eux et affiche sa réponse27
hermes pets Parcours, installation et sélection d’animaux animés petdex27
hermes portal Configuration de Nous Portal (connexion, choix du modèle, Tool Gateway) : login (par défaut), info, open, tools ; consultez Nous Tool Gateway2728
hermes project Gestion des projets (espaces de travail nommés comprenant plusieurs dossiers) : création, affichage, consultation, ajout/suppression de dossiers, changement de nom, définition du dossier principal, utilisation, archivage, restauration et association à un tableau kanban27
hermes proxy Proxy local compatible avec OpenAI vers les fournisseurs OAuth : start, status, providers27
hermes prompt-size Affichage de la répartition en octets du prompt système et des schémas d’outils ; fonctionne hors ligne27
hermes send Envoi d’un message à une plateforme configurée, sans boucle d’agent ni LLM (scripts, tâches cron, CI)27
hermes skin Affichage, changement et ajustement des thèmes (list, use, set)27
hermes slack Utilitaires d’intégration Slack : manifest affiche ou écrit un manifeste d’application Slack dans lequel chaque commande du gateway est enregistrée comme commande slash native27
hermes sync Synchronisation des skills entre vos appareils et avec votre équipe : status, pull, push, now, enable, disable, device, propose27
hermes whatsapp-cloud Configuration de l’intégration API WhatsApp Business Cloud (distincte du pont de compte personnel Baileys hermes whatsapp)27
hermes worktree Audit et récupération des worktrees git et des branches fusionnées accumulés. list (alias ls, audit ; commande par défaut) classe chaque arborescence selon son ancienneté, sa taille, le verdict et sa justification ; prune supprime les arborescences sûres et les branches locales entièrement fusionnées. Les deux acceptent --repo <root> ; prune propose également --dry-run (affichage du plan sans aucune modification), --trees-only et --branches-only. La commande ne supprime jamais les modifications suivies non validées, les commits uniques non poussés ou les arborescences en cours d’utilisation ; les brouillons composés uniquement de fichiers non suivis sont archivés dans ~/.hermes/archive/worktree-prune/ avant leur suppression27
hermes secrets Gestion des sources externes de secrets (Bitwarden, 1Password) permettant de récupérer les clés API au démarrage du processus27
hermes security Audit de la chaîne d’approvisionnement (OSV.dev) pour le venv, les plugins et les serveurs MCP (audit)27
hermes verify Détection de la procédure d’exécution d’un projet et réalisation d’un test rapide27

hermes chat — Le point d’entrée principal

Exécuté sans argument, hermes ouvre une conversation interactive. hermes chat en est la forme explicite, avec les options suivantes :6

hermes chat -q "Summarize the latest PRs" --oneshot # Answer and exit (without --oneshot, a TTY seeds an interactive session)
hermes chat --provider openrouter --model anthropic/claude-sonnet-4.6
hermes chat --toolsets web,terminal,skills          # Enable specific toolsets
hermes chat --quiet -q "Return only JSON"           # Programmatic mode
hermes chat --worktree -q "Review repo and open a PR"

Options principales :

Option Description
-q, --query "..." Requête à exécuter. Modification apportée dans la v0.21.0 : sur un véritable TTY, elle initialise désormais une session interactive (la requête est soumise telle quelle lors du premier tour) ; associée à --oneshot ou -Q, ou sur un environnement non-TTY, elle répond puis quitte — soit l’ancien comportement ponctuel40
--query-file PATH Lit l’unique requête depuis un fichier plutôt que depuis la ligne de commande (- lit stdin). Aucun élément n’est interprété par le shell : les guillemets, $(...) et les accents graves sont donc transmis tels quels ; option mutuellement exclusive avec -q51
--oneshot Avec -q/--query-file : répond à la requête puis quitte (ancien comportement de requête unique). Implicite avec des flux stdio non-TTY ainsi qu’avec -Q/--quiet40
-m, --model <model> Remplace le modèle pour cette exécution
-t, --toolsets <csv> Active un ensemble de toolsets séparés par des virgules
--provider <provider> Impose un fournisseur (consultez la liste complète)
-s, --skills <name> Précharge un ou plusieurs skills pour cette session
-v, --verbose Affichage détaillé
-Q, --quiet Mode programmatique (sans bannière, indicateur de chargement ni aperçu)
--format <fmt> Format de sortie du mode requête unique (-q ou --query-file) : text (par défaut) affiche la réponse finale en texte brut ; stream-json émet des événements JSON séparés par des sauts de ligne (JSONL) — un événement system/init, des deltas text, des événements tool_use/tool_result, puis une enveloppe terminale result contenant le code de sortie, le texte final et les statistiques de tokens. stream-json implique --quiet, exige -q ou --query-file (code de sortie 2 en leur absence) et ne peut pas être associé à --tui ; les diagnostics et l’ID de session restent sur stderr, tandis que la sortie des outils est limitée à 5 000 caractères par événement (période de la v0.21.4)51
--resume <session> Reprend une session directement depuis chat
--worktree Crée un worktree git isolé
--checkpoints Active les checkpoints du système de fichiers avant les modifications destructives
--yolo Ignore les demandes d’approbation
--source <tag> Étiquette de source de la session (par défaut : cli ; utilisez tool pour les intégrations)
--max-turns <N> Nombre maximal d’itérations d’appel d’outils par tour de conversation (500 par défaut depuis la v0.20.0, ou valeur de agent.max_turns dans la configuration)40

hermes setup — Assistant complet

Exécute l’assistant de configuration complet ou ouvre directement l’une de ses sections :6

hermes setup                 # Full wizard
hermes setup model           # Provider and model only
hermes setup terminal        # Terminal backend only
hermes setup gateway         # Messaging platforms only
hermes setup tools           # Tool enable/disable per platform
hermes setup agent           # Agent behavior only
hermes setup --non-interactive
hermes setup --reset         # Reset config to defaults before setup

hermes logs — Interrogation structurée des journaux

hermes logs est plus puissant que tail -f sur les fichiers journaux, car il permet de filtrer simultanément par niveau, ID de session et plage temporelle.6

hermes logs                          # Last 50 lines of agent.log
hermes logs -f                       # Follow in real time
hermes logs gateway -n 100           # Last 100 lines of gateway.log
hermes logs --level WARNING --since 1h   # Warnings from the last hour
hermes logs --session abc123         # Filter by session ID substring
hermes logs errors --since 30m -f    # Follow errors.log from 30m ago
hermes logs list                     # List all log files with sizes

Les fichiers journaux se trouvent dans ~/.hermes/logs/ :6 - agent.log — toute l’activité de l’agent (appels API, dispatch d’outils, cycle de vie des sessions, niveau INFO et supérieur) - errors.log — avertissements et erreurs uniquement (sous-ensemble filtré de agent.log) - gateway.log — activité du gateway de messagerie (connexions aux plateformes, dispatch, webhooks)

La rotation est automatique grâce au RotatingFileHandler de Python — recherchez agent.log.1, agent.log.2, etc.6

hermes doctor — Diagnostics

hermes doctor [--fix] est la première commande à exécuter lorsqu’un problème survient. Elle vérifie la validité de la configuration, la présence des dépendances, la disponibilité des clés API et l’état des services, puis peut tenter des réparations automatiques avec --fix.6

Pour partager les diagnostics avec quelqu’un, utilisez hermes dump — cette commande produit un résumé compact en texte brut, avec les clés API masquées, prêt à être collé dans une issue GitHub ou une discussion Discord.6


Commandes slash

Les commandes slash s’exécutent au sein d’une session de chat active (CLI ou plateforme de messagerie). Elles sont distribuées depuis un COMMAND_REGISTRY partagé dans hermes_cli/commands.py, ce qui explique pourquoi la plupart fonctionnent de manière identique sur toutes les interfaces.9

Contrôle de la session

Commande Description
/new (alias /reset) Démarrer une nouvelle session
/clear Effacer l’écran et démarrer une nouvelle session
/history Afficher l’historique de la conversation
/save Enregistrer la conversation en cours
/retry Réessayer le dernier message
/undo Supprimer le dernier échange utilisateur/assistant
/title <name> Définir un titre pour la session en cours
/compress Compresser manuellement le contexte de la conversation
/rollback [number] Répertorier ou restaurer les checkpoints du système de fichiers
/stop Arrêter tous les processus d’arrière-plan en cours d’exécution
/status Afficher les informations sur la session, le modèle, les tokens et le contexte — depuis la période de la v0.20.5, cette commande indique également le mode de raisonnement, les approbations en attente et l’utilisation du contexte4035
/queue <prompt> Mettre un prompt en file d’attente pour le prochain tour. Attention : /q est revendiqué à la fois par /queue et /quit ; le dernier enregistrement l’emporte et, en pratique, /q correspond à /quit — saisissez toujours /queue explicitement.9
/resume [name] Reprendre une session précédemment nommée
/statusbar (alias /sb) Afficher ou masquer la barre d’état du contexte et du modèle
/background <prompt> (alias /bg) Exécuter un prompt dans une session d’arrière-plan distincte
/btw <question> Poser une question annexe éphémère (sans outils et non conservée)
/plan [request] Charger le skill plan intégré afin de rédiger un plan au lieu de l’exécuter
/branch [name] (alias /fork) Créer une branche à partir de la session en cours
/goal <target> Verrouiller l’agent sur un objectif afin qu’il reste concentré d’un tour à l’autre. Le modèle de boucle Ralph devient ainsi une primitive de premier ordre. Le budget de tours est configurable. Nouveauté de la v0.13.0.18
/subgoal <criterion> Ajouter des critères de réussite à un /goal actif sans redémarrer la boucle. Nouveauté de la v0.14.0.19
/handoff <target> Transférer la session active — messages, appels d’outils et contexte — vers un autre modèle, persona ou profile. Nouveauté de la v0.14.0.19
/worktree [new [name]\|list\|prune [--dry-run]] Examiner, créer ou récupérer des worktrees git isolés sans quitter la session. new crée un worktree sous .worktrees/ dans le dépôt et y déplace la session ; list les répertorie ; prune effectue la même récupération supervisée que hermes worktree prune et, selon la documentation, « ne touche jamais au worktree dans lequel s’exécute la session »27

Configuration et modèle

Commande Description
/config Afficher la configuration actuelle
/model [model-name] Afficher ou modifier le modèle actuel
/provider Afficher les fournisseurs disponibles et le fournisseur actuel
/personality [name] Définir une couche de personnalité
/verbose Parcourir les modes d’affichage de la progression des outils
/reasoning Gérer l’effort de raisonnement et son affichage. La v0.19.0 ajoute les niveaux d’effort max et ultra et limite /reasoning à la session, tout en ajoutant dans la configuration des réglages d’effort propres à chaque modèle et à chaque emplacement MoA56
/skin Afficher ou modifier l’habillage ou le thème de l’interface
/voice [on\|off\|tts\|status] Activer ou désactiver le mode vocal de CLI
/yolo Activer ou désactiver le mode YOLO (ignorer les demandes d’approbation). Depuis la v0.19.0, les règles de refus définies par l’utilisateur continuent de bloquer les commandes correspondantes, même en mode YOLO56
/fast Activer ou désactiver le mode Fast — traitement prioritaire pour les modèles OpenAI et Anthropic (v0.9.0+)16
/debug Effectuer un diagnostic rapide sur toutes les plateformes (v0.9.0+)16
/subscription Gérer votre abonnement Nous Portal depuis le terminal — formule et quota restant, aperçu du coût d’une montée ou d’une baisse en gamme, application avec possibilité d’annulation (v0.19.0+)56
/topup Ajouter du crédit à votre solde Nous Portal sans quitter le terminal (v0.19.0+)56

La commande /model est l’outil principal pour changer de fournisseur en cours de session :9

/model                              # Show current model and options
/model claude-sonnet-4              # Switch model (auto-detect provider)
/model zai:glm-5                    # Switch provider:model
/model custom:qwen-2.5              # Use model on custom endpoint
/model custom                       # Auto-detect model from custom endpoint
/model custom:local:qwen-2.5        # Named custom provider
/model openrouter:anthropic/claude-sonnet-4   # Back to cloud

La v0.19.0 ajoute /model --once — un changement de modèle limité à un seul tour, avec retour automatique au modèle précédent après la réponse.56 Depuis la période de la v0.20.5, le sélecteur /model propose également une recherche approximative : il filtre les résultats à mesure que vous saisissez du texte.2335

Outils, skills et informations

Commande Description
/tools [list\|disable\|enable] [name...] Gérer les outils de la session en cours
/toolsets Répertorier les toolsets disponibles
/browser [connect\|disconnect\|status] Gérer la connexion CDP à Chrome local
/skills Rechercher, installer, examiner ou gérer des skills
/cron Gérer les tâches planifiées
/reload-mcp Recharger les serveurs MCP depuis config.yaml
/plugins Répertorier les plugins installés
/help Afficher toutes les commandes
/usage Afficher l’utilisation des tokens, le coût et la durée
/insights Afficher les statistiques d’utilisation des 30 derniers jours
/platforms Afficher l’état des plateformes de messagerie
/profile Afficher le nom et le répertoire personnel du profile actif
/palette Ouvrir la palette de commandes avec recherche approximative (également avec Ctrl+P) — rechercher ainsi chaque commande et chaque skill. Ajoutée durant la période de la v0.20.54035

Commandes slash dynamiques des skills

Chaque skill installé est automatiquement exposé sous forme de commande slash :9

/gif-search funny cats
/axolotl help me fine-tune Llama 3 on my dataset
/github-pr-workflow create a PR for the auth refactor
/excalidraw       # Just the skill name loads it and lets the agent ask what you need

Depuis la v0.19.0, les appels de skills par commande slash se cumulent : /skill-a /skill-b do XYZ charge les deux skills dans l’ordre au cours d’un même tour, avec autocomplétion et texte fantôme pour les noms enchaînés.56

Vous pouvez également définir dans config.yaml des commandes rapides qui associent un nom court à un prompt plus long :9

quick_commands:
  review: "Review my latest git diff and suggest improvements"
  deploy: "Run the deployment script at scripts/deploy.sh and verify the output"
  morning: "Check my calendar, unread emails, and summarize today's priorities"

Saisissez ensuite /review, /deploy ou /morning dans CLI.

Correspondance par préfixe

Les commandes prennent en charge la correspondance par préfixe : la saisie de /h correspond à /help, tandis que /mod correspond à /model. Lorsqu’un préfixe est ambigu, le premier enregistrement selon l’ordre du registre l’emporte. Les noms complets des commandes et les alias enregistrés sont toujours prioritaires sur les correspondances par préfixe.9

Commandes propres aux plateformes de messagerie

Certaines commandes fonctionnent uniquement sur les plateformes de messagerie (Telegram, Discord, Slack, WhatsApp, Signal, Email, Home Assistant) :9

  • /status — afficher les informations sur la session (cette commande n’est plus réservée aux plateformes de messagerie ; consultez Contrôle de la session)
  • /sethome (alias /set-home) — définir le chat actuel comme accueil de la plateforme
  • /approve [session|always] — approuver une commande dangereuse en attente
  • /deny [reason] — refuser une commande dangereuse en attente. Depuis la v0.19.0, /deny <reason> transmet le motif de votre refus à l’agent afin qu’il rectifie son approche au lieu de réessayer à l’aveugle56
  • /update — mettre à jour Hermes Agent vers la dernière version
  • /commands [page] — parcourir toutes les commandes et tous les skills (avec pagination)

D’autres sont réservées à CLI : /skin, /tools, /toolsets, /browser, /config, /cron, /skills, /platforms, /paste, /statusbar, /plugins.9


Outils et toolsets

Hermes intègre un vaste registre d’outils couvrant la recherche sur le Web, l’automatisation du navigateur, l’exécution dans le terminal, la modification de fichiers, la mémoire, la délégation, l’entraînement par renforcement, l’envoi de messages, l’intégration à Home Assistant et bien plus encore.10 Les outils sont organisés en toolsets logiques qui peuvent être activés ou désactivés pour chaque plateforme.

Catégories principales

Catégorie Exemples Description
Web web_search, web_extract Rechercher sur le Web et extraire le contenu des pages
Terminal et fichiers terminal, process, read_file, patch Exécuter des commandes et manipuler des fichiers
Navigateur browser_navigate, browser_snapshot, browser_vision Automatiser le navigateur de manière interactive avec du texte et des fonctions de vision
Médias vision_analyze, video_analyze, video_generate, image_generate, text_to_speech Analyse et génération multimodales. video_analyze utilise Gemini en priorité et offre une prise en charge extensible des fournisseurs multimodaux compatibles (v0.13.0+). La v0.14.0 ajoute une fonctionnalité video_generate unifiée avec des backends de fournisseurs interchangeables et transmet les pixels bruts à vision_analyze lorsque le modèle actif prend en charge la vision.1819
Orchestration d’agents todo, clarify, execute_code, delegate_task Planification, clarification, exécution de code et délégation à des sous-agents
Utilisation de l’ordinateur computer_use Contrôle du bureau via le backend cua-driver ; depuis la v0.14.0, cette fonctionnalité est compatible avec les fournisseurs prenant en charge la vision autres que Anthropic.19
Mémoire et rappel memory, session_search Mémoire persistante et recherche dans les sessions
Automatisation et envoi cronjob, send_message Tâches planifiées et envoi de messages
Intégrations ha_*, outils MCP, rl_* Home Assistant, MCP, entraînement par renforcement

Les noms courants de toolsets comprennent web, terminal, file, browser, vision, image_gen, moa, skills, tts, todo, memory, session_search, cronjob, code_execution, delegation, clarify, homeassistant et rl.10

Gestion des outils

hermes chat --toolsets "web,terminal"       # Use specific toolsets
hermes tools                                # Interactive per-platform tool config
hermes tools --summary                      # Print enabled-tools summary

Les outils peuvent également être activés ou désactivés en cours de session avec /tools disable <name> et /tools enable <name>, ce qui réinitialise la session afin que le nouvel ensemble d’outils soit pris en compte.9

Backends de terminal

L’outil de terminal intègre 7 backends d’exécution et, depuis la v0.20.6, cet ensemble est extensible au moyen de plugins, comme le sélecteur de fournisseurs (voir ci-dessous) :1024

Backend Cas d’usage
local Exécution sur votre machine (par défaut) — développement et tâches de confiance
docker Conteneurs isolés — sécurité et reproductibilité
ssh Serveur distant — environnement isolé qui tient l’agent à l’écart de son propre code
singularity Conteneurs HPC — calcul en cluster sans privilèges root
modal Exécution serverless dans le cloud
daytona Espace de travail isolé dans le cloud — environnement de développement distant persistant
vercel_sandbox MicroVM Vercel Sandbox dans le cloud — exécution dans le cloud avec persistance du système de fichiers reposant sur des instantanés. Installez hermes-agent[vercel], définissez terminal.vercel_runtime (node24, node22 ou python3.13) et authentifiez-vous avec VERCEL_TOKEN, VERCEL_PROJECT_ID et VERCEL_TEAM_ID ; par défaut, la racine de l’espace de travail distant est /vercel/sandbox24

Changez de backend avec hermes config set terminal.backend <name> ou dans config.yaml :

terminal:
  backend: docker      # or: local, ssh, singularity, modal, daytona, vercel_sandbox
  cwd: "."             # Working directory
  timeout: 180         # Command timeout in seconds

Backends de plugins (v0.20.6+). Les fournisseurs tiers d’environnements isolés n’ont plus besoin d’intégrer le dépôt principal : un plugin enregistre un TerminalEnvironmentProvider au chargement via PluginContext.register_terminal_environment_provider, puis le nom enregistré peut être sélectionné dans terminal.backend exactement comme celui d’un backend intégré. Les noms intégrés sont réservés — le registre refuse tout fournisseur dont le nom entre en conflit avec un backend présent dans le dépôt — et un backend enregistré est automatiquement pris en charge par toutes les interfaces principales (sélecteur de backend de hermes setup, état des sondes dans le tableau de bord, vérifications de hermes doctor, gestion des chemins et du répertoire de travail dans les conteneurs, suppression des secrets), car le cœur consulte le registre à chaque point de classification au lieu d’utiliser une liste de noms codée en dur.32

Backend SSH (recommandé pour des raisons de sécurité — l’agent ne peut pas modifier son propre code) :10

terminal:
  backend: ssh
# In ~/.hermes/.env
TERMINAL_SSH_HOST=my-server.example.com
TERMINAL_SSH_USER=myuser
TERMINAL_SSH_KEY=~/.ssh/id_rsa

Backend Docker :

terminal:
  backend: docker
  docker_image: python:3.11-slim

Ressources des conteneurs (s’applique à docker, singularity, modal et daytona) :10

terminal:
  container_cpu: 1
  container_memory: 5120          # MB (default 5GB)
  container_disk: 51200           # MB (default 50GB)
  container_persistent: true      # Persist filesystem across sessions

Avec container_persistent: true, les paquets installés, les fichiers et la configuration sont conservés d’une session à l’autre.10

Tous les backends de conteneurs appliquent un renforcement de la sécurité : système de fichiers racine en lecture seule (Docker), suppression de toutes les capacités Linux à l’exception de DAC_OVERRIDE, CHOWN et FOWNER, interdiction de l’élévation de privilèges, limites de PID (256 processus), isolation complète des espaces de noms et espace de travail persistant au moyen de volumes.10

Processus en arrière-plan

L’outil de terminal prend en charge l’exécution en arrière-plan avec une gestion explicite des processus :10

terminal(command="pytest -v tests/", background=true)
# Returns: {"session_id": "proc_abc123", "pid": 12345}

process(action="list")                            # Show all running processes
process(action="poll", session_id="proc_abc123")  # Check status
process(action="wait", session_id="proc_abc123")  # Block until done
process(action="log", session_id="proc_abc123")   # Full output
process(action="kill", session_id="proc_abc123")  # Terminate
process(action="write", session_id="proc_abc123", data="y")  # Send input

Le mode PTY (pty=true) permet d’utiliser des outils interactifs CLI tels que Codex et Claude Code.10

Sudo

Si une commande nécessite sudo, Hermes vous demande votre mot de passe, qui est mis en cache pour la durée de la session. Vous pouvez également définir SUDO_PASSWORD dans ~/.hermes/.env.10


Kanban multi-agent (v0.13.0+)

La v0.13.0 fait de la collaboration multi-agent un mécanisme de premier ordre : un tableau Kanban persistant qui suit les tâches, leur état et l’identité des workers d’un agent à l’autre et après les redémarrages.18 C’est ce tableau qui permet à un essaim de workers Hermes de réellement terminer son travail au lieu de rester bloqué à cause de relais interrompus.

Mécanisme Fonctionnement
Signaux d’activité Chaque worker émet régulièrement un signal tant qu’il est responsable d’une tâche. En cas de signal manqué, le worker est considéré comme suspect et la tâche est libérée afin de pouvoir être reprise.
Reprise Un autre worker peut reprendre une tâche abandonnée, avec son état complet et les résultats partiels précédents.
Détection des zombies Les workers qui s’arrêtent sans marquer une tâche comme terminée ne peuvent plus en réclamer de nouvelles, ce qui empêche l’essaim d’accumuler des identités inactives.
Filtre anti-hallucination Lorsqu’un résultat échoue au contrôle, la tâche est renvoyée au tableau avec le motif indiqué au lieu d’être marquée comme terminée.
max_retries par tâche Remplacez le nombre maximal de nouvelles tentatives par défaut pour une tâche que vous savez fragile.
Tableaux multiprojets Un même répertoire personnel Hermes peut héberger plusieurs tableaux indépendants.

Le tableau Kanban s’associe naturellement à /goal (boucle Ralph avec objectif verrouillé) pour définir la cible, ainsi qu’à l’outil delegate_task existant pour la création de workers. Il en résulte un modèle d’essaim dans lequel chaque agent partage une source de vérité unique indiquant la prochaine tâche à accomplir, la personne qui s’en charge et les éventuels blocages.

Qu’est-ce qu’un essaim Hermes ?

Un essaim regroupe plusieurs workers Hermes exécutés en parallèle à partir d’un même tableau Kanban. Ce n’est pas un sous-système distinct à activer — c’est ce que le tableau rend possible. Celui-ci fournit l’unique élément que des agents parallèles ne peuvent pas produire eux-mêmes : une réponse unique faisant autorité à la question que dois-je prendre en charge ensuite, et quelqu’un s’en occupe-t-il déjà ?

La v0.15.0 a fait de ce modèle une topologie officiellement prise en charge en ajoutant une topologie d’essaim pour la coordination de workers parallèles, la décomposition automatique d’un objectif général en sous-tâches, le remplacement du modèle par tâche, les tâches planifiées et la gestion des worktrees, afin que les workers parallèles ne se gênent pas dans le même checkout.59

Problème dans une configuration multi-agent rudimentaire Ce que fait le tableau à la place
Deux workers prennent la même tâche La tâche est attribuée à un worker dont l’identité est enregistrée
Un worker s’arrête en cours de tâche et son travail disparaît Après l’interruption de son signal d’activité, la tâche est reprise avec les résultats partiels précédents
Un worker ayant planté continue de « détenir » des tâches indéfiniment La détection des zombies l’empêche de réclamer de nouvelles tâches
Un modèle coûteux est utilisé pour chaque sous-tâche Le modèle peut être remplacé pour chaque tâche — des modèles économiques sont utilisés pour les sous-tâches mécaniques
Des workers parallèles modifient les mêmes fichiers La gestion des worktrees isole le checkout de chaque worker

En pratique : donnez un objectif à l’essaim, laissez la décomposition automatique le convertir en tâches sur le tableau, puis laissez les workers les réclamer, les exécuter et renvoyer leurs résultats. Le nombre maximal de nouvelles tentatives est défini par tâche (max_retries), afin qu’une seule sous-tâche fragile n’épuise pas la tolérance de toute l’exécution. Grâce à la persistance du tableau, un essaim survit aux redémarrages — les workers se reconnectent et reprennent leur travail à partir du même état.

La qualité d’un essaim dépend de sa décomposition. Le tableau coordonne les workers ; il ne transforme pas un objectif mal découpé en un bon objectif. Les tâches qui partagent un état caché continueront d’entrer en conflit, avec ou sans worktrees.


Système de skills

Les skills sont des documents de connaissances à la demande que l’agent peut charger lorsqu’il en a besoin. Ils suivent un modèle de divulgation progressive afin de réduire au minimum l’utilisation de tokens et sont compatibles avec le standard ouvert agentskills.io.11

Tous les skills se trouvent dans ~/.hermes/skills/ — le dossier principal et la source de vérité. Lors d’une nouvelle installation, les skills inclus sont copiés depuis le dépôt. Les skills installés depuis un hub et ceux créés par l’agent y sont également stockés.11

Divulgation progressive

Level 0: skills_list()           → [{name, description, category}, ...]   (~3k tokens)
Level 1: skill_view(name)        → Full content + metadata                 (varies)
Level 2: skill_view(name, path)  → Specific reference file                 (varies)

L’agent ne charge le contenu complet du skill que lorsqu’il en a réellement besoin.11

Format SKILL.md

---
name: my-skill
description: Brief description of what this skill does
version: 1.0.0
platforms: [macos, linux]      # Optional — restrict to OS platforms
metadata:
  hermes:
    tags: [python, automation]
    category: devops
    fallback_for_toolsets: [web]     # Conditional activation
    requires_toolsets: [terminal]    # Conditional activation
    config:                          # Config.yaml settings
      - key: my.setting
        description: "What this controls"
        default: "value"
        prompt: "Prompt for setup"
---

# Skill Title

## When to Use
Trigger conditions for this skill.

## Procedure
1. Step one
2. Step two

## Pitfalls
- Known failure modes and fixes

## Verification
How to confirm it worked.

Activation conditionnelle

Les skills peuvent s’afficher ou se masquer selon les outils disponibles. Cette fonctionnalité est particulièrement utile pour les skills de secours — des solutions gratuites ou locales qui ne doivent apparaître que lorsqu’un outil premium est indisponible :11

Champ Comportement
fallback_for_toolsets Skill masqué lorsque les toolsets indiqués sont disponibles
fallback_for_tools Même comportement, mais vérifie les outils individuellement
requires_toolsets Skill masqué lorsque les toolsets indiqués sont indisponibles
requires_tools Même comportement, mais vérifie les outils individuellement

Exemple : le skill intégré duckduckgo-search utilise fallback_for_toolsets: [web]. Lorsque FIRECRAWL_API_KEY est défini, le toolset web est disponible et l’agent utilise web_search — le skill DuckDuckGo reste masqué. Sans la clé API, le skill DuckDuckGo apparaît automatiquement comme solution de secours.11

Skills gérés par l’agent

L’agent peut créer, mettre à jour et supprimer ses propres skills à l’aide de l’outil skill_manage. Il s’agit de la mémoire procédurale de l’agent — lorsqu’il met au point un workflow complexe, il enregistre la méthode sous forme de skill afin de pouvoir la réutiliser ultérieurement.11

Quand l’agent crée des skills :11 - Après avoir mené à bien une tâche complexe (au moins 5 appels d’outils) - Lorsqu’il a rencontré des erreurs ou des impasses avant de trouver la bonne méthode - Lorsque l’utilisateur a corrigé son approche - Lorsqu’il a découvert un workflow complexe

Actions :11

Action Utilisation
create Créer un skill de toutes pièces
patch Apporter des corrections ciblées (méthode privilégiée — la plus économe en tokens)
edit Effectuer des réécritures structurelles majeures
delete Supprimer entièrement un skill
write_file Ajouter ou mettre à jour des fichiers complémentaires
remove_file Supprimer un fichier complémentaire

Hub de skills

Parcourez, recherchez, installez et gérez des skills provenant de registres en ligne :611

hermes skills browse                          # Browse all hub skills
hermes skills browse --source official        # Browse official optional skills
hermes skills search kubernetes               # Search all sources
hermes skills search react --source skills-sh # Search skills.sh directory
hermes skills inspect openai/skills/k8s       # Preview before installing
hermes skills install openai/skills/k8s       # Install with security scan
hermes skills install skills-sh/anthropics/skills/pdf --force
hermes skills check                           # Check for upstream updates
hermes skills update                          # Reinstall changed hub skills
hermes skills audit                           # Re-scan installed hub skills
hermes skills uninstall k8s
hermes skills publish skills/my-skill --to github --repo owner/repo
hermes skills tap add myorg/skills-repo       # Add custom GitHub source

Sources de hub intégrées :11

Source Exemple Remarques
official official/security/1password Skills facultatifs fournis avec Hermes (confiance intégrée)
skills-sh skills-sh/vercel-labs/agent-skills/vercel-react-best-practices Répertoire public de skills de Vercel
well-known well-known:https://mintlify.com/docs/.well-known/skills/mintlify Découverte par URL depuis des sites publiant /.well-known/skills/index.json
github openai/skills/k8s Installations directes depuis un dépôt ou un chemin GitHub
clawhub — Place de marché tierce de skills
lobehub — Conversion du catalogue d’agents LobeHub
browse-sh — Source de skills Browserbase

Taps GitHub par défaut (consultables sans configuration) : openai/skills, anthropics/skills, huggingface/skills, NVIDIA/skills, garrytan/gstack. La source claude-marketplace a été supprimée dans la version v0.20.0 ; browse-sh l’a remplacée dans la liste des sources.1155

Analyse de sécurité

Tous les skills installés depuis un hub passent par un scanner de sécurité qui recherche les exfiltrations de données, les injections de prompt, les commandes destructrices, les signaux liés à la chaîne d’approvisionnement et d’autres menaces.11

Niveaux de confiance :11

Niveau Source Politique
builtin Fourni avec Hermes Toujours approuvé
official optional-skills/ dans le dépôt Confiance intégrée, sans avertissement relatif aux tiers
trusted Registres de confiance (openai/skills, anthropics/skills) Politique plus permissive
community Tout le reste Les résultats non dangereux peuvent être ignorés avec --force ; les verdicts dangerous restent bloqués

--force permet de contourner les blocages de politique non dangereux pour les skills communautaires. Cette option ne permet pas de contourner un verdict d’analyse dangerous.11

Dossiers de skills externes

Vous pouvez indiquer à Hermes des dossiers de skills supplémentaires à analyser en parallèle du dossier local :11

skills:
  external_dirs:
    - ~/.agents/skills
    - /home/shared/team-skills
    - ${SKILLS_REPO}/skills

Les chemins prennent en charge le développement de ~ et la substitution des variables d’environnement ${VAR}. Les dossiers externes sont en lecture seule — lorsque l’agent crée ou modifie un skill, il écrit toujours dans ~/.hermes/skills/. La version locale est prioritaire si un skill portant le même nom existe aux deux endroits.11

Skills épinglés : skills.auto_load (période de la v0.21.4)

Les noms de skills indiqués sous skills.auto_load dans config.yaml sont épinglés et entièrement chargés dans chaque nouvelle session – CLI, TUI, gateway, cron et API inclus :51

skills:
  auto_load:
    - team-conventions
    - deploy-checklist

La liste n’est résolue qu’une seule fois, lors de la première génération du prompt de l’agent ; un nom manquant ou désactivé déclenche un avertissement et est ignoré au lieu de faire échouer la session, tandis que HERMES_IGNORE_RULES (le mécanisme sous-jacent à --ignore-rules) supprime cette liste comme le reste du contexte injecté automatiquement. C’est le complément permanent de -s/--skills, qui précharge des skills pour une seule session.51


Mémoire persistante

Hermes dispose d’une mémoire limitée et organisée qui persiste d’une session à l’autre. Deux fichiers constituent la mémoire de l’agent, tous deux stockés dans ~/.hermes/memories/ :12

Fichier Fonction Limite de caractères
MEMORY.md Notes personnelles de l’agent — informations sur l’environnement, conventions, enseignements tirés 2 200 caractères (~800 tokens)
USER.md Profil de l’utilisateur — préférences, style de communication, attentes 1 375 caractères (~500 tokens)

Tous deux sont injectés dans le prompt système sous forme d’instantané figé au début de la session. L’agent gère sa propre mémoire avec l’outil memory — add, replace ou remove.12

Principe de l’instantané figé : l’injection dans le prompt système est capturée une seule fois au début de la session et ne change jamais en cours de session. Ce comportement est intentionnel : il préserve le cache de préfixe du LLM pour améliorer les performances. Les modifications effectuées pendant une session sont immédiatement enregistrées sur le disque, mais n’apparaissent dans le prompt système qu’à la session suivante.12

Éléments à enregistrer

À enregistrer (l’agent le fait de manière proactive) :12 - Préférences de l’utilisateur : « Je préfère TypeScript à JavaScript » → user - Informations sur l’environnement : « Ce serveur utilise Debian 12 avec PostgreSQL 16 » → memory - Corrections : « N’utilisez pas sudo pour les commandes Docker, l’utilisateur appartient au groupe docker » → memory - Conventions : « Le projet utilise des tabulations, des lignes de 120 caractères et des docstrings de style Google » → memory - Travail terminé : « Migration de la base de données de MySQL vers PostgreSQL le 15 janvier 2026 » → memory

À ignorer :12 - Informations triviales ou évidentes - Informations faciles à retrouver - Dumps de données brutes (trop volumineux pour la mémoire) - Éléments éphémères propres à la session - Informations déjà présentes dans les fichiers de contexte

Recherche dans les sessions

Au-delà de MEMORY.md et USER.md, l’agent peut rechercher dans ses conversations passées avec l’outil session_search. Toutes les sessions CLI et de messagerie sont stockées dans SQLite (~/.hermes/state.db) avec la recherche en texte intégral FTS5. Depuis la refonte de la v0.15.0, l’outil ne fait plus du tout appel à un LLM : il renvoie directement le contenu des conversations stockées (selon la formulation de la source, le « single-shape tool returns DB content directly »), ce qui l’a rendu 4 500 fois plus rapide et a supprimé son coût en API.125934

Fonctionnalité Mémoire persistante Recherche dans les sessions
Capacité ~1 300 tokens au total Illimitée (toutes les sessions)
Vitesse Instantanée (dans le prompt système) Une requête FTS — aucun appel au LLM depuis la v0.15.0
Cas d’usage Informations clés toujours disponibles Retrouver des conversations passées précises
Gestion Organisée manuellement par l’agent Automatique — toutes les sessions sont stockées
Coût en tokens Fixe par session (~1 300 tokens) À la demande

Deux ajouts de la période v0.21.4, tous deux vérifiés avec le tag v2026.9.21. Premièrement, les limites temporelles : la forme de découverte accepte after (limite inférieure inclusive de l’heure de début de la session) et before (limite supérieure exclusive), chacun pouvant être une date ou une date-heure ISO — une valeur ne contenant qu’une date correspond à minuit UTC ce jour-là — ou une durée relative (7d, 24h, 2w). Ces paramètres sont réservés aux requêtes qui mentionnent réellement une période ; sort reste un biais de classement, et non une limite. Deuxièmement, une nouvelle tentative de rappel en l’absence de résultat : comme FTS5 applique implicitement un opérateur AND entre les termes, une requête reformulée comportant plusieurs mots peut ne pas retrouver une phrase enregistrée s’il lui manque ne serait-ce qu’un de ces mots. Par conséquent, lorsque la requête exacte et toutes les recherches de sous-chaînes ne donnent aucun résultat, la recherche interroge à nouveau l’index en acceptant N’IMPORTE QUEL terme, puis classe en premier les lignes qui couvrent le plus de termes. Les résultats conservent la sémantique de correspondance exacte (la nouvelle tentative n’a lieu qu’après une recherche sans résultat), tandis que les requêtes comportant explicitement OR/NOT, celles ne contenant qu’un terme et celles orientées vers le traitement CJK restent inchangées.51

Fournisseurs de mémoire externes

Pour disposer d’une mémoire persistante plus approfondie que MEMORY.md et USER.md, Hermes inclut sept plugins de fournisseurs de mémoire externes : Honcho, OpenViking, Mem0, Holographic, RetainDB, ByteRover et Supermemory. D’autres, tels que Hindsight, s’installent depuis le catalogue de plugins.12

Hindsight faisait partie du code source principal jusqu’à la v0.21.4, puis a été transféré dans le catalogue avec la v0.21.5, sous la maintenance de Vectorize. Les installations existantes migrent automatiquement : si memory.provider: hindsight est défini, hermes update installe le plugin du catalogue dans le dossier personnel de chaque profile qui le référence, et le premier démarrage de l’agent l’installe s’il est toujours absent. Avec security.allow_lazy_installs: false, le démarrage de l’agent se contente de consigner un message ; exécutez donc vous-même hermes plugins install hindsight. Le plugin est installé dans ~/.hermes/plugins/hindsight/ et ajouté à plugins.enabled ; memory.provider, memory.hindsight.*, HINDSIGHT_API_KEY et vos données en mémoire restent inchangés. Vérifiez l’installation avec hermes memory status et hermes plugins list. L’extra pip hermes-agent[hindsight] a été supprimé.53

Les fournisseurs externes fonctionnent en parallèle de la mémoire intégrée (sans jamais la remplacer) et ajoutent des fonctionnalités telles que les graphes de connaissances, la recherche sémantique, l’extraction automatique de faits et la modélisation de l’utilisateur entre les sessions :612

hermes memory setup         # Pick a provider and configure it
hermes memory status        # Check what's active
hermes memory off           # Disable external provider (built-in only)

Un seul fournisseur externe peut être actif à la fois. La mémoire intégrée reste toujours active.6

Reprise automatique des sessions (v0.13.0+)

La v0.13.0 permet de survivre à une interruption en cours d’exécution de l’agent. Le gateway reprend automatiquement les sessions interrompues après un redémarrage ; les redémarrages déclenchés par /update conservent l’état de la session pendant la mise à niveau ; pendant le développement, le rechargement des fichiers sources maintient la session active au lieu d’en imposer une nouvelle.18 Conséquence concrète : les tâches de longue durée du gateway et les jobs pilotés par cron ne réinitialisent plus leur fenêtre de contexte au redémarrage du processus.

Checkpoints v2 (v0.13.0+)

Dans la v0.13.0, la persistance de l’état est réécrite selon une architecture à stockage unique, avec un véritable élagage, des garde-fous pour le disque et aucun dépôt fantôme orphelin.18 L’ancien système de checkpoint accumulait l’état sur le disque pour les profiles de longue durée ; le stockage v2 impose un plafond strict à l’espace local consacré aux checkpoints et supprime la comptabilité dupliquée à l’origine de cette croissance. Aucune modification de la configuration par l’utilisateur n’est nécessaire ; la prochaine écriture d’un checkpoint utilisera le chemin v2.


Personnalité et SOUL.md

SOUL.md constitue l’identité principale d’une instance Hermes. Il occupe l’emplacement nº 1 du prompt système et remplace l’identité par défaut inscrite en dur.13

Hermes crée automatiquement un fichier SOUL.md par défaut dans ~/.hermes/SOUL.md (ou $HERMES_HOME/SOUL.md pour les profiles personnalisés). Les fichiers existants de l’utilisateur ne sont jamais écrasés. Hermes charge uniquement SOUL.md depuis HERMES_HOME — il ne le recherche pas dans le répertoire de travail actuel. La personnalité reste ainsi prévisible d’un projet à l’autre.13

Contenu à placer dans SOUL.md

Utilisez-le pour définir durablement la voix et la personnalité :13 - ton - style de communication - degré de franchise - style d’interaction par défaut - éléments stylistiques à éviter - manière dont Hermes doit gérer l’incertitude, le désaccord et l’ambiguïté

Utilisez-le moins pour :13 - les instructions ponctuelles propres à un projet - les chemins de fichiers - les conventions du dépôt - les détails temporaires du workflow

Ces éléments ont leur place dans AGENTS.md, et non dans SOUL.md.

SOUL.md ou AGENTS.md

Il s’agit de la distinction la plus importante dans la gestion de l’identité de Hermes :13

SOUL.md — identité, ton, style, paramètres de communication par défaut et comportement lié à la personnalité.

AGENTS.md — architecture du projet, conventions de code, préférences d’outils, workflows propres au dépôt, commandes, ports, chemins et notes de déploiement.

Une règle pratique : si un élément doit vous suivre partout, il a sa place dans SOUL.md. S’il est propre à un projet, il a sa place dans AGENTS.md.13

Personnalités intégrées

Hermes inclut des personnalités intégrées que vous pouvez sélectionner avec /personality :1333

Nom Description
helpful Assistant convivial et polyvalent
concise Réponses brèves et directes
technical Expert technique précis et détaillé
creative Réflexion innovante et originale
teacher Pédagogue patient proposant des exemples clairs
kawaii Expressions mignonnes, étincelles et enthousiasme
catgirl Neko-chan aux expressions félines
pirate Capitaine Hermes, boucanier féru de technologie
shakespeare Prose de barde à la tonalité théâtrale
surfer Ambiance décontractée de surfeur
noir Narration de détective désabusé
uwu Un maximum de mignonnerie en langage uwu
philosopher Réflexion profonde pour chaque requête
hype ÉNERGIE MAXIMALE

Personnalités personnalisées dans config.yaml :13

agent:
  personalities:
    codereviewer: >
      You are a meticulous code reviewer. Identify bugs, security issues,
      performance concerns, and unclear design choices. Be precise and constructive.

Sélectionnez ensuite cette personnalité avec /personality codereviewer.

SOUL.md ou /personality

SOUL.md définit la voix de référence. /personality applique une surcouche au niveau de la session.13 Conservez un fichier SOUL.md pragmatique par défaut, puis utilisez /personality teacher pour une conversation pédagogique ou /personality creative pour une séance de brainstorming.


Nous Tool Gateway (v0.10.0+)

Depuis Hermes Agent v0.10.0 (16 avril 2026), les abonnés payants à Nous Portal bénéficient d’un accès géré à une sélection d’outils grâce à leurs identifiants Portal existants, sans avoir à gérer de clés API supplémentaires.61 Le CLI Hermes lui-même reste sous licence MIT et entièrement open source. Ce qui change, c’est que votre authentification Portal donne désormais accès à bien plus que l’inférence de modèles.

Le moyen le plus rapide de commencer est hermes setup --portal, que le README présente comme « Une seule commande après une nouvelle installation » : cette commande vous connecte via OAuth, définit Nous comme fournisseur et active le Tool Gateway. Ensuite, hermes portal permet de gérer cette intégration. hermes portal login (la commande par défaut lorsqu’aucune sous-commande n’est indiquée) lance la même configuration initiale en une seule étape ; hermes portal info affiche le « récapitulatif de l’authentification Portal et du routage du Tool Gateway » ; hermes portal open ouvre la page d’abonnement dans votre navigateur par défaut ; hermes portal tools répertorie les outils du gateway et indique ceux qui sont acheminés via Nous. hermes portal status subsiste en tant qu’alias masqué et rétrocompatible de info, tandis que la documentation de référence du CLI associée au tag utilise encore la sous-commande status : les deux fonctionnent donc.28

Contenu du gateway

Outil Fournisseur Cas d’usage
Recherche sur le Web Firecrawl Recherche d’informations récentes pour les agents
Génération d’images FAL / FLUX 2 Pro Génération d’images directement dans le flux, sans configurer de clé FAL
Synthèse vocale OpenAI TTS Sortie vocale sur les gateways de messagerie
Automatisation du navigateur Browser Use Navigation et extraction de données sans interface graphique

Fonctionnement

Le gateway s’active outil par outil grâce à un nouveau champ de configuration use_gateway. Si vous disposez d’identifiants Portal dans hermes auth et activez le gateway pour un outil, les appels de cet outil sont acheminés via Portal. Dans le cas contraire, votre clé API directe est utilisée, si elle est présente.

# config.yaml — per-tool gateway opt-in
tools:
  web_search:
    provider: firecrawl
    use_gateway: true          # route via Nous Portal subscription
  image_generation:
    provider: fal
    use_gateway: true

Ordre de priorité à l’exécution : lorsque le gateway est disponible et que use_gateway: true est défini pour un outil, Hermes privilégie le gateway même si vous avez également configuré une clé API directe. Ce comportement a une incidence sur la facturation : les appels au gateway sont décomptés de votre abonnement Portal, et non du solde associé à votre clé API directe.

Activation du gateway

hermes model                      # select Nous Portal (OAuth flow)
hermes tools                      # per-platform tool picker integrates gateway tools
hermes status                     # confirms gateway/subscription detection

L’abonnement est détecté automatiquement à partir des identifiants OAuth Portal déjà enregistrés dans hermes auth : aucune connexion distincte n’est nécessaire. Depuis la v0.19.0, vous pouvez également gérer l’abonnement directement depuis une session : /subscription affiche votre formule et votre quota restant, indique précisément le coût d’un passage à une formule supérieure ou la date de prise d’effet d’un passage à une formule inférieure, puis applique la modification en affichant des bannières signalant le changement programmé et en permettant de l’annuler ; /topup ajoute du crédit. L’application de bureau propose un onglet de paramètres de facturation équivalent.56

Tarification et accès

Les tarifs et les noms des formules sont publiés sur la page de tarification de Nous Portal (https://portal.nousresearch.com/pricing). Ce guide ne les détaille pas, car ils relèvent du produit Portal, et non du CLI Hermes, et évoluent indépendamment des versions de Hermes. Inscrivez-vous sur https://portal.nousresearch.com/ et consultez la page de tarification pour connaître les formules actuelles.

Formule gratuite de Nous et premier lancement guidé (v0.21.2+)

Depuis la v0.21.2, une nouvelle installation ne nécessite ni formule payante ni clé API pour obtenir un agent fonctionnel : l’inférence gratuite et les connecteurs sont disponibles immédiatement, avec une seule commande pour vous connecter, tandis que /login lance la connexion depuis une conversation. Les outils des connecteurs (Gmail, Linear, Notion et les autres) peuvent être recherchés au moyen de tool_search, comme n’importe quel autre outil. L’application de bureau propose un premier lancement guidé contrôlé par HERMES_GUEST_ONBOARDING=1 ; seule la valeur littérale 1 l’active — le test propre à l’application de bureau vérifie que 'true', '0' et une valeur vide le laissent tous désactivé, et la décision prise au lancement est inscrite dans l’environnement du backend démarré afin qu’une valeur héritée ne puisse jamais s’y propager.48

Depuis la période de sortie de la v0.21.4, la connexion de ces connecteurs relève d’une seule opération gérée par le backend, plutôt que d’une logique dispersée entre les différents frontends : un appel à l’outil manage_connections pilote dans le backend une machine à états de connexion reposant exclusivement sur des données (avec un délai d’expiration fixe de 300 secondes pour l’opération — délibérément non configurable), et Desktop, TUI et CLI l’affichent tous sous la même forme de carte de configuration. Cette carte affiche un champ pour chaque identifiant manquant (nom, invite, caractère obligatoire) et désactive son bouton d’action jusqu’à ce que tous les champs obligatoires contiennent du texte ; le backend impose la même séparation réservée aux secrets sur chaque frontend.51

Avis d’abandon

  • La variable d’environnement HERMES_ENABLE_NOUS_MANAGED_TOOLS est supprimée dans la v0.10.0. Les outils gérés sont désormais activés au moyen du champ de configuration use_gateway propre à chaque outil, sous réserve de l’état de votre abonnement Portal.61

Mise au point : ce que cette version n’est pas

Le CLI Hermes Agent n’est pas réservé aux abonnés. Le projet reste sous licence MIT et toutes les fonctionnalités principales (CLI, skills, mémoire, gateway de messagerie, cron, MCP, tableau de bord local et BYOK pour chaque fournisseur) fonctionnent de bout en bout sans aucun paiement. La v0.10.0 ajoute une option pratique pour les utilisateurs qui paient déjà un abonnement à Nous Portal ; elle ne retire rien à l’offre gratuite.


Gateway de messagerie

Hermes peut s’exécuter comme un processus gateway de longue durée qui se connecte à 28 plateformes de messagerie depuis un seul processus gateway : Telegram, Discord, Slack, WhatsApp, Signal, SMS, e-mail, Home Assistant, Mattermost, Matrix, DingTalk, Feishu/Lark, WeCom, Weixin (WeChat), BlueBubbles (iMessage), QQBot, Microsoft Teams, Tencent Yuanbao, Google Chat, LINE, SimpleX Chat, Photon (iMessage), WhatsApp Cloud API, WeCom Callback, Raft, IRC, ntfy, Buzz et un adaptateur Webhook générique.360171819 Ce nombre de 28 provient du tableau Platform Comparison de la documentation au tag v2026.8.31 ; sous celui-ci, gateway/config.py définit 24 membres intégrés de l’énumération Platform (dont des entrées qui ne sont pas des services de chat, telles que local, api_server, webhook, msgraph_webhook et relay) et associe à la demande tout autre nom à l’un des 22 dossiers d’adaptateurs fournis sous plugins/platforms/. Un simple décompte des valeurs de l’énumération ou des dossiers ne correspondra donc pas au chiffre indiqué dans la documentation.25 La v0.9.0 a ajouté iMessage via BlueBubbles (enregistrement automatique des webhooks, assistant de configuration et résistance aux plantages), ainsi qu’une prise en charge native de WeChat via iLink Bot API, avec un mode de rappel WeCom destiné aux applications d’entreprise.16 La v0.11.0 a ajouté QQBot.60 La v0.12.0 a ajouté Microsoft Teams et Tencent Yuanbao.17 La v0.13.0 a ajouté Google Chat en tant que 20e plateforme, en s’appuyant sur la même architecture d’adaptateurs modulaires ; IRC et Microsoft Teams ont également migré vers ce nouveau modèle d’adaptateurs, avec les hooks de plugin génériques env_enablement_fn / cron_deliver_env_var.18 La v0.14.0 ajoute LINE et SimpleX Chat et complète l’ensemble de la pile Microsoft Teams, de bout en bout, avec l’authentification Graph, l’écouteur de webhooks, le pipeline d’exécution et l’envoi sortant.19 La v0.17.0 (19 juin 2026) ajoute iMessage sans relay via Photon Spectrum (OAuth par code d’appareil avec hermes photon login — aucun relay Mac/BlueBubbles requis), l’adaptateur officiel WhatsApp Business Cloud API (qui remplace l’obligation d’utiliser un processus bridge), les groupes SimpleX et les pièces jointes natives, ainsi que Raft comme plugin de plateforme intégré.21 Deux autres figurent dans le tableau de la documentation sans avoir été mis en avant dans les notes de version : ntfy est un canal push HTTP pub-sub léger (abonnez-vous à un sujet depuis l’application mobile ntfy, envoyez un message au sujet pour parler à l’agent et recevez sa réponse sur votre téléphone ; fonctionne avec le serveur public ntfy.sh ou une instance auto-hébergée, sans SDK ni daemon requis), tandis que Buzz connecte Hermes à une communauté Buzz, la plateforme open source de Block destinée à la collaboration entre humains et agents sur le protocole Nostr. Pour les messages sortants, il exécute le CLI buzz dans un shell et, pour les messages entrants, utilise un abonnement Nostr WebSocket natif. Tous deux sont configurés avec hermes gateway setup.25

Configuration

hermes gateway setup                # Interactive platform configuration
hermes gateway install              # Install as user service (systemd/launchd)
hermes gateway start                # Start the installed service
hermes gateway stop
hermes gateway restart
hermes gateway status
hermes gateway run                  # Run in foreground (debugging)

La configuration interactive vous guide pour connecter chaque plateforme : tokens API, identifiants de bots, correspondances de canaux et listes d’autorisation.6

Circulation des messages

D’après la documentation d’architecture en amont :3

Platform event → Adapter.on_message() → MessageEvent
  → GatewayRunner._handle_message()
    → authorize user
    → resolve session key
    → create AIAgent with session history
    → AIAgent.run_conversation()
    → deliver response back through adapter

Toutes les plateformes de messagerie passent par la même boucle de conversation AIAgent que le CLI. C’est pourquoi les commandes slash fonctionnent de manière identique aux deux endroits et qu’une tâche cron planifiée dans Telegram peut envoyer son résultat vers Discord : la plateforme ne fait de différence qu’en périphérie.3

La v0.19.0 ajoute le routage des messages par profile et une livraison durable. Un gateway multiplexé unique partageant un seul token de bot peut acheminer des guildes, canaux ou fils de discussion précis vers différents profiles — chacun disposant d’une configuration, de skills, d’une mémoire et de secrets entièrement isolés — avec une substitution GATEWAY_MULTIPLEX_PROFILES. Une vague de renforcement garantit par ailleurs qu’un profile mal configuré ne puisse plus entraîner l’arrêt de tout le gateway. En interne, l’index de routage a été déplacé dans state.db (sessions.json n’est désormais plus qu’un miroir hérité facultatif), et les réponses finales sont consignées dans un registre durable d’obligations de livraison autour de l’envoi par la plateforme : si le gateway plante au moment d’envoyer une réponse terminée, celle-ci est renvoyée au démarrage suivant au lieu d’être silencieusement perdue.56 L’isolation entre les profiles routés a été renforcée dans la v0.21.2, qui a corrigé un ensemble de fuites entre profiles précisément dans cette configuration multiplexée : listes d’autorisation héritées, identifiants envoyés à l’hôte du profile par défaut, secrets du coffre du profile par défaut transmis aux serveurs stdio MCP, pièces jointes MEDIA: provenant d’un autre profile et bearer Nous d’un profile voisin persistant dans les mémos propres au processus (#107609-#107630).48

La v0.21.1 rend les limites des conversations exclusivement explicites. La documentation du cycle de vie des sessions au tag v2026.9.7 définit ce contrat en quatre phrases : « L’inactivité et le temps écoulé ne déclenchent jamais la rotation d’une conversation. /new et /reset créent une limite explicite ; la compression du contexte continue de gérer les historiques longs. L’ancienne configuration des délais est ignorée. Le type de données SessionResetPolicy existant ne constitue qu’une donnée de compatibilité inactive, et non une politique d’exécution. » Une suspension explicite crée toujours une limite au prochain tour entrant, la récupération respecte les limites finalisées au lieu de les rouvrir et l’éviction limitée aux ressources permet de reprendre les conversations. Si une session de votre gateway semble « ne jamais expirer », c’est désormais le comportement prévu ; déclenchez vous-même sa rotation avec /new.43

Depuis la période de la v0.21.4, une deuxième instance de hermes gateway run se rattache au processus existant ou refuse de démarrer au lieu de créer une double liaison. La règle autorise une instance de hermes serve et une instance de hermes gateway run par hôte et par utilisateur du système d’exploitation, chacune multiplexant tous les profiles. Si vous démarrez un gateway pour un profile déjà pris en charge par le multiplexeur en cours d’exécution, la commande s’y rattache simplement et se termine avec le code 0. S’il ne prend pas encore ce profile en charge, Hermes lui demande d’analyser de nouveau profiles/, puis s’y rattache lorsqu’il le fait. S’il est impossible de lui faire prendre ce profile en charge, la commande refuse de poursuivre au lieu de démarrer silencieusement un deuxième gateway. --replace cible désormais ce processus hôte, quel que soit le profile qui l’a lancé, tandis que --force évite entièrement la question lorsque le propriétaire est bloqué. Les gateways autonomes peuvent toujours coexister : si le gateway en cours d’exécution appartient à un autre profile et fonctionne en mode autonome (sans multiplexage), votre profile démarre le sien à côté, comme auparavant, jusqu’à ce que cette migration soit imposée (#109417). Si deux gateways démarrent simultanément, celui qui ne parvient pas à obtenir le verrou de l’hôte se termine avec le code 75, que tous les superviseurs générés par Hermes retentent ; l’enregistrement du gagnant existe alors, ce qui permet à la nouvelle tentative de se rattacher ou de refuser selon les règles ci-dessus. Les verrous et l’enregistrement de rendez-vous résident sous $HERMES_GATEWAY_LOCK_DIR, ou à défaut sous $XDG_STATE_HOME/hermes/gateway-locks (par défaut ~/.local/state/hermes/gateway-locks), avec une portée limitée à l’utilisateur du système d’exploitation. Un enregistrement dont le PID est mort ou a été réattribué à un autre processus est considéré comme obsolète et ignoré : un gateway ayant planté ne bloque donc pas le prochain démarrage. L’application Desktop suit la même règle et se rattache au backend hôte en cours d’exécution au lieu d’en lancer un deuxième.51

Depuis la v0.21.5, le multiplexage n’est plus facultatif. gateway.multiplex_profiles n’accepte qu’une seule valeur, true : une clé absente est considérée comme activée et inscrite dans le config.yaml du profile par défaut, tandis qu’un false explicite est remplacé sur place par true, avec un encadré affiché une seule fois au démarrage de ce gateway, puis de nouveau dans le récapitulatif de la prochaine commande hermes update. Deux contrôles remplacent l’ancienne désactivation facultative. Pour mettre un profile hors ligne sans arrêter les bots des autres utilisateurs, exécutez hermes -p <name> gateway stop : l’hôte le met en attente (avec un marqueur profiles/<name>/gateway.parked) et hermes -p <name> gateway start le réactive. Les boutons Stop/Start du dashboard et de l’application Desktop font de même. Un profile nommé qui a encore besoin de son propre gateway définit gateway.standalone: true dans son propre config.yaml ; l’hôte ne le prend jamais en charge et ses commandes stop/start agissent sur son propre processus. La documentation qualifie cette clé de « solution temporaire de compatibilité », et non de topologie prise en charge ; elle est ignorée avec un avertissement sur le profile par défaut. Une répartition entre plusieurs utilisateurs du système d’exploitation ou un HERMES_HOME situé hors du dossier profiles/ du répertoire personnel par défaut nécessite toujours --force.53

Autorisation et appairage des utilisateurs

hermes pairing list                    # Show pending and approved users
hermes pairing approve <platform> <code>
hermes pairing revoke <platform> <user-id>
hermes pairing clear-pending

Les codes d’appairage empêchent des inconnus de communiquer avec votre gateway. Un utilisateur envoie un code d’appairage depuis sa plateforme de messagerie ; vous l’approuvez avec hermes pairing approve ; il est alors autorisé à partir de ce moment.6

unauthorized_dm_behavior détermine la réponse qu’un inconnu reçoit par message privé avant l’appairage : pair lui envoie un code d’appairage, ignore ignore silencieusement le message et decline, valeur ajoutée durant la période de la v0.21.4, envoie un refus courtois, puis ne répond plus à cet expéditeur pendant 24 heures (#88028). Le refus est dédupliqué par plateforme et par expéditeur, y compris entre alias, et son texte provient de unauthorized_dm_decline_message (une clé globale ; une valeur vide utilise la réponse intégrée : « Bonjour ! Je suis un assistant personnel et je ne peux discuter qu’avec mon propriétaire, je ne peux donc pas vous aider directement. Désolé ! »). Définissez ce comportement globalement ou pour chaque plateforme, là où l’assistant de configuration l’inscrit :

# ~/.hermes/config.yaml
unauthorized_dm_behavior: decline      # global; gateway.unauthorized_dm_behavior also works
unauthorized_dm_decline_message: ""    # empty = built-in reply
platforms:
  telegram:
    unauthorized_dm_behavior: pair     # per-platform value always wins

Lorsque rien n’est défini, la valeur par défaut effective dépend de vos listes d’autorisation. Si aucune n’est configurée, elle vaut pair ; dès qu’une liste d’autorisation est définie (GATEWAY_ALLOWED_USERS, ou la variable des utilisateurs autorisés, des utilisateurs de groupe autorisés ou des conversations de groupe autorisées d’une plateforme), elle devient ignore. En effet, la liste d’autorisation signale un gateway volontairement restreint, et envoyer des codes à des contacts inconnus génère du bruit et risque de divulguer des informations (#9337). Une valeur globale ignore ou decline remplace cette règle, mais pas une valeur globale pair, puisqu’elle est interprétée comme la valeur par défaut. Pour conserver l’appairage parallèlement à une liste d’autorisation, définissez pair pour chaque plateforme. (La valeur dm_policy propre à l’adaptateur d’une plateforme, lorsqu’elle est définie, est consultée avant la règle de la liste d’autorisation.) Le fonctionnement de l’e-mail étant organisé autour d’une boîte de réception, sa valeur par défaut est ignore, sauf si sa propre clé propre à la plateforme active une autre option ; une valeur globale ne s’y applique pas. Lorsque vous configurez une plateforme sans liste d’autorisation, hermes gateway setup propose le refus parmi les réponses possibles.51


Tâches planifiées (Cron)

Hermes dispose d’un système cron de premier ordre dans lequel les jobs sont des tâches d’agent, et non des commandes shell. Chaque job planifié s’exécute par l’intermédiaire d’un nouvel AIAgent avec le prompt configuré et, éventuellement, des skills associés, puis transmet les résultats à la plateforme de votre choix :36

hermes cron list
hermes cron create --prompt "Check HN for AI news and summarize" --schedule "0 9 * * *" --deliver telegram
hermes cron edit <id>
hermes cron pause <id>
hermes cron resume <id>
hermes cron run <id>         # Trigger now on the next tick
hermes cron remove <id>
hermes cron status           # Check if scheduler is running
hermes cron tick             # Run due jobs once and exit

Vous pouvez aussi en créer un de manière conversationnelle dans une messagerie :

Every morning at 9am, check Hacker News for AI news and send me a summary on Telegram.

L’agent configurera le job cron à l’aide de ses tools. Les jobs sont conservés dans JSON et persistent après les redémarrages.3

La v0.21.0 a doté les jobs planifiés d’une mémoire et d’une capacité de jugement. Quatre mécanismes, tous vérifiés avec le tag v2026.8.31 :3537

  • Continuité. continuity=true injecte dans chaque exécution la sortie la plus récente du job lui-même. Ainsi, un agent d’exploration ou de surveillance « se réveille en voyant ce qu’il a signalé la fois précédente, peut éliminer les doublons et reprendre là où il s’était arrêté » ; le cadrage injecté lui demande « d’éviter de répéter ce qui a déjà été signalé ». La première exécution reste inchangée et, en interne, l’option est enregistrée sous l’entrée réservée self dans context_from. Activez ou désactivez cette option avec hermes cron create ... --continuity et hermes cron edit <job_id> --continuity / --no-continuity.37
  • Blocs-notes persistants. Chaque job dispose d’un petit espace de travail KV pour les curseurs, les repères de progression et les listes de surveillance (16 Ko par valeur, 64 Ko par job ; ces données étant injectées dans le prompt à chaque exécution, ces limites sont intentionnelles). Vous pouvez y écrire avec hermes cron notepad <job_id> set <key> <value>, que l’agent en cours d’exécution invoque au moyen de son tool de terminal.37
  • Mode surveillance. Un job peut associer une source peu coûteuse monitor_script/monitor_url, exécutée en premier à chaque cycle : si la sortie est inchangée (comparaison exacte des octets), l’exécution de l’agent est entièrement ignorée — aucun appel à LLM, aucune transmission, seulement une exécution silencieuse no_change. En cas de changement, un bloc diff est injecté et l’agent s’exécute normalement. Veillez à produire une sortie stable dans les scripts de surveillance, sans quoi chaque cycle semblera comporter un changement.37
  • Niveau de raisonnement propre à chaque job et transmission dans Bot Chat. --reasoning-effort fixe le niveau de réflexion d’un job (none à ultra) en remplaçant les paramètres globaux et propres au modèle pour les exécutions de ce job ; avec deliver=bot-chat, la sortie arrive dans la session Bot Chat canonique d’un profile sous la forme d’un véritable message entrant, où le bot « exécute toute action nécessaire et répond dans sa conversation », au lieu qu’un humain se contente de lire un canal.37

Intégration de MCP

Hermes prend en charge le Model Context Protocol à la fois comme client et comme serveur :6

Comme client — connectez Hermes à des serveurs MCP externes afin d’étendre l’éventail de ses tools :

hermes mcp add <name> --url https://example.com/mcp
hermes mcp add <name> --command npx --args "-y,@modelcontextprotocol/server-github"
hermes mcp list
hermes mcp test <name>
hermes mcp remove <name>
hermes mcp configure <name>   # Toggle individual tool selection
hermes mcp login <name>       # Force re-auth for an OAuth server (--flow browser|device)
hermes mcp reauth [--all]     # Re-authenticate one OAuth server, or every one

Ou configurez-les manuellement dans config.yaml :14

mcp_servers:
  github:
    command: npx
    args: ["-y", "@modelcontextprotocol/server-github"]
    env:
      GITHUB_PERSONAL_ACCESS_TOKEN: "ghp_xxx"

Depuis la v0.19.0, les tools MCP sont présentés au modèle selon la convention de nommage mcp__server__tool : chaque nom de tool comprend celui de son serveur, ce qui évite désormais les conflits lorsque deux serveurs proposent le même tool. Les notifications de journal des serveurs MCP apparaissent également dans agent.log.56

La v0.21.1 ajoute un parcours par code d’appareil à MCP OAuth : hermes mcp login <name> accepte --flow {browser,device} — browser correspond au parcours PKCE existant, tandis que device est une connexion par code d’appareil conforme à la RFC 8628, destinée aux machines sans interface graphique ou distantes — et cette option remplace la configuration oauth.flow du serveur. Cette même version impose la propriété du profile tout au long des sessions OAuth, ignore les caches de métadonnées OAuth mal formés au lieu de bloquer un serveur et relaie MCP OAuth sur ordinateur par des callbacks locaux au client. Désormais, -t/--toolsets filtre également les serveurs MCP configurés qui sont lancés : une invocation limitée à un périmètre précis évite ainsi le démarrage à froid des serveurs dont elle n’a pas besoin.44

La v0.21.0 transforme l’interface MCP de l’application de bureau en centre de commande : les serveurs et le catalogue sont réunis sur une seule page, avec une importation par glisser-déposer « collez n’importe quel contenu », des contrôles d’intégrité en arrière-plan qui signalent l’expiration prochaine d’une authentification avant l’échec d’un appel de tool, une vue superposée des coûts et de l’utilisation de l’ensemble des serveurs indiquant les estimations de tokens du schéma et l’utilisation sur 30 jours pour chaque serveur, ainsi que des liens profonds hermes:// permettant d’installer un serveur MCP après confirmation explicite.35

La période de publication de la v0.21.4 ajoute mcp.discovery_concurrency (valeur par défaut : 4 ; 0 = illimité, #117373), qui limite le nombre de serveurs MCP configurés auxquels le processus de découverte peut se connecter simultanément. Tous les serveurs sont toujours contactés — cette limite empêche seulement qu’ils le soient tous en même temps — et une valeur négative ou qui n’est pas un entier déclenche un avertissement dans le journal, puis rétablit la valeur par défaut.51

Comme serveur — rendez les conversations Hermes accessibles à d’autres agents :

hermes mcp serve
hermes mcp serve -v    # Verbose

Compression du contexte

Hermes compresse automatiquement les longues conversations afin de respecter la fenêtre de contexte de votre modèle. Le module de synthèse utilisé pour la compression effectue un appel LLM distinct ; vous pouvez l’orienter vers n’importe quel fournisseur ou endpoint.4 Depuis la v0.20.6, la stratégie de conservation de la fin de conversation utilise par défaut le mode lean (compression.tail_mode: lean). Avec ce tag, les paramètres du modèle, du fournisseur et de l’endpoint du module de synthèse se trouvent sous auxiliary.compression.*, et non plus sous les anciennes clés compression.summary_* ; les clés historiques sont automatiquement migrées au premier chargement (version 17 de la configuration).3031

compression:
  enabled: true
  threshold: 0.50          # Compress at this % of context limit
  threshold_tokens: null   # Optional absolute token cap -- trigger fires at the lower of ratio vs cap
  target_ratio: 0.20       # Fraction of threshold to preserve as recent tail (legacy tail mode)
  tail_mode: lean          # Tail retention: "lean" (default) or "legacy"
  protect_last_n: 20       # Min recent messages to keep uncompressed
  protect_first_n: 3       # Non-system head messages pinned across compactions

auxiliary:
  compression:
    model: ""              # Empty = main chat model; e.g. "google/gemini-3-flash-preview"
    provider: "auto"       # "auto", "openrouter", "nous", "codex", "main", etc.
    base_url: null         # Custom OpenAI-compatible endpoint (overrides provider)

Ce que détermine tail_mode. legacy conserve textuellement une fin de conversation dont la taille correspond à target_ratio ; avec une grande fenêtre ou un seuil relevé, cela accapare 100 000 à 240 000 tokens à chaque compression. lean conserve textuellement une fin de conversation limitée à 2,5 % de la fenêtre de contexte (plancher de 10 000, plafond de 25 000) et assure plutôt la continuité dans le résumé : un journal de session détaillé de la partie compressée, qui préserve les identifiants (un appel auxiliaire au module de synthèse par tentative), un index des éléments d’ancrage extrait mécaniquement (numéros de PR, SHA, chemins, messages d’erreur — par expression régulière, sans aucune reformulation), chaque véritable message de l’utilisateur cité textuellement, ainsi qu’un pointeur de récupération session_search permettant à l’agent d’accéder de nouveau à tout contenu évincé par la synthèse. Résultat mesuré dans la documentation sur de véritables sessions de 500 000 tokens : environ 49 000 tokens conservés au lieu d’environ 162 000. Les anciens résultats de tools situés dans la fin de conversation conservée par lean sont réduits à des résumés d’une ligne contenant un pointeur de récupération, et toute valeur tail_mode inconnue revient par défaut à lean.31

Options de fournisseur :431

auxiliary.compression.provider auxiliary.compression.base_url Résultat
auto (par défaut) non défini Détection automatique du meilleur fournisseur disponible
nous / openrouter / etc. non défini Utilisation forcée de ce fournisseur et de son authentification
quelconque défini Utilisation directe de l’endpoint personnalisé (fournisseur ignoré)

Le modèle de synthèse doit prendre en charge une longueur de contexte au moins égale à celle de votre modèle principal, car il reçoit l’intégralité de la partie centrale de la conversation en un seul appel. Si sa fenêtre est plus petite, l’appel échoue et les tours de conversation intermédiaires sont supprimés sans résumé.431

Avertissements de pression sur le budget

Lorsque l’agent traite une tâche complexe nécessitant de nombreux appels de tools, il peut épuiser son budget d’itérations (500 tours par défaut depuis la v0.20.0, contre 90 auparavant) sans s’en rendre compte. La pression sur le budget avertit automatiquement le modèle :4

Seuil Niveau Ce que voit le modèle
70 % Prudence [BUDGET: 350/500. 150 iterations left. Start consolidating.]
90 % Avertissement [BUDGET WARNING: 450/500. Only 50 left. Respond NOW.]

Délais d’expiration des flux

La connexion de streaming LLM comporte deux niveaux de délai d’expiration, qui s’ajustent automatiquement pour les fournisseurs locaux (localhost, adresses IP du réseau local) :4

Délai d’expiration Valeur par défaut Fournisseurs locaux Variable d’environnement
Délai de lecture du socket 120 s Relevé automatiquement à 1 800 s HERMES_STREAM_READ_TIMEOUT
Détection d’un flux inactif 180 s Désactivée automatiquement HERMES_STREAM_STALE_TIMEOUT
Appel API (sans streaming) 1 800 s Inchangé HERMES_API_TIMEOUT

Le délai de lecture du socket est porté à 30 minutes pour les endpoints locaux, car les LLM locaux peuvent consacrer plusieurs minutes au préremplissage des contextes volumineux avant de produire le premier token.4


Tableau de bord web local (v0.9.0+)

Un tableau de bord accessible depuis un navigateur vous permet de gérer Hermes Agent en local. Configurez les paramètres, surveillez les sessions, parcourez les skills et gérez votre gateway sans modifier les fichiers de configuration ni utiliser le terminal.16 Lancez-le avec hermes dashboard. Il s’agit du parcours de prise en main le plus simple pour les nouveaux utilisateurs qui préfèrent une interface graphique.

Surveillance des processus en arrière-plan (v0.9.0+)

watch_patterns vous permet de définir des motifs à surveiller dans la sortie des processus en arrière-plan et d’être averti en temps réel lorsqu’ils correspondent.16 Surveillez les erreurs, attendez des événements précis (« listening on port ») ou suivez les journaux de compilation — le tout sans interrogation périodique. Associé à notify_on_complete, introduit dans la v0.8.0 (qui signale la fin des tâches en arrière-plan), Hermes dispose désormais d’une couche complète d’observabilité des processus en arrière-plan.15

Context engine modulaire (v0.9.0+)

La gestion du contexte est désormais un emplacement modulaire accessible via hermes plugins. Remplacez le context engine par une implémentation personnalisée qui contrôle ce que l’agent voit à chaque tour — filtrage, synthèse ou injection de contexte propre à un domaine.16 Cette architecture dissocie la stratégie de contexte de la boucle principale de l’agent, ce qui permet de la personnaliser pour chaque projet ou domaine.

Sauvegarde et restauration (v0.9.0+)

hermes backup crée une archive complète de votre configuration, de vos sessions, de vos skills et de votre mémoire. hermes import effectue une restauration à partir d’une archive de sauvegarde.16 Utilisez ces commandes pour migrer d’une machine à une autre, créer des instantanés avant des modifications majeures ou partager une configuration fiable avec vos collègues.

Prise en charge de Termux / Android (v0.9.0+)

Hermes s’exécute nativement sur Android via Termux. Les chemins d’installation adaptés, les optimisations de la TUI pour les écrans mobiles, la prise en charge des moteurs vocaux et la commande /image fonctionnent directement sur l’appareil.16

Renforcement de la sécurité (v0.13.0+)

La v0.13.0 a corrigé 8 problèmes de sécurité P0 et modifié un paramètre par défaut en faveur de l’utilisateur.18 La v0.14.0 poursuit sur cette lancée en corrigeant 12 autres problèmes P0 et 50 problèmes P1, notamment par le renforcement de la protection contre les attaques par force brute sur sudo et de sudo-stdin, la correction des contournements liés aux commandes dangereuses, l’assainissement des erreurs d’outils avant leur réinjection dans le modèle, l’authentification API des plugins du tableau de bord, la couverture SSRF du hub de skills et l’analyse des avis de sécurité relatifs à la chaîne d’approvisionnement pendant l’installation.19

Correctif Modification apportée
Masquage des secrets activé par défaut Cette option devait auparavant être activée manuellement. Les journaux et les envois effectués avec hermes debug share masquent les secrets, sauf désactivation explicite. La v0.12.0 avait désactivé le masquage par défaut à la suite de signalements de corruption des charges utiles ; la v0.13.0 le réactive comme référence plus sûre.
Contournement des DM Discord entre guildes (CVSS 8.1) Les listes d’autorisation de rôles Discord sont désormais limitées à chaque guilde, ce qui ferme une voie par laquelle le rôle d’un utilisateur dans une guilde autorisait les DM dans toutes les autres.
Restrictions par défaut de WhatsApp L’adaptateur WhatsApp rejette par défaut les inconnus et ne répond jamais dans une conversation avec soi-même.
Fenêtre TOCTOU de MCP OAuth Correction d’une condition de concurrence lors de l’enregistrement des identifiants dans les flux MCP OAuth.
TOCTOU de auth.json dans CLI Correction d’une fenêtre TOCTOU analogue dans le composant d’écriture des identifiants du stockage d’authentification CLI.
Protection SSRF minimale du navigateur Le routage hybride impose une protection SSRF minimale contre les requêtes tentant d’atteindre les services de métadonnées cloud à l’adresse 169.254.169.254 ou à des adresses équivalentes.
Détection des injections de prompt dans les tâches cron Les prompts assemblés (y compris le contenu chargé depuis les skills) sont analysés pour détecter les injections de prompt avant l’exécution de la tâche cron.
Masquage dans hermes debug share Le contenu des journaux envoyés pour le partage de débogage est masqué au moment de l’envoi, et pas seulement lors de l’écriture.

Si vous maintenez un déploiement de Hermes, considérez les v0.13.0 et v0.14.0 comme des mises à niveau de sécurité, et non comme de simples livraisons de fonctionnalités. La v0.13.0 corrige le contournement entre guildes Discord et deux fenêtres TOCTOU ; la v0.14.0 ajoute une nouvelle série de renforcements concernant la gestion de sudo, la réinjection des erreurs d’outils, les APIs de plugins, les SSRF du hub de skills et les avis de sécurité relatifs aux dépendances.

La v0.21.0 ajoute une quatrième vague. Les écritures dans les fichiers protégés d’instructions de l’agent – AGENTS.md, CLAUDE.md, SOUL.md, .cursorrules, les skills et les espaces de stockage de la mémoire – nécessitent désormais toujours une approbation, de sorte qu’un agent victime d’une injection de prompt ne puisse pas réécrire discrètement ses propres directives permanentes. Ce verrou est activé par défaut (security.protected_instruction_files: true, avec une liste d’extensions de noms de base utilisant fnmatch dans protected_instruction_extra_patterns), et le code source désigne précisément le vecteur neutralisé : « an injected instruction that edits AGENTS.md / CLAUDE.md / SOUL.md », en précisant que les fichiers d’instructions sont chargés depuis les arborescences du répertoire de travail courant, si bien que « an AGENTS.md anywhere the agent might later run from is a live target. »3539 La même version comble les failles susceptibles d’entraîner la divulgation de secrets dans les erreurs du terminal, la lecture des fichiers .env, les checkpoints et les journaux ACP ; apprend au système d’approbation à reconnaître les commandes et chemins destructeurs sous Windows ; permet aux autorisations macOS de survivre aux mises à jour grâce à une identité de signature TCC stable (configuration ponctuelle : hermes desktop --setup-tcc-identity, uniquement sous macOS, nécessite openssl/security/codesign) ; supprime l’entrée Blender MCP du catalogue ainsi que son skill après la compromission d’un composant en amont ; et ajoute une analyse de sécurité de niveau Tier-1 lors de l’installation des plugins.3539


Architecture pour les praticiens

Cette section s’adresse à celles et ceux qui souhaitent comprendre le fonctionnement interne afin de pouvoir le déboguer, l’étendre ou analyser ses performances. Elle synthétise la documentation d’architecture du projet en amont.3

Points d’entrée → AIAgent

Tous les points d’entrée de Hermes finissent par appeler AIAgent.run_conversation() :

┌──────────────────────────────────────────────────────────────────┐
│                        Entry Points                              │
│                                                                  │
│  CLI (cli.py)    Gateway (gateway/run.py)    ACP (acp_adapter/)  │
│  Batch Runner    API Server                  Python Library     │
└──────────┬──────────────┬───────────────────────┬────────────────┘
           │              │                       │
           ▼              ▼                       ▼
┌──────────────────────────────────────────────────────────────────┐
│                     AIAgent (run_agent.py)                       │
│                                                                  │
│  ┌─────────────┐  ┌──────────────┐  ┌──────────────┐             │
│  │ Prompt      │  │ Provider     │  │ Tool         │             │
│  │ Builder     │  │ Resolution   │  │ Dispatch     │             │
│  └──────┬──────┘  └──────┬───────┘  └──────┬───────┘             │
│         │                │                 │                    │
│  ┌──────┴───────┐ ┌──────┴───────┐  ┌──────┴───────┐             │
│  │ Compression  │ │ 3 API Modes  │  │ Tool Registry│             │
│  │ & Caching    │ │ chat_compl   │  │ 47 tools     │             │
│  │              │ │ codex_resp   │  │ 20 toolsets  │             │
│  │              │ │ anthropic    │  │              │             │
│  └──────────────┘ └──────────────┘  └──────────────┘             │
└──────────────────────────────────────────────────────────────────┘

Schéma adapté de la documentation d’architecture du projet en amont.3

« 47 tools / 20 toolsets » contre « 28 tools » dans votre bannière. Le nombre « 47 tools » correspond au registre total des outils du dépôt en amont, c’est-à-dire tous les outils dont le code source est fourni avec Hermes, tous toolsets confondus. Votre CLI en cours d’exécution affichera un nombre inférieur dans sa bannière de démarrage (l’installation utilisée pour vérifier ce guide indique 28 tools / 89 skills). Ce n’est pas un bug. De nombreux toolsets sont facultatifs et doivent être explicitement activés dans config.yaml, sous toolsets: : adaptateurs de plateformes de messagerie, automatisation du navigateur, outils de scraping plus lourds, etc. Le total du registre indique « ce qui est disponible » ; le nombre affiché dans la bannière, « ce qui est activé dans votre profile actuel ». Vérifiez les toolsets actifs avec hermes tools --list, puis activez ou désactivez chaque toolset à l’aide du bloc toolsets: dans ~/.hermes/config.yaml (ou avec /tools list / /tools enable <name> / /tools disable <name> au sein d’une session en cours d’exécution — la suppression d’un outil réinitialise la session afin que l’agent reconstruise son manifeste d’outils).

Les trois modes API

Hermes abstrait les différences entre fournisseurs au moyen de trois modes API, sélectionnés automatiquement lors de l’exécution :3

Mode API Utilisé par
chat_completions OpenRouter, z.ai, Kimi, MiniMax, DeepSeek, Alibaba, la plupart des endpoints personnalisés, tout serveur compatible avec OpenAI
codex_responses OpenAI Codex (via ChatGPT OAuth)
anthropic_messages Anthropic API (natif), Anthropic OAuth, proxys compatibles avec Anthropic

Le résolveur runtime_provider.py associe les tuples (provider, model) à (api_mode, api_key, base_url) pour plus de 18 fournisseurs, tout en gérant les flux OAuth, les pools d’identifiants et la résolution des alias.3

Flux de données au sein d’une session CLI

User input → HermesCLI.process_input()
  → AIAgent.run_conversation()
    → agent.prompt_builder.build_system_prompt()
    → runtime_provider.resolve_runtime_provider()
    → API call (chat_completions / codex_responses / anthropic_messages)
    → tool_calls? → model_tools.handle_function_call() → loop
    → final response → display → save to SessionDB

Extrait de la page d’architecture du projet en amont.3

Ordre d’assemblage du prompt

La pile du prompt comprend :13

  1. SOUL.md (identité de l’agent — ou solution de repli intégrée si le fichier est indisponible)
  2. Consignes de comportement tenant compte des outils
  3. Mémoire et contexte utilisateur (MEMORY.md, USER.md)
  4. Consignes relatives aux skills
  5. Fichiers de contexte (AGENTS.md, .cursorrules)
  6. Horodatage
  7. Indications de mise en forme propres à la plateforme
  8. Surcouches facultatives du prompt système, telles que /personality

SOUL.md constitue le socle : tout le reste vient s’y superposer.13

Stockage des sessions

Le stockage des sessions repose sur SQLite et la recherche en texte intégral FTS5. Les sessions bénéficient d’un suivi de filiation (relations parent-enfant après les compressions), d’une isolation par plateforme et d’écritures atomiques avec gestion des accès concurrents.3

Si le stockage vous pose problème avec une installation v0.21.x, utilisez la version v0.21.2 ou ultérieure : elle a corrigé la série de fragilités de state.db apparues avec la v0.21.0 (les seconds processus d’écriture annulaient mutuellement leurs verrous, des bases de données saines étaient signalées comme corrompues et une seule ligne défectueuse faisait échouer sessions list) et déplacé la coordination des salons hébergés hors du stockage racine, vers un fichier shared-state.db dédié, afin que les gateways des profiles n’ouvrent jamais le stockage principal des sessions en écriture. hermes doctor distingue désormais les dommages structurels de ceux touchant l’index FTS ; les dommages FTS dégradent la recherche au lieu de faire échouer le tour, tandis que hermes sessions recover --inspect-only (hors ligne, non destructif et lié au profile) vérifie la lisibilité des tables canoniques sans créer de base de données de sortie — la sous-commande existait déjà avant cette période, mais n’avait pas encore été documentée ici. Consultez Les nouveautés de la v0.21.2.48 Pour un stockage bloqué dans le mauvais mode de journalisation SQLite, la période de la v0.21.4 a ajouté le convertisseur hors ligne hermes sessions set-journal-mode delete|wal (consultez la ligne hermes sessions dans les Commandes de premier niveau).51

Système de plugins

Trois sources de découverte : ~/.hermes/plugins/ (utilisateur), .hermes/plugins/ (projet) et les points d’entrée pip. Les plugins enregistrent des outils, des hooks et des commandes CLI par l’intermédiaire d’un API de contexte. Les fournisseurs de mémoire constituent un type de plugin spécialisé sous plugins/memory/.3 Depuis la v0.21.2, un catalogue de plugins sélectionnés et épinglés par SHA permet également de parcourir les plugins et de les installer par leur nom, tandis que hermes plugins pack prend en charge les « ensembles de plugins déclaratifs et partageables » : un fichier hermes-pack.yaml unique épingle un ensemble de plugins à des SHA de commit précis, l’installation d’un pack se décompose en installations épinglées ordinaires et le consentement aux capacités reste propre à chaque plugin.48

La période de la v0.21.4 a transformé ce catalogue, auparavant simple surface CLI, en un artefact fourni avec le produit. Le dossier plugin-catalog/ du dépôt est passé de 9 entrées dans v2026.9.14 à 228 dans v2026.9.21 — un YAML vérifié par plugin (nom, dépôt, responsable, niveau, catégorie, capacités), épinglé à un SHA de commit exact de 40 caractères, la présence dans le dossier valant admission — et publié sous la forme de plugin-catalog.json pour le CLI (récupéré en direct et mis en cache sous ~/.hermes/cache/). Le site de documentation génère désormais, à partir de ces mêmes données, une page par plugin (/docs/plugins/<name>) et par auteur (/docs/plugins/by/<slug>) ; chaque page affiche le README du plugin récupéré depuis le commit épinglé, jamais depuis la pointe d’une branche, en passant par une liste d’autorisation appliquée lors de la compilation qui supprime le HTML brut, avec un tri par ajout ou mise à jour horodaté d’après les dates des auteurs des commits. Les dix plugins communautaires cités dans la version v0.21.4 figurent tous dans le catalogue à ce tag, sous leurs véritables slugs : hermes-tailscale, hermes-ssh, shodan, hermes-terminal, hermes-rss (ainsi qu’un rss-reader distinct), hermes-resetwatch, done-bell, kiwi, cognee et web-octen. Sur l’application de bureau, le hub Plugins permet désormais de désinstaller un plugin après confirmation : les plugins du catalogue passent par plugins.manage remove, tandis que les plugins de bureau autonomes passent par le chargeur Electron.51

hermes plugins                       # Interactive enable/disable UI
hermes plugins browse                # List every curated plugin catalog entry (v0.21.2+)
hermes plugins search <query>        # Search the curated plugin catalog (v0.21.2+)
hermes plugins install <name|repo>   # Install from the curated catalog, a Git URL, or owner/repo
hermes plugins enable <name>
hermes plugins disable <name>
hermes plugins list
hermes plugins pack install <src>    # Shareable SHA-pinned plugin sets; also: pack export, pack show (v0.21.2+)

Fenêtre de compatibilité (v0.21.1), désormais expirée : les plugins externes devaient abandonner les chemins d’importation antérieurs à la décomposition avant le 14 septembre 2026. La décomposition de septembre 2026 (PR #102117) a déplacé les composants internes couramment importés par les plugins, et une couche temporaire COMPAT_MANIFEST.md réexportait depuis leurs anciens modules 1 148 noms publics déplacés, avec un avertissement unique par nom et par processus (HermesPluginCompatWarning). La suppression a pris effet comme prévu le 14 septembre 2026, au moyen d’une condition de date dans le code distribué (COMPAT_REMOVAL_DATE dans hermes_cli/plugin_compat.py ; aucun rétablissement du code n’a été nécessaire) : depuis cette date, tout plugin concerné est désactivé — il n’est pas chargé, une alerte rouge apparaît dans la bannière CLI, hermes doctor et hermes update, une fenêtre modale s’affiche une seule fois dans l’application de bureau et le motif figure dans hermes plugins list. Pour les auteurs : hermes plugins compat <path> continue d’afficher chaque occurrence sous la forme file:line, avec ancien chemin -> nouveau chemin, et renvoie le code 1 tant qu’il en reste (ajoutez --json pour obtenir une sortie lisible par une machine). Les utilisateurs contraints de conserver un plugin qui n’est plus maintenu peuvent toujours définir plugins.allow_deprecated_imports: true dans config.yaml — la valeur doit être un booléen YAML littéral, et non une chaîne entre guillemets — et cette option fonctionne encore, car le rétablissement qui supprime les anciens chemins n’a pas été intégré : le manifeste et les shims sont présents dans v2026.9.14, v2026.9.21, v2026.9.24 ainsi que dans main au 24 septembre (durant la période de la v0.21.4, le module de compatibilité n’a été modifié que pour mettre en cache les analyses de plugins et normaliser les chemins Windows ; durant celle de la v0.21.5, hermes_cli/plugin_compat.py est resté inchangé et seules les entrées du manifeste correspondant au module Hindsight supprimé ont été retirées). Cette échappatoire cessera de fonctionner dès l’intégration de ce rétablissement, puisque les anciens chemins disparaîtront alors. Seuls les noms publics de premier niveau étaient couverts ; les noms privés et les points de raccordement utilisés par les monkeypatchs dans les tests n’ont jamais fait partie de l’interface publique et ne sont pas restaurés.4253

Principes de conception

D’après la page d’architecture du projet en amont :3

Principe Conséquences pratiques
Stabilité du prompt Le prompt système ne change pas en cours de conversation. Aucune modification invalidant le cache, sauf action explicite de l’utilisateur (/model)
Exécution observable Chaque appel d’outil est visible par l’utilisateur grâce aux callbacks. Mises à jour de la progression dans CLI (indicateur animé) et dans le gateway (messages de chat)
Interruptible Les appels API et l’exécution des outils peuvent être annulés en cours de traitement par une saisie de l’utilisateur ou des signaux
Cœur indépendant de la plateforme Une seule classe AIAgent prend en charge CLI, gateway, ACP, les traitements par lots et le serveur API. Les différences entre plateformes résident dans le point d’entrée
Couplage faible Les sous-systèmes facultatifs (MCP, plugins, fournisseurs de mémoire, environnements RL) utilisent des modèles de registre et un filtrage par check_fn, sans dépendances strictes
Isolation des profiles Chaque profile dispose de son propre HERMES_HOME, de sa configuration, de sa mémoire, de ses sessions et du PID de son gateway. Plusieurs profiles s’exécutent simultanément

Migration depuis OpenClaw

Hermes Agent succède à OpenClaw. Si vous effectuez une migration depuis une installation OpenClaw existante :65

hermes claw migrate --dry-run                    # Preview what would be migrated
hermes claw migrate --preset full                # Full migration including API keys
hermes claw migrate --preset user-data --overwrite   # User data only, no secrets
hermes claw migrate --source /custom/path        # Non-default OpenClaw location

hermes claw migrate lit par défaut les données depuis ~/.openclaw (et détecte aussi automatiquement les anciens dossiers ~/.clawdbot et ~/.moldbot) et les écrit dans ~/.hermes.6

Importés directement (plus de 30 catégories) : SOUL.md, MEMORY.md, USER.md, AGENTS.md, les skills provenant de 4 dossiers sources, le modèle par défaut, les fournisseurs personnalisés, les serveurs MCP, les jetons et listes d’autorisation des plateformes de messagerie (Telegram, Discord, Slack, WhatsApp, Signal, Matrix, Mattermost), les paramètres par défaut de l’agent (effort de raisonnement, compression, délai humain, fuseau horaire, sandbox), les politiques de réinitialisation des sessions (désormais inactives : depuis la v0.21.1, les minuteurs ne renouvellent jamais une conversation43), les règles d’approbation, la configuration TTS, les paramètres du navigateur, les paramètres des outils, le délai d’expiration des exécutions, la liste d’autorisation des commandes, la configuration du gateway et les clés API issues de 3 sources.6

Archivés pour examen manuel : les tâches cron, les plugins, les hooks/webhooks, le backend de mémoire (QMD), la configuration du registre des skills, l’interface utilisateur/l’identité, la journalisation, la configuration multi-agent, les associations de canaux, IDENTITY.md, TOOLS.md, HEARTBEAT.md, BOOTSTRAP.md.6

La résolution des clés API vérifie trois sources par ordre de priorité : valeurs de configuration → ~/.openclaw/.env → auth-profiles.json.6


Résolution des problèmes

« No inference provider configured. Run ‘hermes model’ to choose a provider and model »

C’est la première erreur rencontrée après toute nouvelle installation : Hermes n’a pas encore déterminé de fournisseur. Le message signifie exactement ce qu’il indique — aucun des trois parcours d’authentification n’a fourni de fournisseur utilisable. Exécutez :

hermes model

Le sélecteur interactif vous guide parmi tous les fournisseurs pris en charge, notamment les parcours par code d’appareil OAuth (Nous Portal, GitHub Copilot, Anthropic, OpenAI Codex) et les endpoints personnalisés pour les serveurs auto-hébergés. Si vous pensiez qu’un fournisseur était déjà configuré, hermes doctor indique les identifiants auxquels Hermes a réellement accès ; les causes habituelles sont une clé API définie au mauvais endroit (elle doit se trouver dans .env ou être définie avec hermes config set, et non dans votre profile de shell), un identifiant OAuth expiré dans ~/.hermes/auth.json, ou un endpoint personnalisé dans config.yaml ayant perdu son base_url. Les parcours d’authentification sont présentés en détail dans Authentification et fournisseurs.27

« Clé API non définie »

Exécutez hermes model pour configurer votre fournisseur de manière interactive, ou hermes config set OPENROUTER_API_KEY your_key. La commande hermes doctor vous indiquera précisément quelles clés sont manquantes.7

« Context limit: 2048 tokens » au démarrage (modèles locaux)

Hermes détecte automatiquement la longueur du contexte à partir de l’endpoint /v1/models de votre serveur, mais de nombreux serveurs locaux signalent des valeurs par défaut faibles. Définissez-la explicitement dans config.yaml :2

model:
  default: your-model
  provider: custom
  base_url: http://localhost:11434/v1
  context_length: 32768

Les appels d’outils apparaissent sous forme de texte au lieu d’être exécutés

L’appel d’outils n’est pas activé sur votre serveur, ou le modèle ne le prend pas en charge dans l’implémentation du serveur.2

Serveur Correctif
llama.cpp Ajoutez --jinja à la commande de démarrage
vLLM Ajoutez --enable-auto-tool-choice --tool-call-parser hermes
SGLang Ajoutez --tool-call-parser qwen (ou l’analyseur approprié)
Ollama L’appel d’outils est activé par défaut — vérifiez que votre modèle le prend en charge avec ollama show <model>
LM Studio Passez à la version 0.3.6 ou ultérieure et utilisez un modèle prenant nativement en charge les outils

Les réponses sont interrompues au milieu d’une phrase

Deux causes sont possibles :2

  1. Plafond de sortie faible (max_tokens) sur le serveur — SGLang limite par défaut chaque réponse à 128 tokens. Définissez --default-max-tokens sur le serveur ou configurez model.max_tokens dans config.yaml.
  2. Épuisement du contexte — Le modèle a rempli sa fenêtre de contexte. Augmentez model.context_length ou activez la compression du contexte dans Hermes.

« Connection refused » depuis WSL2 vers un serveur de modèles hébergé sous Windows

WSL2 utilise un adaptateur réseau virtuel avec son propre sous-réseau — dans WSL2, localhost désigne la machine virtuelle Linux, et non l’hôte Windows. Deux possibilités :2

Réseau en miroir (Windows 11 22H2 ou version ultérieure) : modifiez %USERPROFILE%\.wslconfig :

[wsl2]
networkingMode=mirrored

Exécutez ensuite wsl --shutdown, puis redémarrez. localhost fonctionne désormais dans les deux sens.

Solution de repli avec l’adresse IP de l’hôte (anciennes versions de Windows) : récupérez l’adresse IP de l’hôte Windows depuis WSL2 et utilisez-la à la place de localhost :

ip route show | grep -i default | awk '{ print $3 }'
# Use that IP as the base_url host

Le serveur de modèles doit également écouter sur 0.0.0.0, et non sur 127.0.0.1 — définissez OLLAMA_HOST=0.0.0.0 pour Ollama, ajoutez --host 0.0.0.0 pour llama-server/SGLang ou activez « Serve on Network » dans LM Studio.2

Le budget d’itérations ignore agent.max_turns

Si la ligne d’activité affiche N/90 (ou une autre limite obsolète) alors que config.yaml indique agent.max_turns: 500, la cause probable est une ligne HERMES_MAX_ITERATIONS obsolète dans ~/.hermes/.env : auparavant, l’assistant de configuration enregistrait le budget dans les deux emplacements et, si le bridge de démarrage s’interrompt en raison d’une erreur antérieure d’analyse de la configuration, la valeur fantôme de .env l’emporte silencieusement. Depuis la v0.21.1, hermes doctor détecte cette paire conflictuelle et hermes doctor --fix supprime la ligne de .env, laissant config.yaml faire autorité.41

Où tout se trouve-t-il ?

hermes status et hermes dump sont vos alliés. hermes logs list affiche tous les fichiers journaux avec leur taille. hermes config path affiche l’emplacement du fichier de configuration. hermes config env-path affiche l’emplacement de .env.6


FAQ

Quelle est la différence entre Hermes Agent et Claude Code ?

Claude Code est le CLI officiel de Anthropic, limité aux modèles Anthropic. Hermes Agent est un framework d’agent open source développé par Nous Research, compatible avec tous les fournisseurs prenant en charge OpenAI : Nous Portal, OpenRouter, Anthropic, GitHub Copilot, z.ai, Kimi, MiniMax, DeepSeek, Hugging Face, Google ou votre propre endpoint auto-hébergé.12 Hermes intègre également un gateway de messagerie pour Telegram/Discord/Slack/WhatsApp/Signal, dont Claude Code ne dispose pas.

Puis-je utiliser Hermes avec une clé API Anthropic ?

Oui. Trois méthodes sont possibles :2

  1. Définissez ANTHROPIC_API_KEY dans ~/.hermes/.env, puis exécutez hermes chat --provider anthropic --model claude-sonnet-4-6
  2. Exécutez hermes model et sélectionnez Anthropic : Hermes utilisera le stockage d’identifiants de Claude Code lorsqu’il est disponible
  3. Définissez manuellement un ANTHROPIC_TOKEN (setup-token ou token OAuth) comme solution de secours

L’option 2 est préférable si vous utilisez déjà Claude Code sur la même machine : elle permet aux identifiants Claude renouvelables de rester renouvelables.

Comment changer de fournisseur sans perdre ma conversation ?

Utilisez /model provider:model au sein d’une session. L’historique de la conversation, la mémoire et les skills sont intégralement conservés :9

/model zai:glm-5
/model openrouter:anthropic/claude-sonnet-4
/model custom:local:qwen-2.5

J’ai configuré Anthropic, mais la vision, le Web et la compression ne fonctionnent pas

Avec les versions actuelles, l’ancien problème ne peut pratiquement plus se produire. Par défaut (auxiliary.*.provider: "auto"), chaque tâche auxiliaire — vision, classification des approbations, compression, titres de session — s’exécute avec votre modèle de chat principal. Une configuration reposant uniquement sur Anthropic les prend donc en charge avec le OAuth dont elle dispose déjà. L’ancien comportement par défaut (Gemini Flash via OpenRouter → Nous → détection automatique de Codex, avec une dégradation silencieuse lorsqu’aucun n’était configuré) a disparu : « auto utilise désormais le modèle principal pour tout le monde, tandis que les remplacements propres à chaque tâche dans config.yaml restent prioritaires. »34

Si une tâche auxiliaire échoue encore, recherchez un remplacement explicite propre à cette tâche qui pointe vers un fournisseur que vous n’avez jamais configuré (auxiliary.<task>.provider / .model dans config.yaml), ou d’anciennes clés obsolètes : depuis le tag v2026.8.31, le modèle de synthèse utilisé pour la compression se configure comme tous les autres emplacements auxiliaires — auxiliary.compression.provider — et les anciennes clés compression.summary_* y sont automatiquement migrées (version 17 de la configuration).31 L’extraction Web n’est désormais plus du tout une tâche LLM (« aucun LLM n’intervient »). Dans les versions actuelles, un échec de synthèse Web ne relève donc pas d’un problème de modèle auxiliaire.34 Pour rattacher explicitement une tâche à votre fournisseur principal :

auxiliary:
  vision:      { provider: "main" }
  compression: { provider: "main" }

Quelle est la différence entre SOUL.md et AGENTS.md ?

SOUL.md définit l’identité de votre agent : ton, style et préférences de communication par défaut. Il se trouve dans ~/.hermes/SOUL.md et vous accompagne partout. AGENTS.md est propre à un projet : architecture, conventions, commandes et chemins. Il se trouve dans le dossier de votre projet.13 Si une information doit vous accompagner partout, placez-la dans SOUL.md. Si elle appartient à un projet, placez-la dans AGENTS.md.

Comment exécuter plusieurs instances de Hermes côte à côte ?

Utilisez des profiles. Chaque profile dispose de son propre HERMES_HOME, de sa propre configuration, de sa propre mémoire, de ses propres sessions et de son propre PID de gateway :6

hermes profile create work --clone
hermes profile use work                 # Sticky default
hermes -p work chat -q "..."            # One-off without switching
hermes profile alias work --name h-work # Wrapper script

Hermes prend-il en charge les LLMs locaux ?

Oui, grâce aux endpoints personnalisés. Hermes fonctionne avec tous les serveurs compatibles avec OpenAI : Ollama, vLLM, SGLang, llama.cpp/llama-server, LM Studio, LocalAI, Jan ou le vôtre.2 Consultez Endpoints personnalisés et auto-hébergés pour connaître la configuration propre à chaque serveur.

Pourquoi ma bannière de démarrage affiche-t-elle moins d’outils que le nombre indiqué dans le guide ?

Le guide mentionne 47 outils et 20 toolsets provenant du registre d’architecture en amont : il s’agit du nombre total d’outils dont Hermes fournit le code source, tous toolsets confondus. Votre installation en cours d’exécution affiche un nombre inférieur dans la bannière (l’installation de référence utilisée pour ce guide en indique 28), car Hermes n’active au démarrage que l’ensemble de toolsets par défaut. De nombreux toolsets sont facultatifs : les adaptateurs de gateway de messagerie, l’automatisation du navigateur, les piles d’extraction Web plus lourdes et plusieurs intégrations spécialisées doivent être explicitement répertoriés sous toolsets: dans ~/.hermes/config.yaml avant d’être chargés. Total du registre = « ce qui est disponible si vous l’activez ». Total de la bannière = « ce que votre profile actuel a effectivement chargé ». Utilisez hermes tools --list pour voir quels toolsets sont actifs et lesquels sont disponibles, mais désactivés. Activez ou désactivez individuellement les toolsets pendant l’exécution avec /tools enable <name> et /tools disable <name> (la désactivation entraîne une réinitialisation de la session afin que l’agent reconstruise son manifeste d’outils avec la nouvelle structure).

Comment Hermes gère-t-il le modèle de secours lorsque mon fournisseur principal échoue ?

Configurez un bloc fallback_model dans config.yaml :2

fallback_model:
  provider: openrouter
  model: anthropic/claude-sonnet-4

Lorsque le fournisseur principal échoue (limitation du débit, erreur du serveur ou échec d’authentification), Hermes bascule vers le modèle de secours en cours de session sans perdre l’historique de la conversation. Cette opération ne se déclenche qu’une seule fois au maximum par session.

L’agent peut-il améliorer ses propres skills au fil du temps ?

Oui — c’est la dimension « auto-améliorante » de Hermes Agent. L’agent peut créer, mettre à jour et supprimer des skills à l’aide de l’outil skill_manage. Lorsqu’il met au point un workflow complexe, il enregistre la méthode sous forme de skill afin de pouvoir la réutiliser ultérieurement.11 L’agent crée des skills après des tâches complexes (plus de 5 appels d’outils), lorsqu’il rencontre des erreurs et trouve la bonne méthode, lorsque vous corrigez son approche ou lorsqu’il découvre un workflow complexe.

Existe-t-il une intégration aux IDE ?

Oui — Hermes peut fonctionner comme serveur ACP (Agent Client Protocol) pour VS Code, Zed et JetBrains :6

pip install -e '.[acp]'
hermes acp

Journal des modifications

Date Modification Source
2026-09-24 Guide v1.23 : le bloc d’orientation de la v0.14.0, qui figurait au-dessus de la version actuelle depuis la première version du guide, clôt désormais l’historique des nouveautés en tant que section la plus ancienne, conformément à l’ordre antéchronologique utilisé dans le reste de l’historique. Aucun changement de contenu ; le résumé en bref enchaîne désormais directement les points clés, la note sur les sources et la section permettant de choisir votre parcours. Structure du guide
2026-09-24 Guide v1.22 : Hermes v0.21.5 (tag v2026.9.24, 24 sept.) — troisième correctif cumulatif, notes éditorialisées reportées à la v0.22.0. Nouvelle section consacrée aux nouveautés en tête de page ; le résumé en bref y renvoie. Éléments traités en examinant le tag : Hindsight a quitté l’arborescence principale pour rejoindre le catalogue de plugins (ce changement ne figure pas dans les notes de version), avec migration automatique ; retrait de gateway.multiplex_profiles: false, mise en attente par profile et gateway.standalone ; GPT-6 Sol/Luna et Claude Opus 5.5 dans les sélecteurs Nous et OpenRouter. La section sur les fournisseurs de mémoire externes répertorie désormais les sept fournisseurs intégrés, ainsi que Hindsight depuis le catalogue. Un paragraphe sur l’option de désactivation retirée a été ajouté à la section Messaging Gateway. Encadré de compatibilité revérifié au niveau du tag : plugin_compat.py reste inchangé et la solution de repli fonctionne toujours. Correction : le nombre de plugins de fournisseur intégrés est de 38, et non de 39, tandis que la ligne OpenCode Free est indiquée comme supprimée ; ces deux changements datent du 18 septembre. 5253
2026-09-23 Guide v1.21 : passe de correction et de lisibilité, toujours sur Hermes v0.21.4 (tag v2026.9.21 ; aucune version plus récente). Les nouveautés sont désormais présentées de la plus récente à la plus ancienne, la v0.21.3 dispose de sa propre section et le résumé en bref commence par la version actuelle. Association : decline est la seule nouvelle valeur ; la valeur par défaut effective devient ignore dès qu’une liste d’autorisation est définie ; la forme de YAML est platforms.<name>.unauthorized_dm_behavior ou la clé de premier niveau. stream-json accepte --query-file, qui dispose désormais d’une ligne dans le tableau des options. set-journal-mode précise la règle imposant de tout arrêter ainsi que l’option Windows --force. Le paragraphe consacré au singleton de l’hôte commence désormais par le comportement attendu de l’opérateur. Suppression des phrases sur les processus d’écriture. 5051
2026-09-22 Guide v1.20 : Hermes v0.21.4 (tag v2026.9.21, 21 sept.) — deuxième correctif cumulatif : « 5 071 commits hors fusion », « 5 169 fichiers modifiés », « 1 812 PR fusionnées » et « 2 116 tickets fermés » depuis la v0.21.3, dans une brève note qui reporte la couverture éditorialisée à la v0.22.0. Nouvelle section consacrée aux nouveautés sous le bloc de la v0.21.3. Les cinq chiffres clés ont tous été reproduits exactement dans le clone local au commit de mesure indiqué 4b8a8134 (le tag ajoute un commit de publication : 5 072 hors fusion ; à comparer au total de 5 173 avec les fusions, qui correspond au GitHub de comparaison API) ; deuxième plus grande fenêtre entre deux tags jamais enregistrée, derrière les 5 139 de la v0.21.1 (affirmation revérifiée et toujours exacte). La liste volontairement non documentée de la version n’a été traitée QU’APRÈS vérification du code source au niveau du tag, chaque élément étant placé dans sa section habituelle : singleton de l’hôte (gateway/host_rendezvous.py : un hermes serve + un hermes gateway run par hôte et par utilisateur du système d’exploitation, verrou de l’hôte + enregistrement de rendez-vous avec preuve d’activité (pid, createTime) ; les cinq résultats ATTACH/RESCAN/REPLACE_HOST/REFUSE/START de host_attach.py ; pour la partie Desktop, la séquence registre -> HTTP -> jeton -> WS de host-backend-attach.ts, avec une barrière de lancement au niveau de l’hôte — ajout du paragraphe à Messaging Gateway) ; une opération de connecteur détenue par le backend (tools/connectors/operation.py « Données pures, aucune E/S », délai de 300 s délibérément non exposé comme clé de configuration, carte de configuration manage_connections sur Desktop/TUI/CLI d’après le test au niveau du tag — extension de la sous-section sur l’offre gratuite de Nous) ; --format stream-json (_parser.py:247-249 + hermes_cli/stream_json.py : system/init -> text/tool_use/tool_result -> une enveloppe result ; nécessite -q, implique --quiet, refuse --tui, limite les outils à 5 000 caractères — ajout de la ligne au tableau des options de chat) ; skills.auto_load (config_defaults.py:1435, « épinglés comme intégralement chargés dans chaque nouvelle session (CLI, TUI, gateway, cron, API) », résolution unique lors de la construction du prompt, avertissement et omission des noms manquants, désactivation par HERMES_IGNORE_RULES — nouvelle sous-section sur les skills épinglés) ; decline du gateway (gateway/config.py:139, un refus courtois suivi de 24 h de silence selon DECLINE_DEDUPE_SECONDS #88028, unauthorized_dm_decline_message, configuration par plateforme via platforms.<name>.extra, valeur par défaut ignore pour l’e-mail — extension de la section sur l’association) ; mcp.discovery_concurrency (config_defaults.py:526, valeur par défaut 4, 0 = illimité #117373, les valeurs non valides déclenchent un avertissement et rétablissent la valeur par défaut, chaque serveur se connecte malgré tout — extension de la section MCP) ; paramètres after/before de session_search + nouvelle tentative assouplie avec OR (schéma de l’outil :708-725, bornes inclusives/exclusives, format ISO ou 7d/24h/2w ; hermes_state_search.py:1151-1163, nouvelle tentative ANY-term après un résultat nul sur l’index unicode61, conservation de la sémantique des correspondances exactes, exemption des requêtes OR/NOT, à terme unique et CJK — extension de la recherche de sessions et CORRECTION de l’affirmation obsolète de cette section sur la « synthèse par Gemini Flash » afin de refléter la conception à forme unique sans LLM de la v0.15.0, conformément à 34) ; hermes sessions set-journal-mode delete\|wal (subcommands/sessions.py:177 + sessions_cmd_journal_mode.py, procédure autonome hors ligne pour #100896, refus en présence de détenteurs étrangers, vérification des octets d’en-tête 18/19, doctor y renvoie — extension de la ligne sur les sessions et de la section sur le stockage des sessions) ; vague Desktop (champ de police desktop.font_family remplaçant le --dt-font-sans du thème, suggestions privilégiant l’accessibilité ; mise à jour du runtime en un clic via « Update engine », avec échec visible permettant de réessayer ; désinstallation depuis le hub Plugins après confirmation via plugins.manage remove / chargeur Electron) ; catalogues vidéo (plugins/video_gen/fal ltx-2.5 + kling-o3, avec les chaînes de capacités relevées au niveau du tag ; ligne ajoutée à l’inventaire de référence des toolsets) ; développement du catalogue de plugins (plugin-catalog/ passé de 9 à 228 entrées dans cette fenêtre, admission de YAML épinglée par SHA, pages de site par plugin et par auteur avec fichiers README du commit épinglé rendus au moyen d’une liste d’autorisation, tri des ajouts et mises à jour selon les dates de commit ; présence des dix plugins communautaires de la version vérifiée sous leurs slugs réels hermes-tailscale/hermes-ssh/shodan/hermes-terminal/hermes-rss/hermes-resetwatch/done-bell/kiwi/cognee/web-octen — extension de la section Plugin System). La catégorie des correctifs (isolation des profiles et du multiplexage, cron, kanban, Desktop, state.db) a été RÉSERVÉE à l’analyse de la v0.22.0, conformément au report annoncé dans la publication elle-même. État de compatibilité revérifié : le retour en arrière supprimant les chemins n’a TOUJOURS pas été intégré — le manifeste et les shims sont présents dans v2026.9.21 AINSI que sur main au commit a53b42ddea (22 septembre 2026, récupéré le même jour) ; les modifications apportées à plugin_compat.py dans cette fenêtre se limitent à un cache d’analyse des plugins et à des chemins Windows au format POSIX (#112576), tandis que le garde-fou booléen littéral a été déplacé de :261-268 à :296-303 et reste is True ; actualisation des références temporelles dans la puce de la v0.21.1, le bloc de la v0.21.3, l’encadré Plugin System et 42. Nouveaux relevés au niveau de v2026.9.21 : 39 fournisseurs statiques (décompte AST dans models_catalog_static.py:311) et 39 dossiers de plugins de fournisseur, deux nombres inchangés ; le repère du nombre de fournisseurs dans le résumé en bref est passé de v2026.9.14 à v2026.9.21 ; retrait de la formulation « version actuelle » dans la section v0.21.3. 505142
2026-09-15 Guide v1.19 : Hermes v0.21.2 (tag v2026.9.11, 11 sept.) « The state.db Patch Release » + v0.21.3 (tag v2026.9.14, 14 sept.), et bilan après l’échéance de compatibilité des plugins. Nouvelle section consacrée aux nouveautés sous celle de la v0.21.1. La v0.21.2 (« 947 commits hors fusion », « 312 PR fusionnées », « 140 contributeurs ») met en avant la campagne de fiabilisation de state.db (six PR, 44 problèmes : coordination des salons hébergés déplacée du stockage racine vers shared-state.db — vérification effectuée au niveau du tag dans gateway/hosted_rooms.py:398-426 ; le dashboard commence par une ouverture en lecture seule ; protection de cron via le registre des connexions suivies ; doctor --fix refuse les checkpoints dont l’innocuité ne peut être démontrée ; les dommages causés à l’index FTS dégradent la recherche au lieu de faire échouer le tour de manière sécurisée ; les lignes corrompues affichent ? au lieu de faire planter sessions list ; liaison épinglée au profile ; les ouvertures en lecture seule cessent de prendre le verrou d’écriture, de 4–20 s à 0,01 s ; maintien des consignes de la version à destination des opérateurs : d’abord hermes doctor, puis hermes sessions recover --inspect-only — parseur dans hermes_cli/subcommands/sessions.py:185-196, et la sous-commande EXISTAIT AVANT cette période, puisqu’elle était présente dans v2026.8.31 : elle est donc présentée comme désormais couverte par le guide, et non comme nouvelle) ; renforcement de l’isolation multi-profile (#107609-#107630 ont corrigé de véritables failles dans la promesse d’une isolation « totale » formulée depuis la v0.19.0 — listes d’autorisation héritées, identifiants transmis à l’hôte du profile par défaut, secrets du coffre transmis aux serveurs stdio MCP, pièces jointes MEDIA: partagées entre profiles, jetons Nous associés à des profiles voisins ; ajout de remarques présentant honnêtement ces limites dans Profiles et dans le paragraphe sur le multiplexage du Messaging Gateway) ; le coffre d’identifiants sans accès aux mots de passe (connexion, paiement et remplissage automatique depuis 1Password, Bitwarden ou le coffre local grâce à des handles avec espace de noms ne contenant que des métadonnées, le mot de passe n’étant résolu qu’au moment du remplissage ; le mot de passe principal n’est jamais transmis comme argument à un outil ; TOTP généré à partir d’une clé d’authentification enregistrée — vérification effectuée au niveau du tag dans agent/vault_backends/ + agent/vault_store.py:74-105) ; le catalogue de plugins (hermes plugins browse/search + install tenant compte du catalogue + pack install/export/show, avec épinglage par SHA — sous-parseurs vérifiés au niveau du tag ; mise à jour du bloc de commandes Plugin System) ; l’offre gratuite de Nous + premier lancement guidé (inférence et connecteurs gratuits, /login depuis un chat, HERMES_GUEST_ONBOARDING=1, où SEULE la valeur littérale 1 active la fonctionnalité — vérification dans guest-onboarding-flag.test.ts ; nouvelle sous-section sous Nous Tool Gateway) ; ainsi que des correctifs aux tempêtes de processus sur ordinateur. Petit bloc consacré à la v0.21.3 (« 1 036 commits hors fusion », « 338 PR fusionnées » ; tag publié afin que les agents Cloud mis à jour automatiquement la reçoivent) : l’actualisation single-flight des jetons met fin aux révocations de session provoquées par des rafales d’actualisations (commit 5dea46d13d, #110061), et les handles d’écriture state.db en double ont été supprimés (commit 939a2f64b4, #110934), ces deux changements n’ayant été vérifiés que dans la période v2026.9.11..v2026.9.14 ; mention du report annoncé par la version elle-même (« Les notes de version complètes et organisées pour cette période seront publiées avec la v0.22.0, qui documentera tout depuis la v0.21.0 »… « Aucun élément de cette période n’est omis ») et énumération dans la ligne des éléments délibérément non documentés (sélecteurs d’effort de raisonnement, OpenRouter PKCE, HEIF/AVIF, la vague FAL, Slack Agent Sessions API, refus du WAL entre machines virtuelles), CONSERVÉS pour l’analyse de la v0.22.0. Bilan après l’échéance de compatibilité réécrit au passé dans la puce de décomposition de la v0.21.1, l’encadré Plugin System et 42 : la suppression s’est activée COMME PRÉVU au moyen d’une condition de date, et non d’une annulation de code (hermes_cli/plugin_compat.py:32 dans v2026.9.14 définit COMPAT_REMOVAL_DATE ; removal_in_effect() aux lignes :86-90 renvoie true depuis le 2026-09-14), et les plugins concernés sont désormais désactivés avec l’avertissement rouge — mais le revert supprimant les anciens chemins d’importation n’a PAS été intégré (COMPAT_MANIFEST.md + compat_manifest.json + shims présents au niveau du tag ET sur main au commit 5d59366010, récupéré le 2026-09-15 à 12 h 55 PT) ; plugins.allow_deprecated_imports: true permet donc toujours le chargement des plugins concernés ; seule la valeur booléenne littérale fonctionne (plugin_compat.py:261-268, is True — une chaîne entre guillemets n’active jamais ce contournement). Éléments réservés au changelog, vérifiés dans une version ou dans le code source : sur Telegram, bots_require_mention impose une @mention aux bots, ce qui rompt les boucles entre bots ; hermes -z --resume poursuit la session (-z = --oneshot, hermes_cli/_parser.py:113) ; les vérifications passives des mises à jour interrogent le GitHub API au maximum une fois par jour, au lieu d’exécuter git fetch toutes les 30 min (banner.py:129-131 dans v2026.9.11, :136-139 dans v2026.9.14) ; hermes backup -k/--keep ne conserve par défaut que les 3 fichiers zip les plus récents (subcommands/backup.py:24-26), et les sauvegardes de config.yaml résident dans un unique dossier backups/config/ de taille limitée ; les clés model_thresholds peuvent être limitées à un fournisseur sous la forme provider:substr (agent/context_compressor.py:1558-1567) ; --clone-all ne copie plus les tâches cron (le flag appartient à hermes profile, subcommands/profile.py:24, et NON à hermes cron) ; kanban promote refuse les parents non terminés et kanban_request_review rejette les profiles de relecteurs inconnus ; /model et le mode automatique auxiliaire ne facturent jamais un fournisseur que vous n’avez pas sélectionné et ne basculent jamais automatiquement vers un fournisseur pour lequel aucun identifiant n’est configuré ; les sélecteurs ajoutent DeepSeek V4.1 Flash (Nous Portal + OpenRouter), GPT Image 2.5, ainsi qu’Opus 5 + Fable 5.1 dans le sélecteur natif Anthropic ; la durée de conservation de debug share a été ramenée à 1 jour avec la solution de repli dpaste. Nouvelles valeurs de référence dans v2026.9.14 : 39 fournisseurs statiques (décompte AST de CANONICAL_PROVIDERS dans models_catalog_static.py:314) et 39 dossiers de plugins de fournisseurs, deux valeurs inchangées ; valeur par défaut de --max-turns désormais fixée à 500 dans cli.py:404 (cli.py:400 dans 41 reste correct pour le tag concerné) ; model_catalog.ttl_minutes vaut 20 (config_defaults.py:1866) ; l’affirmation selon laquelle la v0.21.1 couvre la période la plus importante (5 139) reste vraie par rapport aux deux nouvelles périodes (959 et 1 037 décomptes locaux hors fusion) ; le tag de référence du nombre de fournisseurs dans le TL;DR passe de v2026.9.7 à v2026.9.14. 484942
2026-09-08 Guide v1.18 : Hermes v0.21.1 (tag v2026.9.7, 7 septembre) — le correctif récapitulatif : la plus grande fenêtre entre deux tags à ce jour (« 5 139 commits hors fusion », « 632 PR fusionnées »), sous une note de correctif volontairement succincte qui reporte les notes sélectionnées à la v0.22.0. Nouvelle section Nouveautés au-dessus de la section Pantheon, avec six ensembles vérifiés à la source : la décomposition de septembre + la date limite de compatibilité des plugins du 14 septembre 2026 (COMPAT_MANIFEST.md : 1 148 noms passés au chargement différé, HermesPluginCompatWarning une fois par nom, le vérificateur hermes plugins compat, la porte de sortie plugins.allow_deprecated_imports ; un encadré sur la fenêtre de compatibilité a été ajouté à la section Système de plugins), les limites de conversation du gateway désormais exclusivement explicites (SessionResetPolicy est désormais inerte — mise à jour de la section Gateway de messagerie, liste de migration depuis claw annotée), OAuth par code d’appareil de MCP (hermes mcp login --flow device, RFC 8628 ; login et reauth --all ajoutés au bloc de commandes MCP ; propriété des profiles via les sessions OAuth, caches de métadonnées mal formés ignorés, callbacks locaux au client desktop, filtres -t pour le lancement des serveurs MCP), fiabilité de la délégation (unités d’achèvement via delegation.independent_completions avec un group par tâche, un achèvement par appel par défaut ; transfert des processus en arrière-plan avec orphaned_processes et unread_completions indiqués dans les résultats ; delegation.fallback_providers ; chaînes d’enfants validées par le normaliseur ; résultats partiels conservés malgré les plantages ; les enfants n’héritent jamais du niveau de cache de 1 h — tous ces éléments ont été relevés dans la source de l’outil de délégation au niveau du tag), fournisseurs/modèles (GPT-6 Astra + Astra Pro avec niveaux fast/flex, soumis à l’éligibilité du compte sur Codex OAuth avec une variante -900k à activer ; claude-fable-5.1 ; gemini-3.7/3.8-flash ; qwen3.8-max-0902 ; Muse Spark 1.3 + le plugin image_gen muse-image ; recherche/extraction Tavily ; environnement d’exécution llama.cpp géré ; fournisseurs sous forme de processus externes ; actualisation du catalogue toutes les 20 minutes via model_catalog.ttl_minutes), et la vague desktop (mode de commentaires du navigateur intégré transportant le sélecteur, le balisage et les styles de chaque annotation, avec des lots regroupés par région ; commandes structurées de session et d’automatisation ; création de sessions par glisser-déposer ; import de sessions à partir de transcriptions externes ; display.resume_last_session ; consentement au premier lancement avec un vrai profile ; catalogue intégré de skills facultatifs ; interface desktop en russe). Uniquement dans le changelog, avec vérification par commit ou par source : fiabilité de cron (transfert au redémarrage renforcé par trois commits de correction vérifiés, déduplication de la livraison sérialisée avec conservation des états terminaux, suppression de la condition de concurrence lors de la création d’une tâche en pause, acheminement des médias cron de Discord vers leur destination avec signalement des échecs de téléversement, continuité préservée lors des cycles d’audit silencieux), analyse des commandes shell pour les approbations (séquences d’échappement et opérandes argv0 de GNU env correctement séparés, limites des argv de env et des commentaires shell, corps de substitution de commande entre guillemets conservant leurs limites de commande, approvals.deny dans les conteneurs isolés), watchdog de disponibilité au démarrage du gateway (hermes_startup_watchdog.py ; gateway.startup_watchdog avec un délai de 300 s et une sortie forcée 75), résilience de state.db (récupération des éléments perdus et retrouvés avec .recover de sqlite3, routage FTS like_scan, nouveau fichier docs/state-db-recovery.md), performances (search_files exécute ripgrep nativement sur les hôtes POSIX locaux, les transcriptions des enfants délégués sont exclues de l’index FTS par trigrammes dans le schéma v30, un client httpx OpenAI partagé entre les parcours principal et auxiliaires), gateway.trust_env, sélecteur /model de Slack Block Kit et livraison des médias depuis les sandbox distantes (les identifiants et les liens symboliques qui y mènent ne quittent jamais la sandbox) ; la section Dépannage intègre le contrôle du doctor pour détecter le fantôme d’une ancienne variable HERMES_MAX_ITERATIONS. Nouvelle estampille au niveau du tag, de v2026.8.31 à v2026.9.7 : 39 fournisseurs statiques et 39 dossiers de plugins de fournisseurs, avec des entrées identiques à celles de la v0.21.0 — l’affirmation de la préanalyse selon laquelle il y aurait « 38 fournisseurs statiques, xai ayant été absorbé dans le plugin » a été réfutée à la source (le tuple xai figure toujours dans la liste statique ; seul le fichier a été déplacé, de hermes_cli/models.py vers hermes_cli/models_catalog_static.py:311) ; prompt_builder.py a été remappé vers agent/prompt_builder.py dans le modèle mental et le flux de données CLI ; l’affirmation de la v0.16 concernant l’actualisation horaire du catalogue reste limitée à cette version, la cadence de 20 minutes ayant été ajoutée à ses côtés. Affirmations pérennes revérifiées et inchangées : la note sur le nom hermes approvals test, la valeur par défaut de 500 pour --max-turns (cli.py:400 au niveau du tag ; la docstring obsolète indiquant 60 n’a pas été reprise), 2 000 lignes pour read_file, limites de délégation de 250/10, compression.tail_mode: lean, Node 26, 17 langues pour CLI. 41424344454647
2026-07-28 Guide v1.12 : Extension de la couverture guidée par la demande de recherche — deux sujets générant de bonnes conversions n’avaient aucun titre sur lequel aboutir. Aucune nouvelle version. GSC montre que hermes swarm et hermes agent swarm convertissent à hauteur de 4,4 à 6,3 % depuis la position ~8, et hermes smart model routing à hauteur de 4,9 % depuis la position 6,7, alors qu’aucun de ces termes ne disposait d’une section : swarm n’existait que dans le texte de Multi-Agent Kanban et dans les lignes du changelog, tandis que « smart model routing » n’apparaissait nulle part ailleurs que dans une note de bas de page. Ajout de Qu’est-ce qu’un swarm Hermes ? sous Multi-Agent Kanban — définition d’un swarm comme un ensemble de workers parallèles opérant sur un même tableau durable, documentation de la topologie swarm de la v0.15.0, de la décomposition automatique, des substitutions de modèle par tâche, des tâches planifiées et de la gestion des worktrees, ainsi qu’un tableau des défaillances évitées par chaque mécanisme. Rotation des fournisseurs et fallback a été renommé Routage intelligent des modèles : rotation des fournisseurs et fallback, avec une introduction qui réunit les pools d’identifiants, le modèle de fallback et le routage auxiliaire au sein d’un même système. Aucun lien interne ne pointait vers l’ancre ; ce renommage ne casse donc rien. 59 2 6
2026-08-31 Guide v1.17 : Hermes v0.21.0 « The Pantheon Release » (tag v2026.8.31, 31 août) — la version récapitulative sélectionnée est publiée. Nouvelle section Nouveautés au-dessus de la section Herald, organisée selon les domaines fonctionnels propres à la version : Bot Mode inclus et activé par défaut sur desktop (profiles nommés, avatars déterministes, conversations de groupe avec mentions @), messages privés de bot à bot avec hermes peer (les réponses arrivent dans la conversation Bot Chat canonique de chaque agent), continuité de cron (continuity=true, blocs-notes durables, saut de LLM en mode surveillance, niveau d’effort fixé par tâche — la section Tâches planifiées intègre les mécanismes des quatre éléments au niveau du tag), orchestration en direct des subagents (delegate_task pour lister, orienter et arrêter, sorties des enfants selon le schéma JSON, valeurs par défaut relevées à 250 itérations / 10 enfants simultanés — vérifiées à la source dans config_defaults.py, tandis que la page de documentation sur la délégation indique encore les anciennes valeurs 3/50), le centre de commande MCP (+ liens d’installation hermes:// — section MCP mise à jour), la vague de fonctionnalités CLI (/palette + Ctrl+P et un /status reposant sur un registre partagé ajoutés aux tableaux des commandes slash, filtrage au fil de la saisie dans /model signalé ; il a été démontré que le nom hermes approval-check des notes de version correspond à hermes approvals test au niveau du tag — ce sous-menu n’existe pas), le navigateur intégré piloté par l’agent, la vague de fournisseurs/modèles (six nouveaux fournisseurs ; la matrice reçoit des lignes pour Tencent TokenPlan, Nebius Token Factory, Ramp Router et Alibaba Token Plan, avec les variables d’environnement citées depuis la documentation ; model_overrides ; avertissements sur les niveaux d’utilisation des données à des fins d’entraînement ; plugins de fournisseurs pip), la vague de sécurité (les écritures dans AGENTS.md, les skills et la mémoire nécessitent toujours une approbation — security.protected_instruction_files: true et le contrôle de tools/file_tools.py vérifiés au niveau du tag ; campagne de masquage ; couverture des approbations sous Windows ; hermes desktop --setup-tcc-identity ; suppression de Blender MCP — la section Renforcement de la sécurité reçoit une quatrième vague), la maturation du gateway, la vague de 8 skills et la liste des éléments ANNULÉS (Model Council /council, context engine DCP, serveur gateway exclusivement WS — la relecture estampillée par séquence #94219 a bien été livrée ; Electron revient à la version 40.10.2 ; grep confirme que le guide n’a jamais documenté aucune des fonctionnalités annulées). Le cadrage relatif aux notes différées dans la sous-section récapitulative est RÉSOLU et renvoie désormais vers la section sélectionnée ; les blocs de fenêtre sont conservés comme historique par tag. Nouvelle estampille au niveau du tag, de v2026.8.27 à v2026.8.31 : fournisseurs statiques de 38 à 39 (+tencent-tokenplan), dossiers de plugins de fournisseurs de 37 à 39 (+nebius-token-factory, +router, tous deux avec auth_type="api_key"), lignes de fournisseurs dans la documentation de 41 à 45 ; éléments inchangés et revérifiés : 28 lignes de plateformes dans la documentation / 24 membres de l’enum Platform (liste identique) / 22 dossiers d’adaptateurs, _BUILTIN_SUBCOMMANDS identique (73, peer présent depuis les fenêtres récapitulatives, aucun version), 7 backends de terminal + registre de plugins (registre identique octet pour octet), 14 personnalités et 17 langues (fichiers identiques octet pour octet/listes identiques), valeur par défaut lean pour la compression et liste des emplacements auxiliaires, _startup_fast.py/portal_cli.py identiques octet pour octet. Dérive corrigée lors de la vérification : hermes chat -q sur un TTY initialise désormais une session interactive (le nouveau --oneshot rétablit le comportement réponse puis sortie) et la valeur par défaut de --max-turns dans le tableau de chat a été corrigée de 90 à 500, conformément à l’aide de l’analyseur au niveau du tag. 35363738394033
2026-08-27 Guide v1.16 : Hermes v0.20.6 (tag v2026.8.27, 27 août) – quatrième récapitulatif. La sous-section récapitulative accueille sa quatrième période, d’après la description de la version elle-même (~1 313 commits dans ~1 557 fichiers, +177 113 / −21 682 – ~525 PR fusionnées depuis v0.20.5) : navigation avec un vrai profile soumise au consentement (profile Chromium par défaut, processus de fermeture avec approbation sous Windows), Browser de l’application de bureau dans sa propre fenêtre du système d’exploitation, moteur géré de mise à jour à distance SSH et volet de profiles pour les flottes, extension du catalogue distant MCP (plus de 50 serveurs hébergés par des fournisseurs et vérifiés en conditions réelles, dont Cloudflare, Grafana Cloud, Better Stack et Railway), chiffrement facultatif des secrets stockés dans le trousseau du système d’exploitation, nouveaux modèles dans le sélecteur (GLM-5.3-Flash, MiniMax M3 gratuit, MiniMax H3 Max pour la vidéo), mise en cache des résultats avec TTL pour web_search/web_extract, tool_search multi-requêtes avec racinisation, suspension des gateways par les outils de mise à jour via le socket de contrôle, refus des mises à jour dangereuses sur place pour les installations gérées par image/package, accusés de réception durables des incidents cron, réglages du déploiement des aperçus de liens Slack et identités de conteneur Docker partagées. Deux affirmations de la version contredisaient des sections existantes ; toutes deux ont été confirmées sur le tag et corrigées : la compression lean-tail est activée par défaut (section Context Compression réécrite avec les clés du tag – tail_mode: lean, threshold_tokens, protect_first_n, paramètres du résumeur sous auxiliary.compression.* avec migration automatique vers la version 17 de la configuration ; note de dépannage inversée corrigée) et les backends de terminal sont extensibles par plugin (présentation revue en sept backends intégrés plus un registre de plugins, dans le style du sélecteur de fournisseurs ; noms intégrés réservés). Les relevés sur le tag ont été revérifiés et déplacés de v2026.8.19 → v2026.8.27 : 38 fournisseurs statiques + 37 dossiers de plugins de fournisseurs, 24 membres de l’enum Platform / 22 dossiers d’adaptateurs / 28 lignes dans le tableau de la documentation, aucune sous-commande version (73 entrées dans _BUILTIN_SUBCOMMANDS, worktree présent), options du parseur et chaînes d’aide entre guillemets inchangées, BUILTIN_PERSONALITIES toujours à 14 (de helpful à hype) ; locales/ compte désormais 17 catalogues (en + 16 traductions ; décompte sur le tag ajouté). main se trouve AU NIVEAU du tag (ahead_by: 0, état identique). Autre dérive corrigée lors de la vérification : l’ancienne valeur par défaut du système auxiliaire – auto achemine désormais chaque tâche auxiliaire vers le modèle principal du chat, et non vers Gemini Flash au moyen de la détection OpenRouter → Nous → Codex ; section Auxiliary Models réécrite avec la liste des emplacements présente sur le tag (title_generation, tts_audio_tags, triage_specifier, kanban_decomposer, profile_describer ajoutés avec des descriptions d’une ligne sourcées ; emplacements web_extract et session_search supprimés en amont – aucun des deux n’utilise plus de LLM – et flush_memories retiré des valeurs par défaut), et entrée de dépannage propre à Anthropic de nouveau étayée. Pour les nouvelles installations, la version utilise l’URL brute du script GitHub ; le guide conserve l’adresse canonique hermes-agent.nousresearch.com/install.sh. Des notes éditorialisées restent promises pour v0.21.0. 293031323334
2026-08-26 Guide v1.15 : CORRECTION – aucune nouvelle version (tag le plus récent : v2026.8.19 / v0.20.5, 21 août) ; affirmations existantes revérifiées sur le tag. Backends de terminal : six → sept, avec ajout de vercel_sandbox au tableau et au commentaire de configuration. Plateformes de messagerie : les mentions isolées de « 22 » ont été harmonisées avec les 28 lignes du tableau comparatif de la documentation sur le tag, en précisant la méthode de comptage (24 membres intégrés de l’enum Platform, 22 dossiers d’adaptateurs fournis) et en ajoutant ntfy et Buzz à la liste des gateways. Fournisseurs : « ~20 / ~22 de premier plan » remplacé par le décompte sourcé (38 entrées statiques dans CANONICAL_PROVIDERS, plus extension automatique à partir de 37 plugins de fournisseurs fournis ; 41 lignes cloud/abonnement sur la page de documentation), mention de « liste complète » supprimée, ligne Qwen OAuth corrigée et 17 lignes ajoutées à la matrice (OpenCode Free, OpenAI API direct, Vertex AI, Azure Foundry, Bedrock, NVIDIA NIM, Ollama Cloud, StepFun, MiniMax OAuth, Meta AI, NovitaAI, Arcee AI, GMI Cloud, Actual Computer, Tencent TokenHub, CommandCode, Alibaba Coding Plan). hermes version → hermes --version (ce n’est pas une sous-commande sur le tag). hermes honcho signalé comme dépendant d’un plugin. « --plan de la flotte » → hermes update --plan. La section Global Options accueille --in, --tui, --cli, --dev, --ignore-rules, --ignore-user-config ; Top-Level Commands accueille 34 lignes issues de _BUILTIN_SUBCOMMANDS, dont hermes worktree list\|prune avec ses flags ; commande slash /worktree ajoutée ; hermes setup --portal et hermes portal login\|info\|open\|tools documentés. Lors de la vérification, main comptait 1 104 commits au-delà du tag (tous intégrés depuis dans v2026.8.27) ; des notes éditorialisées sont promises pour v0.21.0. 23242526272829
2026-08-24 Guide v1.14 : v0.20.5 (tag v2026.8.19, publiée le 21 août). La sous-section récapitulative accueille sa troisième période (~746 commits / ~323 PR depuis v0.20.4) : le niveau web sans clé (rotation gratuite entre 5 fournisseurs avec basculement en anneau — recherche web disponible sur les nouvelles installations sans aucune clé), améliorations de CLI (sélecteur /model avec recherche approximative, palette de commandes avec Ctrl+P, /status enrichi), fils de discussion pour les salons de groupe en Bot Mode + résumés repliables + glisser-déposer de PDF/fichiers, hermes worktree list/prune, reçus de hermes update et vérification --plan pour les flottes, mémoire persistante de cron avec effort de raisonnement propre à chaque tâche, garde-fous contre les blocages liés à la discipline d’exécution d’après les conclusions de l’évaluation Composio, fournisseur opencode-free sans authentification et performances de l’application de bureau (hydratation privilégiant le premier rendu, React Compiler dans les deux moteurs de rendu). v0.21.0 et ses notes éditorialisées complètes sont toujours en attente - résumés tirés de la description de la période fournie par la version elle-même. Filiation de l’en-tête actualisée. 23
2026-08-20 Guide v1.13 : v0.20.3 (tag v2026.8.16.2, publiée le 17 août) et v0.20.4 (tag v2026.8.18, 18 août). Nouvelle sous-section sous la Herald Release : la série de récapitulatifs apporte désormais des fonctionnalités et ne se limite plus à la stabilisation. v0.20.3 (~250 commits / ~125 PR) : migration de MCP 2.x vers SDK avec prise en charge du protocole sans état du 28 juillet 2026, plugin Bot Mode fourni (hermes-bots) avec le protocole central d’équipiers, plugin du fournisseur CommandCode, contrats d’exécution de Cua Driver 0.20 pour l’utilisation de l’ordinateur, renforcement de la propriété de l’environnement d’exécution Python, autoréparation du planificateur cron, correctifs contre les pertes de données lors du transfert de sessions, portages issus de l’écosystème (/worktree, conservation des modifications manuelles avec /rollback, analyse de sécurité lors de l’installation de plugins). v0.20.4 (~146 commits / ~74 PR) : surface vitrée/translucide de l’application de bureau avec sélecteur de givre, barre latérale à onglets SESSIONS|BOTS permettant de masquer ou d’afficher chaque bot, analyse consultative de niveau 1 par NVIDIA SkillEvaluator lors de l’installation de skills (licence + sécurité), renforcement de l’envoi de médias par cron, transparence de hermes update concernant les branches mises en attente. Les deux versions indiquent que les notes éditorialisées complètes accompagneront v0.21.0 — résumés tirés des descriptions de période fournies par les versions elles-mêmes. Phrase d’en-tête et filiation des tags actualisées. 54
2026-08-16 Guide v1.12 : v0.20.0 « The Herald Release » (3 août, tag v2026.8.3), ainsi que les tags de stabilisation v0.20.1 (13 août) et v0.20.2 (16 août). Trois corrections réparent des instructions qui ne fonctionnent plus : Node 26 est requis (le programme d’installation épingle NODE_VERSION="26" et refuse les environnements d’exécution plus anciens — la mention de Node v22 sur le site de documentation est obsolète ; le programme d’installation et les notes de version font donc autorité), pip et Homebrew ont été abandonnés et pas simplement dépréciés (« programme d’installation shell / Docker / Nix sont les canaux pris en charge »), et la limite d’itérations par défaut est passée de 90 → 500, invalidant tous les nombres du tableau sur la pression exercée par le budget. Commande d’installation corrigée pour utiliser l’adresse canonique https://hermes-agent.nousresearch.com/install.sh. Élément supprimé : la source de skills claude-marketplace a disparu, remplacée dans la liste des sources par browse-sh ; les sources GitHub par défaut sont désormais openai, anthropics, huggingface, NVIDIA et gstack. Nombre de plateformes de messaging gateway recalculé de 22 → 28 en énumérant directement le tableau comparatif de la documentation (la documentation ne publie aucun total officiel). Windows (natif) est de niveau 1, et non plus en bêta précoce ; macOS est réservé à Apple Silicon. Une nouvelle section couvre la version elle-même : voix conversationnelle avec interruption, A2A v1.0, webhooks sortants signés pour le cycle de vie, skill de citations fondées sur les sources, vague CLI composée de !//init//diff//context//focus et hermes import-agent, source de secrets command-helper, démarrage à froid de hermes -w ramené de ~14 s à ~1,8 s, ainsi que les artefacts de l’application de bureau et un SDK de Plugin. Éléments vérifiés comme inchangés : les trois méthodes d’authentification, l’organisation de ~/.hermes/, hermes update et la liste documentée des outils. 55
2026-07-21 Guide v1.11 : v0.19.0 « The Quicksilver Release » (20 juillet 2026, tag v2026.7.20). Ajout de la section « Nouveautés de la v0.19.0 » : réduction d’environ 80 % du TTFT au premier tour (soumission à froid→distribution d’environ 4,3 s à environ 0,9 s sur CLI/gateway/TUI/desktop/cron), raisonnement diffusé en direct par défaut (display.show_reasoning activé), vague d’accélération d’environ 20 PR pour l’application desktop (rendu Markdown en streaming 14× plus rapide) + Markdown incrémentiel dans la TUI ; installations via pip/Homebrew obsolètes (simple avertissement « unsupported legacy », suppression prévue de la publication sur PyPI/Homebrew) — correction de la section Installation et du TL;DR pour adopter l’installateur en une ligne ; SecretSource enfichable avec des fournisseurs Bitwarden + 1Password (références op://, coffres multiples, priorité déterministe, provenance par variable) ; approbations intelligentes par défaut (évaluateur LLM indépendant pour chaque commande signalée) + règles de refus définies par l’utilisateur qui restent applicables en mode YOLO + /deny <reason> + réintégration de l’escalade d’approbation pre_tool_call des plugins ; facturation dans le terminal avec /subscription + /topup + onglet de facturation dans l’application desktop (retrait de l’affirmation « aucune commande d’abonnement distincte ») ; transcriptions en direct des subagents + délégation durable en arrière-plan + registre des obligations de livraison dans state.db ; max_async_children rendu obsolète au profit de limites de concurrence unifiées pour la délégation ; routage des messages du gateway selon le profile (un jeton de bot multiplexé → profiles isolés, GATEWAY_MULTIPLEX_PROFILES, index de routage dans state.db, miroir historique facultatif sessions.json) ; fournisseurs/modèles : Fireworks AI (2e position dans le sélecteur), DeepInfra, Upstage Solar, GPT-5.6 (Sol/Terra/Luna + Pro) de bout en bout, grok-4.5 en disponibilité générale, kimi-k3 (retrait de kimi-k2.x), Claude Sonnet 5 entièrement intégré, enabled: false par fournisseur + excluded_providers, niveaux d’effort de raisonnement max/ultra avec substitutions par modèle/emplacement MoA et /reasoning limité à la session ; CLI/MCP : hermes sessions export (Markdown/Quarto/HTML/prompt uniquement/trace HF, --redact), /model --once, invocations empilées de slash-skills, --safe-mode, hermes config get/unset, hermes serve véritablement headless, nommage MCP mcp__server__tool. Consigne également les tags de correctifs omis v0.18.1 (tag v2026.7.7) et v0.18.2 (tag v2026.7.7.2), 7–8 juillet 2026 — regroupements de correctifs d’infrastructure ; le correctif majeur de la v0.18.2 supprime le verrouillage de WhatsApp Baileys sur la version 7.0.0-rc13 afin de fiabiliser les builds Docker. 56 57
2026-07-16 Ajout d’une première entrée de dépannage pour l’erreur exacte au démarrage “No inference provider configured. Run ‘hermes model’ to choose a provider and model” — ajout motivé par la demande de recherche ; renvoie vers le sélecteur interactif, hermes doctor et les trois méthodes d’authentification. Aucun changement apporté au produit. 2 7
2026-07-01 Guide v1.10 : v0.18.0 « The Judgment Release » (1er juillet 2026, tag v2026.7.1). Ajout de la section « Nouveautés de la v0.18.0 » : résorption complète du backlog P0/P1 (environ 692 éléments) ; Mixture-of-Agents de premier ordre avec sortie d’ensemble étiquetée par modèle et diffusion en direct ; contrats d’achèvement — /goal vérifie son propre travail en exécutant les contrôles du projet ; /learn (décrivez un workflow → skill réutilisable, conforme à CONTRIBUTING.md) ; /journey chronologie de la mémoire/des skills + graphe de mémoire dans l’application desktop ; déploiement en éventail de subagents en arrière-plan (tâches déléguées simultanées) ; Desktop Projects (projet/dépôt/branche de travail) ; gateway avec mise à l’échelle jusqu’à zéro et coordination du drainage ; Google Vertex AI (Gemini via des comptes de service GCP, actualisation automatique de OAuth2) ; /prompt, éditeur basé sur \$EDITOR. Source : versions de hermes-agent. 22
2026-06-21 Guide v1.9 : v0.17.0 « The Reach Release » (19 juin 2026, tag v2026.6.19). Ajout de la section « Nouveautés de la v0.17.0 ». Messagerie : iMessage sans relais via Photon Spectrum (hermes photon login, OAuth par code d’appareil), adaptateur officiel API pour WhatsApp Business Cloud (sans passerelle), groupes + pièces jointes SimpleX, plugin de plateforme Raft. Modèles : z-ai/glm-5.2 (1M), anthropic/claude-fable-5, laguna-m.1, nemotron-3-ultra, grok-composer-2.5-fast (OAuth xAI, 200k) ; modèle xAI par défaut → grok-build-0.1 ; les modèles adaptatifs Anthropic abandonnent le champ reasoning. Application desktop/tableau de bord : subagents en arrière-plan avec fenêtres de suivi en direct (delegate_task(background=true)), créateur complet de profiles, Skills Hub remanié, Automation Blueprints, connexion sécurisée avec erreur 401, thèmes VS Code Marketplace, interface en japonais + chinois traditionnel. Skills/outils : modification d’image à image avec image_generate, traitement par lot atomique operations pour memory, skill simplify-code, booléen write_approval (remplace write_mode). Architecture : gestionnaire de sollicitation MCP, CronScheduler enfichable + Chronos, périmètre Managed (/etc/hermes), relais Gateway-Gateway. Commandes : /version, /billing, hermes curator run --consolidate (facultatif). Sécurité : contournement de la liste de refus par échappement shell corrigé, adaptateurs d’approbation/gateway à fermeture sécurisée, environnement cron assaini, secrets masqués dans les dumps de débogage, contrôle des exfiltrations via stdio MCP, mises à jour d’urllib3 + PyJWT pour corriger des CVE. 21
2026-06-08 Guide v1.8 : v0.16.0 « The Surface Release » (5 juin 2026, tag v2026.6.5). Le guide a été renommé pour la v0.16 et la section « Nouveautés de la v0.16.0 » a été ajoutée. À retenir : Hermes n’est plus limité au terminal. Application native Hermes Desktop (Electron, macOS/Linux/Windows) avec installation en un clic, mise à jour automatique dans l’application, chat en streaming, glisser-déposer + collage d’images depuis le presse-papiers, palette Cmd+K, archivage/recherche des sessions, sélecteur de modèle dans la barre d’état, connexion à un gateway distant via une liaison WebSocket sécurisée (OAuth ou identifiant/mot de passe, hôtes propres à chaque profile, liens @session entre profiles) et traduction complète en chinois simplifié grâce à un système i18n typé. Panneau d’administration dans le navigateur (tableau de bord web → administration complète) : activation/désactivation du catalogue MCP, gestion des identifiants, création de webhooks/hooks, configuration de la mémoire, contrôles du gateway, page System avec vérification avant mise à jour + Debug Share, nouvelle page Channels et authentification enfichable (identifiant/mot de passe, OIDC auto-hébergé, hermes dashboard register). Nouvelles commandes : /undo [N] (CLI/TUI/messagerie), interface par défaut configurable (cli/tui, --cli), /model unifié dans la TUI + panneau Sessions, hermes portal, hermes prompt-size, hermes sessions optimize. Nouveaux modèles : deepseek-v4-flash, MiniMax-M3 (contexte de 1M), qwen3.7-plus, gemini-3.5-flash ; prise en charge de premier ordre de OAuth xAI Grok dans le lanceur de l’application desktop ; sélecteur de modèle avec recherche approximative ; actualisation horaire du catalogue. Skills : ensemble par défaut allégé (Spotify → plugin natif, Linear → hermes mcp install linear, suppression des skills obsolètes), filtre de pertinence environments: (kanban/docker/s6), source fiable NVIDIA/skills par défaut, divulgation progressive (ciblée) des outils MCP/plugins. Sécurité : CVE-2026-48710 (Starlette BadHost) verrouillée sur une version ≥1.0.1 ; contrôles SSRF sortis de la boucle d’événements ; jeton bearer Bedrock retiré de l’environnement des sous-processus ; lecture de bws_cache.json protégée ; ajout de docker restart/stop/kill aux motifs dangereux ; assainissement des caractères Unicode invisibles. Résolution de 2 P0 + 62 P1 (dont 16 liés à la sécurité). 20
2026-05-31 Guide v1.7.1 : v0.15.1 (29 mai 2026, 01:12 UTC) — correctif Velocity. Correctif publié le jour même après Velocity ; ligne du tag verrouillée sur v2026.5.29. Corrige la boucle de rechargement avec erreur 401 du tableau de bord qui touchait les déploiements en mode loopback. Docker ne considère plus --insecure comme implicite — définissez explicitement HERMES_DASHBOARD_INSECURE=1 pour le réactiver. Les commandes MCP sans chemin (npx, npm, node) sont de nouveau résolues correctement dans les conteneurs Docker. Les pastilles de source et la barre latérale des catégories de la page Skills s’affichent correctement. Les workers Kanban répondent proprement à SIGTERM au lieu de laisser des processus orphelins. Le catalogue Skills.sh passe de 858 à 19 932 entrées grâce à la découverte par sitemap. 28 commits, 21 PR fusionnées, 9 contributeurs. v0.15.2 (29 mai 2026, 13:37 UTC) — correctif de packaging Velocity. Corrige les distributions wheel et sdist afin d’y inclure les manifestes plugin.yaml, ce qui permet aux installations depuis PyPI de fonctionner sans chargement parallèle de l’arborescence source. Correctif limité au packaging, 4 contributeurs. 58
2026-05-28 Guide v1.7 : ajout de v0.15.0 (28 mai 2026) — la version Velocity (tag v2026.5.28). À la une : une refactorisation massive et de nouvelles primitives d’orchestration. Refactorisation du code : réduction de 76 % de run_agent.py (de 16 083 à 3 821 lignes), réparti entre 14 modules cohérents. Kanban multi-agent v2 : décomposition automatique des objectifs de haut niveau en sous-tâches, topologie en essaim pour coordonner les workers en parallèle, remplacement du modèle par tâche, tâches planifiées, gestion des worktrees. Performances : une seconde supplémentaire gagnée au démarrage à froid ; réduction de 47 % des appels de fonction par conversation ; refonte de session_search, désormais 4 500 fois plus rapide, avec suppression de la dépendance LLM (et du coût API associé). Sécurité : la défense Promptware protège contre les injections de prompt de classe Brainworm à trois points de contrôle de sécurité ; l’intégration de Bitwarden Secrets Manager remplace plusieurs clés API propres à chaque fournisseur par un unique jeton d’amorçage. Lots de skills : chargement simultané de plusieurs skills avec une seule commande slash. Orchestrateur de sessions TUI : gestion de plusieurs sessions dans une même fenêtre de terminal. Nouveaux fournisseurs : Krea 2 (Medium/Large) et prise en charge du plugin FAL pour la génération d’images ; une nouvelle série d’intégrations xAI ajoute un plugin de recherche Web, OAuth en amont, la détection des modèles retirés et des pauses naturelles pour la synthèse vocale. Statistiques : 1 302 commits, 747 PR fusionnées et 321 contributeurs de la communauté. D’après les notes de version GitHub, une version corrective publiée le jour même ou le lendemain résout la boucle de rechargement avec erreur 401 du dashboard, la variable d’environnement explicite Docker --insecure, la résolution des commandes nues MCP dans Docker (npx, npm, node), la restauration de la page Skills, la gestion de SIGTERM par les workers Kanban et la mise à disposition du catalogue complet de 19 932 Skills via le sitemap. 59
2026-05-21 Guide v1.6 : ajout de v0.14.0 (16 mai 2026) — la version Foundation. À la une : une base d’installation et d’exécution plus légère, ainsi qu’un périmètre élargi pour les fournisseurs, le gateway, les médias et la vérification. Ajout de SuperGrok OAuth avec grok-4.3 et un contexte de 1 million, de hermes proxy compatible avec OpenAI pour les fournisseurs OAuth, de x_search en tant que fonctionnalité de premier ordre, de pip install hermes-agent, de l’installation différée des dépendances, d’un lancement accéléré d’environ 19 s, d’appels CDP du navigateur 180 fois plus rapides, de LINE et SimpleX Chat portant le total à 22 plateformes de messagerie, de la prise en charge complète de Microsoft Teams, de /handoff, de /subgoal, de boutons natifs de clarification sur Telegram/Discord, du chargement rétroactif de l’historique Discord, de vision_analyze sur pixels bruts, d’un pied de page de vérification des modifications de fichiers à chaque tour, de diagnostics sémantiques LSP à chaque écriture, de la commande unifiée video_generate, de computer_use via cua-driver pour les fournisseurs autres que Anthropic, d’URL OSC8 cliquables, de la prise en charge du registre ACP de Zed, du routeur OpenRouter Pareto Code, de NovitaAI, de l’environnement d’exécution Codex app-server, de la source fiable huggingface/skills, de 9 skills facultatifs, de ctx.llm / tool_override pour les plugins, de la recherche Web avec Brave/DDGS, du renommage de Qwen Cloud, d’une version bêta native pour Windows et de la résolution de 12 problèmes P0 et 50 problèmes P1. 19
2026-05-07 Guide v1.5 : ajout de v0.13.0 (7 mai 2026) — la version Tenacity. À la une : un tableau Kanban multi-agent durable (signal de vie, récupération, détection des zombies, contrôle anti-hallucination, max_retries par tâche, tableaux multiprojets) qui fait des essaims une primitive de premier ordre plutôt qu’un modèle de délégation. La commande /goal maintient l’agent concentré sur un objectif d’un tour à l’autre (modèle de boucle Ralph sous forme de commande slash). Nouvel outil video_analyze, donnant la priorité à Gemini et extensible aux modèles compatibles. Fournisseur xAI Custom Voices TTS avec clonage vocal. Internationalisation en 7 langues (zh-Hans, ja, de, es, fr, uk, tr) pour CLI et les messages du gateway ; documentation uniquement en zh-Hans. Google Chat devient la 20e plateforme de messagerie grâce au modèle d’adaptateur enfichable ; IRC et Microsoft Teams ont migré vers ce même modèle. ProviderProfile ABC + plugins/model-providers/ pour intégrer des fournisseurs tiers sans modifier le cœur. Reprise automatique des sessions après le redémarrage du gateway, /update et le rechargement d’un fichier source. Refonte de checkpoints v2 avec un stockage unique, un véritable élagage et des garde-fous pour l’espace disque. Résolution de huit problèmes de sécurité P0 : masquage des secrets activé par défaut, contournement des DM inter-serveurs Discord (CVSS 8.1), rejet des inconnus et mise en sourdine des conversations avec soi-même sur WhatsApp, TOCTOU MCP OAuth, TOCTOU sur auth.json dans CLI, protection minimale contre le SSRF du navigateur, analyse des injections de prompt dans cron, masquage dans hermes debug share. Linting après écriture pour Python/JSON/YAML/TOML, mode no_agent de cron réservé aux scripts, listes d’autorisation sur Slack/Telegram/Mattermost/Matrix/DingTalk, améliorations de MCP (transport SSE, transfert de OAuth, balises MEDIA pour les images). Statistiques depuis v0.12.0 : 864 commits, 588 PR fusionnées, 829 fichiers modifiés, 295 contributeurs de la communauté et 282 tickets clôturés (13 P0, 36 P1). 18
2026-05-06 Guide v1.4 : ajout de v0.12.0 (30 avril 2026) — la version Curator. À la une : un Curator autonome en arrière-plan, exécuté par le minuteur cron du gateway (cycle de 7 jours par défaut), qui évalue la bibliothèque de skills selon une grille, élimine les skills obsolètes, regroupe les skills connexes et rédige un rapport à chaque exécution — Hermes s’entretient ainsi de lui-même entre les sessions actives. La boucle d’auto-amélioration bénéficie désormais d’une évaluation fondée sur une grille, d’un biais en faveur des mises à jour actives, d’un héritage correct de l’environnement d’exécution et de toolsets limités à la mémoire et aux skills. Quatre nouveaux fournisseurs d’inférence : GMI Cloud, Azure AI Foundry, MiniMax OAuth et Tencent Tokenhub. LM Studio devient une fonctionnalité de premier ordre. Les manifestes distants des catalogues de modèles se mettent maintenant à jour automatiquement, sans nouvelle version. Deux nouvelles plateformes de messagerie : Microsoft Teams (la 19e, via l’architecture de gateway enfichable) et Tencent Yuanbao (la 18e, avec texte et médias natifs). Intégration native de Spotify via PKCE OAuth, avec un skill inclus ; plugin Google Meet pour les appels et la transcription ; fournisseur local de synthèse vocale Piper. ComfyUI v5 et TouchDesigner-MCP, auparavant facultatifs, sont désormais inclus par défaut. Nouveaux skills : Humanizer, claude-design, design-md, airtable. Ajouts à CLI : mode ponctuel hermes -z, vérification préalable hermes update --check, commande slash /reload-skills, styles enfichables pour l’indicateur d’activité. Le démarrage à froid visible de la TUI est réduit d’environ 57 % grâce à l’initialisation différée de l’agent et aux imports différés. Sécurité : masquage des secrets désactivé par défaut pour éviter l’altération des payloads ; liste de blocage stricte pour les commandes irrécupérables. Statistiques : 1 096 commits, 550 PR fusionnées et 213 contributeurs de la communauté. 17
2026-04-25 Guide v1.3 : ajout de v0.11.0 (23 avril 2026) — la version Interface. Réécriture complète de la TUI interactive avec React/Ink, associée à un backend RPC Python JSON (tui_gateway) ; zone de saisie fixe, diffusion en direct avec prise en charge du presse-papiers OSC-52, touches de sélection stables, barre d’état avec chronomètre par tour et branche git, confirmation de /clear, préréglage de thème clair, surcouche d’observation du lancement des sous-agents. Architecture de transport enfichable — conversion des formats et transport HTTP extraits dans agent/transports/ afin de simplifier l’intégration des fournisseurs. Prise en charge native d’AWS Bedrock via Converse API. Cinq nouvelles voies d’inférence : NVIDIA NIM, Arcee AI, Step Plan, Google Gemini CLI OAuth et Vercel ai-gateway. GPT-5.5 via Codex OAuth — le nouveau modèle phare d’OpenAI est désormais accessible par l’intermédiaire de ChatGPT Codex OAuth, sans clé API distincte. QQBot (17e plateforme de messagerie) avec configuration par scan de code QR et streaming. Élargissement de l’interface des plugins : commandes slash, répartition des outils, blocage de l’exécution, transformation des résultats. /steer <prompt> — des indications injectées en cours d’exécution, que l’agent actif voit après son prochain appel d’outil, sans interrompre le tour ni invalider le cache du prompt. Les hooks shell relient des scripts aux hooks du cycle de vie sans plugins Python. Le mode de livraison directe par webhook transmet les payloads directement à une conversation de plateforme, en contournant l’agent pour la diffusion. Délégation plus intelligente grâce aux rôles d’orchestrateur, à une profondeur de lancement configurable et à la coordination des fichiers. Le dashboard se dote d’un système de plugins, du changement de thème en direct, de l’internationalisation et d’une interface adaptée aux mobiles. Statistiques depuis v0.9.0 : 1 556 commits, 761 PR fusionnées, 1 314 fichiers modifiés, 224 174 insertions et 29 contributeurs de la communauté. 60
2026-04-16 Guide v1.2 : ajout de v0.10.0 — Nous Tool Gateway. Les abonnés payants à Nous Portal peuvent désormais accéder à des outils gérés (recherche Web Firecrawl, génération d’images FAL / FLUX 2 Pro, synthèse vocale OpenAI, automatisation du navigateur avec Browser Use) sans clés API supplémentaires. Activation au cas par cas grâce au nouveau champ de configuration use_gateway. Lorsque les deux sont configurés, l’environnement d’exécution privilégie le gateway aux clés API directes. Suppression de la variable d’environnement HERMES_ENABLE_NOUS_MANAGED_TOOLS. Hermes Agent CLI reste sous licence MIT et entièrement gratuit. 61
2026-04-13 Guide v1.1 : ajout des fonctionnalités de v0.8.0 et v0.9.0. Dashboard Web local, mode /fast, plateformes iMessage et WeChat (16 au total), surveillance des processus en arrière-plan (watch_patterns), context engine enfichable, hermes backup/hermes import, Termux/Android, fournisseurs xAI, MiMo, Google AI Studio et Qwen, commande /debug, renforcement complet de la sécurité. 15 16
2026-04-10 Guide v1.0 : version initiale consacrée à Hermes Agent v0.7.0. Authentification des fournisseurs, configuration, CLI, commandes slash, outils, skills, mémoire, gateway, cron, MCP, compression, architecture, migration depuis OpenClaw, dépannage, FAQ.
—

Références


  1. Nous Research, README du projet « Hermes Agent » sur GitHub. Source principale pour la description du produit (agent auto-amélioré, prise en charge de plusieurs fournisseurs, gateway de messagerie, backends de terminal, évolution des skills, planificateur cron, délégation) et la commande en une ligne d’« Installation rapide ». ↩↩↩

  2. Nous Research, « Fournisseurs d’IA » dans la documentation de Hermes Agent. Source principale pour la liste complète des fournisseurs, les méthodes d’authentification propres à chaque fournisseur (OAuth Nous Portal, code d’appareil Codex, types de jetons Copilot GitHub, trois méthodes d’authentification Anthropic, fournisseurs d’IA chinois, routage Hugging Face, endpoints personnalisés), les trois modes d’authentification (clé API dans .env, OAuth via hermes model, endpoint personnalisé dans config.yaml), la syntaxe de la commande slash /model (notamment custom:name:model), les modèles de configuration Ollama/vLLM/SGLang/llama.cpp/LM Studio, les instructions réseau pour WSL2, la chaîne de détection de la longueur du contexte, la configuration du modèle de secours, le routage intelligent des modèles et les fournisseurs personnalisés nommés. Tous les noms de variables d’environnement propres aux fournisseurs, types de jetons, remplacements d’URL de base et identifiants de modèles présentés dans cet article proviennent de cette page. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩

  3. Nous Research, « Architecture » dans le guide de développement de Hermes Agent. Source principale pour le schéma général du système, la structure des dossiers, le flux des données dans les parcours de session et de message du gateway CLI, les trois modes API (chat_completions, codex_responses, anthropic_messages), la résolution des fournisseurs via runtime_provider.py, la persistance des sessions via SQLite + FTS5, la liste des plateformes du gateway de messagerie, les sources de découverte du système de plugins, l’isolation des profiles et les six principes de conception. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩

  4. Nous Research, « Configuration » dans le guide d’utilisation de Hermes Agent. Source principale pour la structure du dossier de configuration, la règle entre config.yaml et .env (« config.yaml prévaut pour les paramètres non secrets »), l’ordre de priorité de la configuration (arguments CLI → env → config.yaml → .env → valeurs par défaut), les paramètres de compression du contexte (bloc compression.* avec threshold, threshold_tokens, target_ratio, tail_mode, protect_last_n, protect_first_n ; le modèle, le fournisseur et l’endpoint du module de synthèse se trouvent sous auxiliary.compression.* depuis la migration vers la version 17 de la configuration), les seuils de pression sur le budget (prudence à 70 %, avertissement à 90 %), les délais d’expiration du streaming avec ajustement automatique pour les fournisseurs locaux et le bloc complet de configuration des modèles auxiliaires (auxiliary: avec les emplacements vision, web_extract, approval, compression, session_search, skills_hub, mcp, flush_memories). La restriction du fournisseur "main" aux emplacements auxiliaires, de compression et de secours provient également de cette page. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩

  5. Nous Research, « Migrer depuis OpenClaw » dans les guides de Hermes Agent. Source du processus de migration d’OpenClaw vers Hermes. ↩↩

  6. Nous Research, « Référence des commandes CLI » dans la documentation de référence de Hermes Agent. Source principale pour chaque commande CLI de premier niveau présentée dans cet article, notamment hermes chat, hermes model, hermes gateway, hermes setup, hermes auth, hermes status, hermes cron, hermes webhook, hermes doctor, hermes dump, hermes logs, hermes config, hermes pairing, hermes skills, hermes honcho, hermes memory, hermes acp, hermes mcp, hermes plugins, hermes tools, hermes sessions, hermes insights, hermes claw, hermes profile, hermes completion, hermes update et hermes uninstall. Tous les flags des sous-commandes, les descriptions des options, le fonctionnement du pool d’identifiants, la syntaxe de filtrage des journaux, les flags de migration depuis OpenClaw, les commandes de gestion des profiles et les commandes d’installation des services présentés dans cet article proviennent de cette page. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩

  7. Nous Research, « Installation » dans le guide de prise en main de Hermes Agent. Source principale pour la commande d’installation en une ligne, le fonctionnement du programme d’installation (prérequis, plateformes prises en charge, détection automatique de Termux, exigences de Windows/WSL2), le tableau des composants facultatifs, les étapes d’installation manuelle et les commandes de vérification. ↩↩↩↩↩↩↩↩↩

  8. Nous Research, « Référence des commandes CLI » — consultez en particulier la section hermes dump, qui décrit le format de sortie de la commande (en-tête, environnement, identité, modèle, terminal, clés API, fonctionnalités, services, charge de travail, remplacements de configuration) et son utilisation prévue pour partager des diagnostics. ↩

  9. Nous Research, « Référence des commandes slash » dans la documentation de référence de Hermes Agent. Source principale pour chaque commande slash répertoriée dans cet article, l’architecture COMMAND_REGISTRY, la séparation entre CLI et la messagerie, les commandes slash dynamiques des skills, les commandes rapides dans config.yaml, le fonctionnement de la correspondance des préfixes et les commandes réservées à la messagerie (/status, /sethome, /approve, /deny, /update, /commands). ↩↩↩↩↩↩↩↩↩↩

  10. Nous Research, « Outils et toolsets » dans le guide d’utilisation de Hermes Agent. Source principale pour la présentation des catégories d’outils, les commandes d’utilisation des toolsets, les sept backends de terminal (local, docker, ssh, singularity, modal, daytona, vercel_sandbox), la configuration des conteneurs (cpu, mémoire, disque, persistance), le renforcement de la sécurité des conteneurs, la gestion des processus en arrière-plan API et la prise en charge de sudo. ↩↩↩↩↩↩↩↩↩↩

  11. Nous Research, « Système de skills » dans le guide d’utilisation de Hermes Agent. Source principale pour la divulgation progressive, le format SKILL.md, les skills propres à chaque plateforme, l’activation conditionnelle (fallback_for_toolsets, requires_toolsets, fallback_for_tools, requires_tools), les skills gérés par l’agent via skill_manage, les commandes du hub de skills et la liste des sources (official, skills-sh, well-known, github, clawhub, claude-marketplace, lobehub), l’analyse de sécurité, les niveaux de confiance et les dossiers de skills externes. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩

  12. Nous Research, « Mémoire persistante » dans le guide d’utilisation de Hermes Agent. Source principale pour les limites de caractères de MEMORY.md / USER.md, le modèle d’instantané figé, les actions de l’outil de mémoire (add, replace, remove), les éléments à enregistrer ou à ignorer, la comparaison entre la mémoire et la recherche dans les sessions, ainsi que les fournisseurs de mémoire externes. Au tag v2026.9.24, la page complémentaire Fournisseurs de mémoire (ligne 9) indique que « Hermes Agent est fourni avec 7 plugins de fournisseurs de mémoire externes » et ajoute que « d’autres (comme Hindsight) sont disponibles dans le catalogue de plugins » ; au niveau de ce tag, plugins/memory/ contient byterover, holographic, honcho, mem0, openviking, retaindb et supermemory. ↩↩↩↩↩↩↩↩

  13. Nous Research, « Personnalité et SOUL.md » dans le guide d’utilisation de Hermes Agent. Source principale pour le fonctionnement de SOUL.md (stocké dans HERMES_HOME, jamais écrasé, emplacement nº 1 dans le prompt système, soumis à une analyse de sécurité avant son inclusion), la distinction entre SOUL.md et AGENTS.md, la liste des personnalités intégrées (14 personnalités, de helpful à hype), les personnalités personnalisées dans config.yaml, le modèle de superposition /personality et l’ordre complet d’assemblage de la pile de prompts. ↩↩↩↩↩↩↩↩↩↩↩↩

  14. Nous Research, « Utiliser MCP avec Hermes » et Référence de configuration de MCP dans les guides et la documentation de référence de Hermes Agent. Source du format de configuration mcp_servers: dans config.yaml, avec les champs command, args et env. ↩

  15. Notes de version de Hermes Agent v0.8.0. 8 avril 2026. Notifications automatiques des processus en arrière-plan, MiMo v2 Pro gratuit sur Nous Portal, changement de modèle à la volée avec /model sur toutes les plateformes, fournisseur natif Google AI Studio, OAuth Qwen, délais d’expiration fondés sur l’inactivité, boutons d’approbation sur Slack/Telegram, OAuth 2.1 PKCE pour MCP, journalisation centralisée, extension du système de plugins. ↩↩↩↩↩

  16. Notes de version de Hermes Agent v0.9.0. 13 avril 2026. Tableau de bord web local, mode rapide (/fast), iMessage via BlueBubbles, WeChat + WeCom, Termux/Android, surveillance des processus en arrière-plan (watch_patterns), fournisseurs natifs xAI + Xiaomi MiMo, context engine modulaire, prise en charge unifiée des proxys, renforcement de la sécurité (correctifs contre la traversée de chemins, l’injection de commandes shell, SSRF et RCE), hermes backup/hermes import, /debug + hermes debug share, 16 plateformes prises en charge. 487 commits, 269 PR fusionnées, 24 contributeurs. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩

  17. Notes de version de Hermes Agent v0.12.0. 30 avril 2026. « La version Curator ». Curator autonome en arrière-plan, qui évalue, élague et consolide la bibliothèque de skills selon un cycle de 7 jours par défaut, exécuté par le minuteur cron du gateway. Boucle d’auto-amélioration renforcée : évaluation fondée sur une grille de critères, préférence pour les mises à jour actives, héritage correct de l’environnement d’exécution, toolsets à portée limitée à la mémoire et aux skills. Quatre nouveaux fournisseurs d’inférence : GMI Cloud, Azure AI Foundry, MiniMax OAuth, Tencent Tokenhub. LM Studio devient un fournisseur de premier plan. Les manifestes distants des catalogues de modèles se mettent automatiquement à jour sans nouvelle version. Deux nouvelles plateformes de messagerie : Microsoft Teams (19e, via une architecture de gateway modulaire) et Tencent Yuanbao (18e, avec prise en charge native du texte et des médias). Spotify en natif via PKCE OAuth avec skill intégré ; plugin Google Meet pour les appels et la transcription ; fournisseur TTS local Piper. ComfyUI v5 + TouchDesigner-MCP intégrés par défaut. Nouveaux skills : Humanizer, claude-design, design-md, airtable. CLI : mode d’exécution unique hermes -z, vérification préalable hermes update --check, commande slash /reload-skills, styles modulaires d’indicateur d’activité. Démarrage à froid du TUI réduit d’environ 57 % grâce à l’initialisation différée. Sécurité : masquage des secrets désactivé par défaut ; liste de blocage stricte pour les commandes irréversibles. Statistiques depuis la v0.11.0 : 1 096 commits, 550 PR fusionnées, 213 contributeurs de la communauté. Voir aussi : tag de la version v2026.4.30. ↩↩↩

  18. Notes de version de Hermes Agent v0.13.0. 7 mai 2026. « La version Tenacity ». Tableau Kanban multi-agent avec signal périodique, récupération, détection des agents zombies, garde-fou contre les hallucinations, max_retries par tâche et tableaux multiprojets. Commande slash /goal permettant de verrouiller un objectif entre plusieurs tours (primitive de la boucle Ralph), avec un nombre de tours configurable. Outil video_analyze, privilégiant Gemini et extensible à d’autres solutions multimodales compatibles. Fournisseur TTS xAI Custom Voices avec clonage vocal. i18n en 7 langues : zh-Hans, ja, de, es, fr, uk, tr (CLI + messages du gateway ; documentation uniquement en zh-Hans). Google Chat devient la 20e plateforme de messagerie grâce à un modèle d’adaptateur modulaire, avec les hooks génériques de plugin env_enablement_fn / cron_deliver_env_var ; IRC et Microsoft Teams ont migré vers ce même modèle. Classe abstraite ProviderProfile + plugins/model-providers/ pour des fournisseurs tiers modulaires. Reprise automatique des sessions après le redémarrage du gateway, /update et le rechargement des fichiers sources. Réécriture de Checkpoints v2 autour d’un stockage unique, avec véritable élagage, garde-fous pour le disque et sans dépôts fantômes orphelins. Résolution de huit problèmes de sécurité P0 : masquage des secrets activé par défaut, contournement des restrictions de messages privés entre serveurs Discord (CVSS 8.1, listes de rôles autorisés limitées au serveur), rejet par défaut des inconnus sur WhatsApp + absence systématique de réponse dans les conversations avec soi-même, condition de concurrence TOCTOU lors de l’enregistrement des identifiants MCP OAuth, condition de concurrence TOCTOU sur auth.json dans les mécanismes d’écriture des identifiants CLI, protection minimale contre les attaques SSRF visant les métadonnées cloud du navigateur dans le routage hybride, analyse des prompts assemblés par cron (y compris le contenu des skills) pour détecter les injections de prompt, masquage du contenu des journaux au moment de leur envoi avec hermes debug share. Autres éléments notables : linting après écriture pour Python/JSON/YAML/TOML, mode de surveillance cron no_agent reposant uniquement sur des scripts, listes d’utilisateurs autorisés sur Slack/Telegram/Mattermost/Matrix/DingTalk, améliorations de MCP (transport SSE, transfert de OAuth, résultats d’images sous forme de balises MEDIA). Statistiques depuis la v0.12.0 : 864 commits, 588 PR fusionnées, 829 fichiers modifiés, 295 contributeurs de la communauté, 282 tickets clôturés (13 P0, 36 P1). ↩↩↩↩↩↩↩↩↩↩↩↩

  19. Notes de version de Hermes Agent v0.14.0. 16 mai 2026. « La version Foundation ». Depuis la v0.13.0 : 808 commits, 633 PR fusionnées, 1 393 fichiers modifiés, 165 061 insertions, 545 tickets clôturés (12 P0, 50 P1) et 215 contributeurs de la communauté. Ajout de SuperGrok OAuth avec un contexte de 1 M pour grok-4.3, hermes proxy, x_search, publication sur PyPI, dépendances différées, cache de prompts Claude intersessions d’une heure, lancement accéléré d’environ 19 s, appels CDP du navigateur 180 fois plus rapides, LINE et SimpleX Chat portant le total à 22 plateformes de messagerie, /handoff, boutons natifs de demande de précisions, récupération de l’historique Discord, vision_analyze sur les pixels bruts, pied de page de vérification des mutations de fichiers à chaque tour, diagnostics sémantiques LSP, outil unifié video_generate, computer_use avec cua-driver, liens OSC8, prise en charge du registre ACP de Zed, routeur OpenRouter Pareto Code, NovitaAI, environnement d’exécution Codex app-server, huggingface/skills, ctx.llm pour les plugins, tool_override, recherche Brave/DDGS, renforcement de la protection contre les commandes dangereuses, /subgoal, renommage de Qwen Cloud, version bêta native pour Windows, 16 locales au total, ainsi que de nombreuses mises à jour de la documentation et des tests. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩

  20. Notes de version d’Hermes Agent v0.16.0, « The Surface Release », tag v2026.6.5, publiées le 6 juin 2026 à 00:55:58 UTC (date du tag de version : 5 juin 2026) ; dernière version au 8 juin 2026. Nouveau Hermes Desktop natif (Electron, macOS/Linux/Windows ; connexion au gateway distant via un WebSocket sécurisé avec OAuth ou identifiant/mot de passe ; hôtes distants propres à chaque profile ; liens @session entre profiles ; interface en chinois simplifié grâce à une i18n typée, display.language). Le tableau de bord web devient un panneau d’administration complet (activation et désactivation d’éléments du catalogue MCP, gestion des identifiants, création de webhooks/hooks, configuration de la mémoire, commandes du gateway, page System avec vérification avant mise à jour et Debug Share, page Channels ; authentification extensible, notamment OIDC auto-hébergé et hermes dashboard register). Nouvelles commandes : /undo [N], interface par défaut configurable (cli/tui, --cli), /model dans la TUI avec vue superposée Sessions, hermes portal, hermes prompt-size, hermes sessions optimize. Nouveaux modèles : deepseek-v4-flash, MiniMax-M3 (contexte de 1 M), qwen3.7-plus, gemini-3.5-flash ; OAuth de xAI Grok ; sélecteur avec recherche approximative ; actualisation horaire du catalogue. Skills : ensemble par défaut allégé, filtre de pertinence environments:, dépôt approuvé NVIDIA/skills par défaut, divulgation progressive des outils, correction des faux succès de OAuth dans MCP. Sécurité : CVE-2026-48710 (Starlette BadHost) épinglée à la version ≥1.0.1, vérifications SSRF déplacées hors de la boucle d’événements, bearer token Bedrock retiré de l’environnement des sous-processus, lecture de bws_cache.json protégée, ajout de docker restart/stop/kill aux motifs dangereux, nettoyage des caractères Unicode invisibles ; 2 P0 et 62 P1 clôturés (dont 16 liés à la sécurité). La présentation marketing des notes de version (nombre de PR/commits, « rien de tout cela n’existait il y a une semaine ») est exclue ; seuls les faits concrets concernant les fonctionnalités et versions associés au tag sont consignés. Vérification effectuée dans la session actuelle le 8 juin 2026. ↩↩↩↩↩↩↩↩

  21. Notes de version d’Hermes Agent v0.17.0, « The Reach Release », tag v2026.6.19, 19 juin 2026 ; dernière version au 21 juin 2026. Messagerie : iMessage via Photon Spectrum (OAuth par code d’appareil, hermes photon login, sans relais Mac) ; adaptateur officiel API de WhatsApp Business Cloud (remplace le processus de pont) ; groupes SimpleX, pièces jointes natives, regroupement des textes, acceptation automatique ; plugin de plateforme Raft inclus. Modèles/fournisseurs : z-ai/glm-5.2 (contexte de 1 M), anthropic/claude-fable-5, laguna-m.1, nemotron-3-ultra, grok-composer-2.5-fast (OAuth de xAI, contexte de 200 k) ; modèle xAI par défaut → grok-build-0.1 ; les modèles adaptatifs Anthropic utilisent le contrat de réflexion moderne (sans champ reasoning). CLI/commandes slash : /version, /billing, hermes photon login, hermes curator run --consolidate (facultatif), interface graphique de hermes model, clonage de profile. Desktop : fenêtres de suivi des subagents en arrière-plan (delegate_task(background=true)), sélecteur de modèle Composer, raccourcis réattribuables, notifications natives du système d’exploitation, brouillons propres à chaque fil, thèmes de VS Code Marketplace, interface en japonais et en chinois traditionnel. Tableau de bord : outil complet de création de profiles, sélecteur global de profile, refonte du Skills Hub avec analyse de sécurité, Automation Blueprints, connexion sécurisée (401 derrière OAuth). Skills/outils : édition d’image à image avec image_generate chez plusieurs fournisseurs, opérations atomiques par lot operations pour memory, skill de révision parallèle simplify-code, booléen write_approval remplaçant write_mode. Architecture : subagents en arrière-plan (handle renvoyé immédiatement, résultat réintroduit comme un tour), gestionnaire de sollicitation MCP pour les confirmations en cours d’appel d’outil, outils MCP se connectant tardivement et exposés entre les tours, CronScheduler extensible avec cron géré par Chronos, portée Managed (/etc/hermes épinglé par l’administrateur), relais Gateway-Gateway. Sécurité : contournement de la liste de refus des échappements shell corrigé, refus par défaut en l’absence du module d’approbation et pour les adaptateurs gateway appliquant leur propre politique, environnement des scripts de tâches cron nettoyé, secrets masqués dans les dumps de débogage, métadonnées de l’hôte absentes de l’état public, détection des motifs d’exfiltration sur stdio de MCP, mises à niveau d’urllib3 et de PyJWT pour corriger des CVE. La présentation marketing de la version (nombre de commits/PR) est exclue. Vérification effectuée dans la session actuelle le 21 juin 2026. ↩↩↩↩↩↩↩↩↩↩↩

  22. Notes de version d’Hermes Agent v0.18.0 (tag v2026.7.1), 1er juillet 2026 — « The Judgment Release ». Traitement prioritaire du backlog (tous les P0/P1 clôturés, environ 692 éléments en 12 jours) ; Mixture-of-Agents sélectionnable comme modèle de premier ordre dans toutes les interfaces, avec la sortie complète de chaque modèle de référence affichée dans son propre bloc étiqueté et la réponse diffusée en direct ; contrats d’achèvement pour /goal (l’agent vérifie lui-même son travail en exécutant les contrôles du projet) ; commande /learn (transforme n’importe quel élément en skill réutilisable à partir de sa description, avec conformité automatique à CONTRIBUTING.md) ; /journey, chronologie visuelle de la mémoire et des skills avec fonctions d’édition et graphe de mémoire dans Desktop ; déploiement en éventail des subagents en arrière-plan (plusieurs tâches déléguées simultanément) ; Desktop Projects (modèle projet/dépôt/voie) ; gateway avec mise à l’échelle jusqu’à zéro et coordination du drainage ; prise en charge de Google Vertex AI (Gemini via des comptes de service GCP, actualisation automatique du token OAuth2) ; commande $EDITOR /prompt. Vérification effectuée dans la session actuelle le 1er juillet 2026 (PST) sur la page des versions GitHub ; v0.18.0 est la dernière version. ↩↩↩↩↩↩↩↩↩↩↩

  23. Notes de version d’Hermes Agent v0.20.5 (tag v2026.8.19, date de sortie annoncée : 19 août, publication le 21 août 2026 ; données récupérées via l’API GitHub le 24 août 2026 — prerelease : false). Description textuelle exacte de la période : « Environ 746 commits répartis sur quelque 1 250 fichiers (+111 500/-20 701) — près de 323 PR fusionnées, notamment les fils de discussion de salons en Bot Mode, les résumés de conversation repliables, les avatars blob-face et les pièces jointes PDF/fichier par glisser-déposer ; l’offre web sans clé (rotation gratuite entre 5 fournisseurs avec basculement en anneau, recherche web disponible sans aucune clé sur les nouvelles installations) ; une vague d’améliorations de CLI (sélecteur approximatif /model, palette de commandes Ctrl+P, /status enrichi) ; les garde-fous de discipline d’exécution et de blocage à l’exécution issus des conclusions de l’évaluation Composio ; les reçus de hermes update et la vérification de parc avec --plan ; hermes worktree list/prune ; le fournisseur sans authentification et indépendant d’opencode ; clarification à plusieurs questions ; améliorations des performances de Desktop (hydratation de Bot Mode privilégiant l’affichage initial, indicateurs de chargement du compositeur, React Compiler dans les 2 moteurs de rendu) ; enfin, ajout d’une mémoire persistante et d’un niveau d’effort de raisonnement propre à chaque tâche cron. » La version répète : « Les notes de version complètes et organisées pour cette période seront publiées avec la v0.21.0. » ↩↩↩↩↩↩↩↩↩↩↩

  24. Backends de terminal au tag v2026.8.31 (revérifiés pour la version 1.17 du guide ; agent/terminal_env_registry.py est identique octet par octet à sa version de v2026.8.31, les informations de la docstring de tools/terminal_tool.py n’ont pas changé et tools/environments/ contient toujours les 7 mêmes modules de backend, désormais accompagnés d’un utilitaire path_utils.py) : docstring du module tools/terminal_tool.py, reproduite mot pour mot : « Un outil de terminal qui exécute des commandes dans des environnements locaux, Docker, Modal, SSH, Singularity, Daytona et Vercel Sandbox » et, dans la liste de sélection des environnements, l’entrée vercel_sandbox « Exécuter dans des sandboxes cloud Vercel Sandbox » ; le module de backend tools/environments/vercel_sandbox.py existe dans ce tag aux côtés de daytona.py, docker.py, local.py, modal.py, singularity.py et ssh.py. Le README associé au tag indique : « 7 backends de terminal — local, Docker, SSH, Singularity, Modal, Daytona et Vercel Sandbox. » La page de documentation Tools & Toolsets (source website/docs/user-guide/features/tools.md dans ce tag) présente vercel_sandbox dans un tableau comme une « microVM cloud Vercel Sandbox » destinée à « l’exécution dans le cloud avec persistance du système de fichiers fondée sur des snapshots », affiche le commentaire de configuration # or: docker, ssh, singularity, modal, daytona, vercel_sandbox et précise : « Authentifiez-vous avec les 3 éléments VERCEL_TOKEN, VERCEL_PROJECT_ID et VERCEL_TEAM_ID. … Les environnements d’exécution pris en charge sont node24, node22 et python3.13 ; Hermes utilise par défaut /vercel/sandbox comme racine de l’espace de travail distant. » Dans v2026.8.31, le package tools/environments/ contient également l’infrastructure partagée (base.py avec l’ABC BaseEnvironment, file_sync.py, modal_utils.py, managed_modal.py) ; la docstring du package considère Modal géré comme un mode de Modal et non comme un 8e backend : « Modal comporte en outre des modes direct et géré par Nous, sélectionnés via terminal.modal_mode. » ↩↩↩

  25. Nombre de plateformes de messagerie dans le tag v2026.8.31 (revérifié pour la version 1.17 du guide ; identique à v2026.8.31 — 28 lignes dans le tableau de la documentation, les mêmes 24 membres de l’énumération Platform et les mêmes 22 dossiers d’adaptateurs). La page de documentation de Messaging Gateway (source website/docs/user-guide/messaging/index.md dans le tag) contient un tableau « Comparaison des plateformes » de 28 lignes : Telegram, Discord, Slack, Google Chat, WhatsApp, WhatsApp Cloud API, Signal, SMS, E-mail, Home Assistant, Mattermost, Matrix, DingTalk, Feishu/Lark, WeCom, WeCom Callback, Weixin, BlueBubbles, Photon (iMessage), QQ, Yuanbao, Microsoft Teams, LINE, ntfy, Raft, IRC, Buzz, SimpleX. gateway/config.py définit class Platform(Enum) avec 24 membres explicites (local, telegram, discord, whatsapp, whatsapp_cloud, slack, signal, mattermost, matrix, homeassistant, email, sms, dingtalk, api_server, webhook, msgraph_webhook, feishu, wecom, wecom_callback, weixin, bluebubbles, qqbot, yuanbao, relay) et précise : « Les plateformes de plugins utilisent des membres dynamiques créés à la demande par _missing_(), afin que Platform("irc") fonctionne sans modifier cette énumération. » Dans ce tag, l’arborescence plugins/platforms/ contient 22 dossiers d’adaptateurs : a2a buzz dingtalk discord email feishu google_chat homeassistant irc line matrix mattermost ntfy photon raft simplex slack sms teams telegram wecom whatsapp. Description des plateformes : selon la page ntfy, textuellement : « ntfy est un service simple de notifications pub-sub basé sur HTTP. Il fonctionne avec le serveur public gratuit ntfy.sh ou toute instance auto-hébergée… Abonnez-vous à un sujet depuis l’application mobile ntfy, envoyez des messages à ce sujet pour communiquer avec l’agent et recevez sa réponse sur votre téléphone. » Selon la page Buzz, textuellement : « L’adaptateur Buzz connecte Hermes à une communauté Buzz — la plateforme open source de Block, fondée sur le protocole Nostr et destinée à la collaboration entre humains et agents — puis relaie les messages entre les canaux Buzz (ou les messages privés) et l’agent. Le trafic sortant appelle le binaire buzz CLI via le shell… Le trafic entrant utilise un abonnement Nostr WebSocket natif. » Les deux pages indiquent : « Exécutez hermes gateway setup et choisissez… pour bénéficier d’une procédure guidée. » ↩↩↩

  26. Nombre de fournisseurs dans le tag v2026.8.31 (revérifié pour la version 1.17 du guide ; la version v0.21.0 A MODIFIÉ ces nombres par rapport aux 38 entrées statiques, 37 dossiers de plugins et 41 lignes de documentation de v2026.8.31). hermes_cli/models.py déclare CANONICAL_PROVIDERS: list[ProviderEntry] avec 39 entrées statiques (nous, fireworks, openrouter, moa, novita, lmstudio, anthropic, openai-codex, openai-api, alibaba, xai-oauth, xiaomi, tencent-tokenhub, tencent-tokenplan, nvidia, copilot, copilot-acp, huggingface, gemini, vertex, deepseek, xai, zai, kimi-coding, kimi-coding-cn, stepfun, minimax, minimax-oauth, minimax-cn, ollama-cloud, arcee, gmi, kilocode, opencode-zen, opencode-go, bedrock, azure-foundry, ai-gateway, qwen-oauth), suivies du commentaire « Étendre automatiquement CANONICAL_PROVIDERS avec tout fournisseur enregistré dans providers/ qui ne figure pas déjà dans la liste ci-dessus. L’ajout de plugins/model-providers// suffit à rendre un nouveau fournisseur disponible dans le sélecteur de modèles » ; la boucle ignore uniquement les types d’authentification oauth_device_code, oauth_external, external_process, aws_sdk, copilot et vertex (inchangé). Dans ce tag, l’arborescence plugins/model-providers/ contient 39 dossiers de fournisseurs (nebius-token-factory et router ont été ajoutés durant la période de la version v0.21.0) ; les neuf qui ne disposent pas d’une entrée statique (actual, alibaba-coding-plan, commandcode, deepinfra, meta-ai, nebius-token-factory, opencode-free, router, upstage) utilisent tous le type d’authentification api_key — sept déclarent explicitement auth_type="api_key" (dont les deux nouveaux plugins), tandis que commandcode et opencode-free héritent de auth_type: str = "api_key" depuis providers/base.py. La page de documentation sur les fournisseurs d’IA (source website/docs/integrations/providers.md dans le tag) présente sous forme de tableaux 45 fournisseurs nommés, ainsi qu’une ligne « Point de terminaison personnalisé » (lignes ajoutées depuis v2026.8.31 : Ramp Router, Nebius Token Factory, Tencent TokenPlan, Alibaba Cloud (Token Plan) — citées dans 36) ; chaque nom de variable d’environnement, slug de fournisseur, alias et note d’authentification des nouvelles lignes de la matrice provient textuellement de ce tableau, notamment « OpenCode Free | Sans clé — aucune clé API ni aucun compte requis (fournisseur : opencode-free, alias : free, opencode_free). Sélectionnez-le via hermes model ou /model free ; les requêtes sont envoyées anonymement », « Google Vertex AI | … OAuth2 via le JSON d’un compte de service ou ADC, facturation GCP », « AWS Bedrock | … chaîne standard d’identifiants AWS via boto3 » et « CommandCode | … Fonctionne avec les offres GOAT/Pro/Max/Provider (mais pas avec l’offre Go à 1 $ — aucun accès API) ». La ligne Meta AI provient du bloc de la même page consacré aux clés API de première classe : « Meta Model API (famille Muse Spark)… hermes chat --provider meta-ai --model muse-spark-1.2… Requis : MODEL_API_KEY ». Cerebras apparaît uniquement dans le tableau « Autres fournisseurs compatibles » de la page (https://api.cerebras.ai/v1, « Inférence sur puce à l’échelle d’un wafer ») ; il est donc répertorié sous la ligne du point de terminaison personnalisé, et non comme fournisseur de première classe. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩

  27. Surface de CLI au tag v2026.8.31 (revérifiée pour la version 1.17 du guide ; les chaînes d’aide citées pour les options globales et tous les éléments concernant _BUILTIN_SUBCOMMANDS sont inchangés depuis v2026.8.31 — le frozenset est identique, avec 73 entrées — tandis que hermes_cli/_parser.py n’a changé que dans hermes chat, comme indiqué dans 40). Les options globales et leurs chaînes d’aide proviennent de hermes_cli/_parser.py : --in (« Accéder à DIR avant de démarrer ou de reprendre. Combinée à ‘–resume latest’ ou -c, cette option sélectionne la session la plus récente pour l’espace de travail de DIR, et la session reste dans DIR (sans restaurer le répertoire de travail enregistré). »), --ignore-user-config (« Ignorer ~/.hermes/config.yaml et revenir aux valeurs par défaut intégrées (les identifiants dans .env sont toujours chargés) »), --ignore-rules (« Ignorer l’injection automatique d’AGENTS.md, SOUL.md, .cursorrules, de la mémoire et des skills préchargés »), --tui (« Lancer la TUI moderne au lieu du REPL classique »), --cli (« Forcer le REPL prompt_toolkit classique (remplace display.interface=tui) »), --dev (« Avec –tui : exécuter les sources TypeScript via tsx (sans compiler dist) ») et --version/-V (« Afficher la version et quitter »). hermes_cli/_startup_fast.py n’utilise le chemin rapide que pour argv in (["--version"], ["-V"]), et le frozenset _BUILTIN_SUBCOMMANDS de hermes_cli/main.py ne contient aucune entrée version ; la référence des commandes de CLI documente hermes --version (« Afficher les informations de version »), mais pas hermes version. Les descriptions des commandes correspondent aux chaînes help= du parseur dans hermes_cli/main.py et hermes_cli/subcommands/*.py à ce tag (par exemple, approvals : « Outils d’invite d’approbation (analyser l’historique pour produire des propositions de liste d’autorisation) » ; pause : « Arrêt d’urgence : suspendre la répartition des tâches cron/kanban et les nouveaux tours du gateway » ; sync : « Synchronisation des skills — synchroniser vos skills entre vos appareils et avec votre équipe » ; verify : « Détecter la procédure d’exécution d’un projet et effectuer un test de bon fonctionnement » ; login : « Obsolète. Utilisez hermes auth pour gérer les identifiants, hermes model pour sélectionner un fournisseur ou hermes setup pour effectuer la configuration complète. »), avec vérification croisée par rapport au tableau des commandes de premier niveau de la documentation. hermes update --plan figure dans hermes_cli/subcommands/update.py : « Afficher le plan de mise à jour et quitter sans rien modifier : type d’installation (git/docker/nix), chaque service Hermes en cours d’exécution dans tous les profiles avec son superviseur et la version du code exécutée, ainsi que la manière dont chacun sera redémarré. Lecture seule ; sans danger sur une flotte en production. » ; aucune commande fleet n’existe dans _BUILTIN_SUBCOMMANDS. hermes worktree est enregistrée dans hermes_cli/main.py (aide : « Auditer et récupérer les worktrees git accumulés et les branches fusionnées ») avec list (alias ls, audit ; « Classer chaque arborescence : âge, taille, verdict, motif (action par défaut) »), prune (« Supprimer les arborescences sans risque et les branches locales entièrement fusionnées »), --repo, --dry-run (« Afficher le plan sans rien modifier »), --trees-only (« Supprimer uniquement les worktrees ; laisser les branches locales intactes ») et --branches-only (« Supprimer uniquement les branches locales fusionnées ; laisser les worktrees intacts »). La commande slash /worktree correspond à _handle_worktree_command dans hermes_cli/cli_commands_mixin.py (bloc de syntaxe : /worktree, /worktree new [name], /worktree list, /worktree prune [--dry-run]) ; la section « Nettoyage des worktrees » du guide utilisateur de CLI ajoute : « Au sein d’une session, /worktree prune [--dry-run] effectue la même opération (sans jamais toucher à l’arborescence dans laquelle la session s’exécute). » ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩

  28. Commandes de Nous Portal au tag v2026.8.31 (revérifiées pour la version 1.17 du guide ; hermes_cli/portal_cli.py est identique octet par octet à sa version de v2026.8.31). Dans le README à ce tag, la section « Ignorer la collecte de clés API — Nous Portal » indique : « Une seule commande depuis une nouvelle installation : hermes setup --portal… Cette commande vous connecte via OAuth, définit Nous comme fournisseur et active le Tool Gateway. Vérifiez à tout moment les éléments configurés avec hermes portal info. » hermes_cli/portal_cli.py enregistre portal (aide : « Configurer Nous Portal (connexion, choix du modèle, Tool Gateway) ; consultez également portal info ») avec login (« Se connecter à Nous Portal et le configurer (option par défaut ; intégration initiale en une seule étape) »), info (« Afficher un résumé de l’authentification du Portal et du routage du Tool Gateway »), open (« Ouvrir la page d’abonnement du Portal dans votre navigateur par défaut »), tools (« Répertorier les outils du Tool Gateway et indiquer ceux qui sont acheminés via Nous »), ainsi que le commentaire de code « status est conservé comme alias caché rétrocompatible de info. » La page de documentation du Tool Gateway présente hermes setup --portal # Fresh install: Nous OAuth + set Nous as provider + turn on the Tool Gateway in one go et hermes portal info # Portal auth + Tool Gateway routing summary ; la référence des commandes de CLI au même tag documente encore hermes portal [status|open|tools]. ↩↩↩

  29. Comparaison GitHub API, NousResearch/hermes-agent, v2026.8.19...main, récupérée le 26 août 2026 : ahead_by: 1104, behind_by: 0. La page des versions API répertorie v2026.8.19 (Hermes Agent v0.20.5, publiée le 2026-08-21T12:16:39Z) comme le tag le plus récent, dont les notes indiquent : « Les notes de version complètes et organisées pour cette période seront publiées avec la v0.21.0, qui documentera tout depuis la v0.20.0. » Nouvelle vérification le 27 août 2026 par rapport au nouveau tag : v2026.8.27...main renvoie ahead_by: 0, behind_by: 0, status: identical — main correspond désormais exactement au tag v0.20.6. ↩↩

  30. Notes de version de Hermes Agent v0.20.6 (tag v2026.8.27, date de sortie annoncée : 27 août, publication le 2026-08-27T12:06:53Z ; récupérées via GitHub API le 27 août 2026 — prerelease : false). Présentation exacte : « Version corrective. Ce tag regroupe dans une version stable les quelque 525 PR fusionnées depuis la v0.20.5 pour les utilisateurs en aval (images Docker, déploiements hébergés, nouvelles installations). » Description exacte de la période : « Depuis la v0.20.5 (v2026.8.19, taguée le 21 août), cette période a apporté environ 1 313 commits répartis sur quelque 1 557 fichiers (+177 113 / -21 682), soit environ 525 PR fusionnées, notamment : la navigation avec un vrai profile soumise au consentement (utilisation de votre profile Chromium par défaut pour la navigation locale, avec un processus de fermeture sous approbation sous Windows) ; l’ouverture du navigateur de bureau dans sa propre fenêtre du système d’exploitation, ainsi qu’un moteur géré de mise à jour distante SSH et un volet de profiles de flotte ; une forte extension du catalogue MCP distant (plus de 50 serveurs hébergés par des fournisseurs et vérifiés en conditions réelles, notamment Cloudflare, Grafana Cloud, Better Stack et Railway) ; la mise en cache avec TTL des résultats de web_search/web_extract ; la compression lean-tail par défaut ; tool_search avec plusieurs requêtes et racinisation ; le chiffrement facultatif des secrets stockés dans le trousseau du système d’exploitation (plus d’invites du trousseau macOS à chaque lancement) ; la suspension des gateways par les programmes de mise à jour via le socket de contrôle au lieu de mettre fin brutalement à leurs arborescences ; le refus des mises à jour sur place non sécurisées par les installations gérées sous forme d’image ou de paquet (phase 3 de #91277) ; les accusés de réception durables des incidents cron et des erreurs plus claires en cas de divergence du code ; les contrôles de dépliage des liens Slack ; les identités partagées des conteneurs Docker ; les backends enfichables d’environnement de terminal ; et de nouveaux modèles dans les sélecteurs (GLM-5.3-Flash, MiniMax M3 gratuit, MiniMax H3 Max video). » La publication répète : « Les notes de version complètes et organisées pour cette période seront publiées avec la v0.21.0, qui documentera tout depuis la v0.20.0 — points forts, domaines fonctionnels et liste complète des contributeurs. Rien de cette période ne sera omis. » ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩

  31. Compression à la balise v2026.8.31, revérifiée à v2026.8.31 pour le guide v1.17 : tail_mode: str = "lean", la garde ("legacy", "lean"), la valeur par défaut "lean" d’agent_init, la migration vers la version 17 de la configuration et la remarque ci-dessous concernant le commentaire auxiliaire obsolète restent tous valables avec la nouvelle balise (context_compressor.py a reçu un mécanisme de nouvelle tentative pour l’acheminement du résumé épinglé, qui ne modifie aucune des valeurs par défaut citées). agent/context_compressor.py définit tail_mode: str = "lean" par défaut dans ContextCompressor.__init__, avec le commentaire « Mode de fin lean (#compaction-v2) : ‘lean’ = petite fin récente plafonnée + section récapitulative reprenant textuellement les messages de l’utilisateur + pointeurs de récupération ; ‘legacy’ = fin correspondant à 0,20fenêtre (comportement livré) » et la garde self.tail_mode = tail_mode if tail_mode in ("legacy", "lean") else "lean". agent/agent_init.py lit compression.tail_mode avec la valeur par défaut "lean" ; son commentaire quantifie les deux modes : « ‘lean’ (par défaut) conserve une fin textuelle plafonnée à 2,5 %/10K-25K, avec un mécanisme de pointeurs de récupération […] ‘legacy’ rétablit la fin textuelle antérieure à #87326, correspondant à 0,20seuil et qui, dans les configurations à grande fenêtre/seuil relevé, accumule 100-240K tokens par compaction. » La page de documentation sur la configuration (source website/docs/user-guide/configuration.md à cette balise) présente le bloc compression: avec enabled, threshold: 0.50, threshold_tokens: null, target_ratio: 0.20, tail_mode: lean (annoté à v2026.8.31 : « ‘lean’ (par défaut — fin plafonnée à 2,5 %, 10K-25K, avec dans le résumé un journal de session détaillé + un index d’ancres + des pointeurs de récupération session_search, le tout produit par UN seul appel au modèle de synthèse auxiliaire ; environ 3 fois moins de tokens conservés après la compaction) ou ‘legacy’ (fin textuelle correspondant à 0,20×seuil) »), protect_last_n: 20 et protect_first_n: 3, place les paramètres du modèle de synthèse sous auxiliary.compression (model, provider, base_url) et précise : « Les anciennes configurations contenant compression.summary_model, compression.summary_provider et compression.summary_base_url sont automatiquement migrées vers auxiliary.compression.* lors du premier chargement (version 17 de la configuration). Aucune intervention manuelle n’est nécessaire. » La migration correspond à _migrate_to_17 dans hermes_cli/config_migrations.py (« Version 16 -> 17 : suppression des anciennes clés compression.summary_ »). La page destinée aux développeurs sur la compression du contexte (source website/docs/developer-guide/context-compression-and-caching.md à cette balise) indique dans son tableau que la valeur par défaut de tail_mode est lean, affirme « Résultat sur de véritables sessions de 500K tokens : environ 49K conservés contre environ 162K » et « Les anciens résultats d’outils présents dans la fin lean sont réduits à des résumés d’une ligne comportant un pointeur de récupération », et contient l’avertissement suivant concernant le modèle de synthèse (à v2026.8.31) : « Le modèle de synthèse doit disposer d’une fenêtre de contexte au moins aussi grande que celle du modèle principal de l’agent. […] Le compresseur supprime alors les tours intermédiaires sans résumé, entraînant une perte silencieuse du contexte de la conversation. » (Un passage obsolète subsiste en amont : dans la section « Référence complète de la configuration auxiliaire » de la page Configuration, l’emplacement auxiliary.compression est encore commenté ainsi : « Délai d’expiration de la compression du contexte (distinct de la configuration compression.) » ; le code de migration, le sélecteur auxiliaire interactif de hermes model et la propre section de la page consacrée à la compression constituent les sources plus récentes et concordantes.) ↩↩↩↩↩↩↩

  32. Backends de terminal enfichables à la balise v2026.8.31 (revérifiés pour le guide v1.17 ; agent/terminal_env_registry.py est identique octet par octet à sa version de v2026.8.31). Docstring du module agent/terminal_env_registry.py, textuellement : « Registre central des backends de terminal enfichables enregistrés. Alimenté par les plugins au chargement via PluginContext.register_terminal_environment_provider ; utilisé par tools.terminal_tool._create_environment » et « Les noms des backends intégrés sont réservés — register_provider rejette tout fournisseur dont le nom entre en conflit avec l’un d’eux, de sorte qu’un plugin ne peut jamais masquer les implémentations docker/modal/… du dépôt principal » ; il n’existe délibérément « aucune résolution du fournisseur actif ici : le backend actif est celui désigné par TERMINAL_ENV / terminal.backend, exactement comme pour les backends intégrés. » Son frozenset BUILTIN_BACKEND_NAMES contient les sept backends ainsi que l’alias du mode interne managed_modal : local, docker, singularity, modal, managed_modal, daytona, vercel_sandbox, ssh. La nouvelle page de documentation Plugins de fournisseurs d’environnements de terminal (source website/docs/developer-guide/terminal-environment-plugin.md à cette balise), textuellement : « Hermes exécute les commandes shell par l’intermédiaire d’un ensemble enfichable de backends de terminal. Les backends intégrés (local, Docker, Singularity, Modal, Daytona, Vercel Sandbox, SSH) se trouvent dans le dépôt principal sous tools/environments/. Les fournisseurs tiers d’environnements sandbox s’intègrent plutôt sous forme de plugins — un dépôt de plugin autonome installé sous ~/.hermes/plugins/, qui enregistre un backend que l’utilisateur sélectionne exactement comme un backend intégré via terminal.backend dans config.yaml » ; elle présente dans un tableau les surfaces pilotées par un fournisseur enregistré (acheminement des commandes, sélecteur de backend de hermes setup, état de la sonde dans le dashboard, vérifications de hermes status/hermes doctor, indications sur l’environnement dans le prompt système, gestion des chemins de conteneur/du répertoire de travail actuel, suppression des secrets et isolation de la sandbox par session) et expose l’objectif de conception : « La déclaration de ces indicateurs sur le fournisseur élimine la catégorie classique de bugs “le nouveau backend a été oublié au site de classification N” — le cœur consulte le registre sur chaque site plutôt qu’une liste de noms codée en dur. » ↩↩↩

  33. Nouvelle vérification complète à la balise v2026.8.31 (guide v1.17). Locales : l’arborescence locales/ contient 17 catalogues de messages — en.yaml plus 16 traductions (af, ar, de, es, fr, ga, hu, it, ja, ko, pt, ru, tr, uk, zh-hant, zh) — identiques à v2026.8.27. Personnalités : BUILTIN_PERSONALITIES dans hermes_cli/personality.py contient les mêmes 14 entrées, de helpful à hype (helpful, concise, technical, creative, teacher, kawaii, catgirl, pirate, shakespeare, surfer, noir, uwu, philosopher, hype) ; le fichier est identique octet par octet à sa version de v2026.8.27. Décomptes ayant CHANGÉ à cette balise : 39 entrées statiques dans CANONICAL_PROVIDERS (contre 38 auparavant) et 39 dossiers dans plugins/model-providers/ (contre 37 auparavant) — voir 26 et 36. Décomptes inchangés : 24 membres dans l’enum Platform (liste de membres identique dans gateway/config.py, auquel seul un champ gateway room_link_url a été ajouté), 22 dossiers d’adaptateurs dans plugins/platforms/, 28 lignes dans le tableau comparatif des plateformes de la documentation ; _BUILTIN_SUBCOMMANDS contient les mêmes 73 entrées (peer et worktree sont présents, toujours sans version ni approval-check — nom employé dans les notes de version pour hermes approvals test) ; hermes_cli/_startup_fast.py et hermes_cli/portal_cli.py sont identiques octet par octet à leurs versions de v2026.8.27. ↩↩↩↩

  34. Routage des modèles auxiliaires au tag v2026.8.31 (revérifié pour la version 1.17 du guide ; le bloc de valeurs par défaut "auxiliary" du nouveau tag présente une liste d’emplacements, des notes de suppression et des paramètres hors emplacement identiques, et les citations de la documentation ci-dessous restent inchangées). La page de documentation sur la configuration (source website/docs/user-guide/configuration.md au niveau du tag), mot pour mot : « Par défaut (auxiliary.*.provider: "auto"), Hermes achemine chaque tâche auxiliaire vers votre modèle de chat principal, c’est-à-dire le même fournisseur et le même modèle que ceux choisis dans hermes model. Vous n’avez rien à configurer pour commencer, mais sachez qu’avec des modèles de raisonnement coûteux (Opus, MiniMax M2.7, etc.), les tâches auxiliaires peuvent entraîner un surcoût notable. » ; sa note « Pourquoi “auto” utilise votre modèle principal » indique : « Les versions précédentes dirigeaient les utilisateurs d’agrégateurs (OpenRouter, Nous Portal) vers un modèle économique sélectionné par défaut côté fournisseur. Ce comportement était déroutant : les utilisateurs ayant souscrit un abonnement auprès d’un agrégateur voyaient un modèle différent traiter leur trafic auxiliaire. Désormais, auto utilise le modèle principal pour tout le monde, tandis que les remplacements définis pour chaque tâche dans config.yaml restent prioritaires. » ; et, concernant l’extraction web : « (L’extraction web n’est pas une tâche auxiliaire : web_extract et les instantanés du navigateur tronquent les contenus longs de manière déterministe et stockent le texte intégral afin de permettre sa lecture paginée avec read_file — aucun LLM n’intervient.) » La liste d’emplacements faisant autorité se trouve dans le bloc de valeurs par défaut "auxiliary" de hermes_cli/config_defaults.py au niveau du tag : vision, compression, skills_hub, approval, review, mcp, title_generation, memory_query_rewrite, tts_audio_tags, triage_specifier, kanban_decomposer, profile_describer, goal_judge, curator, monitor, background_review, moa_reference et moa_aggregator (auxquels s’ajoutent les paramètres hors emplacement transient_retries, free_only, openrouter_model et stream_only_base_urls) ; les emplacements comportent provider, model, base_url, api_key, timeout, extra_body ainsi qu’un paramètre reasoning_effort propre à chaque tâche. Notes de suppression figurant dans le même fichier, mot pour mot : « web_extract n’utilise plus de LLM auxiliaire : les pages sont tronquées et stockées avec un pointeur read_file (sans résumé), et les instantanés du navigateur suivent le même principe. L’ancien bloc auxiliary.web_extract.* a été supprimé ici. Les valeurs qui subsistent dans les fichiers config.yaml des utilisateurs sont des vestiges sans conséquence et sont ignorées. » et « session_search n’utilise plus de LLM auxiliaire (PR #27590 — l’outil à structure unique renvoie directement le contenu de la base de données) » ; aucune clé flush_memories n’existe dans le bloc. Les descriptions succinctes des emplacements proviennent des commentaires du même fichier (« Spécificateur de triage : développe une brève description sommaire de la colonne Kanban Triage pour en faire une spécification concrète, puis la fait passer à todo. Appelé par hermes kanban specify » ; « Décomposeur Kanban : décompose une tâche de triage en un graphe de tâches enfants, acheminées vers des profils spécialisés selon leur description. Appelé par hermes kanban decompose et par le répartiteur de décomposition automatique Kanban » ; « Descripteur de profil : génère automatiquement une description d’une ou deux phrases indiquant les points forts d’un profil. Appelé par hermes profile describe <name> --auto et par le bouton de génération automatique du tableau de bord » ; « Évaluateur d’objectif : détermine si la dernière réponse d’une exécution /goal satisfait l’objectif ou le contrat » ; « Curateur : branche de révision de l’utilisation des skill » ; « Révision en arrière-plan : branche d’auto-amélioration exécutée après chaque tour, qui décide s’il convient d’enregistrer une mémoire ou de modifier un skill »), des commentaires de référence complète de la page Configuration (« Insertion masquée de balises audio pour Gemini 3.1 TTS » ; « Titres de session générés automatiquement. Une langue vide reprend celle de la conversation » ; auxiliary.title_generation.enabled: false désactive les titres automatiques), ainsi que du tableau de configuration de la page de documentation Kanban (« auxiliary.kanban_decomposer | Modèle qui produit le graphe de tâches (appelé par Decompose) » ; « auxiliary.profile_describer | Modèle qui génère automatiquement les descriptions de profils (appelé par hermes profile describe --auto) »). Parcours interactif : exécutez hermes model, puis sélectionnez « Configure auxiliary models » pour accéder à un sélecteur par tâche (vision, title_generation, tts_audio_tags, compression, approval, triage_specifier, kanban_decomposer, profile_describer, delegation) ; l’entrée Delegation est enregistrée dans delegation.* au niveau supérieur, car les subagents « sont des agents enfants complets, et non des appels LLM secondaires ». ↩↩↩↩↩↩↩↩↩↩↩

  35. Notes de version de Hermes Agent v0.21.0, « The Pantheon Release », tag v2026.8.31, date de sortie annoncée au 31 août, publication le 2026-08-31T19:29:49Z. Ligne de statistiques, mot pour mot : « Depuis la v0.20.0 : environ 5 800 commits · environ 2 475 PR fusionnées · environ 5 680 fichiers modifiés · environ 869 000 insertions · environ 135 000 suppressions · environ 2 100 tickets fermés · plus de 760 contributeurs ». Présentation, mot pour mot : « The Pantheon Release. La v0.20.0 avait fait de Hermes le héraut : il parlait et transmettait les messages aux autres agents. Dans la v0.21.0, les dieux se rassemblent. » et « Cette version regroupe tout le contenu des tags correctifs d’infrastructure v0.20.1 à v0.20.6 ; ces périodes sont intégralement documentées ici. » Citations relatives aux domaines fonctionnels utilisées ci-dessus, mot pour mot : Bot Mode — « Bot Mode fait désormais partie intégrante de l’application de bureau et est activé par défaut : chaque profile d’agent reçoit un nom, un visage d’avatar déterministe (avec des commandes de randomisation et de verrouillage) et une place dans une liste commune » et « Auparavant, “multi-agent” désignait surtout l’infrastructure ; désormais, cela ressemble à une application de chat remplie de collègues » (#87886, #88243, #89386, #96726) ; hermes peer — « Les réponses arrivent dans le Bot Chat canonique de chaque agent, si bien que les conversations entre agents sont durables et consultables, et non envoyées sans suivi » (#88725, #88178, #91487) ; cron — « continuity=true transmet le résultat de chaque exécution à la suivante (afin qu’un moniteur puisse éviter de signaler à nouveau ce qu’il a déjà rapporté), chaque tâche dispose d’un bloc-notes durable et les tâches en mode moniteur ignorent entièrement le LLM lorsque rien n’a changé » (#91447, #80774, #81139, #81138) ; delegation — « répertoriez les enfants en cours d’exécution, réorientez-en un en plein travail en lui indiquant une correction de trajectoire, ou arrêtez-le prématurément tout en conservant le résultat partiel. Ajoutez une validation facultative des résultats des enfants selon le schéma JSON, affichez le coût de chaque délégation dans les résultats et profitez de valeurs par défaut relevées (250 itérations et 10 enfants simultanés) » (#85232, #81144, #81142, #86506, #86745) ; MCP — « des liens profonds hermes:// qui installent un serveur MCP après confirmation explicite » (#87525-#87581) ; CLI — « Ctrl+P ouvre une palette de commandes avec recherche approximative, le sélecteur /model filtre les résultats au fil de la saisie, /status affiche le mode de raisonnement, les approbations en attente et l’utilisation du contexte, tandis que la barre d’état peut afficher en temps réel le pourcentage de succès du cache, la latence et le nombre de tokens par seconde, avec un réglage distinct pour chaque champ » (#90730, #90717, #90745, #98250, #98282, #97666) ; navigateur — « Hermes peut désormais y naviguer, cliquer et lire directement » (#90197, #89366) ; fournisseurs — « Meta Model API (Muse Spark) fait son arrivée comme fournisseur intégré, aux côtés de CommandCode, Tencent TokenPlan, Nebius Token Factory, Ramp Router et Actual Computer » (#88565, #88308, #97917, #97916, #97915 et récupération de #79644/#26491) ; sécurité — « Les fichiers protégés contenant les instructions des agents (AGENTS.md, skills et magasins de mémoire) nécessitent désormais systématiquement une approbation en écriture, afin qu’un agent victime d’une injection de prompt ne puisse pas réécrire discrètement ses propres consignes permanentes » (#81152), ainsi que la campagne de masquage des données sensibles (#80965), la prise en charge des approbations sous Windows (#84428), l’identité TCC (#95091) et la suppression du MCP de Blender (#83404). Section sur les annulations, mot pour mot : « Mode Model Council (/council) — intégré, puis annulé ; absent de cette version. » ; « DCP context engine — intégré, puis annulé ; absent de cette version. » ; « Serveur gateway exclusivement WS (#94245) — fusionné, puis annulé (#96118) ; FastAPI reste utilisé dans le parcours de démarrage de l’application de bureau. La relecture d’événements horodatés par numéro de séquence (#94219) a bien été livrée. » ; « Electron a été rétrogradé vers la version 40.10.2 ; le point d’ancrage de l’interpréteur TCC a été supprimé, car remplacé par l’approche fondée sur l’identité de signature qui a été livrée. » La section consacrée aux corrections de bugs se termine ainsi : « …et environ deux mille autres tickets fermés ; cette période a enregistré une moyenne d’environ 85 PR fusionnées par jour. » ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩

  36. Nouveaux fournisseurs dans le tag v2026.8.31. hermes_cli/models.py ajoute ProviderEntry("tencent-tokenplan", "Tencent TokenPlan", "Tencent TokenPlan (Hy4 preview via api.lkeap.cloud.tencent.com, Anthropic Messages)") (entrée statique nº 39), les modèles du catalogue hy4-preview, hy3, hy3-preview, ainsi qu’un groupe de sélection destiné uniquement à l’affichage "tencent": ("Tencent Hy", "Hy4 / Hy3 via TokenHub & TokenPlan", ["tencent-tokenhub", "tencent-tokenplan"]). plugins/model-providers/ accueille nebius-token-factory/ et router/, qui déclarent tous deux auth_type="api_key" et sont donc intégrés par l’extension automatique. Docstring du plugin router, mot pour mot : « Profil de fournisseur pour Ramp Router, le gateway LLM de Ramp : un point de terminaison compatible avec OpenAI Responses à l’adresse https://api.router.com/v1, qui achemine chaque requête entre les fournisseurs en amont (OpenAI, Anthropic, xAI, Fireworks, etc.) et gère les solutions de repli ainsi que le contrôle des dépenses côté serveur » … « Responses API constitue le protocole natif. » … « Les identifiants de modèles valides sont ceux que renvoie la clé via GET /v1/models (les comptes BYOK voient des entrées supplémentaires) ; ce profil ne fournit donc aucun fallback_models : le sélecteur s’appuie sur la récupération en direct, conformément aux propres recommandations de Router de ne jamais coder en dur les noms de modèles. » Dans le tag, la page de documentation sur les fournisseurs d’IA répertorie 45 fournisseurs nommés, auxquels s’ajoute la ligne Custom Endpoint ; voici, mot pour mot, les quatre lignes ajoutées depuis v2026.8.27 : « Ramp Router | RAMP_ROUTER_API_KEY dans ~/.hermes/.env (fournisseur : router ; alias : ramp-router, ramp, router.com ; gateway natif Responses, catalogue en direct limité au compte) » ; « Nebius Token Factory | NEBIUS_API_KEY dans ~/.hermes/.env (fournisseur : nebius-token-factory ; alias : nebius, nebius-tf, tokenfactory) » ; « Tencent TokenPlan | TOKENPLAN_API_KEY dans ~/.hermes/.env (fournisseur : tencent-tokenplan, alias : tokenplan, tencent-lkeap ; point de terminaison Anthropic Messages) » ; « Alibaba Cloud (Token Plan) | ALIBABA_TOKEN_PLAN_API_KEY dans ~/.hermes/.env (fournisseur : alibaba-token-plan ; point de terminaison pour la Chine continentale : alibaba-token-plan-cn) — forfait de jetons fixe de Model Studio ». model_overrides figure dans hermes_cli/config_defaults.py au niveau du tag ("model_overrides": {} ; les entrées explicites model_overrides.<provider>.<model_id> l’emportent sur le catalogue, tandis que les entrées _default ne comblent les lacunes que pour les modèles non couverts par le catalogue). ↩↩↩↩↩↩↩↩

  37. Continuité des tâches cron dans le tag v2026.8.31. La page de documentation sur cron (source website/docs/user-guide/features/cron.md dans le tag) indique, mot pour mot : « Définissez continuity=true pour que la tâche injecte sa propre sortie la plus récente à chaque exécution. Les tâches récurrentes démarrent normalement chaque exécution sans aucun souvenir : un agent de veille sur l’actualité signale de nouveau les mêmes sujets, tandis qu’un moniteur déclenche de nouveau une alerte pour la même condition. Lorsque la continuité est activée, la tâche se réveille en voyant ce qu’elle a signalé la fois précédente ; elle peut ainsi dédupliquer les informations et reprendre là où elle s’était arrêtée » ; « Lors des exécutions suivantes, la sortie précédente est ajoutée au début avec un cadrage de continuité (« éviter de répéter ce qui a déjà été signalé ») … En interne, l’indicateur est stocké sous la forme de l’entrée réservée self dans context_from. » ; « Depuis CLI : hermes cron create "every 6h" "Scan for news" --continuity, ainsi que hermes cron edit <job_id> --continuity / --no-continuity pour l’activer ou le désactiver sur une tâche existante. La même option figure dans l’éditeur cron du tableau de bord et dans la boîte de dialogue des routines Bot Mode de l’application de bureau. » Effort propre à chaque tâche, mot pour mot : « Une tâche peut fixer son propre niveau de réflexion, indépendamment du modèle fixé : none, minimal, low, medium, high, xhigh, max ou ultra. Lorsqu’il est défini, ce niveau remplace à la fois le paramètre global agent.reasoning_effort et les paramètres agent.reasoning_overrides propres aux modèles pour les exécutions de cette tâche » ; à définir via hermes cron create/edit --reasoning-effort high. Livraison dans Bot Chat, mot pour mot : « bot-chat transmet la sortie dans la session « Bot Chat » canonique d’un profile, sous la forme d’un véritable message … ici, le destinataire est le bot lui-même : il reçoit la sortie comme un message entrant, traite tout ce qui nécessite une action et répond dans son chat. » Blocs-notes : docstring du module cron/notepad.py — « Un petit bloc-notes clé-valeur que chaque tâche cron peut utiliser pour conserver son état entre les réveils planifiés (curseurs, seuils de progression, listes de surveillance) », avec des limites de « MAX_VALUE_BYTES (16 Ko) » et « MAX_JOB_TOTAL_BYTES (64 Ko) » (« le bloc-notes est injecté dans le prompt à chaque exécution ; une croissance illimitée alourdirait donc le prompt de chaque réveil »), et « Le chemin d’écriture passe par CLI (hermes cron notepad <job_id> set <key> <value>), que l’agent en cours d’exécution invoque au moyen de son outil de terminal ; aucun outil de modèle n’est ajouté. » Mode moniteur : docstring de cron/monitor.py — « Prise en charge des tâches cron en mode moniteur — détection des changements avec suppression par hachage », qui associe une « source de surveillance peu coûteuse (monitor_script ou monitor_url) » ; « aucun changement → l’exécution de l’agent est entièrement supprimée (aucun LLM, aucune livraison) ; le passage est enregistré comme une exécution silencieuse no_change » ; « La sortie est comparée OCTET PAR OCTET, sans suppression des horodatages ni normalisation des espaces. Les scripts de surveillance doivent produire une sortie stable … sans quoi chaque passage semblera constituer un changement. » ; « activation : nº 80774. » ↩↩↩↩↩↩↩

  38. Orchestration en direct des subagents dans le tag v2026.8.31. La page de documentation sur la délégation (source website/docs/user-guide/features/delegation.md dans le tag), « Pilotage d’un subagent en cours d’exécution » : l’interface de contrôle est {"action": "list"}, {"action": "steer", "subagent_id": "sa-0-1a2b3c4d", "message": "focus on pricing instead"}, {"action": "stop", "subagent_id": "sa-0-1a2b3c4d"} ; mot pour mot : « list renvoie les enfants actifs de la conversation : subagent_id, l’objectif, le statut, running_seconds, accepting_steer et le chemin de la transcription en direct » ; « stop interrompt un enfant de manière anticipée à la fin de son itération en cours ; le résultat partiel réintègre tout de même la conversation comme un message de fin normal » ; les actions de contrôle sont « limitées à l’arborescence de génération propre à l’appelant — une conversation ne peut jamais voir ni contrôler les enfants d’une autre session — et ne consomment jamais le plafond de génération de subagents par tour ; stop continue donc de fonctionner même lorsque le plafond est atteint » ; la livraison des instructions de pilotage décrit honnêtement le risque de concurrence (« Mis en file d’attente ne signifie pas livré, mais il ne s’agit jamais d’un succès artificiel », avec pending_steer intégré aux résultats et missed_steer signalé lorsqu’un enfant s’est terminé avant). Valeurs par défaut : hermes_cli/config_defaults.py définit delegation.max_iterations: 250 (« plafond d’itérations par subagent (chaque subagent dispose de son propre budget, indépendamment de la valeur max_iterations du parent) ») et delegation.max_concurrent_children: 10 (« plafond de concurrence unifié : nombre maximal d’enfants parallèles par lot ET nombre maximal d’unités de délégation simultanées en arrière-plan (background=true) … (Remplace le paramètre obsolète max_async_children.) »). Un passage obsolète subsiste en amont : la page de documentation sur la délégation indique encore « 3 tâches par défaut » et affiche « max_iterations: 50 … (valeur par défaut : 50) » dans sa référence de configuration ; le fichier config_defaults.py livré et les notes de version (« valeurs par défaut relevées (250 itérations, 10 enfants simultanés) ») sont les sources les plus récentes et concordantes. ↩↩

  39. Vague de sécurité au tag v2026.8.31. Fichiers d’instructions protégés : dans hermes_cli/config_defaults.py, security.protected_instruction_files: True est la valeur par défaut (commentaire : « Écritures dans les fichiers d’instructions de l’agent (AGENTS.md/CLAUDE.md/SOUL.md/…) »), avec protected_instruction_extra_patterns: [] (fnmatch sur le nom de base) ; tools/file_tools.py implémente le contrôle — « Fichiers d’instructions de l’agent protégés (contrôle d’approbation systématique) » sur _PROTECTED_INSTRUCTION_BASENAMES = frozenset({"agents.md", "claude.md", "soul.md", ".cursorrules", ...}) — et décrit mot pour mot le modèle de menace : « vecteur : une instruction injectée qui modifie AGENTS.md / CLAUDE.md / SOUL.md » et « les fichiers d’instructions du contexte de projet sont chargés depuis les arborescences du répertoire de travail — tout fichier AGENTS.md situé à un emplacement depuis lequel l’agent pourrait ensuite s’exécuter constitue une cible active. » Identité TCC : hermes desktop --setup-tcc-identity est implémenté dans hermes_cli/main.py — _desktop_macos_setup_tcc_identity(identity: str = "Hermes Local Signing"), « Configuration ponctuelle pour hermes desktop --setup-tcc-identity », avec les garde-fous « (–setup-tcc-identity est réservé à macOS ; opération ignorée) » et « (–setup-tcc-identity nécessite openssl, security et codesign …) ». La campagne d’occultation (#80965, #80964, #81675, #81686, #88232), la couverture des approbations sous Windows (#84428), la suppression de MCP dans Blender (#83404) et l’analyse de l’installation des plugins de Tier 1 (#80728) sont documentées dans les notes de version.35 ↩↩↩↩

  40. Modifications de l’interface CLI au tag v2026.8.31. COMMAND_REGISTRY dans hermes_cli/commands.py enregistre CommandDef("palette", "Open the fuzzy command palette (also Ctrl+P)", "Info", ...) et CommandDef("status", "Show session, model, token, and context info", "Session", ...) — /status est une commande de session du registre partagé, et non une commande réservée à la messagerie. _BUILTIN_SUBCOMMANDS ne contient aucune entrée approval-check (73 entrées, identiques à celles de v2026.8.27) ; l’exécution à blanc appelée hermes approval-check (#81137) dans les notes de version v0.21.0 correspond à hermes approvals test — l’aide de l’analyseur dans hermes_cli/subcommands/approvals.py indique au niveau du tag : « Simule la décision d’approbation d’une commande (sans jamais l’exécuter) », avec --backend (« Type de backend de terminal à évaluer (par défaut : local … ») et --json. Dans hermes_cli/_parser.py, seul hermes chat a changé : l’aide de -q/--query indique désormais « Requête à exécuter. Sur un véritable TTY, le prompt initialise une session interactive (soumise littéralement comme premier tour) ; associé à –oneshot ou -Q, ou sur un système autre qu’un TTY, il répond puis quitte. » ; un nouveau flag --oneshot précise « Avec -q/–query-file : répond à la requête puis quitte (ancien comportement à requête unique), au lieu d’initialiser une session interactive. Implicite avec des entrées-sorties autres qu’un TTY ainsi qu’avec -Q/–quiet. » ; enfin, --max-turns indique « Nombre maximal d’itérations d’appel d’outils par tour de conversation (par défaut : 500, ou agent.max_turns dans la configuration) ». ↩↩↩↩↩↩↩↩↩

  41. Notes de version de Hermes Agent v0.21.1, tag v2026.9.7, date de sortie annoncée : 7 septembre, publication le 2026-09-07T22:17Z. Le contenu est volontairement succinct ; mot pour mot : une « version corrective » qui « regroupe l’état actuel de main depuis la v0.21.0 pour les déploiements associés à un tag et les consommateurs en aval » ; statistiques de la période au moment de la préparation : « 5 139 commits hors fusion dans 4 364 fichiers modifiés (+601 014 / -768 419) » et « 632 PR fusionnées » ; et « Les notes de version complètes et éditorialisées pour cette période seront publiées avec la v0.22.0. » Vérification dans le clone local : git rev-list --count --no-merges v2026.8.31..v2026.9.7 = 5 140 et git diff --shortstat = +601 018 / -768 423 — les chiffres du texte correspondent à l’instantané antérieur au commit de publication, avec un écart d’exactement un commit de version ; la plus grande période précédente entre deux tags adjacents est v2026.7.20..v2026.7.30, avec 2 790 commits hors fusion (mesure effectuée dans le clone local pour chaque paire adjacente à partir de v2026.3.12). Le contrôle doctor de l’entrée Dépannage se trouve dans hermes_cli/doctor_config.py:330-362 au niveau du tag (_drift_max_iterations_ghost) : une valeur obsolète de HERMES_MAX_ITERATIONS dans .env masque agent.max_turns lorsque le pont de démarrage abandonne à la suite d’une erreur antérieure d’analyse de la configuration (problème #17534), et hermes doctor --fix supprime la ligne correspondante de .env. Vérification effectuée pendant la session actuelle le 8 septembre 2026. ↩↩↩↩↩

  42. COMPAT_MANIFEST.md au tag v2026.9.7 (racine du dépôt, 3 869 lignes). Mot pour mot : « La décomposition de septembre 2026 (PR #102117) a scindé les grands modules de Hermes Agent en fichiers spécialisés » ; « Les chemins d’importation internes ne constituent pas une API stable » ; « Cette couche est temporaire et sera supprimée le 14 septembre 2026. Elle a été ajoutée dans un seul commit et sera supprimée par annulation de ce commit. » ; le tableau décrivant le comportement (avant le 14 septembre 2026 : avertissement jaune indiquant le plugin, la date et hermes plugins compat ; le plugin « se charge ; chaque résolution d’un ancien chemin émet une fois HermesPluginCompatWarning » ; à partir du 14 septembre 2026 : « avertissement rouge : plugin DÉSACTIVÉ » et « non chargé ; hermes plugins list en indique la raison » ; Desktop : « fenêtre modale affichée une seule fois ») ; l’échappatoire, mot pour mot : « plugins.allow_deprecated_imports: true dans config.yaml maintient le chargement des plugins concernés après cette date, jusqu’à ce que l’annulation supprime réellement les chemins. » ; décompte par catégorie : moved-lazy 1 148, import 592, restored-def 290, restored-helper 41, restored-import 17, module-stub 3, unrestorable 34 ; périmètre : uniquement les noms publics de premier niveau, « Les points d’injection monkeypatch des tests ne sont pas davantage préservés. » Analyseur du vérificateur dans hermes_cli/subcommands/plugins.py:104-112 : hermes plugins compat [path] [--json], avec la description suivante, mot pour mot : « Analyse statiquement tous les plugins externes activés à la recherche d’importations de chemins de modules antérieurs à la décomposition (voir COMPAT_MANIFEST.md) et affiche fichier:ligne, ancien chemin -> nouveau chemin. Renvoie le code 1 lorsqu’un plugin est concerné. » Structure de la décomposition vérifiée au niveau du tag : agent/ = 214 modules de premier niveau + 7 sous-packages (lsp, monitoring, pet, proxy_sources, secret_sources, transports, verify), hermes_cli/subcommands/ = 61 modules, CANONICAL_PROVIDERS dans hermes_cli/models_catalog_static.py:311 avec 39 entrées dont les slugs sont identiques à ceux de la liste de v2026.8.31 dans hermes_cli/models.py (tuple statique xai inclus ; plugins/model-providers/ contient toujours 39 dossiers), l’ancien prompt_builder.py de premier niveau a disparu (désormais agent/prompt_builder.py), tandis que run_agent.py reste l’emplacement de AIAgent à la racine. État ultérieur, vérifié de nouveau pour la version 1.19 du guide (15 septembre 2026) : la suppression s’est activée comme prévu sous la forme d’un contrôle de date, et non d’une annulation — au tag v2026.9.14, hermes_cli/plugin_compat.py:32 définit COMPAT_REMOVAL_DATE = _dt.date(2026, 9, 14), removal_in_effect() (lignes 86-90) renvoie true à partir de cette date ou lorsque le fichier manifeste est absent, et allow_deprecated_imports() (lignes 261-268) n’accepte qu’un booléen littéral (le garde-fou est ... is True ; commentaire dans la source : « Booléen littéral uniquement », de sorte qu’une chaîne YAML telle que "false" ou "no" ne peut jamais ouvrir le contournement après la suppression). L’annulation supprimant les anciens chemins n’a PAS été intégrée : COMPAT_MANIFEST.md, compat_manifest.json et hermes_cli/plugin_compat.py sont tous présents dans v2026.9.14 ainsi que sur main au commit 5d59366010 (15 septembre 2026 à 12:55 PT, récupéré le même jour) ; l’échappatoire résout donc encore les anciens chemins, mais cessera de fonctionner dès l’intégration de l’annulation. Nouvelle vérification pour la version 1.20 du guide (22 septembre 2026) : toujours aucune annulation — les trois fichiers sont présents au tag v2026.9.21 et sur main au commit a53b42ddea (commité le 22 septembre 2026, récupéré le même jour). Dans v2026.9.21, le contrôle et le garde-fou demeurent essentiellement inchangés : COMPAT_REMOVAL_DATE se trouve toujours dans plugin_compat.py:32, removal_in_effect() à la ligne :86, et allow_deprecated_imports() désormais aux lignes :296-303, avec le même contrôle du booléen littéral (... is True ; le commentaire indique maintenant « Booléen littéral uniquement : YAML "false" / "no" ne doit pas ouvrir le contournement après la suppression. »). Les seules modifications apportées au module pendant la période de la v0.21.4 concernent les performances et la portabilité : un cache d’analyse à l’échelle du processus, indexé sur la signature de fichier (relpath, mtime_ns, size) de chaque dossier de plugin (un gateway multiplexé découvre les plugins une fois par profile servi, et la nouvelle analyse du code source de chaque plugin coûtait environ 0,4 s par profile sur le chemin de démarrage), ainsi que des chemins de résultats au format POSIX sous Windows natif (#112576) ; quant au manifeste, il a simplement perdu deux lignes liées à opencode (_OPENCODE_KEYLESS_EXTRA_SLUGS, is_opencode_zen_free_model) — rien de structurel. ↩↩↩↩↩↩↩↩↩

  43. docs/session-lifecycle.md au tag v2026.9.7, section « 6. Limites explicites des conversations », mot pour mot et dans son intégralité : « L’inactivité et le temps écoulé ne provoquent jamais le renouvellement d’une conversation. /new et /reset créent une limite explicite ; la compression du contexte continue de gérer les historiques longs. L’ancienne configuration des minuteurs est ignorée. Le type de données SessionResetPolicy existant constitue une donnée de compatibilité inactive, et non une stratégie d’exécution. Une suspension explicite crée toujours une limite lors du prochain tour entrant. La récupération respecte les limites finalisées explicites et historiques au lieu de les rouvrir. L’éviction limitée aux ressources et la récupération des éléments WebSocket orphelins permettent de reprendre les conversations. » ↩↩↩↩

  44. Autorisation MCP au tag v2026.9.7. Analyseur : hermes_cli/subcommands/mcp.py:55-66 — login (« Forcer la réauthentification pour un serveur MCP fondé sur OAuth ») accepte --flow avec les choix browser/device, texte d’aide mot pour mot : « Flux OAuth (remplace oauth.flow) : PKCE dans le navigateur ou code d’appareil RFC 8628 » ; reauth (« Réauthentifier un serveur MCP OAuth, ou tous (--all) ») accepte un nom facultatif ainsi que --all. Le flux par code d’appareil a été intégré durant cette période : commit f5afe8bd40 « feat: autoriser les serveurs MCP avec des codes d’appareil depuis CLI ». Renforcement connexe, d’après l’intitulé des commits de cette période : f914c9b070 « fix(mcp): appliquer la propriété des profiles dans toutes les sessions OAuth » ; f94307a7f7 « fix: ignorer les caches de métadonnées MCP OAuth mal formés » ; e3ba651b6d « fix(desktop): relayer MCP OAuth via des rappels locaux au client ». Lancement filtré par toolset : tools/mcp_tool_discovery.py:412-426 — le filtre existe afin que « hermes -z -t <toolsets> » puisse « éviter le démarrage à froid des serveurs dont l’appelant n’a pas besoin », et un filtre vide ignore entièrement le chargement de MCP. ↩↩↩

  45. Fiabilité de la délégation au tag v2026.9.7, déterminée à partir du code source de l’outil de délégation. Unités d’achèvement : tools/delegate_tool_dispatch.py:326-341 (_units_of) — mot pour mot : « Désactivé par défaut (delegation.independent_completions) : l’appel entier forme UNE unité et renvoie un seul message. Une rafale d’achèvements par tâche (un nouveau tour pour chacun) fragmentait les orchestrateurs qui n’étaient pas conçus pour cela. » ; les unités correspondent à chaque group de tâches distinct (dans l’ordre de première apparition), ainsi qu’à chaque tâche sans groupe, chacune réintégrant séparément la conversation ; commit de cette période c89f3b8800 « fix(delegation): un achèvement par appel par défaut ; les unités en file d’attente ne restent plus bloquées ». Transfert des processus d’arrière-plan : commit 3c0d90e8ef « feat(delegation): les sous-agents transfèrent les processus d’arrière-plan au parent ; les éléments restants sont signalés, sans être considérés comme fiables » ; au tag, tools/delegate_tool_child_run.py:744-763 (account_background_processes) consigne les processus transférés dans le résultat, répertorie les processus toujours actifs et non transférés dans orphaned_processes, ainsi que ceux qui se sont terminés sans que leur sortie ait jamais été lue dans unread_completions (avec la fin de leur sortie), avant que cleanup ne les arrête, docstring : le parent « doit l’apprendre de l’environnement d’exécution » plutôt que de se fier à l’affirmation « surveillance en cours » d’un enfant ; le verbe de transfert est process_manage(action="handoff") (enfants uniquement), qui modifie ProcessSession.owner_task_id sous le verrou du registre via process_registry.transfer_ownership (tools/AGENTS.md, section Délégation, au tag). Mécanisme de repli : delegation.fallback_providers dans hermes_cli/config_defaults.py, commentaire mot pour mot : « Pour un enfant non épinglé, null = hériter de la chaîne du parent ; [] = désactiver le repli. Un enfant épinglé par fournisseur, endpoint ou modèle ne dispose d’aucun repli, sauf si ce paramètre en déclare explicitement un. » ; validation de la chaîne dans tools/delegate_tool_config.py:417-425 (_resolve_child_fallback_chain) : « Les entrées mal formées sont supprimées par le normaliseur canonique. » Durabilité en cas de plantage : tools/async_delegation.py:222-246 enregistre durablement chaque enfant terminé d’une unité à plusieurs enfants encore en cours sur la propre ligne de l’unité ("partial": True), afin qu’un plantage avant l’achèvement de l’unité ne fasse pas perdre les enfants terminés. Niveau de cache : tools/delegate_tool.py:106-112 (_apply_child_cache_ttl), mot pour mot : « Un enfant délégué n’utilise jamais le niveau de cache de 1 h. » ; la valeur _cache_ttl == "1h" d’un enfant est remplacée par "5m". ↩↩

  46. Fournisseurs et modèles au tag v2026.9.7. Niveaux Astra : hermes_cli/models_catalog_static.py:22-25 — openai/gpt-6-astra-fast « prix doublé, niveau prioritaire », -flex « moitié prix, niveau flex », ainsi que -pro-fast/-pro-flex ; gpt-6-astra et -pro figurent dans OPENROUTER_MODELS et ne font pas partie de l’ensemble d’exclusion _OPENROUTER_ONLY, si bien que Nous Portal les propose également. Accès conditionnel à Astra et contexte 900K : hermes_cli/codex_models.py:96-101 (« L’accès à Astra dépend du compte : seul le catalogue actif propre au compte peut l’annoncer ») et agent/model_metadata.py:1447-1462 — Codex OAuth annonce 272K, gpt-6-astra est compatible avec 900K, avec le commentaire « 272K annoncés ; entrée de 920 043 acceptée, 1 000 043 rejetée (test en conditions réelles le 4 septembre 2026) », et CODEX_CONTEXT_VARIANT_SUFFIX = "-900k" est un « suffixe d’activation réservé au sélecteur ; jamais envoyé sur le réseau » (le contexte Astra côté OpenRouter est de 1 050 000 d’après model_metadata.py:334). Nouvelles entrées du catalogue dans le même fichier statique (lignes 30 à 42) : anthropic/claude-fable-5.1, google/gemini-3.8-flash et gemini-3.7-flash, qwen/qwen3.8-max-0902 et qwen/qwen3.8-flash, meta/muse-spark-1.3 et -contributor (contexte de 1M d’après agent/model_metadata.py:349). muse-image : plugins/image_gen/meta-ai/__init__.py (« API du modèle Meta (muse-image) : compatible avec OpenAI (https://api.meta.ai/v1) », avec notamment le modèle muse-image-1.0). Tavily : hermes_cli/config_defaults.py:2522-2525, mot pour mot « Clé API Tavily pour la recherche web et l’extraction adaptées à l’IA (facultative — le mode sans clé fonctionne lorsque Tavily est sélectionné) », outils web_search et web_extract ; le bloc web précise que Tavily « s’utilise sans clé sur activation via hermes tools et ne fait pas partie d’un anneau ». Environnement d’exécution llama.cpp géré : le package hermes_cli/local_runtime/ (« Environnement d’exécution llama.cpp géré »), le bloc de configuration dans config_defaults.py:2327 (« binaires officiels, un serveur supervisé » ; documentation indiquée dans user-guide/local-models) et l’interface desktop apps/desktop/src/api/local-models.ts. Fournisseurs reposant sur des processus externes : agent/auxiliary_client.py:4740-4799 (_resolve_external_process_branch, « fournisseurs external_process de PROVIDER_REGISTRY, servis via leur profile enregistré », indexés sur le profile enregistré « afin qu’un fournisseur ACP tiers » puisse être résolu). Fréquence d’actualisation du catalogue : migration de configuration 39 -> 40 dans hermes_cli/config_migrations.py:622-627 (« model_catalog.ttl_hours -> ttl_minutes (valeur par défaut : 20) », message destiné à l’utilisateur « Le catalogue des modèles est désormais actualisé toutes les 20 minutes (model_catalog.ttl_minutes) »), tandis que hermes_cli/model_catalog.py respecte l’ancien paramètre ttl_hours « uniquement lorsque ttl_minutes conserve sa valeur par défaut ». ↩↩↩

  47. Vague Desktop au tag v2026.9.7. Mode commentaire : website/docs/user-guide/desktop.md au niveau du tag, trame verbatim : « cliquez sur Annoter dans la barre du navigateur de prévisualisation, puis cliquez sur n’importe quel élément (ou tracez un cadre) sur la page active et saisissez une note ; chaque commentaire enregistré reste affiché sous forme d’épingle numérotée sur la page » ; « L’enregistrement d’une épingle n’envoie jamais de tour » ; « Ajouter N commentaires joint au composeur une capture d’écran recadrée pour chaque épingle ainsi qu’une courte invite nommant chaque commentaire » ; « Chaque commentaire d’élément contient son sélecteur CSS, son balisage et les styles calculés pertinents pour la mise en page, afin que l’agent puisse retrouver l’élément dans votre source au lieu de le deviner à partir de l’image » ; « Les valeurs des mots de passe et des champs masqués, ainsi que tout attribut ressemblant à une clé ou à un token, sont expurgés sur la page avant que le balisage ne la quitte » ; « Les lots volumineux sont regroupés selon la partie de la page où se trouve chaque commentaire, de sorte qu’une vingtaine de commentaires deviennent quelques blocs de travail plutôt qu’une tâche chacun » ; « puisque les groupes correspondent à des sous-arbres DOM distincts, ils concernent généralement des fichiers différents, ce qui permet de les confier sans risque à des workers parallèles ». Commits compris dans la période : 10f2a20966 « feat(desktop): ajout du mode commentaire au navigateur intégré à l’application » ; e4bda3ff77 « feat(desktop): les commentaires du navigateur contiennent le sélecteur, le balisage et les styles de l’élément » ; contrôles de session 8cb2bcc8c1 « exposer des contrôles de session structurés » + bfddf556bf « hydrater les contrôles de session structurés » + dffd8d62c2 « ajouter des contrôles d’automatisation de session » ; 6b1e12c7f4 « glisser pour créer des sessions depuis Nouvelle session, les groupes de projet + contrôles et les groupes de profile » ; 9186e3ebc5 « vue d’importation de session pour les transcriptions provenant d’agents de programmation tiers » ; a1c25d393a « catalogue intégré de skills facultatifs dans Fonctionnalités → Skills avec installation en un clic » ; locale russe a922dad9d8 « feat(desktop): ajout de la locale russe (ru) » + 269e5bde33 (enregistre ru dans les tests et la documentation des locales ; apps/desktop/src/i18n/ru.ts apparaît dans cette période, tandis que le dossier locales/ de CLI conserve 17 catalogues). display.resume_last_session : hermes_cli/config_defaults.py:777, valeur par défaut True, commentaire verbatim « Desktop rouvre la dernière discussion/page lors d’un démarrage à froid (également dans Paramètres → Apparence). » Consentement relatif au profile réel : apps/desktop/src/app/chat/right-rail/real-profile-consent-dialog.tsx (« Invite de consentement affichée à la première ouverture pour la navigation avec le profile réel », présentée lorsqu’un volet Browser s’ouvre alors que browser.use_real_profile est désactivé ; accepter écrit dans la même clé de configuration que celle utilisée par le bouton bascule des Fonctionnalités, « Pas maintenant » désactive l’invite pour l’exécution en cours de l’application, « Ne plus afficher » conserve ce choix d’un lancement à l’autre). ↩↩

  48. Notes de version d’Hermes Agent v0.21.2, « La version corrective de state.db », tag v2026.9.11, date de sortie annoncée le 11 septembre, publication le 11 septembre 2026 à 19:20 UTC. Présentation verbatim : « v0.21.0 comportait une refonte majeure de la gestion des connexions du magasin de sessions et, sur certaines installations, elle a fragilisé state.db : des seconds processus d’écriture annulaient mutuellement leurs verrous, des bases de données saines étaient signalées comme corrompues et une seule ligne défectueuse faisait échouer sessions list. » Statistiques mesurées au commit 04dd80a977 : « 947 commits hors fusion », « 1 869 fichiers modifiés », « 312 PR fusionnées », « 140 contributeurs » (vérification dans le clone local : git rev-list --count --no-merges v2026.9.7..v2026.9.11 = 959 — le nombre indiqué dans le corps correspond à un instantané antérieur à la sortie, selon le même schéma que pour v0.21.1). Intitulé de la campagne verbatim : « campagne de fiabilisation de state.db (six PR, 44 problèmes résolus) » (PR nº 108076, nº 108082, nº 108130, nº 108086, nº 108074 et nº 108067) ; recommandation de mise à jour verbatim : « exécutez d’abord hermes doctor ; il distingue désormais correctement les dommages structurels de ceux touchant les index et renvoie vers hermes sessions recover --inspect-only (épinglé au profile) lorsqu’une reconstruction ne suffit pas. » Vérification de la source au niveau du tag : état des salles hébergées déplacé hors du magasin racine dans gateway/hosted_rooms.py:398-426 — default_db_path fait pointer les gateways de profile vers « le fichier shared-state.db partagé de la RACINE plutôt que vers le fichier state.db principal », et sa docstring cite le vecteur récurrent de corruption lié aux écritures multiples, observé sur une flotte de 6 gateways (3 septembre 2026), pour expliquer pourquoi les gateways de profile ne doivent jamais ouvrir le magasin de sessions principal en écriture. Analyseur de hermes sessions recover dans hermes_cli/subcommands/sessions.py:185-196, avec le texte d’aide verbatim de --inspect-only : « Signaler uniquement la lisibilité de la table canonique ; ne pas créer de base de données de sortie » ; la sous-commande est antérieure à cette période (déjà présente dans hermes_cli/main.py à la version v2026.8.31), mais n’avait pas encore été documentée dans ce guide. Coffre d’identifiants : docstring de agent/vault_backends/__init__.py (« Backends de connexion pour le coffre d’identifiants du navigateur » ; handles placés dans des espaces de noms par backend afin que les outils du navigateur puissent les acheminer sans modification du schéma ; gestionnaires externes verrouillés jusqu’à un déverrouillage par session ; le mot de passe principal « n’est jamais un argument d’outil, n’apparaît jamais dans argv et n’est jamais conservé »), agent/vault_backends/base.py (un LoginBackend « répertorie les métadonnées de connexion — jamais les secrets — et ne récupère qu’UN mot de passe au moment du remplissage ») et agent/vault_store.py:74-105 (clés d’authentification uniquement sous forme de seeds en base32 ou d’URI otpauth://totp, rejet du HOTP fondé sur un compteur, codes générés par totp_now) ; les backends local.py, onepassword.py et bitwarden.py, ainsi que agent/secret_sources/{onepassword,bitwarden,command}.py, sont tous présents au niveau du tag. Sous-analyseurs du catalogue de plugins dans hermes_cli/subcommands/plugins.py : aide de install « Installer un plugin depuis le catalogue sélectionné, une URL Git ou owner/repo », search « Rechercher dans le catalogue sélectionné de plugins Hermes », browse « Répertorier toutes les entrées du catalogue sélectionné de plugins », pack « Ensembles de plugins déclaratifs et partageables (hermes-pack.yaml) », avec install/export/show. Intégration des invités dans apps/desktop/electron/guest-onboarding-flag.test.ts : intitulé du test verbatim « guestOnboardingEnabled: exactement “1” dans env ou –guest-onboarding dans argv active l’offre gratuite » ; la suite vérifie que 'true', '0' et une valeur vide laissent tous cette offre désactivée, et que desktopBackendSpawnEnv « inscrit la décision de lancement en dernier et ne laisse jamais fuir une valeur héritée ». Groupe de problèmes de durcissement multi-profile nº 107609 à nº 107630, tels qu’énumérés dans la version. Vérification pendant la session actuelle le 15 septembre 2026. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩

  49. Notes de version d’Hermes Agent v0.21.3, tag v2026.9.14, date de sortie annoncée le 14 septembre, publication le 14 septembre 2026 à 16:04 UTC. Objectif verbatim : le tag « existe afin que les correctifs de connexion au gateway distant ci-dessous parviennent aux agents Cloud, lesquels se mettent automatiquement à jour vers le tag de version le plus récent. » Statistiques mesurées au commit 9b419a2d3c : « 1 036 commits hors fusion », « 2 642 fichiers modifiés », « 338 PR fusionnées » (vérification dans le clone local : git rev-list --count --no-merges v2026.9.11..v2026.9.14 = 1 037, le commit de publication une fois encore). Les deux éléments documentés ont été vérifiés dans le clone local et n’apparaissent que pendant cette période : commit 5dea46d13d « fix(dashboard-auth): un seul rafraîchissement en cours pour la barrière de cookies et la route native, hors de la boucle d’événements » (nº 110061, corrige nº 55712 ; associé à hermes-portal#1209 côté Portal, avec une échéance glissante après 30 jours d’inactivité et une période de grâce de 5 minutes pour les tokens renouvelés) et commit 939a2f64b4 « fix: les processus de longue durée cessent de créer des handles d’écriture state.db en double » (nº 110934, corrige nº 100896 et nº 103339). Report verbatim : « Les notes de version sélectionnées complètes pour cette période seront publiées avec v0.22.0, qui documentera tout ce qui a été ajouté depuis v0.21.0 » et « Rien de cette période n’est omis » ; la liste des éléments volontairement non documentés dans cette version comprend les requêtes JSON-RPC du serveur vers le client ainsi qu’un registre de contrats filaires Pydantic, la sélection de l’effort de raisonnement dans chaque sélecteur de modèle, le PKCE OAuth d’OpenRouter, le décodage HEIF/HEIC/AVIF, la refonte du modèle pair Honcho, les ajouts au catalogue FAL (Wan 3.0, Kling 3.0 / Kling Image v3, MiniMax H3 Max Turbo, Gemini Omni Flash 1.1, Meta Muse), les tableaux collés dans Slack et le API des Agent Sessions, les correctifs d’isolation des profiles multiplexés et de disponibilité des gateways, ainsi que le refus du WAL de state.db sur les systèmes de fichiers inter-VM — tous réservés à l’analyse de v0.22.0 conformément à la présentation de la version elle-même. Vérification pendant la session actuelle le 15 septembre 2026. ↩↩↩

  50. Notes de version de Hermes Agent v0.21.4, tag v2026.9.21, date de sortie annoncée le 21 septembre, publication le 2026-09-21T18:10:55Z. Objectif indiqué textuellement : « Version corrective. Ce tag regroupe les quelque 1 800 PR fusionnées depuis la v0.21.3 dans une version stable balisée destinée aux utilisateurs en aval (images Docker, Hermes Cloud, déploiements hébergés). Les notes complètes et organisées pour cette période sont reportées à la v0.22.0. » Statistiques mesurées au commit 4b8a8134009a : « 5 071 commits hors fusion » sur « 5 169 fichiers modifiés » (+312 961 / -62 855), « 1 812 PR fusionnées » et « 2 116 issues fermées » — les vérifications sur un clone local reproduisent exactement ces cinq valeurs (git rev-list --count --no-merges v2026.9.14..4b8a8134 = 5 071 ; git diff --shortstat = 5 169 fichiers, +312 961 / -62 855 ; le commit du tag d337b736aa « chore(release): v0.21.4 (v2026.9.21) » est un enfant de 4b8a8134, ce qui donne 5 072 commits hors fusion et 5 173 au total en comptant les fusions, tandis que le API de comparaison GitHub pour v2026.9.14...v2026.9.21 indique total_commits: 5173, ahead_by: 5173, behind_by: 0). Classement des périodes (revérifié pour la version 1.21 du guide, le 23 septembre) : selon le nombre de commits hors fusion entre chaque paire de tags v2026.* adjacents, v2026.8.31..v2026.9.7 (5 140 avec son commit de version) arrive en tête et v2026.9.14..v2026.9.21 (5 072) en deuxième position, devant v2026.7.20..v2026.7.30 (2 790) ; selon le nombre de PR fusionnées annoncé dans les notes de version, 1 812 constitue le total le plus élevé de toutes les notes récapitulant une seule période (v0.21.1 : « 632 PR fusionnées », v0.19.1 : « environ 1 000 PR ou plus » ; les « environ 2 475 » de la v0.21.0 couvrent les six tags v0.20.x depuis la v0.20.0 et ne correspondent donc pas à une seule période entre deux tags). Report indiqué textuellement : « Les notes de version complètes et organisées pour cette période seront publiées avec la v0.22.0, qui documentera tout ce qui a été ajouté depuis la v0.21.0 » et « Aucun élément de cette période n’est omis. » La liste des éléments volontairement non documentés mentionne le verrou singleton du gateway et l’enregistrement de rendez-vous permettant à Desktop de se connecter au backend hôte en cours d’exécution, l’opération du connecteur gérée par le backend avec sa fiche de configuration Desktop/TUI/CLI, --format stream-json, skills.auto_load, le sélecteur de police du chat et de l’interface Desktop, les mises à jour des moteurs locaux en un clic et la désinstallation depuis le hub Plugins, le comportement decline pour les messages privés non autorisés, mcp.discovery_concurrency, les bornes after/before de session_search et la nouvelle tentative de rappel assouplie avec OR, hermes sessions set-journal-mode, LTX 2.5 et Kling O3 dans les catalogues vidéo, les pages du site du catalogue propres à chaque plugin et auteur avec des fichiers README épinglés à un commit et un tri par date d’ajout ou de mise à jour, « une douzaine de nouveaux plugins communautaires dans le catalogue (tailscale, ssh, shodan, terminal, rss, resetwatch, done-bell, kiwi, cognee, Octen) » (formulation abrégée des notes de version ; les entrées du catalogue associées au tag sont hermes-tailscale, hermes-ssh, shodan, hermes-terminal, hermes-rss, hermes-resetwatch, done-bell, kiwi, cognee, web-octen), ainsi qu’« une longue série de correctifs concernant l’isolation des profile et du multiplexage, cron, kanban, Desktop et state.db ». Mise à jour : hermes update (installations git) ou la commande d’installation en une ligne ; « Docker / Hermes Cloud : les images sont générées à partir de ce tag (nousresearch/hermes-agent:v2026.9.21) ». Vérification effectuée dans la session actuelle le 22 septembre 2026. ↩↩↩↩↩↩

  51. Éléments annoncés dans la v0.21.4 vérifiés dans le code source à l’étiquette v2026.9.21 (guide v1.20, 22 septembre 2026 ; ajout des règles destinées aux opérateurs dans le guide v1.21, 23 septembre). Singleton de l’hôte : docstring de gateway/host_rendezvous.py — « Singleton de rendez-vous à l’échelle de l’hôte : un verrou + un enregistrement par ROLE et par utilisateur du système d’exploitation » ; « exactement UN hermes serve et UN hermes gateway run par hôte, chacun multiplexant tous les profile » ; un verrou d’hôte flock/msvcrt « conservé pendant toute la durée de vie du processus gagnant », accompagné d’un enregistrement de rendez-vous afin qu’une seconde invocation puisse « prouver qu’il s’agit du même processus toujours actif et S’Y RATTACHER au lieu d’ouvrir un second port » ; « L’obsolescence est prouvée, jamais supposée » au moyen de (pid, createTime) (« un client qui se rattache ne doit jamais contacter le port d’un PID réutilisé ») ; racine des verrous $HERMES_GATEWAY_LOCK_DIR, sinon $XDG_STATE_HOME/hermes/gateway-locks, limitée à l’utilisateur du système d’exploitation (gateway/status.py:308-324 : un XDG_STATE_HOME relatif est ignoré et la valeur de repli est ~/.local/state). Parcours de l’opérateur : _host_attach_or_none dans gateway/run.py:5466-5499 affiche le message de rattachement et se termine avec le code 0 pour ATTACH, refuse pour REFUSE, transmet --replace au « processus HÔTE, quel que soit le répertoire personnel depuis lequel il a été lancé » pour REPLACE_HOST, et ignore la question avec --force (« la porte de sortie de l’opérateur lorsque le propriétaire est bloqué ou ment ») ; _claim_host_gateway_role (gateway/run.py:5331-5346) fait quitter le perdant de la course au verrou avec EX_TEMPFAIL (75), car « Tous les superviseurs que nous générons réessaient après le code 75 et, lors de cette nouvelle tentative, l’enregistrement du propriétaire existe ». Cinq résultats dans gateway/host_attach.py : ATTACH, RESCAN->ATTACH (rescan-profiles sur le socket de contrôle), REPLACE_HOST, REFUSE (« Ne jamais en démarrer un second silencieusement »), START (les gateway autonomes par profile coexistent « jusqu’à ce que cette migration soit imposée (#109417) »). Partie Desktop : apps/desktop/electron/host-backend-attach.ts (« Se rattacher au backend Hermes en cours d’exécution sur l’hôte (multiplexage uniquement, partie Desktop) » ; la séquence d’E/S lit le registre de lancement à la racine de la machine, valide un candidat selon « disponibilité HTTP -> jeton de session servi -> authentification WebSocket » et maintient « un verrou au niveau de l’hôte afin que deux applications démarrant simultanément produisent un seul backend plutôt que deux » ; HOST_SPAWN_GATE_STALE_MS = 60_000). Opération du connecteur : tools/connectors/operation.py:1, mot pour mot : « Une opération de connexion détenue par le backend pour chaque appel à manage_connections. Données pures, aucune E/S. » ; OPERATION_DEADLINE_SECONDS = 300.0, avec le commentaire « Ce n’est pas une clé de configuration : un délai réglable par l’utilisateur avec des limites de sécurité était une source de problèmes (la PR1 en proposait un, mais elle n’a pas été fusionnée) » ; outil enregistré sous le nom manage_connections (tools/connectors/tool.py:16,48,113) ; required_env par cible « ({name, prompt, required}) ; la carte affiche un champ pour chaque entrée et retient son action jusqu’à ce que toutes les entrées obligatoires contiennent du texte » ; carte des trois interfaces nommée dans tests/hermes_cli/test_mcp_catalog_env_boundary.py:330 (« Le backend de la carte du connecteur — carte de configuration Desktop/TUI/CLI — applique la même séparation limitée aux secrets »). stream-json : hermes_cli/_parser.py:247-249 dans l’analyseur de chat — --format, avec les choix text/stream-json, text par défaut et cette aide mot pour mot : « ‘stream-json’ produit des événements JSON délimités par des retours à la ligne (JSONL), implique –quiet et ne peut pas être combiné avec –tui » ; docstring du module hermes_cli/stream_json.py : « un objet JSON par ligne de stdout … system/init -> deltas text / tool_use / tool_result -> une enveloppe result terminale (code de sortie, texte final, statistiques de tokens). Les diagnostics et session_id restent sur stderr », _TOOL_OUTPUT_CAP = 5000, sortie avec le code 2 pour les combinaisons interdites, stream_json_requested dans hermes_cli/stream_json.py:23 acceptant query ou query_file avant de quitter avec le code 2 (le point d’entrée Fire dans cli.py:1703-1705 vérifie la requête déjà résolue) ; --query-file PATH dans hermes_cli/_parser.py:218-222, au sein d’un groupe mutuellement exclusif avec -q (aide mot pour mot : « Lire l’unique requête depuis un fichier plutôt que depuis la ligne de commande (‘-’ lit stdin). Sûr pour tout type de texte : rien n’est interprété par le shell »), lu par _read_query_file (hermes_cli/main.py:1735-1762), présent depuis l’étiquette v2026.8.19 ; tests du contrat dans tests/hermes_cli/test_stream_json.py (notamment « ne doit jamais atteindre stdout avec stream-json »). skills.auto_load : hermes_cli/config_defaults.py:1435, valeur par défaut [], commentaire mot pour mot : « Noms des skill épinglés comme entièrement chargés dans chaque nouvelle session (CLI, TUI, gateway, cron, API). Résolus une seule fois lors de la construction initiale du prompt de l’agent ; les noms manquants ou désactivés produisent un avertissement et sont ignorés ; HERMES_IGNORE_RULES supprime cette liste comme les autres éléments de contexte injectés automatiquement. » decline : gateway/config.py:137-139 — commentaire mot pour mot : « ‘pair’ envoie un code d’appairage par message privé, ‘ignore’ abandonne silencieusement, ‘decline’ envoie un refus poli, puis reste silencieux envers cet expéditeur pendant gateway.pairing.DECLINE_DEDUPE_SECONDS (#88028) », UNAUTHORIZED_DM_BEHAVIORS = {"pair", "ignore", "decline"}, valeur par défaut du champ "pair" (:626), unauthorized_dm_decline_message vide -> DEFAULT_UNAUTHORIZED_DM_DECLINE_MESSAGE (réponse citée dans la section consacrée à l’appairage) ; DECLINE_DEDUPE_SECONDS = 24 * 3600 et horodatages de refus tenant compte des alias dans gateway/pairing.py:37,565-576 ; résolution par plateforme et valeur par défaut d’Email dans get_unauthorized_dm_behavior (gateway/config.py:803-809, « Email se présente comme une boîte de réception et utilise donc "ignore" par défaut, sauf si son propre unauthorized_dm_behavior l’active explicitement (une valeur globale par défaut ne suffit pas) »). La clé elle-même, avec pair/ignore et la règle d’Email, est antérieure à cette période (présente dans v2026.9.14, gateway/config.py:564,736-742 ; introduite par #1919 en mars 2026) ; seul decline est nouveau. Valeur par défaut effective : _get_unauthorized_dm_behavior dans gateway/authz_mixin.py:699-740, avec l’ordre suivant d’après sa docstring : « configuration explicite par plateforme ; Email -> “ignore” ; valeur globale explicite différente de celle par défaut ; dm_policy de l’adaptateur (appairage -> “pair”, liste d’autorisation/désactivé -> “ignore”) ; toute liste d’autorisation configurée -> “ignore” … ; sinon “pair” » (#9337), la valeur globale n’étant consultée que lorsqu’elle est != "pair". Structure YAML : les clés propres à chaque plateforme sous platforms.<name> sont promues dans PlatformConfig.extra (gateway/config.py:456-460, #10206), la clé de premier niveau ou la clé imbriquée gateway.unauthorized_dm_behavior est relayée par gateway/config_loader.py:39-46,102, et hermes gateway setup écrit platforms.<name>.unauthorized_dm_behavior au moyen de write_platform_config_field (hermes_cli/config.py:2061-2069 ; hermes_cli/gateway_setup_wizard.py:182-184,219-249, choix « Refuser poliment les expéditeurs inconnus (message unique, puis silence) »). Le message de refus est uniquement global (gateway/run_inbound.py:139). discovery_concurrency : valeur par défaut 4 dans hermes_cli/config_defaults.py:526 ; tools/mcp_tool_discovery.py:27-40 (« mcp.discovery_concurrency la remplace, 0 = illimité (#117373) » ; une valeur non entière ou négative journalise « n’est pas un entier positif ou nul ; utilisation de %d » et emploie la valeur par défaut) ; sémantique de limite et non de verrou confirmée par tests/tools/test_mcp_tool.py:2813 (« limite les connexions simultanées (elles restent concurrentes, chaque serveur » se connecte). Bornes et nouvelle tentative de session_search : tools/session_search_tool.py:578,621-635,708-725 — after « Borne inférieure inclusive de l’heure de début de la session. Date/date-heure ISO (par exemple 2026-06-01) ou durée relative (7d, 24h, 2w = au cours des N derniers) », before « Borne supérieure exclusive de l’heure de début de la session. Date/date-heure ISO (une date seule désigne minuit UTC ce jour-là) ou durée relative (7d = antérieur à une semaine) », toutes deux « uniquement pour la forme de découverte », avec « sort est un biais de classement, pas une borne », et les nouveaux paramètres « ajoutés après detail » pour préserver la stabilité du schéma ; nouvelle tentative assouplie par OR dans hermes_state_search.py:1151-1163, commentaire mot pour mot : « le AND implicite entre les termes signifie qu’une requête reformulée comprenant plusieurs mots ne trouve pas une phrase enregistrée s’il lui manque ne serait-ce qu’UN mot … Lorsque la requête exacte et toutes les solutions de repli par sous-chaîne échouent, réessayer avec l’index unicode61 en faisant correspondre N’IMPORTE QUEL terme. … Limité aux échecs ne produisant aucun résultat afin que les correspondances conservent la sémantique exacte ; les requêtes comportant explicitement OR/NOT, celles à un seul terme et celles orientées vers CJK ne sont pas concernées » ; suite dédiée tests/hermes_state/test_search_or_relaxed_fallback.py. set-journal-mode : analyseur dans hermes_cli/subcommands/sessions.py:177, aide mot pour mot : « Convertir state.db hors ligne entre journal_mode=WAL et DELETE (tous les détenteurs doivent être arrêtés) » ; docstring de hermes_cli/sessions_cmd_journal_mode.py — parcours autonome hors ligne pour #100896 (auparavant, « la seule porte de sortie consistait à exécuter manuellement la commande non documentée PRAGMA journal_mode=DELETE »), « refuser tant qu’UN processus étranger détient le fichier ou un fichier annexe (foreign_state_db_holders), changer le mode sans attendre la fermeture des processus qui l’ont ouvert (_set_journal_mode_no_wait), puis vérifier les octets 18/19 de l’en-tête que SQLite écrit pour le mode » ; dispatch marqué « hors ligne : ne doit pas ouvrir le stockage qu’il convertit » (hermes_cli/sessions_cmd.py:982) ; hermes doctor le recommande avec --db pour les stockages différents de celui par défaut (hermes_cli/doctor_platform.py:148,163). Description de l’analyseur mot pour mot : « Exécutez cette commande après avoir arrêté le gateway, le dashboard et tous les CLI : elle refuse de continuer tant qu’un processus détient le fichier, change le mode et vérifie l’en-tête du fichier » ; aide de --force : « Windows uniquement : continuer sans analyser les détenteurs — cette analyse n’existe pas sur Windows — après avoir vous-même arrêté tous les processus Hermes » (hermes_cli/subcommands/sessions.py:176-189), appliqué dans _refusal (sessions_cmd_journal_mode.py:40-44 : « impossible de prouver que la base de données est inactive sous Windows — aucune analyse des détenteurs »). Vague Desktop : champ de police apps/desktop/src/app/settings/chat-font-setting.tsx (CONFIG_PATH = 'desktop.font_family', sauvegarde automatique après 550 ms), avec themes/chat-font.ts (suggestions OpenDyslexic, Atkinson Hyperlegible, Lexend, Inter, IBM Plex Sans, Source Sans 3, Noto Sans, Segoe UI, SF Pro Text ; une valeur vide désigne la police du thème), appliqué au moyen de themes/context.tsx:279, qui remplace le token de thème --dt-font-sans ; mises à jour du moteur dans apps/desktop/src/app/settings/local-models-settings.tsx et son test (un bouton « Mettre à jour le moteur » lorsque l’environnement d’exécution local géré signale update_available, déclenchant installLocalRuntime sous la forme d’une tâche runtime-install indiquant sa progression ; le test « maintient une mise à jour explicite ayant échoué visible, avec une nouvelle tentative directe et aucun modèle en attente ») ; désinstallation depuis le hub Plugins dans apps/desktop/src/app/capabilities/plugins/plugins-tab.tsx et son test (« désinstalle au moyen de plugins.manage remove uniquement après acceptation de la boîte de dialogue de confirmation » ; plugins Desktop autonomes au moyen de uninstallDiskPlugin sur le chargeur Electron). Catalogues vidéo : plugins/video_gen/fal/__init__.py:43-44,99-101 — ltx-2.5 (« LTX 2.5 », « Modèle audio-vidéo open source de Lightricks. Audio natif, jusqu’à 20 s / 4K (i2v), préréglages de mouvements de caméra. », niveau économique, lightricks/ltx-2.5/text-to-video/fast et /image-to-video/fast, formats d’image 16:9/9:16, durées entières ; :128 « fal rejette les vidéos LTX 2.5 de plus de 10 s en 1440p/2160p ») et kling-o3 (« Kling O3 (Standard) », « Modèle de pointe de Kuaishou. Narration native en plusieurs plans, audio facultatif, 3 à 15 s. », niveau premium, durée sous forme de chaîne de 3 à 15, i2v déduit le format d’image à partir de l’image, generate_audio est un véritable interrupteur) ; tests des payload dans tests/plugins/video_gen/test_fal_plugin.py:641,681 ; ligne de la liste dans website/docs/reference/toolsets-reference.md:72. Développement du catalogue : plugin-catalog/ à l’étiquette v2026.9.14 = 9 entrées + removed.yaml, à l’étiquette v2026.9.21 = 228 entrées + removed.yaml ; structure des entrées d’après plugin-catalog/hermes-tailscale.yaml (nom, dépôt, sha de 40 caractères hexadécimaux, description, mainteneur, tier: community, catégorie, docs_url, fonctionnalités) ; modèle d’admission et de publication dans hermes_cli/plugin_catalog.py:4-10,33 (« épinglé à un SHA de commit exact de 40 caractères. Sa présence dans le dossier VAUT » admission ; website/scripts/extract-plugins.py publie /docs/api/plugin-catalog.json ; LIVE_CATALOG_URL est récupérée et mise en cache sous ~/.hermes/cache/plugin-catalog.json) ; pages du site dans website/plugins/plugin-catalog-pages/index.js (« /docs/plugins/, une page par entrée », « /docs/plugins/by/, une page par mainteneur », « une PR du catalogue fusionnée est le seul moyen pour qu’une page apparaisse, soit modifiée ou disparaisse », et le site « se dégrade sans jamais échouer ») et readme.js (README de chaque entrée rendu « à partir du commit ÉPINGLÉ » au moyen d’une URL brute pointant vers le sha, « jamais vers la tête d’une branche », afin que la page affiche exactement le README examiné par le réviseur du catalogue ; rendu à la compilation reposant sur une liste d’autorisation, supprimant le HTML brut, limité à 512 Ko et à raw.githubusercontent.com et gitlab.com ; désactivation possible avec readme: false) ; slugs des auteurs et horodatages d’ajout/mise à jour fondés sur la date du commit dans website/scripts/extract-plugins.py:80,142 ; les dix plugins communautaires nommés dans la version sont tous présents sous forme d’entrées à cette étiquette, avec les slugs répertoriés dans 50. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩

  52. Notes de version de Hermes Agent v0.21.5, tag v2026.9.24, date de sortie annoncée au 24 septembre, publication le 2026-09-24T10:09:38Z. Objet, mot pour mot : « Version corrective. Ce tag regroupe les quelque 460 PR fusionnées depuis la v0.21.4 dans une version stable balisée destinée aux utilisateurs en aval (images Docker, Hermes Cloud, déploiements hébergés). Les notes complètes et structurées couvrant cette période sont reportées à la v0.22.0. » Statistiques mesurées au commit du tag f97608f178 (« chore: release v0.21.5 (2026.9.24) ») : « 1 610 commits hors fusion » sur « 4 828 fichiers modifiés » (+164 132 / -149 440), « 460 PR fusionnées » et « 475 issues clôturées ». Les vérifications effectuées sur un clone local reproduisent exactement les chiffres relatifs aux commits et aux différences (git rev-list --count --no-merges v2026.9.21..v2026.9.24 = 1 610 ; 1 638 avec les fusions ; git diff --shortstat = 4 828 fichiers, +164 132 / -149 440) ; le nombre de PR et d’issues n’a pas été vérifié indépendamment. La liste volontairement non documentée du corps de la note mentionne GPT-6 « Sol/Terra/Luna » et Claude Opus 5.5 dans les catalogues Nous et OpenRouter, l’arrêt, le démarrage et le redémarrage par profile avec gateway.standalone, ainsi qu’une vague de plugins-SDK pour Desktop ; elle ne mentionne pas Hindsight. Procédure de mise à jour, mot pour mot : « hermes update (installations git), ou exécutez à nouveau la commande d’installation en une ligne » et « les images sont générées à partir de ce tag (nousresearch/hermes-agent:v2026.9.24) ». ↩↩↩↩

  53. Éléments de la v0.21.5 vérifiés dans le code source au tag v2026.9.24 (guide v1.22, 24 septembre 2026). Hindsight : le commit 4cbf862abe « chore(memory): remove the bundled hindsight provider (moved to the plugin catalog) » (22 septembre) est un ancêtre du tag ; au niveau du tag, plugins/memory/ contient sept dossiers de fournisseurs (byterover, holographic, honcho, mem0, openviking, retaindb, supermemory), contre huit dans v2026.9.21 ; le commit 73c598e319 « build: drop the hermes-agent[hindsight] extra » l’a supprimé de pyproject.toml. plugin-catalog/hindsight.yaml : repo: https://github.com/vectorize-io/hindsight, maintainer: vectorize-io, tier: community, requires_hermes: ">=0.21.4". Migration : la docstring de hermes_cli/memory_provider_migration.py (lignes 1 à 14) cite deux hooks, « hermes update » et « initialisation de l’agent » ; la ligne 75 affiche « Le fournisseur de mémoire ‘{name}’ a été retiré du cœur — son plugin a été installé depuis le catalogue » ; recover_at_startup() (ligne 110) « respecte security.allow_lazy_installs » ; cette fonction est appelée depuis hermes_cli/update_cmd_deps.py:535-536 et agent/agent_init.py:1315-1316. Effets sur le disque et commandes de vérification : memory-providers.md:482-490. Multiplex : hermes_cli/gateway_multiplex_mode.py, ligne 10, « Une valeur false explicite est ABANDONNÉE », et lignes 43 à 44, « gateway.multiplex_profiles: false est abandonné et a été réécrit en true » (commit b936546561, 23 septembre). gateway.standalone : hermes_cli/profiles.py:979-982, « Le profile DEFAULT n’est jamais autonome — il EST l’hôte — et un avertissement est émis une seule fois par processus si la clé y est définie » (commit 0238c9d740). Mise en pause : commit 4c342c05de « arrêter, démarrer et redémarrer un profile sous le multiplexeur hôte » ; multi-profile-gateways.md:120-138, 233-244 (« une couche de compatibilité temporaire » ; « gateway.standalone prévaut »). Modèles : hermes_cli/models_catalog_static.py, OPENROUTER_MODELS, lignes 32 et 36 à 37 (anthropic/claude-opus-5.5, openai/gpt-6-sol, -sol-pro, gpt-6-luna, -luna-pro) ; la liste nous à la ligne 162 en est dérivée. Aucun identifiant de modèle gpt-6-terra n’apparaît dans les catalogues du sélecteur au niveau du tag ; seuls Sol et Luna sont donc répertoriés ici. Fournisseurs : l’analyse de CANONICAL_PROVIDERS à la ligne 314 donne 39 entrées (décompte AST, inchangé) ; plugins/model-providers/ contient 38 dossiers dans v2026.9.21 comme dans v2026.9.24, contre 39 dans v2026.9.14. Le commit 998f614c7f « feat(providers): remove the keyless opencode-free tier » (18 septembre) a supprimé le plugin ; son message indique que « l’offre gratuite d’OpenCode renvoie désormais une erreur HTTP 403 pour le trafic anonyme provenant d’un autre client qu’OpenCode ». hermes_cli/auth.py:1255-1259 conserve une erreur pour opencode-free, free et opencode_free, qui renvoie vers opencode-zen et opencode-go. Compatibilité : COMPAT_MANIFEST.md, compat_manifest.json et hermes_cli/plugin_compat.py sont présents au niveau du tag et sur main au commit aa8a33d22d (24 septembre). git diff v2026.9.21 v2026.9.24 -- hermes_cli/plugin_compat.py ne renvoie aucune différence (COMPAT_REMOVAL_DATE à la ligne 32 ; la vérification « Literal boolean only » aux lignes 296 à 303). Seules les entrées supprimées de plugins.memory.hindsight ont disparu des deux manifestes (-7 / -12 lignes). ↩↩↩↩↩↩↩↩

  54. Notes de version de Hermes Agent v0.20.3 (tag v2026.8.16.2, date de sortie annoncée au 16 août, publication le 17 août 2026) et notes de version de la v0.20.4 (tag v2026.8.18, 18 août 2026) ; toutes deux récupérées via GitHub API le 20 août 2026 (prerelease: false). Texte de la v0.20.3, mot pour mot : « la migration vers MCP 2.x SDK et la prise en charge du protocole sans état du 28 juillet 2026, le plugin Bot Mode (hermes-bots) inclus avec le protocole principal de coéquipier, le plugin du fournisseur CommandCode, le renforcement de la propriété de l’environnement d’exécution Python des sous-processus (isolation de PYTHONHOME/PYTHONPATH), les contrats d’exécution de Cua Driver 0.20 pour le contrôle d’ordinateur. » Texte de la v0.20.4, mot pour mot : « les travaux sur les surfaces vitrées/translucides de l’application Desktop (verre mat, sélecteur de givre, présélection sous macOS), la barre latérale à onglets SESSIONS|BOTS permettant de masquer ou d’afficher chaque bot, […] l’analyse consultative NVIDIA SkillEvaluator Tier 1 lors de l’installation des skills (vérifications de licence et de sécurité). » Pour les deux versions : « Les notes de version complètes et structurées couvrant cette période seront publiées avec la v0.21.0. » ↩↩↩↩↩↩↩↩↩↩↩↩↩

  55. Notes de version de Hermes Agent v0.20.0, « The Herald Release », tag v2026.8.3, 3 août 2026, avec les tags de stabilisation v2026.8.13 et v2026.8.16. Extraits mot pour mot de la note de version : « Node 26 requis pour les programmes d’installation, la réparation et la mise à niveau » ; « les canaux brew et wheel pip/PyPI ont été abandonnés (le programme d’installation shell / Docker / Nix sont les canaux pris en charge) » ; « limite d’itérations par défaut : 90 → 500 » ; « source claude-marketplace supprimée ». La version minimale de Node a été confirmée indépendamment dans le code source du programme d’installation, dans scripts/install.sh — NODE_VERSION="26" et la garde « Node.js $(node –version) est trop ancien (Hermes nécessite Node >=26) » — dont le commentaire d’en-tête documente également la commande canonique en une ligne curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash. À noter, une contradiction : la page d’installation de la documentation indique toujours Node v22 et n’est plus à jour par rapport à ces deux sources. Niveaux de prise en charge des plateformes tirés de la page prise en charge des plateformes ; sources des skills et dépôts par défaut tirés de la page skills ; le total de 28 plateformes a été obtenu en dénombrant les entrées du tableau comparatif de la page messagerie, qui ne publie aucun total officiel. Toutes les sources ont été récupérées et vérifiées le 16 août 2026. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩

  56. Notes de version de Hermes Agent v0.19.0, « The Quicksilver Release », tag v2026.7.20, 20 juillet 2026 ; dernière version au 21 juillet 2026. Statistiques depuis la v0.18.0 : environ 2 245 commits, environ 1 065 PR fusionnées, environ 3 300 issues clôturées et plus de 450 contributeurs de la communauté. Principales améliorations des performances : réduction d’environ 80 % du TTFT au premier tour, passage d’environ 4,3 s à environ 0,9 s entre l’envoi à froid et le dispatch dans CLI/gateway/TUI/desktop/cron (PR #59332) ; raisonnement diffusé en direct par défaut avec display.show_reasoning activé et affichage de la réponse token par token (PR #59389) ; vague d’accélération d’environ 20 PR pour desktop, dont un rendu Markdown en streaming 14 fois plus rapide ; Markdown incrémental dans la TUI. Les installations pip/Homebrew sont obsolètes et affichent désormais seulement un avertissement « unsupported legacy », la suppression des publications PyPI/Homebrew étant prévue (PR #57225). Interface SecretSource modulaire avec des fournisseurs Bitwarden et 1Password, des références op://, la prise en charge de plusieurs coffres, une priorité déterministe et la provenance de chaque variable (PR #59498). Approbations intelligentes par défaut (un évaluateur LLM indépendant pour chaque commande signalée), règles de refus définies par l’utilisateur et maintenues même en mode YOLO, /deny <reason> (PRs #62661, #59164, #54518) ; réintégration de l’escalade d’approbation pre_tool_call des plugins (PR #60504). Facturation dans le terminal avec /subscription et /topup, ainsi qu’un onglet de facturation dans desktop (PR #51639). Fichiers de transcription en direct des sous-agents et délégation durable en arrière-plan (PRs #67479, #63494) ; registre des obligations de livraison dans state.db (PR #67181) ; max_async_children obsolète au profit de limites unifiées de concurrence pour la délégation (PR #56955). Routage du gateway basé sur les profiles, avec GATEWAY_MULTIPLEX_PROFILES, et déplacement de l’index de routage vers state.db, sessions.json devenant un miroir hérité facultatif (PRs #64835, #65700, #60589, #59203). Fournisseurs/modèles : prise en charge native de Fireworks AI à l’emplacement no 2 du sélecteur (PR #62593), DeepInfra, Upstage Solar, prise en charge de bout en bout de GPT-5.6 Sol/Terra/Luna + Pro (PR #61616), disponibilité générale de grok-4.5, kimi-k3 (kimi-k2.x retiré), intégration complète de Claude Sonnet 5, ainsi que enabled: false par fournisseur et excluded_providers (PR #67971) ; niveaux d’effort de raisonnement max/ultra, avec substitutions par modèle et par emplacement MoA, ainsi que /reasoning limité à la session (PRs #62650, #64458). CLI/MCP : hermes sessions export aux formats Markdown/Quarto/HTML/prompt-only/HF-trace avec --redact (PR #60186), /model --once (PR #67113), invocations empilées de slash-skills (PR #57987), --safe-mode, hermes config get/unset (PR #65540), véritable mode headless avec hermes serve (PR #55923), convention de nommage MCP mcp__server__tool (PR #52750). Le discours marketing de la version a été exclu ; les éléments annulés pendant cette période (pare-feu de sortie iron-proxy, skill dynamic-workflow et actions des fournisseurs de mémoire) n’ont délibérément pas été consignés comme livrés. Vérification effectuée dans la session en cours le 21 juillet 2026. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩

  57. Tag de publication de Hermes Agent v0.18.1 et tag de publication de la v0.18.2, 7–8 juillet 2026. Regroupements de correctifs d’infrastructure sur la branche v0.18 ; le correctif majeur de la v0.18.2 supprime l’épinglage de WhatsApp Baileys afin de passer à la version 7.0.0-rc13 pour fiabiliser les builds Docker. Les correctifs de ces deux périodes sont intégrés et entièrement documentés dans les notes de version de la v0.19.0. ↩

  58. Notes de version de Hermes Agent v0.15.1 et notes de version de Hermes Agent v0.15.2. La v0.15.1 (29 mai 2026, 01:12 UTC) est le correctif Velocity publié le jour même : correction de la boucle de rechargement avec erreur 401 du dashboard en mode loopback ; Docker exige désormais explicitement HERMES_DASHBOARD_INSECURE=1 ; les commandes MCP sans chemin (npx, npm, node) sont résolues dans les conteneurs Docker ; restauration des pastilles de source et de la barre latérale des catégories sur la page Skills ; les workers Kanban répondent à SIGTERM ; le catalogue Skills.sh est passé de 858 à 19 932 entrées grâce au sitemap. 28 commits, 21 PR fusionnées et 9 contributeurs. La v0.15.2 (29 mai 2026, 13:37 UTC) est un correctif portant uniquement sur le packaging : il inclut les manifestes plugin.yaml dans les distributions wheel et sdist afin que les installations depuis PyPI fonctionnent sans chargement parallèle du code source. 4 contributeurs. ↩

  59. Notes de version de Hermes Agent v0.15.0 et page des versions de Hermes Agent. « The Velocity release », tag v2026.5.28. Statistiques : 1 302 commits, 747 PR fusionnées et 321 contributeurs de la communauté. Réduction de 76 % de run_agent.py lors de sa refactorisation (de 16 083 à 3 821 lignes réparties dans 14 modules). Ajout de la plateforme Kanban multi-agent (décomposition automatique, topologie en essaim, substitutions de modèle par tâche, tâches planifiées et gestion des worktrees). Refonte de session_search, désormais 4 500 fois plus rapide après la suppression de la dépendance LLM. Protection contre les attaques par prompt de classe Brainworm à trois points de contrôle de sécurité. L’intégration de Bitwarden Secrets Manager remplace plusieurs clés API propres à chaque fournisseur par un seul token d’amorçage. Les bundles de skills permettent de charger plusieurs skills avec une seule slash command. Orchestrateur de sessions TUI pour gérer plusieurs sessions dans une même fenêtre de terminal. Prise en charge de Krea 2 (Medium/Large) et du plugin FAL pour la génération d’images. Une série d’intégrations xAI ajoute un plugin de recherche web, OAuth en amont, la détection des modèles retirés et des pauses TTS naturelles dans la sortie vocale. Une version corrective référencée sur GitHub corrige la boucle de rechargement avec erreur 401 du dashboard, impose que l’option Docker --insecure soit accompagnée de la variable d’environnement explicite HERMES_DASHBOARD_INSECURE=1, résout les commandes MCP sans chemin (npx, npm, node) dans Docker, corrige le rendu de la page Skills et la gestion de SIGTERM par les workers Kanban, fournit l’intégralité du catalogue Skills de 19 932 entrées grâce au sitemap, et apporte un petit ensemble de correctifs concernant la livraison des fichiers .md, la sécurité des sondes du gateway, la suppression des URL web, les capacités visuelles des kanban-workers et les valeurs par défaut des observations rétrospectives. ↩↩↩↩

  60. Notes de version de Hermes Agent v0.11.0. 23 avril 2026. « The Interface release » — réécriture complète en React/Ink de l’interface interactive CLI, avec un backend Python JSON-RPC (tui_gateway) ; architecture de transport modulaire (agent/transports/) ; prise en charge native d’AWS Bedrock via Converse API ; cinq nouveaux chemins d’inférence (NVIDIA NIM, Arcee AI, Step Plan, Google Gemini CLI OAuth, Vercel ai-gateway) ; GPT-5.5 via Codex OAuth ; QQBot comme 17e plateforme de messagerie, avec configuration par scan d’un QR code ; surface de plugins étendue (slash commands, dispatch des tools, blocage de l’exécution, transformation des résultats) ; /steer <prompt> pour réorienter l’agent en cours d’exécution en injectant du contexte après le prochain appel de tool sans rompre le cache du prompt ; hooks shell pour les événements du cycle de vie sans plugins Python ; mode de livraison directe par webhook, qui transmet les payloads directement à une conversation de la plateforme ; délégation plus intelligente avec rôles d’orchestrateur, profondeur de spawn configurable et coordination des fichiers ; système de plugins pour le dashboard, changement de thème en direct, i18n et adaptation aux appareils mobiles. Statistiques depuis la v0.9.0 : 1 556 commits · 761 PR fusionnées · 1 314 fichiers modifiés · 224 174 insertions · 29 contributeurs de la communauté. Voir également : tag de publication GitHub de Hermes Agent v0.11.0. ↩↩↩

  61. Notes de version d’Hermes Agent v0.10.0. 16 avril 2026. « La version Tool Gateway. » Intégration de Nous Tool Gateway pour les abonnés payants de Nous Portal : accès géré à la recherche web Firecrawl, à la génération d’images FAL / FLUX 2 Pro, à OpenAI TTS et à l’automatisation de navigateur Browser Use, sans clés API supplémentaires. Activation facultative pour chaque outil via le nouveau champ de configuration use_gateway. Lors de l’exécution, le gateway est utilisé en priorité par rapport aux clés API directes lorsque les deux sont configurés. Intégration complète avec hermes tools et hermes status. Remplace la variable d’environnement obsolète HERMES_ENABLE_NOUS_MANAGED_TOOLS. Implémentation par @jquesnelle (emozilla). Le CLI d’Hermes Agent reste sous licence MIT et entièrement open source ; le gateway constitue une intégration au produit d’abonnement Portal existant, et non un paywall imposé au CLI. Voir également : Nous Portal pour connaître les tarifs des abonnements et vous inscrire. ↩↩↩