Les sessions de longue durée rattrapent enfin leur retard : la compaction reconstruit désormais toujours le prompt système

Votre « session éternelle » tourne depuis des mois : un chat persistant en Bot Mode, un canal de travail gateway, qui fait son travail chaque jour. Mais voici ce que vous n’avez peut-être pas réalisé — le prompt système dans sa tête est encore celui du jour de sa naissance. Les outils se rafraîchissent depuis le registre vivant à chaque compaction, mais le prompt système était restauré octet pour octet depuis le snapshot de session : les régimes de guidance livrés par les mainteneurs, les nouveaux blocs de prompt (comme l’horloge de deux lignes qui affiche l’heure actuelle), les descriptions d’outils renommées — elle n’en connaît aucun. Un changement fusionné le 30 août (PR #98426) corrige enfin cela : le commit de compaction reconstruit désormais toujours le prompt système avec le builder vivant. Le changement est sur main, pas encore dans une release.
Pourquoi les prompts restaient figés à la naissance
Hermes gère les contextes trop longs par compaction : condenser l’historique en un résumé et libérer de la place pour continuer. Auparavant, les outils étaient reconstruits depuis le registre vivant, mais le prompt système était restauré octet pour octet depuis le snapshot de session — deux chemins de code différents. Le contenu du prompt devenait donc périmé : guidance vieille de plusieurs mois, aucun bloc de fonctionnalités récent, des descriptions d’outils avec d’anciens noms. Pour reprendre les mots du mainteneur : « un chat éternel porterait son prompt de naissance pendant des mois pendant que son tableau d’outils évoluait ».
Le correctif : pas de détecteur de mise à jour — la reconstruction EST le détecteur
Les mainteneurs ont explicitement rejeté un « détecteur de mise à jour ». L’approche est plus radicale : chaque commit de compaction exécute le builder vivant, puis compare les octets :
- Sortie identique octet pour octet au prompt stocké → conserver l’objet chaîne ORIGINAL (l’identité d’objet est préservée, donc les caches KV/préfixe indexés dessus restent valides ; le cas courant coûte une comparaison de chaînes) ;
- Sortie différente → le prompt reconstruit gagne, et un journal de dérive l’enregistre (forme :
Compaction rebuilt a drifted system prompt (session=..., N -> M chars)).
La reconstruction est en pratique gratuite parce que le cache de préfixe est déjà mort au moment d’un commit de compaction — c’est exactement la réponse du mainteneur à « pourquoi ne pas mettre à jour le prompt système à la compaction ? ». Les sections de plugins suivent le même chemin : l’invalidation efface le snapshot figé, la reconstruction re-rend via le même chemin qu’au démarrage de session ; si le rendu d’un plugin lève une exception, on retombe sur sa dernière bonne section (fail-open, pas un gel).
Ce que cela change pour vous
- Les sessions de longue durée convergent vers le prompt actuel à leur prochaine compaction : la mémoire enregistrée en cours de vie apparaît enfin dans le prompt, la guidance diétée remplace le texte périmé, et les futurs renommages cessent de présenter la guidance à l’ancien nom à côté d’outils au nouveau nom.
- L’horloge « Conversation started » est devenue plus intelligente : les sessions compactées ou rotatives résolvent leur heure de début via la RACINE de la lignée de session — un chat éternel en Bot Mode sait quand il est né pour la première fois.
- Aucune rupture de cache en milieu de conversation : le seul point de reconstruction est la frontière de compaction déjà sanctionnée, jamais un point aléatoire en plein tour.
Pour en savoir plus sur le fonctionnement de la compression, voir notre guide du défaut de compression lean-tail et le guide d’ancrage de l’usage du contexte ; des conseils pratiques pour gérer les longues sessions figurent dans le guide de reprise de session.
Quand vous pouvez l’utiliser
Le PR #98426 a été fusionné le 30 août et n’est pas dans v0.20.6 (taggé le 27 août). Pour le voir en action : tirez le dernier main, gardez une longue session ouverte, puis lancez /compress une fois — la session adopte le dernier prompt ensuite. Pour le tableau complet de la configuration de compression (seuils de déclenchement, stratégie de queue), voir notre guide d’optimisation des tokens de contexte.
En résumé : les sessions de longue durée peuvent enfin suivre leur époque. Au lieu de porter un prompt de naissance pendant des mois, chaque compaction est désormais une mise à jour silencieuse de soi — à un coût de performance effectivement nul.