v0.13.0

Hermes Agent v0.13.0 — La Release Ténacité


Aperçu

v0.13.0 — La Release Ténacité. Publiée le 7 mai 2026. 864 commits · 588 PRs fusionnées · 829 fichiers modifiés · 128 366 insertions · 282 tickets fermés (13 P0, 36 P1) · 295 contributeurs de la communauté (co-auteurs inclus).

La Release Ténacité répond à une question avec trois mécanismes différents : comment un agent termine-t-il ce qu’il a commencé ? Avant la v0.13, Hermes était intelligent mais pas persistant — il pouvait démarrer une tâche en plusieurs étapes, rencontrer un obstacle, puis dériver silencieusement ou mourir. La v0.13 livre trois solutions imbriquées : un Kanban multi-agent durable (tableaux de tâches avec heartbeat, détection de zombies et récupération après hallucination), /goal (la boucle Ralph — verrouiller l’agent sur un objectif entre les tours), et Checkpoints v2 (la persistance d’état réécrite avec un élagage réel). Ensemble, ils font d’Hermes le premier framework d’agent open source avec des garanties d’achèvement intégrées.

C’est également la plus grande release de sécurité de l’histoire du projet — 8 correctifs P0 en une seule release. La rédaction est désormais activée par DÉFAUT. Les listes d’autorisation de rôles Discord sont limitées au serveur. WhatsApp rejette les inconnus par défaut. Les fenêtres TOCTOU sont fermées pour auth.json et MCP OAuth. La surface d’attaque de l’agent se réduit considérablement tandis que sa portée s’étend : Google Chat rejoint les 20 plateformes de messagerie, les providers deviennent une surface pluggable, et le CLI ainsi que le gateway parlent désormais sept langues.


Fonctionnalités Majeures

1. Kanban Multi-Agent — Déléguez à une Équipe d’IA Qui Termine le Travail

La fonctionnalité phare de la v0.13. Kanban transforme Hermes en un tableau de tâches multi-agent durable. Lancez un tableau, déposez-y des tâches et laissez plusieurs workers Hermes les prendre en charge, se les transmettre et les clôturer. Ce qui compte, c’est l’infrastructure : heartbeats, récupération après timeout, détection de zombies, budget de tentatives par tâche, blocage automatique en cas de sortie incomplète et une barrière de récupération après hallucination.

Créer et gérer un tableau kanban :

# Créer un nouveau tableau et basculer dessus
hermes kanban boards create project-a --name "Project A" --switch

# Ajouter des tâches
hermes kanban create "Implement OAuth flow" \
  --priority 1 \
  --body "Add OAuth 2.0 with PKCE support to the auth service"

hermes kanban create "Write integration tests" \
  --priority 2 \
  --body "Test coverage for all auth endpoints"

# Lister toutes les tâches
hermes kanban list

# Voir les statistiques du tableau
hermes kanban stats

Comment fonctionne le mécanisme de durabilité :

Lorsqu’un worker prend une tâche, il commence à envoyer des heartbeats. Si les heartbeats s’arrêtent (crash, perte de réseau, OOM), un autre worker récupère la tâche après un délai configurable. La détection de zombies identifie les workers qui semblent vivants mais ne progressent pas — ils sont marqués comme morts et leurs tâches sont redistribuées. Si une tâche échoue N fois de suite, le budget de tentatives la place dans une file de révision humaine au lieu de la faire boucler indéfiniment. Les workers qui quittent sans terminer leur tâche en cours sont auto-bloqués pour éviter les abandons silencieux.

La barrière anti-hallucination est ce qui rend ce système digne de la production, pas une simple démo. Lorsqu’un worker prétend avoir terminé une tâche, le système vérifie cette affirmation avant de l’accepter — en cherchant des preuves que le travail a réellement été effectué, pas seulement déclaré.

# hermes.config.yaml — profil de worker kanban
kanban:
  board: project-a
  worker:
    max_spawn: 5              # jusqu'à 5 workers concurrents
    heartbeat_interval: 30s
    reclaim_timeout: 120s     # délai avant récupération d'une tâche inactive
    max_retries: 3            # budget de tentatives par défaut par tâche
    auto_block_on_exit: true  # bloquer les tâches inachevées à la sortie

