# Modèle de mémoire

Comprenez les faits durables, les décisions, les transferts et la traçabilité des sources avant d'enregistrer des mémoires.

- Canonical: https://docs.xmemo.dev/fr/docs/concepts/memory-model
- Locale: fr-FR
- Content-Locale: fr-FR
- Canonical-Content-Digest: 9ffe2da573b664ce4e37254715ed959c138dfd6b89262c6d0a1bda8dd473291a
- Edition-Digest: 6a77addc470b95b22c8e1852c528efaac0a95bd346016c46cc9e23f5caa9a3fb
- Source-Revision: sha256:310bf66a9ffcf2384ebc6400fad1b1da9d01fa0cdadc9d129c9084e880334e73

## Ce que stocke XMemo

XMemo conserve le contexte durable qui reste pertinent après la clôture de la discussion ou de la tâche en cours : faits de projet, décisions, préférences, corrections et notes de passage de relais. Le bruit conversationnel éphémère, les réponses ponctuelles et les sorties brutes d'outils ne doivent pas être conservés en mémoire.

- semantic — faits durables et décisions qui demeurent valables d'une session à l'autre.
- episodic — événement survenu, associé à un instant précis d'une tâche ou d'une session.
- procedural — méthode d'exécution d'une tâche dans le cadre de ce projet.
- working — état actif de la tâche actuellement en cours d'exécution.
- identity — informations stables relatives au propriétaire ou à l'agent lui-même.

## Écrire une mémoire durable

Une écriture durable requiert le contenu, un chemin d'accès logique qui le rattache à un projet ou à un espace de noms, ainsi que le type de mémoire. Le chemin correspond au critère de filtrage utilisé lors des rappels ultérieurs.

```ts
remember({
  content: "Use OAuth for hosted ChatGPT connections.",
  path: "projects/memory-os/decisions"
})
```

## Les types de mémoire dans le SDK

MemoryCandidate.memory_type accepte le même ensemble de valeurs via le TypeScript SDK, assurant qu'un événement d'agent normalisé véhicule le type sous lequel il doit être enregistré.

```ts
import { normalizeAgentEvent, toMemoryCandidate } from '@xmemo/client';

const event = normalizeAgentEvent(
  { type: 'command_completed', command: 'pytest', exit_code: 0, output: '12 passed' },
  { source: 'shell', defaultAgentId: 'codex' },
);

console.log(toMemoryCandidate(event).memory_type); // episodic
```

## Visite interactive de la provenance et du cycle de vie (Démo synthétique)

Une démonstration étape par étape et vérifiable du cycle de vie montrant la création de mémoire, la récupération multi-client, la correction utilisateur en temps réel avec remplacement de version (v1 -> v2), la protection du budget de jetons, le marquage de suppression réversible et le démantèlement synthétique isolé. Chaque étape s'appuie sur des preuves d'exécution jetables sans aucune exposition de mémoires utilisateur réelles :

