# Modelo de memoria

Comprenda los hechos duraderos, las decisiones, las entregas y la atribución de origen antes de elegir una integración.

- Canonical: https://docs.xmemo.dev/es/docs/concepts/memory-model
- Locale: es-ES
- Content-Locale: es-ES
- Canonical-Content-Digest: 9ffe2da573b664ce4e37254715ed959c138dfd6b89262c6d0a1bda8dd473291a
- Edition-Digest: 07f12792c57adbab8bb99b6690cd38da9682a098861fcf4c640e26b7850c158b
- Source-Revision: sha256:310bf66a9ffcf2384ebc6400fad1b1da9d01fa0cdadc9d129c9084e880334e73

## Qué almacena XMemo

XMemo mantiene un contexto duradero que permanece útil después de que finalice el chat o la tarea actual: hechos del proyecto, decisiones, preferencias, correcciones y notas de entrega. El ruido de conversación transitorio, las respuestas únicas y la salida sin procesar de las herramientas no pertenecen a la memoria.

- semantic: hechos y decisiones duraderos que se mantienen fieles en las sesiones.
- episodic — algo que sucedió, ligado a un momento en una tarea o sesión.
- procedural — cómo se realiza una tarea en este proyecto.
- working — Estado activo de la tarea en curso.
- identity — información estable sobre el propietario o el propio agente.

## Escribe una memoria duradera

Una escritura duradera necesita el content, un path lógico que lo vincula a un proyecto o espacio de nombres y el tipo de memoria. El path es el filtro que usará recall más adelante.

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

## Tipos de memoria en el SDK

MemoryCandidate.memory_type acepta el mismo conjunto mediante el SDK de TypeScript, de modo que un evento de agente normalizado lleva el type bajo el que debe almacenarse.

```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
```

## Guía interactiva de procedencia y ciclo de vida (Demostración sintética)

Una demostración paso a paso y verificable del ciclo de vida que muestra la creación de memoria, la recuperación entre clientes, la corrección de usuario en tiempo real con sustitución de versiones (v1 -> v2), la protección del presupuesto de tokens, el marcado de eliminación suave y el desmontaje sintético aislado. Cada paso está respaldado por evidencias de tiempo de ejecución desechables sin exposición de memorias de usuario reales:

- Paso 1 [STATE_1_CREATED_ACTIVE_V1]: El Agente A (Claude Desktop) escribe la preferencia inicial con autor inmutable, hash de instancia y metadatos de dispositivo mediante tools.py::remember — Recibo: Estado 200 OK, demo_mem_lifecycle_001@v1, activo — Estado: [SOURCE_BACKED_PUBLIC_CONTRACT (VERIFIED)] — Límite: [DEMO_DATA: SYNTHETIC].
- Paso 2 [STATE_2_ACCESSED_ATTRIBUTED]: El Agente B (Codex CLI) en el mismo ámbito autorizado recupera de inmediato la memoria con recibo de citación y cero desviación entre clientes mediante tools.py::recall — Recibo: Estado 200 OK, citado demo_mem_lifecycle_001@v1 — Estado: [SOURCE_BACKED_PUBLIC_CONTRACT (VERIFIED)] — Límite: [DEMO_DATA: SYNTHETIC].
- Paso 3 [STATE_3_CORRECTED_SUPERSEDED_V2]: El usuario corrige la sala y la hora de la reunión mediante tools.py::update_memory. VersionController crea una instantánea inmutable de v1 con status='superseded' y asciende el registro activo a v2 — Recibo: Estado 200 OK, v2, padre v1, diff: Room Orion -> Room Polaris — Estado: [SOURCE_BACKED_PUBLIC_CONTRACT (VERIFIED)] — Límite: [DEMO_DATA: SYNTHETIC].
- Paso 4 [STATE_4_RETRIEVAL_FILTERED]: La consulta posterior recall selecciona solo v2 activa, mientras que v1 obsoleta se filtra estrictamente de la ventana de contexto de LLM para evitar alucinaciones y ahorrar presupuesto de tokens — Recibo: Estado 200 OK, seleccionada v2, excluida v1 sustituida — Estado: [SOURCE_BACKED_PUBLIC_CONTRACT (VERIFIED)] — Límite: [DEMO_DATA: SYNTHETIC].
- Paso 5 [STATE_5_TOMBSTONE_DELETED]: El propietario marca el hecho como eliminado mediante tools.py::forget. Se excluye de inmediato de las consultas candidatas y se traslada a la vista de papelera con acción de restauración — Recibo: Estado 200 OK, estado: deleted, recuento de candidatos: 0 — Estado: [SOURCE_BACKED_PUBLIC_CONTRACT (VERIFIED)] — Límite: [DEMO_DATA: SYNTHETIC].
- Paso 6 [STATE_6_RESET_PURGED]: El desmontaje desechable aislado (reset_synthetic_state) purga los registros del ámbito de demo a exactamente 0 filas residuales en disco. El restablecimiento total de la cuenta personal (POST /api/v1/me/memories/reset) queda estrictamente excluido — Recibo: teardown_status: SUCCESS_PURGED, residual_rows: 0, account_hard_reset_called: FALSE — Estado: [SOURCE_BACKED_PUBLIC_CONTRACT (VERIFIED)] — Límite: [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                             |                |
+------------------------------------------------------------------------------------------------------------------------+
```

## Usuario de ChatGPT

Dale a ChatGPT acceso duradero a tus preferencias de XMemo, datos de proyecto, decisiones y TODOs sin pegar fichas bearer en un chat.

Conecte el servidor XMemo MCP alojado a través de la aplicación ChatGPT/OpenAI OAuth flow, luego apruebe la subvención de memoria:read y memoria:write para su cuenta XMemo.

Guarde una nota de preferencia sintética o de proyecto, inicie un nuevo chat y luego pida a ChatGPT que la recuerde a través de XMemo antes de continuar el trabajo.

Si OAuth falla o las herramientas no aparecen, salir del servidor MCP en la aplicación host, volver a conectar la URL del servidor XMemo y volver a probar antes de crear tokens directos.

## Copiloto / Codex desarrollador

Lleve decisiones de repo, convenciones de codificación, notas de corrección de errores e historial de tareas entre los agentes IDE y CLI.

Use OAuth para VS Code / GitHub Copilot y Gemini CLI cuando esté disponible. Para Copilot CLI, Codex, Cursor u otros clientes MCP directos, mantenga XMEMO_KEY en el entorno local o en el almacén de secretos y establezca un XMEMO_AGENT_INSTANCE_ID estable.

Grabe una decisión de base de código o corrección de errores, y luego pida al siguiente agente IDE o CLI que recuerde el contexto XMemo relevante antes de editarlo.

Si las memorias están vacías, verifique la ruta de configuración MCP seleccionada, la variable de entorno XMEMO_KEY para clientes directos y cualquier credencial OAuth rancio en la aplicación host.

## Equipo / propietario del piloto de la empresa

Evalúe la memoria compartida con controles de cuenta, atribución de origen, flujos de trabajo export/delete y pruebas de configuración seguras para los revisores.

Cree o introduzca el espacio de trabajo protegido de XMemo, invite a usuarios aprobados, luego conecte a cada cliente a través de OAuth o una credencial directa con alcance de acuerdo con las insignias de preparación.

Haga que un miembro piloto guarde una memoria sintética del equipo, confirme la atribución de origen en XMemo, luego revise delete/export y las rutas de soporte.

Si un miembro no puede conectarse, compruebe los permisos de rol, la aprobación de OAuth, el estado de preparación del cliente y la orientación de soporte antes de emitir un nuevo token.

## Operador de agente autónomo

Deje que los agentes sin cabeza o programados registren el progreso, recuperen decisiones previas y mantengan una identidad estable de instancia no secreta.

Obtener /api/v1/mcp/config/autonomous-agent. Preferir auth_modes.oauth cuando el runner soporta OAuth + cabeceras personalizadas; utilice auth_modes.xmemo_key con XMEMO_KEY de una tienda secreta sólo para runners totalmente sin cabeza.

Ejecute una tarea sintética que escriba el progreso a XMemo, reinicie el runner y confirme que recuerda que el progreso usando el mismo XMEMO_AGENT_INSTANCE_ID.

Si la atribución cambia o recuerda dividida entre instancias, persistir XMEMO_AGENT_INSTANCE_ID fuera de git y verificar que el runner no lo esté regenerando en cada inicio.
