📑 Table des matières

05 - Hermes Agent : sessions et contexte de conversation

Hermes Agent 🟡 Intermédiaire ⏱️ 11 min de lecture 📅 2026-05-05

Introduction

Si vous avez lu nos articles précédents sur Hermes Agent, vous savez déjà lancer l'agent, le configurer avec vos modèles, découvrir ses outils disponibles et maîtriser son CLI. Mais il y a un aspect fondamental que nous n'avons pas encore couvert : la gestion des sessions et du contexte de conversation.

C'est précisément ce qui différencie un agent IA basique d'un véritable assistant persistant. Hermes Agent ne se contente pas de répondre à des questions isolées — il sauvegarde chaque conversation, vous permet de la reprendre là où vous l'avez laissée, et gère intelligemment la fenêtre de contexte pour que les échanges longs restent cohérents.

Dans ce guide, nous allons explorer en profondeur le système de sessions d'Hermes Agent, de la création à la reprise, en passant par la compression automatique du contexte et les bonnes pratiques de gestion multi-sessions.


Comment Hermes gère les sessions

Double système de stockage

Hermes Agent stocke chaque conversation dans deux systèmes complémentaires :

  • Base SQLite (~/.hermes/state.db) — métadonnées structurées avec recherche plein texte (FTS5)
  • Transcriptions JSONL (~/.hermes/sessions/) — historique brut des conversations incluant les appels d'outils

La base SQLite enregistre : l'ID de session, la plateforme source, l'utilisateur, le titre de la session, le modèle utilisé, le prompt système, l'historique complet des messages (rôle, contenu, appels d'outils), les comptes de tokens, et les horodatages.

Création automatique de session

Chaque conversation — que vous soyez en CLI, sur Telegram, Discord, Slack, WhatsApp ou tout autre plateforme — crée automatiquement une nouvelle session. Vous n'avez rien à faire : Hermes gère tout en arrière-plan.

L'ID de session suit le format YYYYMMDD_HHMMSS_hex. Les sessions CLI utilisent un suffixe hexadécimal de 6 caractères (ex : 20250305_091523_a1b2c3), tandis que les sessions via gateway utilisent 8 caractères.

Plateformes supportées

Chaque session est taguée avec sa plateforme source : cli, telegram, discord, slack, whatsapp, signal, matrix, mattermost, email, sms, et bien d'autres. Cela vous permet de filtrer et de retrouver facilement vos conversations selon leur origine.


Reprendre une session avec --continue et -c

L'une des fonctionnalités les plus utiles d'Hermes Agent est la possibilité de reprendre une conversation interrompue sans perte de contexte.

Reprendre la dernière session

# Reprendre la session CLI la plus récente
hermes --continue
hermes -c

# Avec le sous-commande chat
hermes chat --continue
hermes chat -c

Cette commande cherche la session cli la plus récente dans la base SQLite et charge son historique complet. Vous retrouvez exactement là où vous en étiez.

Reprendre par nom de session

Si vous avez donné un titre à votre session (voir plus bas), vous pouvez la reprendre par son nom :

hermes -c "mon projet backend"

S'il existe des variantes de lignée (mon projet backend, mon projet backend #2, mon projet backend #3), Hermes reprend automatiquement la plus récente.

Reprendre un ID spécifique

Pour une reprise précise, utilisez --resume ou -r :

# Par ID complet ou préfixe unique
hermes --resume 20250305_091523_a1b2c3d4
hermes -r 20250305_091523_a1b2c3

# Par titre exact
hermes --resume "refactoring auth"

Les IDs de session sont affichés quand vous quittez une session CLI, et consultables avec hermes sessions list.

Récapitulatif de reprise

Quand vous reprenez une session, Hermes affiche un panneau récapitulatif stylisé avant l'invite de saisie :

  • Messages utilisateur (bulle dorée )
  • Réponses de l'assistant (losange vert )
  • Appels d'outils résumés (ex : [3 tool calls: terminal, web_search])
  • Messages système et résultats d'outils masqués
  • Maximum 10 échanges avec indicateur ... N earlier messages ...
  • Limité à 300 caractères pour les messages utilisateur et 200 caractères / 3 lignes pour les réponses

Pour désactiver ce récapitulatif et revenir à un affichage minimal :

# ~/.hermes/config.yaml
display:
  resume_display: minimal  # par défaut : full

Lister et gérer les sessions avec hermes sessions list

Hermes offre un ensemble complet de commandes de gestion via hermes sessions.

Lister les sessions

# 20 sessions les plus récentes (par défaut)
hermes sessions list

# Filtrer par plateforme
hermes sessions list --source telegram

# Afficher plus de sessions
hermes sessions list --limit 50

Quand les sessions ont des titres, la sortie affiche le titre, un aperçu et l'horodatage relatif :

Title                    Preview                           Last Active  ID
────────────────────────────────────────────────────────────────────────────
refactoring auth         Help me refactor the auth module  2h ago       20250305_091523_a
mon projet #3            Peux-tu vérifier les tests ?      yesterday    20250404_143022_e
—                        Quel temps fait-il à Paris ?      3d ago       20250303_101500_f

