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 :
- Hermes identifie les messages les plus importants (récents + pertinents)
- Les échanges plus anciens sont résumés par un modèle de summarization rapide
- Le résumé remplace les messages originaux dans le contexte
- 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.
Workflow 4 : Recherche dans l'historique avec session_search
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 -creprend instantanément la dernière session ou une session nommée/newdémarre une session fraîche,/saveforce la sauvegarde- La compaction automatique gère le contexte quand il approche la limite
HERMES_HOMEpermet d'isoler les environnements de travailsession_searchpermet 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.