---
title: "Importación"
description: "Importa conversaciones de Claude y ChatGPT, memoria MCP, proyectos de Claude y Markdown plano, con detección del formato por contenido."
---

# Importación

La importación trae una base de conocimiento existente a un espacio con una sola subida: exportaciones de claude.ai y ChatGPT, un servidor de memoria MCP, proyectos y memoria de Claude, y archivos Markdown y de texto plano. El formato se detecta **por contenido**, no por el nombre del archivo, así que no tienes que preparar nada a mano: el propio motor analiza el paquete y lo reparte por carpetas.

La importación es el espejo de la [exportación](/docs/import-export/export/): la exportación lee del disco los archivos que son la fuente de la verdad, mientras que la importación analiza el origen y escribe las notas por la vía de escritura habitual. Cada nota aterriza en el espacio exactamente igual que si la hubiera creado una persona en el editor: con versionado, procedencia e indexación.

## Qué formatos entiende

Un solo paquete de exportación de Claude o ChatGPT suele contener varios tipos de datos a la vez; la importación detecta y se trae todo lo que sabe manejar:

| Origen | Archivo en la exportación | Qué se convierte en nota |
|---|---|---|
| Conversaciones de Claude | `conversations.json` | Una nota por conversación, mensajes como `### Human/Assistant` |
| Conversaciones de ChatGPT | `conversations.json` (incluida la variante fragmentada `conversations-000.json…`) | Una nota por conversación, transcripción en orden cronológico |
| Memoria MCP | `memory.json` (JSONL) | Una nota por entidad; las relaciones → `[[wikilinks]]` |
| Proyectos de Claude | `projects.json` o `projects/<uuid>.json` | Una carpeta de proyecto: documentos + instrucciones |
| Memoria de Claude | `memories.json` | Una nota por cada bloque de memoria de la cuenta |
| Chats de diseño de Claude | `design_chats/<uuid>.json` | Una nota por chat |
| Markdown / texto | `.md`, `.txt` | Una nota, el cuerpo del archivo = el cuerpo de la nota |

El formato se determina analizando el contenido (todos los servicios incluyen un archivo llamado `conversations.json`, así que el nombre no es fiable). Los mensajes vacíos y las conversaciones sin un solo fragmento con sustancia no generan notas «huérfanas»: cuántas se han omitido se ve en el resumen de la importación. Si dentro del paquete aparece JSON que no se reconoce, también acaba en el resumen como `unsupported`: la pérdida de datos siempre queda a la vista en el resumen en lugar de ocurrir en silencio.

## Cómo importar

La importación está en la pestaña **Import** de los ajustes del espacio (`/s/<space>/management/import`). Cada opción es una sección aparte:

- **File** — elige el archivo de la exportación (`conversations.json`, el ZIP completo o `memory.json`). Un `.md`/`.txt` suelto se importa arrastrándolo y soltándolo (ver más abajo), no desde este diálogo.
- **Skip existing notes** — qué hacer cuando repites la importación (ver más abajo).
- **Memory entries** — dónde colocar las entidades de memoria (ver más abajo).

Una importación larga se ejecuta como un **trabajo durable**: una barra de progreso con un contador en vivo de notas escritas, la fase actual y un botón **Cancel**. Puedes salir de la pestaña y volver: la importación sigue en marcha en segundo plano y, al regresar, verás otra vez el progreso o el resumen final.

> [!tip] Suelta un archivo en la ventana
> El diálogo de subida aparte es opcional: suelta un archivo `.md` o `.txt` directamente sobre la ventana de la aplicación y se convertirá en una nota. Si lo sueltas sobre una carpeta del árbol, la nota va a parar ahí; si lo sueltas en el área de contenido, va a la carpeta de la nota abierta o a la raíz. Es el mismo flujo de importación, solo que con una segunda puerta de entrada.

### La opción «Skip existing notes»

El nombre del archivo de una nota es determinista y está ligado a la identidad del origen. Gracias a eso, volver a importar la misma exportación **sobrescribe los mismos archivos** en vez de multiplicar duplicados, y cincuenta conversaciones «Untitled» no chocan entre sí.

- **Desactivada (el valor por defecto al volver a subir — upsert)** — las notas existentes se sobrescriben por ruta, de forma idempotente.
- **Activada** — las notas cuya ruta ya existe se **omiten**. Es el caso de «volví a importar el historial actualizado: no pises lo que ya corregí a mano».

### La opción «Memory entries»

Las entidades de `memory.json` pueden ir a uno de estos tres destinos:

- **folder** — notas visibles para el usuario, bajo la carpeta raíz de la importación.
- **space** — al montaje oculto de memoria del agente del espacio (`.notarium/memory`): esas entradas no aparecen ni en el árbol, ni en el Feed, ni en la búsqueda, pero el agente llega a ellas mediante `recall`.
- **skip** — no importar la memoria en absoluto.

