Rekindle

Un motor de continuidad MCP local que ayuda a Claude Code a retomar el hilo entre sesiones.

Documentación

Rekindle

npm tests license Glama score

Para usuarios de Claude Code que pierden tiempo reexplicando el contexto del proyecto en cada sesión.

npx rekindle init

Tu IA lo olvida todo entre sesiones. Rekindle lo soluciona.


Rekindle init demo

Rekindle es un motor de continuidad MCP que resuelve la orientación de sesión, no solo el almacenamiento. Orienta al inicio de la sesión, captura al final de la sesión y sobrevive a la compactación a mitad de sesión. Todo local, todo SQLite, cero claves API.

v0.3.3 — metadatos MCP y documentación del paquete consistentes con la versión, sobre el instalador de entrega de inicio de sesión en un solo comando de v0.3.2. Notas de la versión

Inicio rápido

Requiere Node.js 20 o superior.

npx rekindle init

Esto crea .rekindle/ en tu proyecto con una base de datos SQLite, plantilla de identidad, directorio de capturas y directorio de transcripciones. Luego agrega la configuración del servidor MCP para tu cliente:

Claude Code

Agrega a ~/.claude.json:

{
  "mcpServers": {
    "rekindle": {
      "command": "npx",
      "args": ["-y", "rekindle"]
    }
  }
}

Habilita la protección PreCompact (captura el contexto antes de la compactación a mitad de sesión):

npx rekindle setup-hooks

Habilita la entrega de orientación al inicio de sesión: el paquete de orientación con presupuesto llega automáticamente al inicio, reanudación, /clear y /compact, para que el modelo se reoriente en cada límite de contexto sin que se le pida:

npx rekindle setup-delivery

Ambos hooks son opcionales; un init simple nunca instala ninguno. npx rekindle init --with-hooks --with-delivery hace todo en una sola línea.

Claude Desktop

Agrega a claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\):

{
  "mcpServers": {
    "rekindle": {
      "command": "npx",
      "args": ["-y", "rekindle"]
    }
  }
}
Cursor

Agrega a .cursor/mcp.json en la raíz de tu proyecto:

{
  "mcpServers": {
    "rekindle": {
      "command": "npx",
      "args": ["-y", "rekindle"]
    }
  }
}

Luego completa .rekindle/identity.md y pega las instrucciones de arranque en el CLAUDE.md de tu proyecto.

La sesión 1 almacena. La sesión 2 recuerda. La sesión 10 anticipa.


El problema (43 sesiones de datos)

Durante 43 sesiones, medimos lo que un asistente de IA no lograba cargar al inicio de la sesión:

MétricaValor
Sesiones analizadas43
Arranques limpios (todo el contexto cargado)33%
Fallos de alta señal (5+ vacíos)26%
Fallos totales de recuperación173

Las herramientas de memoria existentes (Mem0, Letta, Zep) optimizan la precisión de recuperación: ¿puede la IA encontrar lo que almacenó? Eso es necesario pero no suficiente. Ninguna aborda si la IA cargó el contexto correcto para esta sesión, o si puede detectar lo que omitió.

Rekindle resuelve la orientación de sesión: cargar identidad, contexto reciente, salud de la memoria y advertencias de contexto faltante antes de que el asistente comience a trabajar.

Consulta docs/gap-analysis.md para el conjunto de datos completo de la investigación.


Qué hace

Arranque: orientar al inicio de la sesión

boot_report ejecuta un pipeline de orientación antes de que comience cualquier trabajo:

boot_report
  +-- Read identity document (who am I working with?)
  +-- Scan memory stats (what do I know?)
  +-- Find latest checkpoint (where did we leave off?)
  +-- Read last transcript (what actually happened?)
  +-- Surface open loops (what needs follow-up?)
  +-- Surface PreCompact captures (what survived compaction?)
  +-- Detect gaps (what am I missing?)
  +-- Calculate orientation score (how oriented am I?)
  --> "Carrying forward: [context loaded, gaps identified, score: 80/100]"

Sobrevive al tramo largo: captura PreCompact (v0.3)

La compactación a mitad de sesión destruye cadenas de razonamiento, enfoques fallidos, textura relacional y tono. El hook PreCompact se activa automáticamente antes de la compactación y guarda lo que de otro modo se perdería:

PreCompact hook fires
  +-- Parse JSONL transcript (last N messages)
  +-- Write raw Markdown capture (.rekindle/captures/)
  +-- Write structured JSON snapshot (decisions, open loops, files)
  +-- Update manifest for cheap listing
  --> boot_report surfaces captures on next session start
  --> end_session warns if captures exist but weren't reviewed