Vous pouvez également personnaliser les tentatives par tâche pour les tâches qui nécessitent plus (ou moins) d’essais :

hermes kanban create "Migration de données fragile" --max-retries 1
hermes kanban create "Recherche par force brute" --max-retries 10

Sous le capot, le système Kanban inclut :

  • Tableaux multi-projets — une installation Hermes, plusieurs kanbans indépendants
  • Écritures d’état atomiques — aucune corruption partielle du tableau en cas de crash
  • Notifications par plateforme sur le canal d’accueil — soyez notifié sur Telegram, Discord ou Slack lorsque les tâches changent d’état
  • Un moteur de diagnostic générique pour les signaux de détresse des tâches — les workers peuvent signaler « Je suis bloqué, voici pourquoi »
  • Intégration au tableau de bord — vue du tableau en temps réel, création de tâches inline, saisie du workspace et du chemin

2. /goal — L’Agent N’Oublie Pas Ce Que Vous Lui Avez Demandé

La boucle Ralph, désormais une primitive de premier ordre. /goal verrouille l’agent sur une cible et l’y maintient entre les tours. Si l’utilisateur tente de le faire dévier en cours de conversation, l’agent reconnaît le détour et revient à l’objectif. Si un outil échoue, il trouve un autre moyen. Si la session dure des heures, l’objectif reste épinglé.

# Définir un objectif persistant
/goal "Rechercher les 5 meilleurs outils CRM, comparer leurs tarifs et résumer le meilleur choix pour une startup de 50 personnes"

# L'agent reste verrouillé dessus entre les tours.
# Vous pouvez poser des questions sans rapport — il répondra, puis y reviendra.

Le système /goal utilise un modèle juge pour évaluer si l’objectif est atteint. Le juge s’exécute après chaque tour, évaluant les progrès par rapport à l’objectif déclaré. L’agent peut faire des détours (tâches secondaires, clarifications, échecs d’outils) mais ne peut pas abandonner définitivement l’objectif tant que le juge ne l’a pas déclaré terminé.

# Vérifier le statut de l'objectif à tout moment
/goal status

# Mettre en pause et reprendre
/goal pause
/goal resume

# Effacer et en définir un nouveau
/goal clear

/goal fonctionne avec /subgoal (prévu pour la v0.14.0) pour vous permettre d’ajouter des critères de succès en cours de route. Ensemble, ils reproduisent ce que fait un plan de projet traditionnel — un objectif plus des affinements au fil du temps.

3. Checkpoints v2 — La Persistance d’État Réécrite

L’ancien système de checkpoints accumulait des dépôts fantômes orphelins, n’avait pas de véritable élagage et grossissait sans limite. Checkpoints v2 est une réécriture complète :

  • Architecture à stockage unique — fini l’état dispersé dans plusieurs répertoires
  • Élagage réel — les anciens checkpoints sont véritablement supprimés, avec une rétention configurable
  • Garde-fous pour le disque — refuse de créer un checkpoint lorsque l’espace disque est critique
  • Aucun dépôt orphelin — chaque shadow git a un cycle de vie tracé

Combiné à la nouvelle fonctionnalité de reprise automatique du gateway, l’agent survit désormais aux redémarrages de manière transparente. Le gateway redémarre en plein milieu d’une tâche ? La conversation reprend. /update relance le processus ? Vous revenez là où vous en étiez. Rechargement des fichiers source ? La session continue.

4. Vague de Sécurité — 8 Correctifs P0

C’est la release la plus renforcée en sécurité de l’histoire d’Hermes. Huit vulnérabilités critiques corrigées en une seule release :