- Étape 1 [STATE_1_CREATED_ACTIVE_V1] : L'agent A (Claude Desktop) écrit la préférence initiale avec un auteur immuable, un hachage d'instance et des métadonnées d'appareil via tools.py::remember — Reçu : Statut 200 OK, demo_mem_lifecycle_001@v1, actif — Statut : [SOURCE_BACKED_PUBLIC_CONTRACT (VERIFIED)] — Limite : [DEMO_DATA: SYNTHETIC].
- Étape 2 [STATE_2_ACCESSED_ATTRIBUTED] : L'agent B (Codex CLI) dans la même portée autorisée récupère immédiatement la mémoire avec reçu de citation et zéro dérive multi-client via tools.py::recall — Reçu : Statut 200 OK, cité demo_mem_lifecycle_001@v1 — Statut : [SOURCE_BACKED_PUBLIC_CONTRACT (VERIFIED)] — Limite : [DEMO_DATA: SYNTHETIC].
- Étape 3 [STATE_3_CORRECTED_SUPERSEDED_V2] : L'utilisateur corrige la salle et l'heure de réunion via tools.py::update_memory. VersionController crée un instantané immuable de v1 avec status='superseded' et passe l'enregistrement actif à v2 — Reçu : Statut 200 OK, v2, parent v1, diff : Room Orion -> Room Polaris — Statut : [SOURCE_BACKED_PUBLIC_CONTRACT (VERIFIED)] — Limite : [DEMO_DATA: SYNTHETIC].
- Étape 4 [STATE_4_RETRIEVAL_FILTERED] : La requête recall ultérieure sélectionne uniquement v2 active tandis que v1 obsolète est strictement filtrée de la fenêtre de contexte LLM pour éviter les hallucinations et préserver le budget de jetons — Reçu : Statut 200 OK, v2 sélectionnée, v1 remplacée exclue — Statut : [SOURCE_BACKED_PUBLIC_CONTRACT (VERIFIED)] — Limite : [DEMO_DATA: SYNTHETIC].
- Étape 5 [STATE_5_TOMBSTONE_DELETED] : Le propriétaire marque le fait comme supprimé via tools.py::forget. Il est immédiatement exclu des requêtes candidates et déplacé vers la corbeille avec action de restauration — Reçu : Statut 200 OK, statut : deleted, nombre de candidats : 0 — Statut : [SOURCE_BACKED_PUBLIC_CONTRACT (VERIFIED)] — Limite : [DEMO_DATA: SYNTHETIC].
- Étape 6 [STATE_6_RESET_PURGED] : Le démantèlement jetable isolé (reset_synthetic_state) purge les enregistrements de portée de démo à exactement 0 ligne résiduelle sur disque. La réinitialisation totale du compte personnel (POST /api/v1/me/memories/reset) est strictement exclue — Reçu : teardown_status : SUCCESS_PURGED, residual_rows : 0, account_hard_reset_called : FALSE — Statut : [SOURCE_BACKED_PUBLIC_CONTRACT (VERIFIED)] — Limite : [DEMO_DATA: SYNTHETIC].

```text
+------------------------------------------------------------------------------------------------------------------------+
| [PROVENANCE & LIFECYCLE 6-STATE STATE MACHINE: DISPOSABLE HARNESS WALKTHROUGH]                                        |
|                                                                                                                        |
|  Agent A (Claude Desktop)    XMemo FastMCP & Engine           Agent B (Codex CLI)          Demo Owner (Supervising)    |
|  [04f9b8c2 / MacBook]        [VersionController / Scope]      [e81d7a31 / Workstation]     [user:demo_owner]           |
|         |                               |                              |                              |                |
|  (1) remember(sync in Orion)            |                              |                              |                |
|  -------------------------------------> |                              |                              |                |
|         |                          [STATE 1: Created Active v1]        |                              |                |
|  <------------------------------------- |                              |                              |                |
|    Receipt: mem-001@v1                  |                              |                              |                |
|         |                               |      (2) recall(sync)        |                              |                |
|         |                               | <--------------------------- |                              |                |
|         |                               |  [STATE 2: Cited @v1]        |                              |                |
|         |                               | ---------------------------> |                              |                |
|         |                               |   Citation: mem-001@v1       |                              |                |
|         |                               |                              |   (3) update_memory(Polaris) |                |
|         |                               | <---------------------------------------------------------- |                |
|         |                               |                          [STATE 3: Bump v2, Supersede v1]   |                |
|         |                               | ----------------------------------------------------------> |                |
|         |                               |                          Receipt: mem-001@v2 (parent: v1)   |                |
|         |                               |                              |                              |                |
|         |                               |      (4) recall(Polaris)     |                              |                |
|         |                               | <--------------------------- |                              |                |
|         |                               |  [STATE 4: Select v2,        |                              |                |
|         |                               |   Filter superseded v1]      |                              |                |
|         |                               | ---------------------------> |                              |                |
|         |                               |   Citation: mem-001@v2 only  |                              |                |
|         |                               |                              |   (5) forget(mem-001)        |                |
|         |                               | <---------------------------------------------------------- |                |
|         |                               |                          [STATE 5: Tombstone / Trash View]  |                |
|         |                               | ----------------------------------------------------------> |                |
|         |                               |                          Receipt: status=deleted            |                |
|         |                               |                              |                              |                |
|         |                               |   (6) reset_synthetic_state()                               |                |
|         |                               | <---------------------------------------------------------- |                |
|         |                               | [STATE 6: Teardown Purge]                                   |                |
|         |                               | Scope purged: 0 residual rows (account reset excluded)      |                |
|         |                               | ----------------------------------------------------------> |                |
|         |                               | Teardown Status: SUCCESS_PURGED                             |                |
+------------------------------------------------------------------------------------------------------------------------+
```

