Last updated on

Hermes Agent v0.19.1 : le « patch » qui a touché 4 700 fichiers et reconstruit la pile vocale


Hermes Agent v0.19.1 : le « patch » qui a touché 4 700 fichiers et reconstruit la pile vocale

Un titre comme « Hermes Agent : patch d’urgence révélé, système vocal ressuscité, 4 700 fichiers transformés » donne l’impression d’un projet en crise. Mais la page de v0.19.1 raconte autre chose : il s’agit d’une vague de sauvetage de stabilité à haute densité, pas d’un correctif de panique. Cet article ignore le clickbait et lit les notes de publication et les commits pour que vous sachiez ce qui a vraiment changé.

1. Les chiffres d’abord : 4 700 fichiers, c’est réel, pas du marketing

Les notes officielles sont directes :

De v0.19.0 (2026.7.20) à v0.19.1 (2026.7.30) : ~2 789 commits, ~4 748 fichiers modifiés, ~442 000 insertions, ~392 300 suppressions.

En dix jours, environ un sixième des fichiers du dépôt Hermes ont été touchés. « 4 700 fichiers » est donc exact : c’est le delta cumulé entre v0.19.0 et v0.19.1, pas un seul commit monstrueux. L’équipe l’a publié comme patch release, car les consommateurs en aval (images Docker, déploiements hébergés et nouvelles installations) avaient besoin d’un tag stable, et non parce que les changements étaient minimes.

Si vous découvrez Hermes, le guide d’installation présente les modes local, Docker et Desktop.

2. Pourquoi le sous-système vocal a retenu l’attention

v0.19.0 était la « Quicksilver Release » et apportait de nombreuses nouvelles fonctionnalités et une refonte de l’interface. Les grandes versions sont généralement suivies d’une vague de nettoyage où les cas limites de la nouvelle architecture apparaissent rapidement. v0.19.1 s’est concentré sur quatre domaines :

  1. La passerelle et le sous-système vocal.
  2. L’application Desktop : composer, onglets et synchronisation d’état.
  3. La fiabilité de l’installateur et de la mise à jour automatique.
  4. Les extensions de plateforme : canaux Buzz/Nostr, génération et livraison vidéo FLUX3, fiabilité des médias Telegram et régressions du mode vocal.

Les changements vocaux sont les plus visibles pour les utilisateurs : l’interruption vocale ne fonctionnait pas, les bulles vocales TTS se lisaient en 0 seconde, dire « stop » n’avait aucun effet et les mots-réveil s’armaient sans que la pile STT/TTS fonctionne. Tout cela a été corrigé systématiquement dans v0.19.1.

3. Quatre corrections vocales clés

3.1 Écoute full-duplex pendant le tour de l’agent : enfin possible d’interrompre

commit : 5081551fix(voice): full-duplex agent-turn listener

L’ancien mode vocal était effectivement half-duplex :

  • Pendant la génération de réponse du LLM, le micro ne tournait pas, donc impossible d’interrompre.
  • Pendant la lecture TTS, le listener tournait, mais calibrait le seuil de bruit VAD pendant que la voix artificielle sortait de l’enceinte. La rétroaction acoustique était intégrée au plancher de bruit, montant le seuil si haut que la parole normale ne le dépassait presque jamais.
  • Le trigger utilisait un compteur d’énergie consécutif strict qui se réinitialisait à la moindre baisse intra-mot, avalant la première syllabe.

v0.19.1 introduit tools/voice_mode.full_duplex_listen() : un seul listener couvre tout le tour de l’agent :

  • Le plancher de bruit est calibré dans le calme au début du tour et maintenu constant pendant la génération et la lecture.
  • Pendant la génération, le trigger utilise voice.barge_in_threshold_multiplier (par défaut 3,0).
  • Pendant la lecture, un minimum de 1500 RMS et un maximum de 4000 RMS empêchent l’écho de déclencher le détecteur tout en gardant la parole humaine atteignable.
  • Une fenêtre de 300 ms avec vote majoritaire (≥80 %) remplace le compteur consécutif, donc les petites baisses d’énergie à l’intérieur d’un mot ne réinitialisent plus la détection.
  • La période de grâce ne s’applique qu’au début de la lecture (voice.barge_in_grace_seconds, par défaut abaissé de 2,0 s à 0,5 s), et non pendant toute la réponse.