Nommer une session

# Pendant une conversation (CLI ou gateway)
/title mon projet de recherche

# Afficher le titre actuel
/title

# Renommer depuis la ligne de commande
hermes sessions rename 20250305_091523_a1b2c3d4 "refactoring module auth"

Règles des titres : uniques, max 100 caractères, caractères de contrôle et RTL nettoyés automatiquement. Unicode complet supporté (emoji, CJK, accents).

Hermes génère aussi automatiquement un titre descriptif de 3 à 7 mots après le premier échange, via un modèle auxiliaire rapide en arrière-plan (aucune latence ajoutée).

Exporter une session

# Toutes les sessions en JSONL
hermes sessions export backup.jsonl

# Sessions d'une plateforme spécifique
hermes sessions export telegram-history.jsonl --source telegram

# Une session unique
hermes sessions export session.jsonl --session-id 20250305_091523_a1b2c3d4

Supprimer et nettoyer

# Supprimer une session (avec confirmation)
hermes sessions delete 20250305_091523_a1b2c3d4

# Supprimer sans confirmation
hermes sessions delete 20250305_091523_a1b2c3d4 --yes

# Purger les sessions terminées de plus de 90 jours
hermes sessions prune

# Purger avec seuil personnalisé
hermes sessions prune --older-than 30

# Stats des sessions
hermes sessions stats

Important : le pruning ne supprime que les sessions terminées. Les sessions actives sont toujours préservées.


Commandes slash : /new et /save

/new — Démarrer une nouvelle session

La commande /new (disponible en CLI et dans les plateformes gateway) démarre une nouvelle session fraîche au sein de la même instance Hermes. Utile quand vous changez de sujet sans quitter l'agent.

# Dans une conversation active
/new
# → Nouvelle session créée, historique réinitialisé

/save — Sauvegarder manuellement

La commande /save force la sauvegarde immédiate de la session en cours. Bien qu'Hermes sauvegarde automatiquement, /save est utile avant une opération risquée ou pour s'assurer que tout est persisté.


Context window et gestion automatique du contexte

Qu'est-ce que la fenêtre de contexte ?

La fenêtre de contexte (context window) est la limite de tokens que le modèle peut traiter en une seule requête. Chaque message que vous envoyez, chaque réponse de l'agent, et chaque résultat d'outil consomment des tokens.

Par exemple, avec GPT-4o (128K tokens) ou Claude Sonnet (200K tokens), vous disposez d'une fenêtre généreuse. Mais dans une conversation longue avec de nombreux appels d'outils, les tokens s'accumulent vite :

  • Un fichier de code lu = plusieurs milliers de tokens
  • Un résultat de recherche web = 500 à 2000 tokens
  • Un appel terminal avec output = potentiellement des milliers de tokens

Seuil de compression

Hermes surveille en permanence l'utilisation de la fenêtre de contexte. Lorsque le seuil configurable est atteint (par défaut 50% de la limite), la compression automatique se déclenche.

La configuration se fait dans ~/.hermes/config.yaml :

# Seuil de déclenchement de la compression (fraction de la limite)
context:
  compression_threshold: 0.5  # 50% par défaut

Compaction de contexte : quand le contexte est trop long

Comment fonctionne la compaction

La compaction est le mécanisme par lequel Hermes compresse l'historique de conversation en un résumé plus compact pour libérer de l'espace dans la fenêtre de contexte.

Le processus :

  1. Hermes identifie les messages les plus importants (récents + pertinents)
  2. Les échanges plus anciens sont résumés par un modèle de summarization rapide
  3. Le résumé remplace les messages originaux dans le contexte
  4. Une nouvelle session de continuation est créée automatiquement

Lignée de sessions

Quand une session est compactée, Hermes crée une session fille. Si la session originale a un titre, la nouvelle hérite automatiquement d'un titre numéroté :

"mon projet" → "mon projet #2" → "mon projet #3"

La session fille conserve un lien vers la session parente via le champ parent_session_id, permettant de retracer l'historique complet.

Compaction manuelle

Vous pouvez forcer la compaction à tout moment avec :

/compress   # ou /compact

Utile quand vous sentez que le contexte s'alourdit et que vous voulez repartir sur des bases fraîches sans perdre le fil de la conversation.

Système dual de compression

Hermes Agent utilise un système de compression double combiné au caching de prompts Anthropic pour optimiser l'utilisation de la fenêtre de contexte :

  • Compaction standard : résumé conversationnel qui conserve l'essentiel
  • Plugin Context Engine : remplace le compresseur intégré par une stratégie alternative (compression lossless, etc.)

Profils multiples et isolation des sessions

Sessions isolées par utilisateur et par canal

Sur les plateformes de messagerie, les sessions sont isolées automatiquement :

  • DM : une session par conversation privée
  • Groupes : par utilisateur dans le groupe (configurable)
  • Canaux : par utilisateur dans le canal