Tres modos de lectura controlan el costo de tokens:

  • resumen — un párrafo, económico
  • estructurado — decisiones/bucles/advertencias, moderado
  • crudo — extracto completo de la transcripción, costoso (solo cuando es necesario)

Captura: cierra el ciclo al final de la sesión

end_session almacena registros de continuidad estructurados, no solo un resumen:

CampoQué captura
checkpointDónde lo dejamos (obligatorio)
decisionsQué se decidió y por qué
open_loopsTareas o preguntas sin resolver
constraintsLímites que no deben violarse
relational_deltaQué cambió en la relación de trabajo
next_session_focusDónde reanudar la próxima sesión
preferencesNuevas preferencias de usuario aprendidas
warningsCosas que la próxima sesión debe vigilar

Todos los registros se almacenan con metadatos de type, source y session_id. El siguiente boot_report carga el punto de control automáticamente.

Entre sesiones: buscar y gestionar

HerramientaDescripción
store_memoryAlmacena con contenido, categoría, importancia (1-10) y alcance del proyecto
search_memoryBúsqueda de texto completo con clasificación BM25, potenciada por importancia
list_memoriesExplora recuerdos, los más recientes primero. Filtra por categoría o proyecto
delete_memoryElimina por ID
update_memoryActualiza contenido, categoría o importancia
list_capturesLista capturas PreCompact (opcionalmente filtra por sesión)
read_captureLee una captura en modo resumen, estructurado o crudo
capture_nowCaptura manualmente el contexto de la sesión actual bajo demanda

Categorías: preference lesson context relationship general


¿Por qué no solo CLAUDE.md?

Un archivo estático es pasivo. Tu IA lo lee, pero no puede buscarlo, clasificarlo, rastrear lo que se ha recuperado ni decirte qué falta. Rekindle añade:

  • Búsqueda — texto completo con clasificación ponderada por importancia
  • Estructura — alcance por categoría y proyecto en todos los recuerdos
  • Orientación — carga proactiva de contexto al arrancar, no solo recuperación bajo demanda
  • Detección de vacíos — señala identidad faltante, categorías vacías, datos obsoletos
  • Puntuación — lista de verificación transparente para que sepas qué tan orientada está la IA
  • Captura de sesión — cierre estructurado con puntos de control, decisiones y bucles abiertos
  • Supervivencia a la compactación — las capturas PreCompact preservan lo que los resúmenes aplastan

Destacados de versiones

v0.3.3

  • Metadatos de protocolo consistentes con la versión — la respuesta de inicialización de MCP deriva su versión de los metadatos del paquete enviado, evitando la deriva de la versión de lanzamiento
  • Precisión de la página del paquete — el README enviado a npm identifica la versión actual antes de que se creen la etiqueta y el paquete
  • 148 pruebas automatizadas, más una verificación del artefacto empaquetado que compara los metadatos de MCP con la versión del paquete instalado

v0.3.2

  • Instalación de entrega en un solo comando — npx rekindle setup-delivery (o init --with-delivery) configura la aceptación del hook SessionStart: idempotente, preserva los hooks de otras herramientas, rechaza archivos de configuración corruptos
  • 147 pruebas automatizadas

v0.3.1 — "Cinco puertas medidas"

  • Entrega al inicio de sesión — rekindle session-start emite un paquete de orientación con presupuesto a través del hook SessionStart al inicio, reanudación, /clear y /compact
  • Paquetes con presupuesto, recibos veraces — los paquetes se limitan a 8,000 bytes UTF-8 válidos con un marcador de truncamiento dentro del paquete; los recibos atestiguan solo la emisión y nunca afirman visibilidad del modelo
  • Almacenamiento seguro para escritorio — la raíz de almacenamiento nunca se deriva del punto de generación (Claude Desktop genera servidores MCP en /); orden de resolución explícito, fallo ruidoso
  • Guía de doble canal — la guía de flujo de trabajo viaja tanto en las descripciones de herramientas como en las instrucciones de MCP, la deriva es estructuralmente imposible
  • Adaptador Cursor — session-start --client cursor con análisis de stdin en lista blanca; las rutas de correo electrónico y espacio de trabajo nunca llegan a los recibos
  • Medido, no asumido — cada afirmación anterior está respaldada por una medición publicada (evidencia, resultados del spike)

v0.3.0 — "Sobrevive al tramo largo" añadió el sistema de captura PreCompact, bucles abiertos y seguimiento de revisiones — notas de la versión v0.3.0


Comandos CLI