Pour voir les diagnostics :

HERMES_VOICE_DEBUG=1 hermes voice

3.2 VAD à fenêtre glissante : rejet adaptatif de l’écho

commit : be42470fix(voice): rolling-window VAD, duplicate render suppression, TUI gateway mirror

Avant le modèle full-duplex, l’équipe avait déjà introduit un VAD à fenêtre glissante pour atténuer l’ancien modèle half-duplex :

  • Une deque d’environ 3 secondes recalcule en continu le 90e percentile du plancher de bruit au lieu de le calibrer une seule fois.
  • Le multiplicateur est passé de 5x à 8x pour absorber les variations de volume du TTS.
  • Le plafond de 4000 RMS et un minimum de SILENCE_RMS_THRESHOLD * 2 sont conservés.
  • Une période de grâce de 2,0 s au début de la lecture évite les interruptions prématurées.
  • En mode streaming_enabled, le rendu de texte dupliqué est supprimé, pour ne pas lire deux copies de la même phrase en l’entendant.
  • La même logique est reflétée dans la passerelle TUI pour que les chemins CLI et TUI se comportent identiquement.

3.3 Phrases d’arrêt : dire ou taper « stop » termine la conversation vocale

commit : ba13132fix(voice): bare stop phrase ends the voice chat on every surface

Auparavant, seul le mode PTT classique de la CLI honorait une phrase d’arrêt parlée. v0.19.1 unifie le comportement sur toutes les surfaces :

  • hermes_cli/voice.py transmet désormais un callback on_stop_phrase explicite via start_continuous/stop_continuous.
  • La passerelle TUI émet voice.transcript {stop_phrase: true}, désactive HERMES_VOICE(_TTS) et arrête le flux TTS.
  • Le process_loop de la CLI traite un « stop » tapé en mode vocal comme une sortie du mode vocal, et non comme un message à envoyer à l’agent.
  • Le composer Desktop intercepte une commande d’arrêt tapée et termine la conversation vocale en direct par le même chemin que le bouton de fin.
  • tools/voice_mode.py fait gagner les phrases d’arrêt face au filtre d’hallucination de Whisper, donc des mots comme « bye » fonctionnent s’ils sont configurés comme phrases d’arrêt.

La phrase d’arrêt par défaut est voice.stop_phrases = ["stop"], mais vous pouvez la personnaliser :

voice:
  stop_phrases:
    - "stop"
    - "fin"
    - "bye"

3.4 Réparation du conteneur TTS : fini les bulles vocales de 0 seconde

commit : fae29c8fix(tts): class-level .ogg container repair + multi-platform opus voice detection

C’est la correction racine de la famille de bugs « la bulle vocale est cassée / dure 0 seconde » sur Telegram, Matrix, Feishu, WhatsApp et Signal :

  • Certains backends renvoient des octets MP3 ou WAV même quand le chemin de sortie est .ogg (Edge renvoie MP3, Piper WAV, xAI MP3, et certains serveurs OpenAI-compatibles ignorent response_format=opus).
  • v0.19.1 ajoute _sniff_audio_container et _repair_ogg_container dans text_to_speech_tool pour détecter le conteneur réel après la synthèse et transcodifier avec ffmpeg ou renommer le fichier avec l’extension honnête.
  • Un nouvel ensemble OPUS_VOICE_PLATFORMS couvre toutes les plateformes qui ont besoin de vraies bulles vocales Opus, et pas seulement Telegram.

Pour l’utilisateur final, cela signifie que les réponses TTS automatiques à travers les passerelles arrivent beaucoup moins souvent comme pièces jointes cassées.

3.5 Mot-réveil : armement uniquement si STT et TTS sont prêts

commit : f03bb2bfeat(wake): gate arming on STT + TTS readiness

