Memories
Memories
Stockage de mémoires partagé entre humains et agents LLM, auto-hébergé
Service auto-hébergéaoût 2026RustaxumSQLiteVue 3MCPDocker / Podman
Serveur de mémoires Markdown pour les workflows LLM : les agents (Claude Code…) lisent et écrivent via une API REST ou MCP, les humains parcourent et partagent les mêmes fichiers dans un explorateur web. Un journal d’événements diffusé en SSE garde tout le monde synchronisé.
But du projet
Donner à une équipe mixte, humains et agents IA, une mémoire commune par projet. Les mémoires sont de simples fichiers Markdown sur disque ; les métadonnées (utilisateurs, groupes, partages, jetons, événements) sont en SQLite. Chaque agent consulte les changements de ses collègues avant de travailler et publie régulièrement ses propres notes.
Fonctionnalités
- Trois interfaces : explorateur web, API REST (
/api), serveur MCP (/mcp), plus un flux d’événements SSE. - Outils MCP :
list_projects,list_dir,read_memory,write_memory,mkdir,delete,move,get_changes,whoami. - Explorateur : ouverture en un clic, filtre instantané, fil d’Ariane cliquable, sélection au lasso ou par appui long sur mobile, raccourcis clavier (Suppr, Ctrl+C/X/V, Ctrl+A), glisser-déposer, aperçu Markdown avec édition brute.
- Mise à jour en direct : l’explorateur se rafraîchit dès qu’un humain ou un agent modifie un fichier.
- Partage par élément ou par dossier, en lecture seule ou en lecture-écriture, à un utilisateur ou un groupe.
- Administration : gestion des utilisateurs et des groupes, liens de réinitialisation de mot de passe (envoyés par e-mail si SMTP est configuré), jetons d’API révocables.
- Fournisseurs externes : une instance Scriber peut être montée comme projet virtuel (mémoire par participant et comptes rendus de réunion).
- Secrets via Infisical (optionnel) : l’entrypoint du conteneur récupère les secrets au démarrage avec une identité machine.
Fonctionnement
Les fichiers sont rangés sous data/memories/<projet>/<utilisateur>/…. Chaque utilisateur contrôle entièrement son propre espace dans chaque projet ; rien d’autre n’est visible sans partage explicite.
Le dossier projet/<utilisateur> sert d’ancre de propriété : seul un administrateur peut le renommer, le déplacer ou le supprimer, si bien qu’un partage en écriture ne permet jamais d’injecter des mémoires dans l’espace d’un autre ni de le détruire. Ces règles sont des prédicats purs dans backend/src/store.rs, appliqués dans api.rs et couverts par une suite de tests HTTP (backend/tests/privacy.rs).
Chaque création, modification, suppression ou déplacement est inscrit dans un journal séquentiel par projet. Les humains le reçoivent en SSE ; les agents appellent get_changes avec le dernier numéro de séquence vu. Le contrat attendu d’un fournisseur externe (pagination, authentification, lecture et écriture) est figé par des tests de non-régression (scriber_contract.rs).
Installation
Avec Docker ou Podman :
cp .env.example .env # WEB_SECRET (openssl rand -hex 32) + identifiants admin
docker compose up -d # ou : podman-compose up -d
# http://localhost:8090En développement :
cd backend && cargo run # API + MCP sur :8090
cd frontend && npm install && npm run dev # Vite sur :5174
cd backend && cargo testConnexion d’un agent à partir d’un jeton créé dans Settings → API tokens :
claude mcp add --transport http memories https://VOTRE-HOTE/mcp \
--header "Authorization: Bearer VOTRE_JETON"