# Correctif Sévérité Ce qui a changé
1 Rédaction activée par DÉFAUT P0 La sortie de l’agent masque automatiquement le contenu sensible — vous ne l’activez pas, c’est activé
2 Listes d’autorisation de rôles Discord limitées au serveur CVSS 8.1 Auparavant, les rôles d’un serveur pouvaient autoriser l’accès dans un autre (contournement DM inter-serveurs)
3 WhatsApp rejette les inconnus P0 Les nouvelles connexions WhatsApp sont bloquées sauf si explicitement autorisées ; ne répond jamais en auto-chat
4 MCP OAuth TOCTOU corrigé P0 La fenêtre de vulnérabilité TOCTOU est fermée lors de la sauvegarde des identifiants OAuth
5 auth.json TOCTOU corrigé P0 Les writers d’identifiants sont renforcés contre les conditions de concurrence
6 Plancher SSRF pour les métadonnées cloud du navigateur P0 Le routage hybride bloque les endpoints de métadonnées cloud même sur les backends CDP non locaux
7 Analyses d’injection de prompt pour les tâches cron P0 Le contenu des compétences assemblées est analysé contre l’injection de prompt avant l’exécution cron
8 Rédaction de hermes debug share P0 Le contenu des logs est rédacté au moment du téléversement, pas après

Plus des renforcements supplémentaires :

  • .env, auth.json et state.db restaurés avec des permissions 0600 — lecture/écriture propriétaire uniquement
  • Intégrité SRI pour les scripts des plugins du tableau de bord
  • Serveur de nœud Meet lié à localhost uniquement, fichier de jeton restreint à la lecture du propriétaire
  • Cible d’écriture sensible étendue pour couvrir les fichiers RC du shell et les fichiers d’identifiants
  • Mode YOLO renforcé contre l’analyse de chaînes booléennes entre guillemets
  • OSV-Scanner CI + Dependabot pour la surveillance des vulnérabilités des dépendances

5. Google Chat — La 20ᵉ Plateforme de Messagerie

Hermes prend désormais en charge 20 plateformes de messagerie nativement, avec Google Chat comme dernière arrivée. La liste complète :

Telegram, Discord, Slack, WhatsApp, Signal, DingTalk, SMS (Twilio), Mattermost, Matrix, Webhook, Email (IMAP/SMTP), Home Assistant, Feishu/Lark, WeCom, Weixin, BlueBubbles (iMessage), QQBot, Yuanbao, Microsoft Teams, Google Chat.

Les 20 plateformes fonctionnent à partir d’un seul processus gateway avec une gestion unifiée des sessions, la gestion des redémarrages et le routage des fils de discussion. L’architecture du gateway inclut désormais des hooks génériques pour plugins de plateformeenv_enablement_fn et cron_deliver_env_var — pour que les adaptateurs tiers s’intègrent sans toucher au cœur. IRC et Teams ont déjà été migrés vers cette surface.

Nouvelles capacités inter-plateformes dans cette release :

  • allowed_channels / allowed_chats / allowed_rooms configurable sur Slack, Telegram, Mattermost, Matrix et DingTalk — restreignez les canaux avec lesquels l’agent peut interagir
  • Flag gateway_restart_notification par plateforme — contrôlez si chaque plateforme reçoit un message « Je suis de retour » après un redémarrage
  • Config busy_ack_enabled — supprimez les messages d’accusé « Je travaille dessus »
  • Suppression automatique des messages système de commande slash après TTL
  • Directive [[as_document]] — les compétences peuvent forcer le gateway à délivrer la sortie sous forme de document sur les plateformes qui le supportent

6. Les Providers Deviennent une Surface Pluggable

Les providers d’inférence ne sont plus codés en dur dans le cœur. Une nouvelle classe abstraite ProviderProfile et un répertoire plugins/model-providers/ en font une surface de plugin de premier ordre :

# plugins/model-providers/my_provider.py
from hermes.abc import ProviderProfile

class MyProvider(ProviderProfile):
    name = "my-custom-provider"
    display_name = "My Custom Provider"

    def list_models(self) -> list[ModelInfo]:
        ...
    
    def chat_completion(self, request: ChatRequest) -> ChatResponse:
        ...

Déposez les plugins de provider dans le répertoire, et ils apparaissent dans le sélecteur de modèles aux côtés d’OpenAI, Anthropic et de l’ensemble intégré. Aucune modification du code cœur nécessaire.

