NotariumDocumentación
Versión de la documentación: latest
ES

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

OrigenArchivo en la exportaciónQué se convierte en nota
Conversaciones de Claudeconversations.jsonUna nota por conversación, mensajes como ### Human/Assistant
Conversaciones de ChatGPTconversations.json (incluida la variante fragmentada conversations-000.json…)Una nota por conversación, transcripción en orden cronológico
Memoria MCPmemory.json (JSONL)Una nota por entidad; las relaciones → [[wikilinks]]
Proyectos de Claudeprojects.json o projects/<uuid>.jsonUna carpeta de proyecto: documentos + instrucciones
Memoria de Claudememories.jsonUna nota por cada bloque de memoria de la cuenta
Chats de diseño de Claudedesign_chats/<uuid>.jsonUna nota por chat
Markdown / texto.md, .txtUna 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.

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.
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:

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.
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])
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 — saca un espacio o una carpeta de vuelta como un paquete ZIP de archivos Markdown.
  • Agentes y MCP — cómo trabaja un agente con la memoria importada mediante recall.