ComandoDescripción
npx rekindle initConfigura .rekindle/ en el directorio actual
npx rekindle init --globalConfigura en el directorio de inicio
npx rekindle init --with-hooksInit + configura el hook de captura PreCompact
npx rekindle init --with-deliveryInit + configura el hook de entrega SessionStart
npx rekindle setup-hooksConfigura el hook de captura PreCompact (independiente)
npx rekindle setup-deliveryConfigura el hook de entrega SessionStart (independiente)
npx rekindle session-startEmite paquete de orientación con presupuesto (hook SessionStart)
npx rekindle session-start --client cursorIgual, en la forma de respuesta del hook de Cursor
npx rekindle precompact-captureCaptura contexto antes de la compactación (hook)
npx rekindle capture-nowCaptura manualmente el contexto de la sesión actual
npx rekindleInicia el servidor MCP (usado por Claude Code)

Instalar desde el código fuente

git clone https://github.com/Skitchy/rekindle.git
cd rekindle
npm install
npm run build
node dist/init/cli.js init
Configuración del hook PreCompact

El comando setup-hooks escribe esto en .claude/settings.local.json:

{
  "hooks": {
    "PreCompact": [
      {
        "matcher": "auto",
        "hooks": [
          {
            "type": "command",
            "command": "npx rekindle precompact-capture",
            "timeout": 60
          }
        ]
      },
      {
        "matcher": "manual",
        "hooks": [
          {
            "type": "command",
            "command": "npx rekindle precompact-capture",
            "timeout": 60
          }
        ]
      }
    ]
  }
}

El hook recibe el contexto de la sesión en stdin (session_id, transcript_path, cwd, hook_event_name) y escribe las capturas en .rekindle/captures/.

VariablePredeterminadoDescripción
REKINDLE_PRECOMPACT_MAX_MESSAGES80Máximo de mensajes a capturar
REKINDLE_PRECOMPACT_MAX_CHARS120000Máximo de caracteres a capturar
REKINDLE_BASE_DIRResuelto (ver abajo)Directorio base para .rekindle/

Resolución de la raíz de almacenamiento. Todos los puntos de entrada de Rekindle (servidor, hook PreCompact) resuelven el directorio que contiene .rekindle/ mediante una sola regla, en orden:

  1. REKINDLE_BASE_DIR, si está definido — lo explícito siempre gana
  2. Derivado de REKINDLE_DB_PATH, cuando apunta a un diseño canónico de <base>/.rekindle/db/
  3. Un .rekindle/ existente en el directorio de trabajo actual (nunca cuando cwd es la raíz del sistema de archivos)
  4. Un .rekindle/ existente en tu directorio de inicio
  5. De lo contrario: tu directorio de inicio — nunca el punto de generación

Las reglas 3 y 5 existen porque algunos hosts (por ejemplo, Claude Desktop) generan servidores MCP en cwd=/; un punto de generación no es una ubicación de almacenamiento. Si no se puede crear el almacenamiento, el servidor sale con un mensaje que nombra la solución en lugar de un rastreo de pila.

Privacidad y seguridad
  • Todos los datos son locales. Nada se envía a servidores externos.
  • Sin llamadas de red. El servidor MCP se comunica mediante stdio. Sin HTTP, sin telemetría, sin análisis.
  • Las transcripciones contienen texto de conversación. No habilites la captura de transcripciones si tus sesiones contienen secretos o credenciales.
  • La instalación del hook es opcional. Tanto el hook de captura (setup-hooks) como el hook de entrega (setup-delivery) deben solicitarse explícitamente, por comando o por bandera. Un init simple nunca instala ninguno.
  • La base de datos SQLite es un archivo normal. No está cifrada. Usa cifrado de disco a nivel de sistema operativo si es necesario.
  • .rekindle/ está en gitignore. El comando init lo maneja automáticamente.
  • boot_report lee archivos locales. Las rutas no están en un entorno aislado. Úsalo solo con clientes MCP y prompts en los que confíes.

Compatibilidad

"Entrega completa" significa que el paquete de orientación llega automáticamente en los límites de sesión y el modelo demuestra que lo ve, medido con sondas canarias tanto en la capa de recepción como en la capa del modelo, no asumido. Detalles y evidencia: resultados del spike de compatibilidad.

Superficie del clienteHerramientas MCPEntrega al inicio de sesión
Terminal de Claude Code (macOS)ProbadoEntrega completa, medida (inicio, reanudación, /clear, /compact)
Terminal de Claude Code (Windows)ProbadoEntrega completa, medida
Terminal de Claude Code (Linux/WSL2)ProbadoCanal de hook idéntico; medición de entrega pendiente
Claude Desktop, superficie CodeProbadoEntrega completa, medida (/clear reentrega mediante inicio de nueva sesión)
Claude Desktop, superficie de chatProbadoSolo modo herramienta: hooks no compatibles con el cliente; guía accesible mediante la búsqueda de herramientas del modelo
CursorProbadoMediante .cursor/hooks.json, medido (ver abajo)
Cualquier cliente MCP stdioCompatibleDepende del soporte de hooks del cliente