Nouveaux modèles ajoutés dans cette release :

Modèle Provider Notes
deepseek/deepseek-v4-pro OpenRouter + Nous Portal Dernier flagship DeepSeek
x-ai/grok-4.3 OpenRouter + Nous Portal Le plus récent de xAI
openrouter/owl-alpha OpenRouter Niveau gratuit
tencent/hy3-preview OpenRouter Route payante
Arcee Trinity Large Thinking OpenRouter Surcharges de température et de compression

La mise en cache des réponses OpenRouter est désormais supportée pour les modèles qui l’exposent — réduisez les coûts sur les contextes répétés.

L’OAuth Nous persiste désormais entre les profils via un stockage de jetons partagé : connectez-vous une fois, chaque profil hérite de la session. Plus besoin de se ré-authentifier pour chaque profil.

7. Internationalisation — 7 Locales

Hermes parle désormais chinois, japonais, allemand, espagnol, français, ukrainien et turc — en plus de l’anglais. Les messages statiques du gateway (texte d’aide du CLI, statut de l’agent, messages d’erreur) sont entièrement traduits. Le site de documentation gagne une locale chinoise (zh-Hans).

# hermes.config.yaml
display:
  language: fr  # ou zh, ja, de, es, uk, tr

8. Vidéo et Voix — Voir et Parler

video_analyze donne à Hermes une compréhension vidéo native sur Gemini et les modèles multimodaux compatibles :

# Analyser une vidéo depuis un fichier
hermes run "Regarde meeting-recording.mp4 et résume les décisions prises"

# Depuis une URL
hermes run "Analyse https://example.com/demo.mp4 — quel est le workflow présenté ?"

xAI Custom Voices débarque en tant que provider TTS avec le support du clonage vocal. Enregistrez un échantillon vocal et Hermes répondra avec votre voix — ou toute voix que vous fournissez.

9. Delta Linting — L’Agent Vérifie Ses Propres Écritures

Après chaque opération write_file ou patch, Hermes exécute désormais des linters intégrés pour Python, JSON, YAML et TOML. Les erreurs de syntaxe remontent immédiatement au lieu d’être propagées en aval :

WRITE src/auth.py
  ✓ Syntaxe OK (Python 3.12)
  ✓ Vérification d'import réussie

WRITE config.json
  ✗ Erreur de syntaxe : Jeton inattendu à la ligne 14, colonne 3

Fini la découverte d’une syntaxe cassée dix tours plus tard quand vous essayez d’exécuter le code.


Nouveaux Outils et Commandes Intégrés

Outil / Commande Description Utilisation
/goal Suivi d’objectif persistant entre les tours (boucle Ralph) /goal "Rechercher X et résumer"
/goal status Vérifier la progression de l’objectif actuel /goal status
/goal pause / /goal resume Mettre en pause ou reprendre la poursuite de l’objectif /goal pause
/goal clear Effacer l’objectif actuel /goal clear
video_analyze Compréhension vidéo native sur modèles multimodaux video_analyze chemin/vers/video.mp4
hermes curator archive Archiver les compétences curator hermes curator archive
hermes curator prune Élaguer les entrées curator anciennes/consolidées hermes curator prune
hermes curator list-archived Lister toutes les entrées archivées hermes curator list-archived
[[as_document]] Directive de compétence — délivrer la sortie sous forme de document Ajouter [[as_document]] dans le frontmatter de la compétence
transform_llm_output Hook de plugin — remodeler/filtrer la sortie LLM Implémenter dans le plugin
X-Hermes-Session-Key En-tête API pour un périmètre de mémoire de session stable Passer via l’en-tête HTTP
no_agent mode cron Chien de garde script-only — exécuter des scripts sans agent Définir no_agent: true dans la config de la tâche cron
Cache control OpenRouter Mise en cache explicite pour les modèles compatibles Via cache: true dans la config du provider

Améliorations

