Dossier
Memoire
Comment fonctionne la memoire de Hermes Agent, quels providers externes choisir, et comment gerer les informations conservees. Guide independant, structure et verifiable.
Sur cette page
Introduction
Hermes Agent dispose d'un systeme de memoire a deux niveaux : une memoire integree basee sur deux fichiers texte (MEMORY.md et USER.md), et la possibilite d'activer un provider de memoire externe parmi neuf options. Cette page explique le fonctionnement de chaque niveau, les differences entre eux, et comment gerer les informations conservees.
La memoire integree est toujours active. Les providers externes sont additifs : ils s'ajoutent a la memoire integree sans la remplacer. Un seul provider externe peut etre actif a la fois.
Comment fonctionne la memoire integree
La memoire integree repose sur deux fichiers stockes dans ~/.hermes/memories/ :
| Fichier | Role | Limite |
|---|---|---|
| MEMORY.md | Notes personnelles de l'agent : environnement, conventions, lecons apprises | 2 200 caracteres (~800 tokens) |
| USER.md | Profil utilisateur : preferences, style de communication, attentes | 1 375 caracteres (~500 tokens) |
Ces deux fichiers sont injectes dans le prompt systeme au debut de chaque session sous forme d'un snapshot gele. L'agent gere sa propre memoire via l'outil memory avec trois actions : add (ajouter), replace (remplacer par correspondance de sous-chaine), et remove (supprimer).
Le snapshot est capture une fois au lancement de la session et ne change jamais en cours de session. Cela preserve le cache de prefixe du LLM pour les performances. Les modifications de memoire effectuees pendant une session sont persistees sur disque immediatement, mais n'apparaissent dans le prompt systeme qu'a la session suivante.
La memoire integree inclut egalement :
- session_search : un outil de recherche plein texte (FTS5) dans l'historique des conversations, stocke dans
~/.hermes/state.db - Learning Journey (
/journey) : une timeline visuelle de tout ce que l'agent a appris, avec possibilite de supprimer ou editer des entrees
Questions couvertes
q-061: Comment fonctionne la memoire integree de Hermes Agent ?
La memoire integree fonctionne en deux couches :
MEMORY.md et USER.md : deux fichiers texte a taille limitee (2 200 et 1 375 caracteres) stockes dans
~/.hermes/memories/. Ils sont injectes comme snapshot gele dans le prompt systeme au debut de chaque session. L'agent les gere via l'outilmemoryavec les actionsadd,replace(par sous-chaine unique) etremove.session_search : toutes les conversations CLI et messaging sont stockees dans une base SQLite (
~/.hermes/state.db) avec indexation FTS5. L'agent peut rechercher des conversations passees sans appel LLM. L'outil supporte trois modes : decouverte (recherche par mot-cle), defilement (navigation dans une session), et parcours (sessions recentes).
La memoire integree est toujours active, meme quand un provider externe est configure. Les limites de caracteres sont strictes : si un ajout depasse la capacite, l'outil retourne une erreur au lieu de supprimer silencieusement des entrees. L'agent doit alors consolider ou supprimer des entrees avant de reessayer.
Source : Persistent Memory, commit b4f8c491.
q-062: Quelle difference entre MEMORY.md, USER.md et un provider de memoire externe ?
| Aspect | MEMORY.md + USER.md | Provider externe |
|---|---|---|
| Stockage | Fichiers texte locaux dans ~/.hermes/memories/ |
Variable : cloud, local, self-hosted selon le provider |
| Capacite | ~1 300 tokens au total (limite stricte) | Illimitee ou quasi-illimitee |
| Recherche | Aucune (tout est dans le prompt) | Semantique, vectorielle, par graphe de connaissances |
| Extraction | Manuelle (l'agent decide quoi sauver) | Automatique pour certains providers (Mem0, Hindsight) |
| Cout | Gratuit (tokens du prompt uniquement) | Variable : gratuit a payant selon le provider |
| Portee | Une seule session a la fois (snapshot gele) | Cross-session, modelisation utilisateur persistante |
| Activation | Toujours actif | Un seul a la fois, en complement |
MEMORY.md est le carnet de notes de l'agent : faits sur l'environnement, conventions de projet, lecons apprises. USER.md est le profil utilisateur : preferences, style de communication, niveau technique. Les deux sont geres par l'agent lui-meme.
Un provider externe ajoute des capacites que la memoire integree n'a pas : recherche semantique, graphes de connaissances, extraction automatique de faits, modelisation utilisateur cross-session. Il ne remplace jamais la memoire integree -- il la complete.
Source : Persistent Memory, Memory Providers, commit b4f8c491.
q-063: Quels providers de memoire externe Hermes Agent propose-t-il ?
Hermes Agent propose 9 providers de memoire externe (la documentation en liste 8 dans le guide principal, plus Memori) :
| Provider | Stockage | Cout | Outils | Specificite |
|---|---|---|---|---|
| Honcho | Cloud ou self-hosted | Payant (cloud) / Gratuit (self-hosted) | 5 | Modelisation utilisateur dialectique + contexte par session |
| OpenViking | Self-hosted | Gratuit (AGPL-3.0) | 6 | Hierarchie en arborescence + chargement a 3 niveaux |
| Mem0 | Cloud, self-hosted dashboard, ou OSS | Gratuit/Payant | 4 | Extraction LLM cote serveur + deduplication |
| Hindsight | Cloud ou local | Gratuit/Payant | 3 | Graphe de connaissances + synthese cross-memoire (reflect) |
| Holographic | Local (SQLite) | Gratuit | 2 | Algebre HRR + scoring de confiance |
| RetainDB | Cloud | $20/mois | 10 | Compression delta + 7 types de memoire |
| ByteRover | Local ou cloud | Gratuit/Payant | 3 | Extraction pre-compression + arbre de connaissances |
| Supermemory | Cloud ou self-hosted | Gratuit/Payant | 4 | Context fencing + ingest de session + multi-conteneur |
| Memori | Cloud | Gratuit/Payant | 5 | Memoire tool-aware + rappel structure |
La selection et configuration se fait via hermes memory setup (assistant interactif) ou manuellement dans config.yaml :
memory:
provider: openviking # ou honcho, mem0, hindsight, holographic, retaindb, byterover, supermemory, memoriSource : Memory Providers, commit b4f8c491.
q-064: Comment choisir entre Honcho, Mem0, Hindsight et OpenViking ?
Le choix depend de vos besoins en matiere de stockage, de cout et de cas d'usage :
Honcho est le meilleur choix pour les systemes multi-agents avec contexte cross-session. Il modelise l'utilisateur via un raisonnement dialectique (l'IA raisonne sur ce qu'elle sait de vous) et injecte un resume de session dans le contexte. Necessite une cle API (cloud) ou une instance self-hosted. Configuration riche : cadence de contexte, profondeur du raisonnement, mode de rappel.
OpenViking est ideal pour le self-hosting avec une navigation structuree. Il organise les connaissances en arborescence avec des URIs viking:// et charge le contexte par niveaux (L0 ~100 tokens, L1 ~2k, L2 complet). Extraction automatique en 6 categories (profil, preferences, entites, evenements, cas, patterns). Gratuit, open-source (AGPL-3.0), par Volcengine/ByteDance.
Mem0 est le choix pour une gestion de memoire sans intervention : extraction automatique de faits par LLM cote serveur, recherche semantique avec re-ranking, deduplication automatique. Trois modes : Platform (cloud Mem0), self-hosted dashboard (Docker), et OSS (in-process avec votre propre LLM + vector store). Bon compromis si vous voulez que la memoire se gere toute seule.
Hindsight est le choix pour le rappel base sur un graphe de connaissances. Il offre hindsight_reflect, un outil de synthese cross-memoire unique qu'aucun autre provider ne propose. Deux modes : cloud (cle API) ou local (PostgreSQL embarque). Retention automatique des tours de conversation avec suivi par document de session.
Tableau de decision rapide :
| Si vous voulez... | Choisissez |
|---|---|
| Du self-hosting gratuit avec navigation structuree | OpenViking |
| De la modelisation utilisateur avancee multi-agents | Honcho |
| Une gestion automatique sans configuration | Mem0 |
| Un graphe de connaissances avec synthese cross-memoire | Hindsight |
| Du 100% local sans dependance externe | Holographic |
| Une integration avec l'ecosysteme RetainDB existant | RetainDB |
| Une memoire portable avec CLI dediee | ByteRover |
| Du rappel semantique avec profilage utilisateur | Supermemory |
Source : Memory Providers, commit b4f8c491.
q-065: Comment empecher la memoire de conserver une information sensible ?
Plusieurs mecanismes existent pour controler ce que la memoire conserve :
1. Desactiver la memoire integree :
# Dans ~/.hermes/config.yaml
memory:
memory_enabled: false
user_profile_enabled: false2. Activer l'approbation des ecritures (write_approval) :
memory:
write_approval: true # false par defautQuand write_approval: true, chaque ecriture memoire -- qu'elle vienne d'un tour de conversation ou de la revue d'auto-amelioration en arriere-plan -- necessite votre approbation. Dans le CLI interactif, les ecritures vous sont presentees en ligne. Sur les plateformes de messaging, elles sont mises en attente (/memory pending) pour revue.
Commandes de revue :
/memory pending # lister les ecritures en attente
/memory approve <id> # approuver une ecriture (ou 'all')
/memory reject <id> # rejeter une ecriture (ou 'all')
/memory approval on # activer le portillon (ou 'off')3. Scanning de securite integre : les entrees de memoire sont scannees pour les patterns d'injection et d'exfiltration avant d'etre acceptees. Le contenu correspondant a des patterns de menace (injection de prompt, exfiltration de credentials, backdoors SSH) ou contenant des caracteres Unicode invisibles est bloque.
4. Suppression manuelle : utilisez hermes journey delete pour supprimer des entrees de memoire existantes, ou demandez a l'agent d'utiliser l'outil memory avec l'action remove.
5. Desactiver le provider externe :
hermes memory offSource : Persistent Memory, Security guide, commit b4f8c491.
q-066: Comment rechercher une information dans les sessions passees ?
Trois methodes sont disponibles :
1. L'outil session_search (utilise par l'agent) :
L'agent peut rechercher dans l'historique de toutes les sessions CLI et messaging via FTS5 (recherche plein texte) sur la base SQLite ~/.hermes/state.db. Trois modes d'appel :
- Decouverte : recherche par mot-cle, retourne les sessions pertinentes avec le contexte autour de la correspondance
- Defilement : navigation avant/arriere dans une session specifique
- Parcours : liste des sessions recentes
Les resultats sont des messages reels de la base -- pas de resume LLM, pas de troncature.
2. La commande CLI hermes sessions list :
hermes sessions list # Parcourir les sessions passees3. Le Learning Journey (/journey) :
hermes journey # Timeline visuelle de tout l'apprentissage
hermes journey list # Lister les identifiants des noeuds (skills et memory chunks)La difference cle entre session_search et la memoire persistante : la memoire (MEMORY.md) contient les faits critiques toujours presents dans le contexte (~1 300 tokens, cout fixe par session). session_search est pour les requetes ponctuelles du type "avons-nous discute de X la semaine derniere ?" -- recherche a la demande, sans cout de tokens jusqu'a l'appel.
Source : Persistent Memory, commit b4f8c491.
q-067: Comment supprimer ou corriger une memoire erronee ?
Pour la memoire integree (MEMORY.md / USER.md) :
L'agent peut corriger une entree avec l'outil memory :
replace: remplace une entree par son contenu mis a jour, en utilisant une sous-chaine unique pour identifier l'entree a modifierremove: supprime une entree qui n'est plus pertinente, egalement par sous-chaine unique
Exemple de remplacement :
memory(action="replace", target="memory",
old_text="dark mode",
content="User prefers light mode in VS Code, dark mode in terminal")Si la sous-chaine correspond a plusieurs entrees, une erreur est retournee demandant une correspondance plus specifique.
Via le Learning Journey :
hermes journey list # Lister les identifiants
hermes journey delete <node> # Supprimer un noeud (les skills sont archives, les memory chunks supprimes)
hermes journey edit <node> # Ouvrir le contenu dans $EDITORPour les providers externes : Chaque provider expose ses propres outils de suppression :
- Honcho :
honcho_conclude(create/delete conclusions) - OpenViking :
viking_forget(supprimer par URIviking://) - Mem0 :
mem0_delete(supprimer par ID),mem0_update(mettre a jour par ID) - Hindsight : pas d'outil de suppression dedie (gere via l'API Hindsight)
- Holographic :
fact_storeavec actionremove - Supermemory :
supermemory_forget(par ID ou meilleure correspondance)
Prevention : activez write_approval: true pour que chaque ecriture memoire necessite votre approbation avant d'etre persistee. C'est la reponse a "l'agent a sauvegarde une supposition erronee a mon sujet".
Source : Persistent Memory, Memory Providers, commit b4f8c491.
q-068: La memoire Hermes Agent est-elle partagee entre plusieurs profils ?
Non. Chaque profil possede sa propre memoire, sa propre base de sessions, et son propre repertoire de skills. Ils sont completement isoles.
L'isolation s'applique a tous les niveaux :
| Niveau | Mecanisme d'isolation |
|---|---|
| MEMORY.md / USER.md | Chaque profil a son propre $HERMES_HOME/memories/ |
| session_search | Chaque profil a sa propre base state.db |
| Providers locaux (Holographic, ByteRover) | Utilisent $HERMES_HOME/ qui differe par profil |
| Providers par config (Honcho, Mem0, Hindsight, Supermemory) | Config dans $HERMES_HOME/, chaque profil a ses propres credentials |
| Providers cloud (RetainDB) | Noms de projet derives par profil |
| Providers par env var (OpenViking) | Configures via le .env de chaque profil |
Si vous voulez creer un nouveau profil avec les memoires et sessions existantes, utilisez :
hermes profile create newname --clone-all # Copie tout depuis le profil actif
hermes profile create newname --clone-from <profil> # Copie depuis un profil specifiquePour Honcho specifiquement, les profils partagent un workspace commun mais chaque profil a son propre AI peer avec une identite et des observations independantes. Le user peer est partage entre les profils dans le meme workspace.
Source : FAQ - Profiles, Memory Providers - Profile Isolation, commit b4f8c491.
q-069: Comment sauvegarder et restaurer la memoire Hermes Agent ?
Sauvegarde complete de l'installation :
hermes backupCree un zip de tout ~/.hermes/ -- config, cles API, memoires, skills, sessions, et profils. Le fichier est sauvegarde dans ~/hermes-backup-<timestamp>.zip.
Restauration sur une nouvelle machine :
# Sur la machine source
scp ~/hermes-backup-<timestamp>.zip newmachine:~/
# Sur la nouvelle machine (apres avoir installe Hermes)
hermes import ~/hermes-backup-<timestamp>.zip
hermes setup # Verifier les cles API et la config providerExport d'un profil unique :
# Sur la machine source
hermes profile export work ./work-backup.tar.gz
# Sur la machine cible
hermes profile import ./work-backup.tar.gz workL'export de profil inclut toutes les memoires, sessions et skills, mais exclut les credentials (.env et auth.json) pour un partage securise.
Sauvegarde manuelle (rsync) :
rsync -av --exclude='hermes-agent' ~/.hermes/ newmachine:~/.hermes/Note importante : hermes backup produit un snapshot coherent meme quand Hermes est actif. L'archive restauree exclut les fichiers d'execution locaux comme gateway.pid et cron.pid.
Source : FAQ - Exporting Hermes, FAQ - hermes backup vs hermes profile export, commit b4f8c491.
q-070: Comment verifier ce qui est injecte dans le contexte depuis la memoire ?
Pour la memoire integree (MEMORY.md / USER.md) :
Le contenu injecte est visible directement dans le prompt systeme au debut de chaque session. Le format est le suivant :
══════════════════════════════════════════════
MEMORY (your personal notes) [67% -- 1,474/2,200 chars]
══════════════════════════════════════════════
User's project is a Rust web service at ~/code/myapi using Axum + SQLx
§
This machine runs Ubuntu 22.04, has Docker and Podman installed
§
User prefers concise responses, dislikes verbose explanationsL'en-tete indique :
- Le store (MEMORY ou USER PROFILE)
- Le pourcentage d'utilisation et le nombre de caracteres
- Les entrees individuelles separees par
§
Pour les providers externes :
Chaque provider injecte son propre contexte dans le prompt systeme. Le contenu et le format dependent du provider. Par exemple, Honcho injecte un resume de session, une representation utilisateur, et une carte de peer. OpenViking injecte par niveaux (L0, L1, L2).
Pour verifier l'etat de la memoire :
hermes memory status # Verifier quel provider est actif
hermes memory off # Desactiver le provider externePour voir les fichiers de memoire directement :
cat ~/.hermes/memories/MEMORY.md
cat ~/.hermes/memories/USER.mdPour auditer ce que l'agent a appris :
hermes journey # Timeline visuelle de tout l'apprentissage
hermes journey list # Liste des identifiants de noeudsNotifications de mise a jour : vous pouvez configurer le niveau de notification quand la memoire est modifiee :
display:
memory_notifications: on # off | on (defaut) | verboseLe mode verbose affiche un apercu compact de ce qui a change (par exemple 💾 Memory ➕ User prefers terse replies).
Source : Persistent Memory - How Memory Appears in the System Prompt, Memory Providers, commit b4f8c491.
Sources
- Documentation officielle Hermes Agent -- Persistent Memory
- Documentation officielle Hermes Agent -- Memory Providers
- Documentation officielle Hermes Agent -- Security guide
- Documentation officielle Hermes Agent -- FAQ
- Depot GitHub NousResearch/hermes-agent, commit b4f8c491d3452926deb7628edbdb6fe2a85ff576
Liens internes proposes
Preuves et limites
Architecture, corpus officiel et observations publiques sont ingérés au build. Une validation humaine reste nécessaire pour les affirmations publiées.