## Utilisateur de ChatGPT

Donnez à ChatGPT un accès durable à vos préférences XMemo, faits de projet, décisions et TODOs sans coller de jetons bearer dans un chat.

Connectez le serveur MCP XMemo hébergé via le flux OAuth de l'application ChatGPT/OpenAI, puis approuvez les autorisations memory:read et memory:write pour votre compte XMemo.

Enregistrez une préférence synthétique ou une note de projet, démarrez un nouveau chat, puis demandez à ChatGPT de la rappeler via XMemo avant de poursuivre le travail.

Si OAuth échoue ou si les outils n'apparaissent pas, déconnectez-vous du serveur MCP dans l'application hôte, reconnectez l'URL du serveur XMemo et réessayez avant de créer des jetons directs.

## Développeur Copilot / Codex

Transmettez les décisions du dépôt, les conventions de codage, les notes de correctifs et l'historique des tâches entre les agents IDE et CLI.

Utilisez OAuth pour VS Code / GitHub Copilot et Gemini CLI lorsqu'il est disponible. Pour Copilot CLI, Codex, Cursor ou d'autres clients MCP directs, conservez XMEMO_KEY dans l'environnement local ou le gestionnaire de secrets et définissez un identifiant XMEMO_AGENT_INSTANCE_ID stable.

Enregistrez une décision relative au code ou un correctif, puis demandez au prochain agent de l'IDE ou de la CLI de rappeler le contexte XMemo pertinent avant toute modification.

Si les rappels sont vides, vérifiez le chemin de configuration MCP sélectionné, la variable d'environnement XMEMO_KEY pour les clients directs et tout identifiant OAuth obsolète dans l'application hôte.

## Responsable de projet pilote d'équipe / entreprise

Évaluez la mémoire partagée avec les contrôles de compte, l'attribution des sources, les flux d'exportation/suppression et des preuves de configuration sécurisées pour les évaluateurs.

Créez ou rejoignez l'espace de travail sécurisé XMemo, invitez les utilisateurs approuvés, puis connectez chaque client via OAuth ou un identifiant direct délimité selon les badges de disponibilité.

Demandez à un membre du projet pilote d'enregistrer une mémoire d'équipe synthétique, confirmez l'attribution de la source dans XMemo, puis examinez les chemins de suppression/exportation et de support.

Si un membre ne parvient pas à se connecter, vérifiez les permissions de rôle, l'approbation OAuth, l'état de disponibilité du client et les conseils du support avant d'émettre un nouveau jeton.

## Opérateur d'agents autonomes

Permettez aux agents autonomes ou planifiés d'enregistrer leur progression, de récupérer les décisions antérieures et de conserver une identité d'instance stable et non secrète.

Récupérez /api/v1/mcp/config/autonomous-agent. Privilégiez auth_modes.oauth lorsque l'exécuteur prend en charge OAuth + en-têtes personnalisés ; utilisez auth_modes.xmemo_key avec XMEMO_KEY issu d'un gestionnaire de secrets uniquement pour les exécuteurs entièrement autonomes.

Exécutez une tâche synthétique qui consigne la progression dans XMemo, redémarrez l'exécuteur et confirmez qu'il rappelle cette progression à l'aide du même XMEMO_AGENT_INSTANCE_ID.

Si l'attribution change ou si les rappels se scindent entre instances, conservez XMEMO_AGENT_INSTANCE_ID hors de git et vérifiez que l'exécuteur ne le régénère pas à chaque démarrage.