Agent Principal et Conversation

  • Directive de compétence [[as_document]] — les compétences peuvent forcer le gateway à délivrer la sortie sous forme de document téléchargeable au lieu de texte inline
  • Hook de plugin transform_llm_output — nouveau hook de cycle de vie qui permet aux plugins de remodeler ou filtrer la sortie LLM avant qu’elle n’atteigne la conversation ; utile pour les réducteurs de fenêtre de contexte et les filtres de contenu
  • Nombre de compressions de contexte affiché dans la barre de statut (CLI + TUI) — voyez combien de fois le contexte a été compressé
  • Cache get_tool_definitions isolé — déduplique l’injection LCM et évite les requêtes redondantes de schémas d’outils
  • Garde-fous de boucle d’appel d’outils avec avertissement préalable — l’agent avertit avant d’entrer dans des boucles infinies d’outils au lieu de tourner silencieusement
  • Rupture des boucles permanentes de réponse vide — les queues d’outils orphelines ne causent plus de cycles infinis de réponse vide
  • ContextVars propagées aux threads workers concurrents des outils
  • Affichage des résumés de révision d’auto-amélioration dans le CLI, le TUI et le gateway
  • Les estimations de jetons incluent désormais le prompt système + les schémas d’outils pour des déclencheurs de compression précis

Listes d’Autorisation par Plateforme

  • allowed_channels (Slack), allowed_chats (Telegram), allowed_rooms (Mattermost, Matrix), et allowed_robots (DingTalk) — restreignez l’interaction de l’agent à des canaux spécifiques
  • gateway_restart_notification par plateforme — contrôle granulaire des messages post-redémarrage
  • busy_ack_enabled — supprimez les messages d’accusé « Je travaille dessus »
  • Nettoyage automatique des bulles de progression temporaires

Durabilité des Sessions

  • Le gateway reprend automatiquement les sessions interrompues après redémarrage — aucune conversation perdue
  • Les invites de mise à jour en attente préservées entre les redémarrages
  • Les cibles de fil de discussion du canal d’accueil préservées entre les notifications de redémarrage
  • Routage des fils de discussion préservé depuis les sources de session actives en cache
  • Métadonnées de l’assistant préservées lors du branchement des sessions
  • Type de document préservé lors de la fusion des événements en file d’attente

Curator (de la v0.12, mûri dans la v0.13)

  • hermes curator archive — archiver les entrées curator pour le stockage à long terme
  • hermes curator prune — nettoyer les entrées anciennes, consolidées ou orphelines
  • hermes curator list-archived — voir les entrées archivées
  • hermes curator run manuel synchrone — voir les résultats immédiatement sans scrutation
  • Protégé contre l’écrasement des compétences groupées et du hub

MCP (Model Context Protocol)

  • Transport SSE avec transfert OAuth et sse_read_timeout augmenté
  • Tentatives de transport sur tuyau obsolète traitées comme session expirée (reconnexion automatique)
  • Les résultats d’outils image apparaissent comme balises MEDIA au lieu d’être silencieusement ignorés
  • Keepalive périodique sur les attentes de cycle de vie de longue durée
  • Reconnexion automatique sur les sessions terminées
  • Coercition numérique défensive des arguments d’outils dans mcp_serve
  • Stubs d’utilitaires conditionnés aux capacités annoncées par le serveur

Tableau de Bord Kanban

  • Saisie du type de workspace et du chemin dans la création de tâche inline
  • Bascule de notification par plateforme pour les alertes du canal d’accueil
  • Zone de texte multiligne pour les titres de tâches
  • Les tableaux filtrent par tenant sélectionné
  • L’épinglage du tableau dans le tableau de bord prévaut sur le fichier courant du serveur

QQBot

  • Claviers d’approbation natifs — boutons inline Approuver/Refuser pour l’autorisation des outils
  • Téléversement fragmenté pour les fichiers volumineux
  • Support des pièces jointes citées

TUI et CLI

  • 100 nouveaux conseils de démarrage CLI couvrant cron, kanban, curator, plugins et flags moins connus
  • Le sélecteur /model correspond à hermes model avec authentification inline pour tous les providers
  • Sections repliables dans la bannière de démarrage (compétences, prompt système, MCP)
  • /new accepte un nom de session optionnel : /new ma-session-refacto
  • hermes update --yes/-y pour ignorer les invites interactives