La boucle de réveil est : mot-réveil → enregistrement → STT → agent → TTS. Armer le micro quand une moitié manque crée une expérience frustrante : « je t’ai entendu, mais il ne se passe rien ». Dans v0.19.1, check_wake_word_requirements vérifie les deux avant d’armer :

  • stt.enabled et un provider autre que none.
  • Un check_tts_requirements réussi.

Si une moitié manque, la commande refuse et indique exactement laquelle est défectueuse. Par exemple, si STT est désactivé, /wake indique que la reconnaissance vocale n’est pas prête. Cela évite une erreur classique des débutants : activer le mot-réveil sans avoir configuré la pile vocale.

4. Configuration recommandée et liste de débogage

En résumant les corrections, une configuration vocale pour v0.19.1 pourrait ressembler à ceci :

voice:
  barge_in_threshold_multiplier: 3,0   # sensibilité d'interruption full-duplex
  barge_in_grace_seconds: 0,5          # grâce au début de la lecture, abaissée de 2,0
  stop_phrases:
    - "stop"

stt:
  enabled: true
  provider: whisper  # ou votre backend réel

tts:
  provider: edge    # ou openai / elevenlabs / piper / etc.

Quand la voix se comporte mal, suivez cet ordre :

  1. Exécutez hermes tools pour confirmer que les outils vocaux sont activés.
  2. Exécutez HERMES_VOICE_DEBUG=1 hermes voice pour observer les seuils VAD et les décisions d’interruption.
  3. Vérifiez que voice.stop_phrases contient le mot souhaité.
  4. Confirmez que stt.enabled et tts.provider sont tous deux configurés.
  5. Sur Desktop, ouvrez l’onglet Capabilities et vérifiez le fournisseur TTS et le modèle de voix (v0.19.1 a ajouté les paramètres inline là-bas).

5. Autres corrections notables du patch

En dehors de la voix, v0.19.1 inclut des améliorations de stabilité qui touchent le quotidien :

  • Pièces jointes dans le composer : le TUI insère désormais les pièces jointes inline au curseur et les détache en supprimant le token.
  • Fermeture d’onglet : fermer le dernier onglet principal atterrit sur New Session au lieu d’un écran vide.
  • Liens dans le terminal : ⌥-clic n’injecte plus de séquences d’échappement, et les liens dans le terminal intégré s’ouvrent réellement.
  • Sécurité CI : le workflow principal utilise désormais des jetons GitHub App à courte durée au lieu d’un PAT longue durée, améliorant la sécurité des forks.
  • Docker / Nix : les chemins de modules et les problèmes de lockfile ont été corrigés.

Pour une comparaison côte à côte avec d’autres agents IA, consultez la page de comparaison.

6. Comment mettre à jour

v0.19.1 est disponible via l’installateur officiel ou hermes update :

# Déjà installé
hermes update

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

Après la mise à jour :

  1. Exécutez hermes version pour confirmer v0.19.1 ou ultérieur.
  2. Exécutez hermes config get voice pour vérifier que les anciens paramètres vocaux ont migré proprement.
  3. Lancez une conversation vocale continue et testez l’interruption et les phrases d’arrêt.
  4. Sur Desktop, vérifiez l’onglet Capabilities pour le fournisseur TTS et le modèle de voix.

7. Conclusion : pourquoi ce « patch » compte

Hermes Agent v0.19.1 prouve que un numéro de patch n’équivaut pas à une taille de changement. En environ dix jours, l’équipe a fusionné ~2 789 PR, touché ~4 748 fichiers et corrigé systématiquement les problèmes de voix, de bureau, d’installation et de plateformes apparus après la version « Quicksilver » v0.19.0.

Pour l’utilisateur quotidien, les gains les plus clairs sont :

  • Un mode vocal qu’on peut réellement interrompre.
  • « Stop » fonctionne, que vous le disiez ou le tapiez.
  • Les bulles vocales multi-plateformes sont plus fiables.
  • Les mots-réveil refusent de s’armer si la pile vocale est à moitié configurée.

L’équipe annonce également que v0.20.0 livrera des notes de publication complètes et curatées couvrant tout depuis v0.19.0, avec tous les points forts et les crédits contributeurs. Pour suivre l’actualité, ajoutez la page des releases à vos favoris.


Références