> [!note] Memoria del espacio, no el dominio global
> La opción **space** deja las entradas en la memoria del agente de ese espacio concreto. Dentro del espacio no hay una vista aparte en la interfaz para esta memoria: el agente la ve a través de `recall`. Es la memoria de un espacio concreto, no el dominio personal global de memoria (el que se abre como la lente **Memory** en el árbol del explorador): ahí esta importación no escribe.

## Cómo se distribuyen los datos

La importación crea un árbol de carpetas predecible dentro de la raíz elegida:

```md
conversations/claude/     — conversaciones de Claude
conversations/chatgpt/    — conversaciones de ChatGPT
projects/<proyecto>/      — proyectos de Claude (+ docs/, prompt-template.md)
memory/claude/            — memoria de la cuenta de Claude
memory/<tipo-de-entidad>/ — entidades de memory.json
design-chats/<proyecto>/  — chats de diseño de Claude
```

## Las fechas se preservan como datos

Una importación ingenua fecharía todo el historial como «hoy» y el Feed amontonaría cientos de conversaciones bajo un mismo día. Notarium, en cambio, **traslada la fecha de creación como un dato más**: cada nota recibe en su frontmatter un `created:` con el momento en que la conversación ocurrió de verdad. El Feed reparte el historial importado por sus días reales y el ciclo exportación → importación conserva las fechas: en la mudanza no se pierde nada.

El campo «Created» también se puede editar a mano desde el editor (los metadatos de la nota), por ejemplo durante una migración o al corregir la fecha de una nota. La hora de última modificación (`modified`) refleja siempre cuándo se editó realmente el archivo y no se puede cambiar.

## Cómo funciona por dentro

La importación está construida para aguantar tanto archivos de varios gigabytes como una conexión que se cae:

- **Procesamiento en streaming.** La subida se transmite a disco, el ZIP se descomprime miembro a miembro y el array JSON de conversaciones se analiza elemento a elemento: una conversación cada vez. El pico de memoria no depende del tamaño del paquete, así que una exportación de 600 MB no tumba el servidor.
- **Trabajo durable.** Cuando el host tiene base de datos de metadatos (lo normal en autoalojamiento), la importación es por defecto un trabajo durable: la subida se guarda en staging y un worker en segundo plano escribe las notas fuera de la petición. Una pestaña cerrada, una conexión perdida, incluso un reinicio del servidor: nada de eso te cuesta progreso.
- **Comportamiento cooperativo.** Una importación masiva no monopoliza el servidor: la escritura cede el paso a las peticiones interactivas y la indexación en segundo plano se pausa mientras dura el flujo y se pone al día después. La búsqueda y la navegación siguen respondiendo incluso mientras se escriben miles de notas.

```mermaid
flowchart LR
  src([Paquete / archivo]) -->|subida| stage[Staging en disco]
  stage -->|trabajo de importación| worker[Worker en segundo plano]
  worker -->|vía de escritura| notes[(Notas Markdown)]
  worker -.->|progreso| ui([Pestaña Import])
```

> [!note] Importación sin base de datos de metadatos
> En un host sin base de datos de metadatos (y solo falta en el modo `AUTH_MODE=none`) no hay capa de trabajos: la importación va por la vía síncrona de streaming dentro de una sola petición, con el mismo núcleo y el mismo contador en vivo. El progreso y el resumen se ven igual; la única diferencia es que la importación no sobrevive a un reinicio del servidor.

## Límites

- **Cancelar, pero no pausar.** Un trabajo se puede cancelar (de forma cooperativa), pero no pausar y reanudar.
- **El indicador es indeterminado.** El número de notas que hay en un paquete no se conoce de antemano, así que el progreso muestra la fase y un contador en vivo de notas escritas, no un porcentaje con su ETA.
- **Una subida interrumpida empieza de cero.** La durabilidad entra en juego una vez que los bytes han llegado: si se corta la subida de un paquete grande, hay que empezar de cero.
- **Los adjuntos binarios no se importan.** El texto de los adjuntos se incrusta en el cuerpo de la nota, pero los archivos binarios en sí no (igual que en la exportación).
- **La importación aterriza en la raíz del espacio.** El diálogo de importación no permite elegir carpeta de destino: las notas van a la raíz; al arrastrar y soltar, la raíz la determina la zona donde sueltas.

## Siguiente

- [Exportación](/docs/import-export/export/) — saca un espacio o una carpeta de vuelta como un paquete ZIP de archivos Markdown.
- [Agentes y MCP](/docs/agents/) — cómo trabaja un agente con la memoria importada mediante `recall`.