Tableau de Bord

  • Page Plugins — gérez, activez/désactivez et vérifiez le statut d’authentification de tous les plugins
  • Page de gestion des profils — créez, modifiez et supprimez des profils depuis l’interface web
  • Tri interactif des colonnes dans les tableaux d’analyse
  • Thème default-large avec une taille de police de base de 18px
  • Support reverse-proxy via l’en-tête X-Forwarded-Prefix
  • Lancement en tant que processus secondaire via HERMES_DASHBOARD=1 dans Docker

Outils Web

  • SearXNG livré comme backend de recherche natif
  • Sélection de backend par capacité — choisissez différents backends pour la recherche, l’extraction et la navigation

ACP (VS Code / Zed / JetBrains)

  • /steer commande slash — dirigez l’agent en vol
  • /queue commande slash — mettez en file d’attente des tâches de suivi
  • Persistance atomique des sessions via replace_messages
  • Métadonnées de raisonnement de l’assistant préservées lors de la persistance des sessions
  • Traduction Windows cwd pour les sessions WSL

Sécurité et Fiabilité

Corrections de Bugs Critiques

  • Crash du CLI au démarrage — Invalid key 'c-S-c' (P0) : prompt_toolkit ne supporte pas le modificateur Shift ; le raccourci a été supprimé
  • Audit de fuite de fd CLOSE_WAIT : keepalive httpx + fuite WhatsApp aiohttp + hygiène Feishu — tous corrigés
  • Le gateway crée AIAgent avec une clé API OpenRouter vide lorsque OPENROUTER_API_KEY est absente — les providers de secours sont désormais correctement honorés
  • Révision en arrière-plan + curator protégés contre l’écrasement des compétences groupées/du hub
  • Sessions fantômes de continuation de compression TUI avec métadonnées incomplètes — corrigé
  • hermes mcp add lance silencieusement le chat au lieu d’enregistrer le serveur MCP — corrigé
  • Propagation de l’exécution de l’agent de révision en arrière-plan — le provider/modèle/identifiants héritent désormais réellement du parent
  • Chemins d’hôte des documents entrants traduits en chemins de conteneur pour le backend Docker
  • Condition de concurrence du gateway Matrix entre l’auto-rédaction et la livraison de messages avec les modèles à haute vitesse — corrigé
  • /new pendant une session d’agent active n’envoie jamais de réponse sur Telegram — corrigé
  • Config.yaml l’emporte sur .env pour les paramètres agent/affichage/fuseau horaire
  • Le SHA HEAD de Git utilisé pour la vérification de code obsolète, pas les mtimes des fichiers
  • Les arrêts du service Plan gérés sans fausses erreurs fatales
  • Redémarrage automatique des fichiers source quand les fichiers changent sous le gateway

Renforcement de WhatsApp

En plus du correctif P0 de rejet des inconnus :

  • Chargement du canal d’accueil depuis les variables d’environnement
  • Ne jamais répondre en auto-chat (empêche l’amplification en boucle)

Fiabilité des Plateformes

  • Le gateway réinitialisé en cas d’échec avant chaque redémarrage de secours — empêche les états de gateway bloqués
  • Marqueurs de redémarrage atomiques + décalage de verrouillage d’exécution Windows
  • Hygiène d’arrêt et de redémarrage — délai de vidange, fausses erreurs fatales, log de succès
  • PIDs ancêtres exclus de l’analyse des processus du gateway
  • Distribution des alias de commandes rapides déplacée avant les built-ins (empêche les écrasements accidentels)
  • Autres profils affichés dans gateway status pour éviter la confusion

Sécurité des Fichiers

  • Restaurer .env / auth.json / state.db avec les permissions 0600
  • Serveur de nœud Meet lié à localhost uniquement
  • Fichier de jeton restreint à la lecture du propriétaire
  • Cible d’écriture sensible étendue aux fichiers RC du shell et fichiers d’identifiants

Mise à Niveau

hermes update

Pour les nouvelles installations, consultez le guide d’installation.


Changelog complet sur GitHub

← Hermes Agent Changelog