Architecture local-first

Mémoire IA locale : le guide pour comprendre le local-first des agents.

Une mémoire IA locale stocke les conversations, décisions et fichiers de contexte d'un agent directement sur votre machine, sans upload automatique. Ce guide explique ce que ça contient, où c'est écrit, ce que ça coûte, et quand ajouter un coffre chiffré.

Définition

Ce qu'est vraiment une mémoire IA locale.

Une mémoire IA locale est un index persistant, stocké sur l'appareil de l'utilisateur, qui rassemble les traces d'un ou plusieurs agents : messages, appels d'outils, décisions marquées, fichiers MEMORY.md, CLAUDE.md, AGENTS.md. Elle n'est pas envoyée à un serveur tiers par défaut.

Concrètement, l'agent écrit ses sessions dans un dossier connu (par exemple ~/.claude/projects/ ou ~/.codex/sessions/), et un compagnon local — un binaire signé qui tourne à côté — lit ces fichiers, extrait les entités (fichiers touchés, commandes exécutées, décisions), et les indexe dans une base SQLite locale. Les recherches et le rappel de contexte se font sur cet index, sans requête réseau.

Cette architecture s'oppose au modèle « cloud-first » où chaque message part vers un backend distant qui devient la source de vérité. En local-first, le serveur est optionnel : il peut servir de sauvegarde chiffrée ou de canal de synchronisation multi-appareils, mais l'appareil reste autoritaire.

Fichiers réels

Où vivent les historiques Claude, Codex et Cursor.

Chaque agent CLI écrit ses traces à un emplacement fixe et documenté. Sur macOS et Linux :

  • Claude Code : ~/.claude/projects/<slug>/*.jsonl — une ligne JSON par message, plus ~/.claude/CLAUDE.md pour la mémoire globale utilisateur.
  • Codex CLI (OpenAI) : ~/.codex/sessions/2026/08/07/rollout-<uuid>.jsonl — sessions horodatées, un fichier par run.
  • Cursor : ~/Library/Application Support/Cursor/User/globalStorage/ sur macOS, base SQLite state.vscdb.
  • Fichiers de contexte projet : CLAUDE.md, AGENTS.md, .cursorrules à la racine du repo, lus à chaque session.

Vérifiez à la commande : ls -la ~/.claude/projects/ | head ou find ~/.codex/sessions -name "rollout-*.jsonl" | wc -l. Ces fichiers sont en clair sur le disque : le chiffrement dépend de FileVault, LUKS ou BitLocker au niveau OS.

Pourquoi

Trois raisons concrètes de garder la mémoire en local.

Surface d'attaque réduite

Un breach sur un fournisseur SaaS ne peut exposer que ce qui y a été envoyé. En local-first, les rollout-*.jsonl et CLAUDE.md — qui contiennent souvent des noms de clients, chemins internes, snippets de code propriétaire — n'y sont jamais.

Conformité RGPD simplifiée

Pas de transfert transatlantique, pas de sous-traitant à cartographier, pas de DPA à négocier pour les historiques d'agents. L'article 32 sur la sécurité des traitements est satisfait par le chiffrement disque au repos.

Latence nulle sur la recherche

Une requête sur 12 000 messages indexés en SQLite FTS5 répond en moins de 40 ms sur un M2. Un aller-retour Cloud + vector search coûte typiquement 300 à 900 ms selon la région.

Sync optionnelle

Chiffrer avant d'envoyer : le modèle client-side encryption.

Quand une copie distante est nécessaire — sauvegarde, synchronisation entre poste fixe et laptop, partage d'équipe — le chiffrement doit s'effectuer avant que les octets quittent l'appareil. Le serveur ne reçoit que du ciphertext et ne peut pas déchiffrer.

Le coffre Tramya applique ce modèle : une passphrase utilisateur est dérivée avec scrypt pour obtenir une clé maîtresse de 32 octets, puis chaque blob est chiffré avec AES-256-GCM (nonce aléatoire par blob). La clé maîtresse ne quitte jamais la RAM du processus local et n'est jamais envoyée au serveur.

Deux règles non négociables : (1) la clé de récupération doit être stockée hors de la machine synchronisée — gestionnaire de mots de passe, coffre matériel, ou papier dans un tiroir fermé ; (2) le serveur ne doit avoir aucun moyen technique de dériver la clé, ce qui exclut les schémas « on garde une copie chiffrée par notre KMS au cas où ». Si le fournisseur peut restaurer, un attaquant qui compromet le fournisseur peut aussi.

Questions fréquentes sur la mémoire IA locale

Local-first veut-il dire hors ligne ?

Non. Les appels au modèle (Anthropic, OpenAI, Mistral) restent en ligne. C'est la mémoire — historique, index, décisions — qui reste sur l'appareil et devient la source de vérité.

Que se passe-t-il si je réinstalle mon OS ?

Sans coffre chiffré activé, les historiques sont perdus avec le disque. Avec un coffre client-side encryption, une réinstallation restaure l'index à partir de la passphrase et de la clé de récupération.

Puis-je supprimer toute la mémoire d'un projet ?

Oui : supprimer le dossier ~/.claude/projects/<slug>/ (ou équivalent Codex/Cursor) efface la source. Si un compagnon indexe, relancer une réindexation pour purger l'index dérivé.

Une mémoire locale peut-elle être partagée entre coéquipiers ?

Oui, via un coffre synchronisé chiffré côté appareil avec une clé partagée hors bande, ou via un export explicite (JSONL, Markdown) commité dans le repo pour les décisions destinées à l'équipe.