Claude Code: orientación al inicio de sesión (opcional)

npx rekindle setup-delivery

escribe esto a .claude/settings.local.json:

{
  "hooks": {
    "SessionStart": [
      {
        "matcher": "startup|resume|clear|compact",
        "hooks": [
          { "type": "command", "command": "npx rekindle session-start", "timeout": 60 }
        ]
      }
    ]
  }
}

El paquete está limitado a 8,000 bytes UTF-8 válidos — medido: cuando la salida del hook excede el límite del host, el modelo solo ve la porción inicial, sin que se muestre ningún error. Si se descartan secciones para ajustarse al presupuesto, un marcador dentro del paquete lo indica, y el recibo en .rekindle/receipts/session-start.jsonl registra exactamente lo que se emitió sin afirmar jamás que el modelo lo vio.

Cursor: orientación de inicio de sesión (opt-in)

El sistema de hooks de Cursor puede entregar el paquete de orientación presupuestado al inicio de la sesión, medido funcionando en el spike de compatibilidad v0.3.1. La configuración es manual y opt-in — Rekindle nunca instala hooks sin que se le pida. Añade a .cursor/hooks.json en tu proyecto:

{
  "version": 1,
  "hooks": {
    "sessionStart": [ { "command": "rekindle session-start --client cursor" } ]
  }
}

Privacidad: El payload del hook de Cursor incluye tu correo electrónico de cuenta y las rutas del espacio de trabajo. El adaptador trata ese payload como personal por defecto: extrae solo el ID de sesión y la raíz del espacio de trabajo (usados en el proceso para la resolución de almacenamiento), y ni el payload crudo, ni el correo, ni ninguna ruta se escriben jamás en recibos ni en ningún otro artefacto. Los agentes en segundo plano se omiten por defecto (con recibo veraz); opta con REKINDLE_ORIENT_BACKGROUND_AGENTS=1.

Architecture
rekindle/
  src/
    index.ts          MCP server entry point
    server.ts         Server setup, tool registration (10 tools)
    storage/
      sqlite.ts       SQLite + FTS5, schema migration, sessions
    orientation/
      types.ts        OrientationResult, Gap, ScoreItem
      GapDetector.ts  Structural gap detection (8 codes)
      Scorer.ts       Orientation scoring (6 criteria, 100pts)
      OrientationService.ts   Orchestrator
      OrientationRenderer.ts  Markdown + JSON output
    captures/
      types.ts        CaptureEntry, StructuredSnapshot, HookInput
      CaptureManager.ts   Parse, capture, list, read, review tracking
      discover-transcript.ts  Auto-discover session transcripts
      precompact-capture.ts   CLI hook entry point
      capture-now.ts          Manual capture CLI
    tools/
      boot-report.ts  Orientation + open loops + capture awareness
      end-session.ts  Structured session close + capture warning
      list-captures.ts  List PreCompact captures
      read-capture.ts   Read captures in 3 modes
      capture-now.ts    Model-triggered manual capture
      store.ts search.ts list.ts delete.ts update.ts
    delivery/
      budget.ts       8000-byte UTF-8 packet construction, truncation marker
      receipts.ts     Emission receipts (never claim model visibility)
      session-start.ts SessionStart hook adapter
      cursor.ts       Cursor hook adapter (privacy-whitelisted stdin)
      guidance.ts     Canonical workflow guidance, both channels
    init/
      cli.ts scaffold.ts setup-hooks.ts setup-delivery.ts templates/

Almacenamiento: SQLite + FTS5 vía better-sqlite3. Clasificación BM25 potenciada por importancia. Registros tipados con type, source, session_id.

Transporte: stdio (MCP estándar). Funciona con Claude Code de fábrica.

Pruebas

npm test

148 pruebas: CRUD de almacenamiento + clasificación FTS5, dominio de orientación (detección de brechas, puntuación, servicio, renderizado), gestor de captura (análisis, límites, seguimiento de revisión, formato), entrega (presupuesto de paquete, recibos, canales de guía, centinelas de privacidad de Cursor), configuración de hooks para ambos hooks (esquema, idempotencia, rechazo de corrupción), e integración MCP (las 10 herramientas más metadatos de servidor derivados del paquete).

Hoja de ruta

v0.4: "Piensa en redes" — Activación en propagación, búsqueda semántica mediante embeddings, herramientas de análisis de brechas, arnés de evaluación.

Licencia

MIT