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.
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 tagv2026.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 viahermes modelou endpoint personnalisé dansconfig.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é :
- Résolution du fournisseur : comment les flux d’authentification sont associés aux appels API
- Hiérarchie de configuration :
config.yaml+.env+auth.json+SOUL.md+AGENTS.md - Système de tools et de toolsets : ce que l’agent peut faire, avec des autorisations propres à chaque plateforme
- Système de skills : la mémoire procédurale que l’agent crée et fait évoluer
- 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 viahermes model/hermes authou endpoint personnalisé dansconfig.yaml. Choisissez le parcours adapté à votre fournisseur, pas celui qui vous semble le plus familier. - Une seule commande suffit pour changer de fournisseur.
hermes modelvous guide de manière interactive parmi tous les fournisseurs pris en charge, y compris les connexions OAuth, tandis que/model provider:modelpermet 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.yamlcontient les paramètres et~/.hermes/.envles secrets.auth.json,SOUL.md,MEMORY.mdetskills/sont gérés directement par Hermes : vous pouvez modifierSOUL.mdmanuellement, mais l’agent lui-même intervient sur le reste.4 - Hermes succède à OpenClaw. Si vous effectuez une migration,
hermes claw migrateimporte 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,
autoles 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 emplacementauxiliary.<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 :
- 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 viaagent/prompt_builder.py(la réorganisation de septembre 2026 l’a déplacé dans le nouveau packageagent/)3 - 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 - Appelle le fournisseur à l’aide de l’un des trois modes API :
chat_completions,codex_responsesouanthropic_messages3 - Achemine tous les appels d’outils renvoyés via
model_tools.pyet le registre central des outils (tools/registry.py)3 - 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éfinitmemory.provider: hindsight,hermes updateinstalle 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 sisecurity.allow_lazy_installsvautfalse(dans ce cas, exécutezhermes plugins install hindsight). Les paramètres, les clés.envet les données de mémoire restent intacts. Consultez Fournisseurs de mémoire externes. gateway.multiplex_profiles: falsen’est plus pris en charge. Le gateway le remplace directement partrueet affiche une seule fois un avis encadré. Un profile nommé qui doit conserver son propre gateway définitgateway.standalone: truedans son fichierconfig.yaml; pour mettre hors ligne un profile desservi sans arrêter l’hôte,hermes -p <name> gateway stople 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: truefonctionne 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 serveet un seulhermes gateway runpar 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_connectionspilote 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énementsystem/init, puis des deltastext/ événementstool_use/tool_result, et enfin une enveloppe terminaleresultcontenant 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-qou--query-file(code de sortie 2 en leur absence) et ne peut pas être combinée avec--tui. Le tableau des options dehermes chatinclut cette option.51skills.auto_loadépingle des skills dans chaque session. Les noms répertoriés sousskills.auto_loaddansconfig.yamlsont 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
declinepour les messages privés non autorisés.unauthorized_dm_behavioraccepte désormais une troisième valeur en plus depairetignore:declineenvoie 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_concurrencylimite les connexions de découverte MCP. La valeur par défaut est 4, tandis que0signifie « illimité » ; chaque serveur configuré se connecte toujours, mais ils ne le font plus tous simultanément. Consultez la section Intégration MCP.51session_searchprend en charge les bornes temporelles et une nouvelle tentative de rappel. Le schéma de découverte accepte des bornesafter/before(au format ISO ou sous forme de durées relatives telles que7d) 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.51hermes sessions set-journal-mode delete|wal: le convertisseur de journal hors ligne. Il s’agit de la procédure en libre-service pour un fichierstate.dbbloqué dans le mauvais mode de journal SQLite — auparavant, il fallait exécuter manuellementPRAGMA 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 doctorrenvoie désormais vers cette commande. La lignehermes sessionsde 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) etkling-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 dansv2026.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.dba été endommagé sous la version 0.21.0 ou 0.21.1, exécutezhermes 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 vershermes 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 lestate.dbracine. Cette coordination réside désormais dans un fichiershared-state.dbdé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 --fixrefuse 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 échouersessions 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 dehermesderriè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.jsonoustate.dbd’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 deSecretSourcedans la v0.19.0, qui avait retiré les clés API des providers du fichier.enven 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 browserépertorie « toutes les entrées sélectionnées du catalogue de plugins »,hermes plugins searchinterroge le catalogue ethermes plugins installaccepte les noms du catalogue en plus des URL Git et des référencesowner/repo.hermes plugins packcomplète l’ensemble avec des « ensembles de plugins déclaratifs et partageables » : un fichierhermes-pack.yamlunique épingle un ensemble de plugins sur des SHA de commit précis,pack installles déploie sous forme d’installations épinglées ordinaires tout en maintenant le consentement aux capacités séparément pour chaque plugin,pack exportgénère un pack à partir de l’installation actuelle etpack showpermet 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 ;
/loginfonctionne depuis une conversation et les outils des connecteurs (Gmail, Linear, Notion et les autres) sont accessibles par recherche au moyen detool_search. Le premier lancement guidé de l’application de bureau est conditionné parHERMES_GUEST_ONBOARDING=1, et seule la valeur littérale1l’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.pyse trouve désormais dansagent/prompt_builder.py, tandis querun_agent.pyreste le fichier d’origine deAIAgent), les analyseurs des sous-commandes de CLI ont été déplacés dans un packagehermes_cli/subcommands/(61 modules), la liste statiqueCANONICAL_PROVIDERSa été déplacée dehermes_cli/models.pyvershermes_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), etdelegate_taska été réparti dans une douzaine de modulestools/delegate_tool_*. Les chemins d’importation internes ne constituent pas une API stable ; un nouveau fichierCOMPAT_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 unHermesPluginCompatWarningune 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 doctorethermes updateaffichent un avertissement rouge qui nomme le plugin désactivé, l’application de bureau affiche une fenêtre modale unique ethermes plugins listindique le motif. Si vous utilisez des plugins externes, vérifiez-les :hermes plugins compat <path>affiche chaque occurrence sous la formefile:line, avec l’ancien chemin -> le nouveau chemin, et renvoie le code de sortie 1 tant qu’il en reste (--jsonproduit 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éfinirplugins.allow_deprecated_imports: truedansconfig.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 tagv2026.9.21et surmain) ; 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.
/newet/resetcré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éesSessionResetPolicyexistant 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 avechermes 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}:browsercorrespond 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 configurationoauth.flowdu 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/--toolsetsfiltre désormais également les serveurs MCP configurés qui sont effectivement lancés ; une exécution ponctuelle dehermes -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 maintenantloginetreauth [--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 dedelegation.independent_completionsdivise l’appel en unités d’achèvement : les tâches partageant une même valeurgroupsont 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 avecprocess_manage(action="handoff"); les processus restants non transmis sont nommés dans le résultat sousorphaned_processes, tandis que les processus enfants terminés sans que leur sortie ait jamais été lue apparaissent sousunread_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_providersdevient une véritable option de configuration :nullhé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-900kdans 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-flashetgemini-3.8-flash,qwen/qwen3.8-max-0902etqwen3.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 Metamuse-imagepour 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é viahermes tools). Un environnement d’exécution llama.cpp géré fait des modèles locaux une voie de premier ordre (binaires officiels, un seulllama-serversupervisé, 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_hoursn’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 proposantbrowser.use_real_profilelorsqu’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-botsdans 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 commandehermes peer(ajout, affichage et suppression de peers, ainsi quedm) 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=truetransmet 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_taskse 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_childrendans 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/modelfiltre les résultats à mesure que vous saisissez du texte,/statusaffiche 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 parhermes approval-check; dans ce tag, cette fonctionnalité correspond àhermes approvals test— aucune sous-commandeapproval-checkn’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_overridesdansconfig.yamlvous 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,healetupgradeappliquent 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_fileutilise é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 webhookne 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.
!commandexécute immédiatement une commande shell sans consommer de tour du modèle ;/initanalyse le projet et crée ou met à jour un fichierAGENTS.md;/diffaffiche les modifications indexées, l’ensemble des modifications ou celles de la session depuis n’importe quelle interface ;/contextdétaille ce qui occupe la fenêtre de contexte ;/focuspropose 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-agentmigre 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}entreconfig.yamlet 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 -west 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 updatesur 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/statusplus 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 commandefleet, et l’aide de son analyseur indique qu’elle « Show the update plan and exit without changing anything »), ainsi quehermes 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_extractettool_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_reasoningest 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
SecretSourcerécupère les secrets de Bitwarden et de 1Password (référencesop://) 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.enven 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’approbationpre_tool_calldu 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 :
/subscriptionet/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_taskproduisent des fichiers de transcription en direct que vous pouvez consulter avectail -fdè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 destate.db, puis renvoyées au démarrage suivant si le gateway s’interrompt en cours d’envoi. L’option de configurationmax_async_childrenest 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é dansstate.db;sessions.jsonn’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: falsepropre à chaque fournisseur et la configurationexcluded_providersretirent les fournisseurs inutilisés des sélecteurs/modelet du processus de résolution.56 - L’intensité du raisonnement devient réglable. Les nouveaux niveaux d’effort
maxetultrasont 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/reasoninglimitée à la session dans le CLI.56 - Évolutions du CLI et de MCP.
hermes sessions exportexporte aux formats Markdown, Quarto, HTML, prompt uniquement et trace Hugging Face, avec un nettoyage facultatif via--redact;/model --oncepermet 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-modefacilite le dépannage ;hermes config get/unsetcomplètent la gestion de la configuration ;hermes servedevient un véritable backend headless ; enfin, les outils MCP adoptent la convention de nommagemcp__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$EDITORpour 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-ultraetgrok-composer-2.5-fast(le modèle de Cursor via OAuth xAI, contexte de 200k). Le modèle xAI par défaut devientgrok-build-0.1, tandis que les modèles adaptatifs Anthropic suivent désormais le contrat de raisonnement moderne (ils n’envoient jamais de champreasoning).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 modifierconfig.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_generatepeut 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’outilmemorybénéficie d’un tableauoperationspermettant d’ajouter, de remplacer ou de supprimer des éléments par lots atomiques en un seul appel ; un nouveau skillsimplify-codeexé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éenwrite_approvalremplace l’option ternairewrite_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) ethermes 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@sessioninter-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 registerpour 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 (clioutui) est ajoutée, avec l’option--clipour la remplacer ponctuellement ; la TUI bénéficie d’une commande/modelunifiée et d’une fenêtre superposée Sessions.hermes portaldevient 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-sizeethermes 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) etgemini-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 linearet 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 pertinenceenvironments:(kanban/docker/s6), qui écarte de l’index les skills propres à un contexte jusqu’à ce qu’ils soient demandés.NVIDIA/skillsfigure 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.jsonau dispositif de protection de lecture des fichiers, ajoutedocker 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-agentfonctionne 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 proxytransforme 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 invitesclarifyde 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_usefonctionne par l’intermédiaire de cua-driver pour les fournisseurs autres que Anthropic,video_generateest unifié derrière des backends extensibles etvision_analyzeenvoie 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
- Arguments CLI —
hermes chat --model anthropic/claude-sonnet-4(remplacement pour une seule exécution) - Variables d’environnement — appliquées au démarrage du processus
config.yaml— le fichier de paramètres principal.env— secrets uniquement- 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_TOOLSest supprimée dans la v0.10.0. Les outils gérés sont désormais activés au moyen du champ de configurationuse_gatewaypropre à 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=trueinjecte 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éeselfdanscontext_from. Activez ou désactivez cette option avechermes cron create ... --continuityethermes 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 silencieuseno_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-effortfixe 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 ; avecdeliver=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
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
SOUL.md(identité de l’agent — ou solution de repli intégrée si le fichier est indisponible)- Consignes de comportement tenant compte des outils
- Mémoire et contexte utilisateur (
MEMORY.md,USER.md) - Consignes relatives aux skills
- Fichiers de contexte (
AGENTS.md,.cursorrules) - Horodatage
- Indications de mise en forme propres à la plateforme
- 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.mdré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_DATEdanshermes_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 doctorethermes update, une fenêtre modale s’affiche une seule fois dans l’application de bureau et le motif figure danshermes plugins list. Pour les auteurs :hermes plugins compat <path>continue d’afficher chaque occurrence sous la formefile:line, avec ancien chemin -> nouveau chemin, et renvoie le code 1 tant qu’il en reste (ajoutez--jsonpour obtenir une sortie lisible par une machine). Les utilisateurs contraints de conserver un plugin qui n’est plus maintenu peuvent toujours définirplugins.allow_deprecated_imports: truedansconfig.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 dansv2026.9.14,v2026.9.21,v2026.9.24ainsi que dansmainau 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.pyest 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
- Plafond de sortie faible (
max_tokens) sur le serveur — SGLang limite par défaut chaque réponse à 128 tokens. Définissez--default-max-tokenssur le serveur ou configurezmodel.max_tokensdansconfig.yaml. - Épuisement du contexte — Le modèle a rempli sa fenêtre de contexte. Augmentez
model.context_lengthou 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
- Définissez
ANTHROPIC_API_KEYdans~/.hermes/.env, puis exécutezhermes chat --provider anthropic --model claude-sonnet-4-6 - Exécutez
hermes modelet sélectionnez Anthropic : Hermes utilisera le stockage d’identifiants de Claude Code lorsqu’il est disponible - 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
-
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 ». ↩↩↩
-
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 viahermes model, endpoint personnalisé dansconfig.yaml), la syntaxe de la commande slash/model(notammentcustom: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. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩ -
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 viaruntime_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. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩ -
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.yamlet.env(«config.yamlpré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 (bloccompression.*avecthreshold,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 sousauxiliary.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 emplacementsvision,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. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩ -
Nous Research, « Migrer depuis OpenClaw » dans les guides de Hermes Agent. Source du processus de migration d’OpenClaw vers Hermes. ↩↩
-
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 updateethermes 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. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩ -
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. ↩↩↩↩↩↩↩↩↩
-
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. ↩ -
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 dansconfig.yaml, le fonctionnement de la correspondance des préfixes et les commandes réservées à la messagerie (/status,/sethome,/approve,/deny,/update,/commands). ↩↩↩↩↩↩↩↩↩↩ -
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. ↩↩↩↩↩↩↩↩↩↩
-
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 viaskill_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. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩ -
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 tagv2026.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/contientbyterover,holographic,honcho,mem0,openviking,retaindbetsupermemory. ↩↩↩↩↩↩↩↩ -
Nous Research, « Personnalité et SOUL.md » dans le guide d’utilisation de Hermes Agent. Source principale pour le fonctionnement de
SOUL.md(stocké dansHERMES_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, dehelpfulàhype), les personnalités personnalisées dansconfig.yaml, le modèle de superposition/personalityet l’ordre complet d’assemblage de la pile de prompts. ↩↩↩↩↩↩↩↩↩↩↩↩ -
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:dansconfig.yaml, avec les champscommand,argsetenv. ↩ -
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
/modelsur 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. ↩↩↩↩↩ -
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. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩ -
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éalablehermes 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. ↩↩↩ -
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_retriespar tâche et tableaux multiprojets. Commande slash/goalpermettant de verrouiller un objectif entre plusieurs tours (primitive de la boucle Ralph), avec un nombre de tours configurable. Outilvideo_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 pluginenv_enablement_fn/cron_deliver_env_var; IRC et Microsoft Teams ont migré vers ce même modèle. Classe abstraiteProviderProfile+plugins/model-providers/pour des fournisseurs tiers modulaires. Reprise automatique des sessions après le redémarrage du gateway,/updateet 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 surauth.jsondans 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 avechermes debug share. Autres éléments notables : linting après écriture pour Python/JSON/YAML/TOML, mode de surveillance cronno_agentreposant 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). ↩↩↩↩↩↩↩↩↩↩↩↩ -
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_analyzesur les pixels bruts, pied de page de vérification des mutations de fichiers à chaque tour, diagnostics sémantiques LSP, outil unifiévideo_generate,computer_useavec 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.llmpour 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. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩ -
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@sessionentre 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é ethermes dashboard register). Nouvelles commandes :/undo [N], interface par défaut configurable (cli/tui,--cli),/modeldans 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 pertinenceenvironments:, dépôt approuvéNVIDIA/skillspar 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 debws_cache.jsonprotégée, ajout dedocker restart/stop/killaux 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. ↩↩↩↩↩↩↩↩ -
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 champreasoning). CLI/commandes slash :/version,/billing,hermes photon login,hermes curator run --consolidate(facultatif), interface graphique dehermes 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 avecimage_generatechez plusieurs fournisseurs, opérations atomiques par lotoperationspourmemory, skill de révision parallèlesimplify-code, booléenwrite_approvalremplaçantwrite_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. ↩↩↩↩↩↩↩↩↩↩↩ -
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. ↩↩↩↩↩↩↩↩↩↩↩ -
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 dehermes updateet 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. » ↩↩↩↩↩↩↩↩↩↩↩ -
Backends de terminal au tag
v2026.8.31(revérifiés pour la version 1.17 du guide ;agent/terminal_env_registry.pyest identique octet par octet à sa version dev2026.8.31, les informations de la docstring detools/terminal_tool.pyn’ont pas changé ettools/environments/contient toujours les 7 mêmes modules de backend, désormais accompagnés d’un utilitairepath_utils.py) : docstring du moduletools/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éevercel_sandbox« Exécuter dans des sandboxes cloud Vercel Sandbox » ; le module de backendtools/environments/vercel_sandbox.pyexiste dans ce tag aux côtés dedaytona.py,docker.py,local.py,modal.py,singularity.pyetssh.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 (sourcewebsite/docs/user-guide/features/tools.mddans ce tag) présentevercel_sandboxdans 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_sandboxet précise : « Authentifiez-vous avec les 3 élémentsVERCEL_TOKEN,VERCEL_PROJECT_IDetVERCEL_TEAM_ID. … Les environnements d’exécution pris en charge sontnode24,node22etpython3.13; Hermes utilise par défaut/vercel/sandboxcomme racine de l’espace de travail distant. » Dansv2026.8.31, le packagetools/environments/contient également l’infrastructure partagée (base.pyavec l’ABCBaseEnvironment,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. » ↩↩↩ -
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érationPlatformet les mêmes 22 dossiers d’adaptateurs). La page de documentation de Messaging Gateway (sourcewebsite/docs/user-guide/messaging/index.mddans 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.pydéfinitclass 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 quePlatform("irc")fonctionne sans modifier cette énumération. » Dans ce tag, l’arborescenceplugins/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 gratuitntfy.shou 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 binairebuzzCLI via le shell… Le trafic entrant utilise un abonnement Nostr WebSocket natif. » Les deux pages indiquent : « Exécutezhermes gateway setupet choisissez… pour bénéficier d’une procédure guidée. » ↩↩↩ -
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 dev2026.8.31).hermes_cli/models.pydéclareCANONICAL_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’authentificationoauth_device_code,oauth_external,external_process,aws_sdk,copilotetvertex(inchangé). Dans ce tag, l’arborescenceplugins/model-providers/contient 39 dossiers de fournisseurs (nebius-token-factoryetrouteront é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’authentificationapi_key— sept déclarent explicitementauth_type="api_key"(dont les deux nouveaux plugins), tandis quecommandcodeetopencode-freehéritent deauth_type: str = "api_key"depuisproviders/base.py. La page de documentation sur les fournisseurs d’IA (sourcewebsite/docs/integrations/providers.mddans le tag) présente sous forme de tableaux 45 fournisseurs nommés, ainsi qu’une ligne « Point de terminaison personnalisé » (lignes ajoutées depuisv2026.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 viahermes modelou/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. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩ -
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_SUBCOMMANDSsont inchangés depuisv2026.8.31— le frozenset est identique, avec 73 entrées — tandis quehermes_cli/_parser.pyn’a changé que danshermes chat, comme indiqué dans 40). Les options globales et leurs chaînes d’aide proviennent dehermes_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.pyn’utilise le chemin rapide que pourargv in (["--version"], ["-V"]), et le frozenset_BUILTIN_SUBCOMMANDSdehermes_cli/main.pyne contient aucune entréeversion; la référence des commandes de CLI documentehermes --version(« Afficher les informations de version »), mais pashermes version. Les descriptions des commandes correspondent aux chaîneshelp=du parseur danshermes_cli/main.pyethermes_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. Utilisezhermes authpour gérer les identifiants,hermes modelpour sélectionner un fournisseur ouhermes setuppour effectuer la configuration complète. »), avec vérification croisée par rapport au tableau des commandes de premier niveau de la documentation.hermes update --planfigure danshermes_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 commandefleetn’existe dans_BUILTIN_SUBCOMMANDS.hermes worktreeest enregistrée danshermes_cli/main.py(aide : « Auditer et récupérer les worktrees git accumulés et les branches fusionnées ») aveclist(aliasls,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/worktreecorrespond à_handle_worktree_commanddanshermes_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). » ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩ -
Commandes de Nous Portal au tag
v2026.8.31(revérifiées pour la version 1.17 du guide ;hermes_cli/portal_cli.pyest identique octet par octet à sa version dev2026.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 avechermes portal info. »hermes_cli/portal_cli.pyenregistreportal(aide : « Configurer Nous Portal (connexion, choix du modèle, Tool Gateway) ; consultez égalementportal info») aveclogin(« 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 «statusest conservé comme alias caché rétrocompatible deinfo. » La page de documentation du Tool Gateway présentehermes setup --portal # Fresh install: Nous OAuth + set Nous as provider + turn on the Tool Gateway in one goethermes portal info # Portal auth + Tool Gateway routing summary; la référence des commandes de CLI au même tag documente encorehermes portal [status|open|tools]. ↩↩↩ -
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épertoriev2026.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...mainrenvoieahead_by: 0,behind_by: 0,status: identical—maincorrespond désormais exactement au tag v0.20.6. ↩↩ -
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. » ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩ -
Compression à la balise
v2026.8.31, revérifiée àv2026.8.31pour 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.pya 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.pydéfinittail_mode: str = "lean"par défaut dansContextCompressor.__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 gardeself.tail_mode = tail_mode if tail_mode in ("legacy", "lean") else "lean".agent/agent_init.pylitcompression.tail_modeavec 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 (sourcewebsite/docs/user-guide/configuration.mdà cette balise) présente le bloccompression:avecenabled,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: 20etprotect_first_n: 3, place les paramètres du modèle de synthèse sousauxiliary.compression(model,provider,base_url) et précise : « Les anciennes configurations contenantcompression.summary_model,compression.summary_provideretcompression.summary_base_urlsont automatiquement migrées versauxiliary.compression.*lors du premier chargement (version 17 de la configuration). Aucune intervention manuelle n’est nécessaire. » La migration correspond à_migrate_to_17danshermes_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 (sourcewebsite/docs/developer-guide/context-compression-and-caching.mdà cette balise) indique dans son tableau que la valeur par défaut detail_modeestlean, 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’emplacementauxiliary.compressionest 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 dehermes modelet la propre section de la page consacrée à la compression constituent les sources plus récentes et concordantes.) ↩↩↩↩↩↩↩ -
Backends de terminal enfichables à la balise
v2026.8.31(revérifiés pour le guide v1.17 ;agent/terminal_env_registry.pyest identique octet par octet à sa version dev2026.8.31). Docstring du moduleagent/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 frozensetBUILTIN_BACKEND_NAMEScontient les sept backends ainsi que l’alias du mode internemanaged_modal: local, docker, singularity, modal, managed_modal, daytona, vercel_sandbox, ssh. La nouvelle page de documentation Plugins de fournisseurs d’environnements de terminal (sourcewebsite/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 dehermes setup, état de la sonde dans le dashboard, vérifications dehermes 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. » ↩↩↩ -
Nouvelle vérification complète à la balise
v2026.8.31(guide v1.17). Locales : l’arborescencelocales/contient 17 catalogues de messages —en.yamlplus 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_PERSONALITIESdanshermes_cli/personality.pycontient les mêmes 14 entrées, dehelpfulàhype(helpful, concise, technical, creative, teacher, kawaii, catgirl, pirate, shakespeare, surfer, noir, uwu, philosopher, hype) ; le fichier est identique octet par octet à sa version dev2026.8.27. Décomptes ayant CHANGÉ à cette balise : 39 entrées statiques dansCANONICAL_PROVIDERS(contre 38 auparavant) et 39 dossiers dansplugins/model-providers/(contre 37 auparavant) — voir 26 et 36. Décomptes inchangés : 24 membres dans l’enumPlatform(liste de membres identique dansgateway/config.py, auquel seul un champ gatewayroom_link_urla été ajouté), 22 dossiers d’adaptateurs dansplugins/platforms/, 28 lignes dans le tableau comparatif des plateformes de la documentation ;_BUILTIN_SUBCOMMANDScontient les mêmes 73 entrées (peeretworktreesont présents, toujours sansversionniapproval-check— nom employé dans les notes de version pourhermes approvals test) ;hermes_cli/_startup_fast.pyethermes_cli/portal_cli.pysont identiques octet par octet à leurs versions dev2026.8.27. ↩↩↩↩ -
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 (sourcewebsite/docs/user-guide/configuration.mdau 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 danshermes 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,autoutilise le modèle principal pour tout le monde, tandis que les remplacements définis pour chaque tâche dansconfig.yamlrestent prioritaires. » ; et, concernant l’extraction web : « (L’extraction web n’est pas une tâche auxiliaire :web_extractet 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 avecread_file— aucun LLM n’intervient.) » La liste d’emplacements faisant autorité se trouve dans le bloc de valeurs par défaut"auxiliary"dehermes_cli/config_defaults.pyau 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 comportentprovider,model,base_url,api_key,timeout,extra_bodyainsi qu’un paramètrereasoning_effortpropre à 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 blocauxiliary.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_memoriesn’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é parhermes 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é parhermes kanban decomposeet 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é parhermes profile describe <name> --autoet 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: falsedé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é parhermes profile describe --auto) »). Parcours interactif : exécutezhermes 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 dansdelegation.*au niveau supérieur, car les subagents « sont des agents enfants complets, et non des appels LLM secondaires ». ↩↩↩↩↩↩↩↩↩↩↩ -
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=truetransmet 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 profondshermes://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/modelfiltre les résultats au fil de la saisie,/statusaffiche 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. » ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩ -
Nouveaux fournisseurs dans le tag
v2026.8.31.hermes_cli/models.pyajouteProviderEntry("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 cataloguehy4-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/accueillenebius-token-factory/etrouter/, qui déclarent tous deuxauth_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’adressehttps://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é viaGET /v1/models(les comptes BYOK voient des entrées supplémentaires) ; ce profil ne fournit donc aucunfallback_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 depuisv2026.8.27: « Ramp Router |RAMP_ROUTER_API_KEYdans~/.hermes/.env(fournisseur :router; alias :ramp-router,ramp,router.com; gateway natif Responses, catalogue en direct limité au compte) » ; « Nebius Token Factory |NEBIUS_API_KEYdans~/.hermes/.env(fournisseur :nebius-token-factory; alias :nebius,nebius-tf,tokenfactory) » ; « Tencent TokenPlan |TOKENPLAN_API_KEYdans~/.hermes/.env(fournisseur :tencent-tokenplan, alias :tokenplan,tencent-lkeap; point de terminaison Anthropic Messages) » ; « Alibaba Cloud (Token Plan) |ALIBABA_TOKEN_PLAN_API_KEYdans~/.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_overridesfigure danshermes_cli/config_defaults.pyau niveau du tag ("model_overrides": {}; les entrées explicitesmodel_overrides.<provider>.<model_id>l’emportent sur le catalogue, tandis que les entrées_defaultne comblent les lacunes que pour les modèles non couverts par le catalogue). ↩↩↩↩↩↩↩↩ -
Continuité des tâches cron dans le tag
v2026.8.31. La page de documentation sur cron (sourcewebsite/docs/user-guide/features/cron.mddans le tag) indique, mot pour mot : « Définissezcontinuity=truepour 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éeselfdanscontext_from. » ; « Depuis CLI :hermes cron create "every 6h" "Scan for news" --continuity, ainsi quehermes cron edit <job_id> --continuity/--no-continuitypour 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,maxouultra. Lorsqu’il est défini, ce niveau remplace à la fois le paramètre globalagent.reasoning_effortet les paramètresagent.reasoning_overridespropres aux modèles pour les exécutions de cette tâche » ; à définir viahermes cron create/edit --reasoning-effort high. Livraison dans Bot Chat, mot pour mot : «bot-chattransmet 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 modulecron/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 decron/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_scriptoumonitor_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 silencieuseno_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. » ↩↩↩↩↩↩↩ -
Orchestration en direct des subagents dans le tag
v2026.8.31. La page de documentation sur la délégation (sourcewebsite/docs/user-guide/features/delegation.mddans 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 : «listrenvoie les enfants actifs de la conversation :subagent_id, l’objectif, le statut,running_seconds,accepting_steeret le chemin de la transcription en direct » ; «stopinterrompt 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 ;stopcontinue 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 », avecpending_steerintégré aux résultats etmissed_steersignalé lorsqu’un enfant s’est terminé avant). Valeurs par défaut :hermes_cli/config_defaults.pydéfinitdelegation.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) ») etdelegation.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 fichierconfig_defaults.pylivré 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. ↩↩ -
Vague de sécurité au tag
v2026.8.31. Fichiers d’instructions protégés : danshermes_cli/config_defaults.py,security.protected_instruction_files: Trueest la valeur par défaut (commentaire : « Écritures dans les fichiers d’instructions de l’agent (AGENTS.md/CLAUDE.md/SOUL.md/…) »), avecprotected_instruction_extra_patterns: [](fnmatch sur le nom de base) ;tools/file_tools.pyimplé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-identityest implémenté danshermes_cli/main.py—_desktop_macos_setup_tcc_identity(identity: str = "Hermes Local Signing"), « Configuration ponctuelle pourhermes 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 ↩↩↩↩ -
Modifications de l’interface CLI au tag
v2026.8.31.COMMAND_REGISTRYdanshermes_cli/commands.pyenregistreCommandDef("palette", "Open the fuzzy command palette (also Ctrl+P)", "Info", ...)etCommandDef("status", "Show session, model, token, and context info", "Session", ...)—/statusest une commande de session du registre partagé, et non une commande réservée à la messagerie._BUILTIN_SUBCOMMANDSne contient aucune entréeapproval-check(73 entrées, identiques à celles dev2026.8.27) ; l’exécution à blanc appeléehermes approval-check(#81137) dans les notes de version v0.21.0 correspond àhermes approvals test— l’aide de l’analyseur danshermes_cli/subcommands/approvals.pyindique 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. Danshermes_cli/_parser.py, seulhermes chata changé : l’aide de-q/--queryindique 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--oneshotpré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-turnsindique « Nombre maximal d’itérations d’appel d’outils par tour de conversation (par défaut : 500, ou agent.max_turns dans la configuration) ». ↩↩↩↩↩↩↩↩↩ -
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 etgit 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 estv2026.7.20..v2026.7.30, avec 2 790 commits hors fusion (mesure effectuée dans le clone local pour chaque paire adjacente à partir dev2026.3.12). Le contrôle doctor de l’entrée Dépannage se trouve danshermes_cli/doctor_config.py:330-362au niveau du tag (_drift_max_iterations_ghost) : une valeur obsolète deHERMES_MAX_ITERATIONSdans.envmasqueagent.max_turnslorsque le pont de démarrage abandonne à la suite d’une erreur antérieure d’analyse de la configuration (problème #17534), ethermes doctor --fixsupprime la ligne correspondante de.env. Vérification effectuée pendant la session actuelle le 8 septembre 2026. ↩↩↩↩↩ -
COMPAT_MANIFEST.mdau tagv2026.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 ethermes plugins compat; le plugin « se charge ; chaque résolution d’un ancien chemin émet une foisHermesPluginCompatWarning» ; à partir du 14 septembre 2026 : « avertissement rouge : plugin DÉSACTIVÉ » et « non chargé ;hermes plugins listen indique la raison » ; Desktop : « fenêtre modale affichée une seule fois ») ; l’échappatoire, mot pour mot : «plugins.allow_deprecated_imports: truedansconfig.yamlmaintient 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 danshermes_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_PROVIDERSdanshermes_cli/models_catalog_static.py:311avec 39 entrées dont les slugs sont identiques à ceux de la liste dev2026.8.31danshermes_cli/models.py(tuple statiquexaiinclus ;plugins/model-providers/contient toujours 39 dossiers), l’ancienprompt_builder.pyde premier niveau a disparu (désormaisagent/prompt_builder.py), tandis querun_agent.pyreste l’emplacement deAIAgentà 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 tagv2026.9.14,hermes_cli/plugin_compat.py:32définitCOMPAT_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, etallow_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.jsonethermes_cli/plugin_compat.pysont tous présents dansv2026.9.14ainsi que surmainau commit5d59366010(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 tagv2026.9.21et surmainau commita53b42ddea(commité le 22 septembre 2026, récupéré le même jour). Dansv2026.9.21, le contrôle et le garde-fou demeurent essentiellement inchangés :COMPAT_REMOVAL_DATEse trouve toujours dansplugin_compat.py:32,removal_in_effect()à la ligne :86, etallow_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. ↩↩↩↩↩↩↩↩↩ -
docs/session-lifecycle.mdau tagv2026.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./newet/resetcré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éesSessionResetPolicyexistant 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. » ↩↩↩↩ -
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--flowavec les choixbrowser/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 : commitf5afe8bd40« 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. ↩↩↩ -
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 à chaquegroupde 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ériodec89f3b8800« 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 : commit3c0d90e8ef« 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 dansorphaned_processes, ainsi que ceux qui se sont terminés sans que leur sortie ait jamais été lue dansunread_completions(avec la fin de leur sortie), avant quecleanupne 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 estprocess_manage(action="handoff")(enfants uniquement), qui modifieProcessSession.owner_task_idsous le verrou du registre viaprocess_registry.transfer_ownership(tools/AGENTS.md, section Délégation, au tag). Mécanisme de repli :delegation.fallback_providersdanshermes_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 danstools/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-246enregistre 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". ↩↩ -
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-astraet-profigurent dansOPENROUTER_MODELSet 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 ») etagent/model_metadata.py:1447-1462— Codex OAuth annonce 272K,gpt-6-astraest 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) », etCODEX_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èsmodel_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-flashetgemini-3.7-flash,qwen/qwen3.8-max-0902etqwen/qwen3.8-flash,meta/muse-spark-1.3et-contributor(contexte de 1M d’aprèsagent/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èlemuse-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é) », outilsweb_searchetweb_extract; le blocwebprécise que Tavily « s’utilise sans clé sur activation viahermes toolset ne fait pas partie d’un anneau ». Environnement d’exécution llama.cpp géré : le packagehermes_cli/local_runtime/(« Environnement d’exécution llama.cpp géré »), le bloc de configuration dansconfig_defaults.py:2327(« binaires officiels, un serveur supervisé » ; documentation indiquée dansuser-guide/local-models) et l’interface desktopapps/desktop/src/api/local-models.ts. Fournisseurs reposant sur des processus externes :agent/auxiliary_client.py:4740-4799(_resolve_external_process_branch, « fournisseursexternal_processde 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 danshermes_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 quehermes_cli/model_catalog.pyrespecte l’ancien paramètrettl_hours« uniquement lorsquettl_minutesconserve sa valeur par défaut ». ↩↩↩ -
Vague Desktop au tag
v2026.9.7. Mode commentaire :website/docs/user-guide/desktop.mdau 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 session8cb2bcc8c1« 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 russea922dad9d8« feat(desktop): ajout de la locale russe (ru) » +269e5bde33(enregistrerudans les tests et la documentation des locales ;apps/desktop/src/i18n/ru.tsapparaît dans cette période, tandis que le dossierlocales/de CLI conserve 17 catalogues).display.resume_last_session:hermes_cli/config_defaults.py:777, valeur par défautTrue, 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 quebrowser.use_real_profileest 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). ↩↩ -
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 échouersessions list. » Statistiques mesurées au commit04dd80a977: « 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’abordhermes doctor; il distingue désormais correctement les dommages structurels de ceux touchant les index et renvoie vershermes 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 dansgateway/hosted_rooms.py:398-426—default_db_pathfait pointer les gateways de profile vers « le fichiershared-state.dbpartagé de la RACINE plutôt que vers le fichierstate.dbprincipal », 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 dehermes sessions recoverdanshermes_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 danshermes_cli/main.pyà la versionv2026.8.31), mais n’avait pas encore été documentée dans ce guide. Coffre d’identifiants : docstring deagent/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(unLoginBackend« 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 ») etagent/vault_store.py:74-105(clés d’authentification uniquement sous forme de seeds en base32 ou d’URIotpauth://totp, rejet du HOTP fondé sur un compteur, codes générés partotp_now) ; les backendslocal.py,onepassword.pyetbitwarden.py, ainsi queagent/secret_sources/{onepassword,bitwarden,command}.py, sont tous présents au niveau du tag. Sous-analyseurs du catalogue de plugins danshermes_cli/subcommands/plugins.py: aide deinstall« 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) », avecinstall/export/show. Intégration des invités dansapps/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 quedesktopBackendSpawnEnv« 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. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩ -
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 commit9b419a2d3c: « 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 : commit5dea46d13d« 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 commit939a2f64b4« 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. ↩↩↩ -
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 commit4b8a8134009a: « 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 tagd337b736aa« chore(release): v0.21.4 (v2026.9.21) » est un enfant de4b8a8134, ce qui donne 5 072 commits hors fusion et 5 173 au total en comptant les fusions, tandis que le API de comparaison GitHub pourv2026.9.14...v2026.9.21indiquetotal_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 tagsv2026.*adjacents,v2026.8.31..v2026.9.7(5 140 avec son commit de version) arrive en tête etv2026.9.14..v2026.9.21(5 072) en deuxième position, devantv2026.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 comportementdeclinepour les messages privés non autorisés,mcp.discovery_concurrency, les bornes after/before desession_searchet 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 sonthermes-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. ↩↩↩↩↩↩ -
É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 degateway/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 UNhermes serveet UNhermes gateway runpar 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: unXDG_STATE_HOMErelatif est ignoré et la valeur de repli est~/.local/state). Parcours de l’opérateur :_host_attach_or_nonedansgateway/run.py:5466-5499affiche le message de rattachement et se termine avec le code 0 pourATTACH, refuse pourREFUSE, transmet--replaceau « processus HÔTE, quel que soit le répertoire personnel depuis lequel il a été lancé » pourREPLACE_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 avecEX_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 dansgateway/host_attach.py:ATTACH,RESCAN->ATTACH(rescan-profilessur 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 nommanage_connections(tools/connectors/tool.py:16,48,113) ;required_envpar 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 danstests/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-249dans l’analyseur de chat —--format, avec les choixtext/stream-json,textpar 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 modulehermes_cli/stream_json.py: « un objet JSON par ligne de stdout …system/init-> deltastext/tool_use/tool_result-> une envelopperesultterminale (code de sortie, texte final, statistiques de tokens). Les diagnostics etsession_idrestent sur stderr »,_TOOL_OUTPUT_CAP = 5000, sortie avec le code 2 pour les combinaisons interdites,stream_json_requesteddanshermes_cli/stream_json.py:23acceptantqueryouquery_fileavant de quitter avec le code 2 (le point d’entrée Fire danscli.py:1703-1705vérifie la requête déjà résolue) ;--query-file PATHdanshermes_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’étiquettev2026.8.19; tests du contrat danstests/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_messagevide ->DEFAULT_UNAUTHORIZED_DM_DECLINE_MESSAGE(réponse citée dans la section consacrée à l’appairage) ;DECLINE_DEDUPE_SECONDS = 24 * 3600et horodatages de refus tenant compte des alias dansgateway/pairing.py:37,565-576; résolution par plateforme et valeur par défaut d’Email dansget_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 propreunauthorized_dm_behaviorl’active explicitement (une valeur globale par défaut ne suffit pas) »). La clé elle-même, avecpair/ignoreet la règle d’Email, est antérieure à cette période (présente dansv2026.9.14,gateway/config.py:564,736-742; introduite par #1919 en mars 2026) ; seuldeclineest nouveau. Valeur par défaut effective :_get_unauthorized_dm_behaviordansgateway/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 sousplatforms.<name>sont promues dansPlatformConfig.extra(gateway/config.py:456-460, #10206), la clé de premier niveau ou la clé imbriquéegateway.unauthorized_dm_behaviorest relayée pargateway/config_loader.py:39-46,102, ethermes gateway setupécritplatforms.<name>.unauthorized_dm_behaviorau moyen dewrite_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 danshermes_cli/config_defaults.py:526;tools/mcp_tool_discovery.py:27-40(«mcp.discovery_concurrencyla 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 partests/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èsdetail» pour préserver la stabilité du schéma ; nouvelle tentative assouplie par OR danshermes_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éetests/hermes_state/test_search_or_relaxed_fallback.py. set-journal-mode : analyseur danshermes_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 dehermes_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éePRAGMA 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 doctorle recommande avec--dbpour 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 policeapps/desktop/src/app/settings/chat-font-setting.tsx(CONFIG_PATH = 'desktop.font_family', sauvegarde automatique après 550 ms), avecthemes/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 dethemes/context.tsx:279, qui remplace le token de thème--dt-font-sans; mises à jour du moteur dansapps/desktop/src/app/settings/local-models-settings.tsxet son test (un bouton « Mettre à jour le moteur » lorsque l’environnement d’exécution local géré signaleupdate_available, déclenchantinstallLocalRuntimesous la forme d’une tâcheruntime-installindiquant 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 dansapps/desktop/src/app/capabilities/plugins/plugins-tab.tsxet 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 deuninstallDiskPluginsur 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/fastet/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 ») etkling-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_audioest un véritable interrupteur) ; tests des payload danstests/plugins/video_gen/test_fal_plugin.py:641,681; ligne de la liste danswebsite/docs/reference/toolsets-reference.md:72. Développement du catalogue :plugin-catalog/à l’étiquettev2026.9.14= 9 entrées +removed.yaml, à l’étiquettev2026.9.21= 228 entrées +removed.yaml; structure des entrées d’aprèsplugin-catalog/hermes-tailscale.yaml(nom, dépôt,shade 40 caractères hexadécimaux, description, mainteneur,tier: community, catégorie, docs_url, fonctionnalités) ; modèle d’admission et de publication danshermes_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.pypublie/docs/api/plugin-catalog.json;LIVE_CATALOG_URLest récupérée et mise en cache sous~/.hermes/cache/plugin-catalog.json) ; pages du site danswebsite/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 ») etreadme.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 avecreadme: false) ; slugs des auteurs et horodatages d’ajout/mise à jour fondés sur la date du commit danswebsite/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. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩ -
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 tagf97608f178(« 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 avecgateway.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) ». ↩↩↩↩ -
É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 commit4cbf862abe« 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 dansv2026.9.21; le commit73c598e319« build: drop the hermes-agent[hindsight] extra » l’a supprimé depyproject.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 dehermes_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) « respectesecurity.allow_lazy_installs» ; cette fonction est appelée depuishermes_cli/update_cmd_deps.py:535-536etagent/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 valeurfalseexplicite est ABANDONNÉE », et lignes 43 à 44, « gateway.multiplex_profiles: false est abandonné et a été réécrit en true » (commitb936546561, 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 » (commit0238c9d740). Mise en pause : commit4c342c05de« 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.standalonepré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 listenousà la ligne 162 en est dérivée. Aucun identifiant de modèlegpt-6-terran’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 deCANONICAL_PROVIDERSà la ligne 314 donne 39 entrées (décompte AST, inchangé) ;plugins/model-providers/contient 38 dossiers dansv2026.9.21comme dansv2026.9.24, contre 39 dansv2026.9.14. Le commit998f614c7f« 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-1259conserve une erreur pouropencode-free,freeetopencode_free, qui renvoie versopencode-zenetopencode-go. Compatibilité :COMPAT_MANIFEST.md,compat_manifest.jsonethermes_cli/plugin_compat.pysont présents au niveau du tag et surmainau commitaa8a33d22d(24 septembre).git diff v2026.9.21 v2026.9.24 -- hermes_cli/plugin_compat.pyne 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 deplugins.memory.hindsightont disparu des deux manifestes (-7 / -12 lignes). ↩↩↩↩↩↩↩↩ -
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 (tagv2026.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. » ↩↩↩↩↩↩↩↩↩↩↩↩↩ -
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 lignecurl -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. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩ -
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 avecdisplay.show_reasoningactivé 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). InterfaceSecretSourcemodulaire avec des fournisseurs Bitwarden et 1Password, des référencesop://, 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’approbationpre_tool_calldes plugins (PR #60504). Facturation dans le terminal avec/subscriptionet/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 dansstate.db(PR #67181) ;max_async_childrenobsolète au profit de limites unifiées de concurrence pour la délégation (PR #56955). Routage du gateway basé sur les profiles, avecGATEWAY_MULTIPLEX_PROFILES, et déplacement de l’index de routage versstate.db,sessions.jsondevenant 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 queenabled: falsepar fournisseur etexcluded_providers(PR #67971) ; niveaux d’effort de raisonnementmax/ultra, avec substitutions par modèle et par emplacement MoA, ainsi que/reasoninglimité à la session (PRs #62650, #64458). CLI/MCP :hermes sessions exportaux 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 avechermes serve(PR #55923), convention de nommage MCPmcp__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. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩ -
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. ↩
-
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 manifestesplugin.yamldans les distributions wheel et sdist afin que les installations depuis PyPI fonctionnent sans chargement parallèle du code source. 4 contributeurs. ↩ -
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 % derun_agent.pylors 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 desession_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--insecuresoit accompagnée de la variable d’environnement expliciteHERMES_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. ↩↩↩↩ -
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. ↩↩↩ -
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 avechermes toolsethermes status. Remplace la variable d’environnement obsolèteHERMES_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. ↩↩↩