Importación de conversaciones → second-brain (2026-09-08)

Decisiones tomadas

  1. Importar dos tipos de export: ZIP descargados desde Claude.ai y OpenAI como fuentes de conocimiento personal para alimentar el grafo de second-brain.

  2. Procesamiento exclusivo en esta máquina: ninguna conversación, prompt o salida LLM sale del laptop ni va a APIs externas. No se usa el S76 remoto ([IP]) para este pipeline. Todo corre con Ollama local (http://localhost:11434).

  3. Primero respaldo y versionado: antes de importar los ZIP, second-brain tiene commit + tag v$(date +%Y%m%d) y second-brain-twitter fue inicializado como repositorio Git por primera vez.

  4. Los ZIP originales se conservan aparte: fuera de git, fuera de content/, fuera del grafo publicado. Cifrados si es posible. Nunca entran al repo.

  5. Revisión humana obligatoria: nada entra directamente a content/nodes/. Todo pasa primero por _stubs/conversations/ como notas revisables sin edges. Solo después de revisión se adoptan al grafo.

  6. Inferencias separadas de hechos: cada salida tiene campos explícitos: evidencia (origen), inferencia (interpretación), confianza (alta/media/baja). No hay mezcla.

  7. Deduplicación e incrementalidad: cada nuevo export procesa solo lo no visto, registra cambios (ideas nuevas, modificadas, resueltas) y nunca sobrescribe silenciosamente.

Arquitectura del proceso

1. Respaldo y versionado ✅

  • second-brain: commit 789aa4e, tag v20260908-post-checkpoint.
  • second-brain-twitter: init + commit 897ed51, tag v20260908.

2. Recepción de exports (pendiente)

~/Downloads/claude-export-XXXXX.zip
~/Downloads/openai-export-XXXXX.zip
    ↓ cp --archive cifrado
~/nef/backups/exports/conversaciones/YYYY-MM-DD/

3. Normalización

Cada ZIP → .json crudo → estructura común:

{
  "id": "hash(archivo+linea)",
  "fuente": "claude" | "openai",
  "fecha": "2026-09-04TXX:XX:XXZ",
  "conversacion": "nombre_o_id_de_la_conversacion",
  "rol": "user" | "assistant" | "system",
  "texto": "...",
  "proyecto": "nombre_del_proyecto_si_se_puede_deducir",
  "adjuntos": [],
  "hash_origen": "sha256(del_archivo_original)"
}

4. Limpieza de datos sensibles

  • Eliminar emails, teléfonos, IPs.
  • Extraer tokens/claves que aparezcan en prompts.
  • Reemplazar URLs de terceros por referencia al contexto donde aparecen.

5. Detección de patrones con LLM local

Prompt adaptado para buscar:

  • ideas recurrentes entre conversaciones
  • decisiones ya tomadas
  • preguntas abiertas sin resolver
  • proyectos mencionados o abandonados
  • problemas repetidos
  • conceptos aprendidos
  • prompts reutilizables
  • referencias y fuentes citadas
  • contradicciones entre fechas
  • compromisos pendientes
  • patrones sobre cómo trabajas y dónde te atoras

Modelo: qwen3.6 o mistral según disponibilidad. Todo vía http://localhost:11434/api/chat.

6. Salidas

ArchivoContenido
reports/conversaciones-inventario.mdQué conversaciones hay, por fecha, volumen total
reports/ideas-recurrentes.mdIdeas que aparecen en ≥2 conversaciones distintas
reports/decisiones.mdDecisiones ya tomadas con evidencia y fecha
reports/preguntas-abiertas.mdPreguntas sin resolver aún
reports/inferencias.mdPatrones deducidos con nivel de confianza
reports/historial-de-cambios.mdChangelog: qué cambió por export
_stubs/conversations/claude/<id>-<slug>.mdStubs individuales, uno por concepto/decisión
_stubs/conversations/openai/<id>-<slug>.mdStubs de OpenAI

Formato de stub (mismo frontmatter que el sistema actual):

---
title: "Concepto o decisión extraída"
kind: idea | decision | question | pattern
status: unseen
level: 0
edges: []
tags: [conversacion, claude|openai, tema]
sources:
  - name: Claude / OpenAI
    url: "[restringido — ver backup/...]"
    date: "YYYY-MM-DD"
open_questions: []
---
 
**Evidencia:** fragmentos de la conversación original
 
**Inferencia:** patrón o conclusión deducida
 
**Confianza:** alta | media | baja
 
**Acción sugerida:** (si aplica)
 
*Nota: requiere revisión antes de adoptar al grafo.*

7. Validación

  • Comparar hashes SHA-256 de los ZIP contra los almacenados en backups.
  • Verificar que ningún email, teléfono o token aparezca en las salidas.
  • Revisar manualmente todos los stubs antes de moverlos a content/nodes/.
  • Mantener bitácora de qué se adoptó y cuándo.

Scripts a crear

~/nef/second-brain/scripts/import-conversations.py
  • Recibe ZIP o carpeta descomprimida como argumento.
  • Detecta formato automáticamente (Claude vs OpenAI).
  • Exporta JSON normalizado.
  • Ejecuta detección de patrones con Ollama local.
  • Escribe stubs en _stubs/conversations/.
  • Genera reportes en reports/.
  • Registra changelog incremental.
~/nef/second-brain/scripts/import-conversations.sh

Wrapper shell que:

  • Pide ruta del ZIP.
  • Lo copia cifrada a ~/nef/backups/exports/conversaciones/YYYY-MM-DD/.
  • Corrige permisos y ejecuta el Python.