La configuration group_sessions_per_user (activée par défaut) garantit qu'Alice et Bob peuvent discuter avec Hermes dans le même canal Discord sans partager leur historique.

# ~/.hermes/config.yaml
group_sessions_per_user: true   # isolation par utilisateur (défaut)
# group_sessions_per_user: false  # session partagée pour tout le canal

Politiques de reset automatique

Les sessions gateway sont réinitialisées selon des politiques configurables :

  • idle : reset après N minutes d'inactivité
  • daily : reset à une heure spécifique chaque jour
  • both : reset au premier des deux atteints
  • none : jamais de reset automatique

Important : les sessions avec des processus en arrière-plan actifs ne sont jamais réinitialisées automatiquement.

Variable d'environnement HERMES_HOME

La variable HERMES_HOME définit le répertoire racine de la configuration et des données d'Hermes :

# Par défaut : ~/.hermes
export HERMES_HOME=~/.hermes

# Pour un environnement séparé
export HERMES_HOME=~/.hermes-work

Toutes les données (config, sessions, base SQLite) sont stockées relativement à HERMES_HOME. C'est utile pour :

  • Maintenir des environnements séparés (perso vs pro)
  • Tester une nouvelle configuration sans toucher votre setup principal
  • Isoler les sessions de différents projets

Bonnes pratiques : quand utiliser /new vs continuer une session

Quand continuer une session (-c, --continue)

  • Tâche en cours : vous travaillez sur un bug et voulez reprendre demain
  • Projet itératif : développement, refactoring, recherche progressive
  • Contexte accumulé : l'agent a déjà chargé des fichiers, compris l'architecture
  • Continuité : le prompt système et le contexte sont pertinents pour la suite

Quand utiliser /new

  • Changement de sujet radical : passer du développement à une question générale
  • Contexte pollué : trop d'appels d'outils inutiles alourdissent le contexte
  • Fresh start : vous voulez tester quelque chose sans l'historique précédent
  • Performance : un contexte allégé donne des réponses plus rapides et précises

Quand forcer /compress

  • Entre deux phases d'un même projet long
  • Avant d'entamer une sous-tâche complexe nécessitant beaucoup de contexte
  • Quand vous remarquez que l'agent perd en pertinence (signe de contexte saturé)

Exemples de workflows multi-sessions

Workflow 1 : Développement d'une feature

# Jour 1 — Démarrage
hermes
> /title feature auth JWT
> Implémente l'authentification JWT pour l'API users

# ... travail en cours ...

# Jour 2 — Reprise
hermes -c "feature auth JWT"
> Les tests échouent, corrige-les

# Jour 3 — Après une compaction
hermes -c "feature auth JWT"  # reprend automatiquement #2 ou #3
> Ajoute le refresh token

Workflow 2 : Recherche multi-sources

# Session 1 : Recherche
hermes
> /title recherche RAG
> Fais une recherche sur les meilleures pratiques RAG pour les LLM
> /save

# Session 2 : Implémentation (contexte frais)
/new
> /title implémentation RAG
> Sur la base de mes recherches RAG, implémente un pipeline vectoriel

Workflow 3 : Environnements séparés avec HERMES_HOME

# Terminal 1 — Projet perso
HERMES_HOME=~/.hermes-perso hermes
> /title blog article IA

# Terminal 2 — Projet pro
HERMES_HOME=~/.hermes-pro hermes
> /title refactoring API

Chaque environnement a sa propre base de sessions, sa propre config, et son propre historique de recherche.

L'agent dispose d'un outil session_search intégré qui effectue une recherche plein texte (FTS5) dans toutes les conversations passées :

hermes
> Est-ce qu'on a déjà discuté du déploiement Docker ?

Hermes utilise automatiquement session_search pour retrouver les conversations pertinentes, les résume via un modèle rapide, et vous présente les résultats avec le contexte environnant.

Syntaxe supportée : mots-clés simples (docker deployment), phrases exactes ("exact phrase"), booléens (docker OR kubernetes), préfixes (deploy*).


Conclusion

Le système de sessions d'Hermes Agent transforme un simple chatbot en un véritable assistant persistant. La sauvegarde automatique, la reprise transparente, et la gestion intelligente du contexte via la compaction vous permettent de mener des projets sur plusieurs jours sans perte d'information.

Les points clés à retenir :

  • Chaque conversation est une session sauvegardée automatiquement en SQLite + JSONL
  • hermes -c reprend instantanément la dernière session ou une session nommée
  • /new démarre une session fraîche, /save force la sauvegarde
  • La compaction automatique gère le contexte quand il approche la limite
  • HERMES_HOME permet d'isoler les environnements de travail
  • session_search permet de retrouver n'importe quelle conversation passée

Dans le prochain article, nous explorerons les fonctionnalités avancées d'Hermes Agent. En attendant, n'hésitez pas à consulter nos articles précédents pour approfondir vos connaissances.