Rekindle

Um mecanismo de continuidade MCP local que ajuda o Claude Code a retomar o fio da meada entre sessões.

Documentação

Rekindle

npm tests license Glama score

Para usuários do Claude Code que perdem tempo reexplicando o contexto do projeto a cada sessão.

npx rekindle init

Sua IA esquece tudo entre sessões. Rekindle resolve isso.


Rekindle init demo

Rekindle é um mecanismo de continuidade MCP que resolve orientação de sessão, não apenas armazenamento. Oriente no início da sessão, capture no final da sessão, sobreviva à compactação no meio da sessão. Tudo local, tudo SQLite, zero chaves de API.

v0.3.3 — metadados MCP consistentes com a versão e documentação do pacote, sobre o instalador de entrega de início de sessão com um comando do v0.3.2. Notas de versão

Início Rápido

Requer Node.js 20 ou mais recente.

npx rekindle init

Isso cria .rekindle/ no seu projeto com um banco de dados SQLite, modelo de identidade, diretório de capturas e diretório de transcrições. Em seguida, adicione a configuração do servidor MCP para o seu cliente:

Claude Code

Adicione a ~/.claude.json:

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

Ative a proteção PreCompact (captura o contexto antes da compactação no meio da sessão):

npx rekindle setup-hooks

Ative a entrega de orientação no início da sessão — o pacote de orientação orçado chega automaticamente na inicialização, retomada, /clear e /compact, para que o modelo se reoriente em cada limite de contexto sem ser solicitado:

npx rekindle setup-delivery

Ambos os hooks são opcionais; o init simples nunca instala nenhum deles. O npx rekindle init --with-hooks --with-delivery faz tudo em uma linha.

Claude Desktop

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

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

Adicione a .cursor/mcp.json na raiz do seu projeto:

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

Em seguida, preencha .rekindle/identity.md e cole as instruções de inicialização no CLAUDE.md do seu projeto.

A sessão 1 armazena. A sessão 2 lembra. A sessão 10 antecipa.


O Problema (43 Sessões de Dados)

Ao longo de 43 sessões, medimos o que um assistente de IA falhou em carregar no início da sessão:

MétricaValor
Sessões analisadas43
Inicializações limpas (todo o contexto carregado)33%
Falhas de alto sinal (5+ lacunas)26%
Total de falhas de recuperação173

As ferramentas de memória existentes (Mem0, Letta, Zep) otimizam a precisão da recuperação: a IA consegue encontrar o que armazenou? Isso é necessário, mas não suficiente. Nenhuma delas aborda se a IA carregou o contexto certo para esta sessão, ou se ela consegue detectar o que perdeu.

Rekindle resolve a orientação de sessão: carregar identidade, contexto recente, saúde da memória e avisos de contexto ausente antes de o assistente começar a trabalhar.

Veja docs/gap-analysis.md para o conjunto completo de dados da pesquisa.


O Que Ele Faz

Inicialização: oriente no início da sessão

boot_report executa um pipeline de orientação antes de qualquer trabalho começar:

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]"

Sobreviva ao Meio Longo: captura PreCompact (v0.3)

A compactação no meio da sessão destrói cadeias de raciocínio, abordagens falhas, textura relacional e tom. O hook PreCompact dispara automaticamente antes da compactação e salva o que de outra forma seria perdido:

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

Três modos de leitura controlam o custo de tokens:

  • summary — um parágrafo, barato
  • structured — decisões/loops/avisos, moderado
  • raw — trecho completo da transcrição, caro (somente quando necessário)

Captura: feche o ciclo no final da sessão

end_session armazena registros estruturados de continuidade — não apenas um resumo:

CampoO que captura
checkpointOnde paramos (obrigatório)
decisionsO que foi decidido e por quê
open_loopsTarefas ou perguntas não resolvidas
constraintsLimites que não devem ser violados
relational_deltaO que mudou no relacionamento de trabalho
next_session_focusOnde retomar na próxima sessão
preferencesNovas preferências do usuário aprendidas
warningsCoisas que a próxima sessão deve observar

Todos os registros são armazenados com metadados type, source e session_id. A próxima boot_report carrega o checkpoint automaticamente.

Entre sessões: pesquise e gerencie

FerramentaDescrição
store_memoryArmazene com conteúdo, categoria, importância (1-10) e escopo do projeto
search_memoryPesquisa de texto completo com classificação BM25, reforçada por importância
list_memoriesNavegue pelas memórias, mais recentes primeiro. Filtre por categoria ou projeto
delete_memoryExclua por ID
update_memoryAtualize conteúdo, categoria ou importância
list_capturesListe capturas PreCompact (opcionalmente filtre por sessão)
read_captureLeia uma captura no modo resumo, estruturado ou bruto
capture_nowCapture manualmente o contexto da sessão atual sob demanda

Categorias: preference lesson context relationship general


Por que não apenas CLAUDE.md?

Um arquivo estático é passivo. Sua IA o lê, mas não pode pesquisá-lo, classificá-lo, rastrear o que foi recuperado ou dizer o que está faltando. Rekindle adiciona:

  • Pesquisa — texto completo com classificação ponderada por importância
  • Estrutura — escopo por categoria e projeto entre memórias
  • Orientação — carregamento proativo de contexto na inicialização, não apenas recuperação sob demanda
  • Detecção de lacunas — sinaliza identidade ausente, categorias vazias, dados desatualizados
  • Pontuação — checklist transparente para você saber quão orientada a IA está
  • Captura de sessão — fechamento estruturado com checkpoints, decisões e loops abertos
  • Sobrevivência à compactação — capturas PreCompact preservam o que os resumos achatam

Destaques das Versões

v0.3.3

  • Metadados de protocolo consistentes com a versão — a resposta de inicialização do MCP deriva sua versão dos metadados do pacote enviado, evitando desvio de versão de lançamento
  • Precisão da página do pacote — o README enviado ao npm identifica a versão atual antes de a tag e o pacote serem criados
  • 148 testes automatizados, além de uma verificação de artefato empacotado que compara os metadados do MCP com a versão do pacote instalado

v0.3.2

  • Instalação de entrega com um comando — npx rekindle setup-delivery (ou init --with-delivery) configura a adesão ao hook SessionStart: idempotente, preserva os hooks de outras ferramentas, recusa arquivos de configuração corrompidos
  • 147 testes automatizados

v0.3.1 — "Five Measured Gates"

  • Entrega no início da sessão — rekindle session-start emite um pacote de orientação orçado via hook SessionStart na inicialização, retomada, /clear e /compact
  • Pacotes orçados, recibos verdadeiros — pacotes limitam-se a 8.000 bytes UTF-8 válidos com um marcador de truncamento dentro do pacote; recibos atestam apenas a emissão e nunca afirmam visibilidade do modelo
  • Armazenamento seguro para desktop — a raiz de armazenamento nunca deriva do ponto de spawn (Claude Desktop inicia servidores MCP em /); ordem de resolução explícita, falha ruidosa
  • Orientação de canal duplo — a orientação do fluxo de trabalho viaja tanto nas descrições de ferramentas quanto nas instruções do MCP, deriva estruturalmente impossível
  • Adaptador Cursor — session-start --client cursor com análise de stdin na lista de permissões; e-mail e caminhos de workspace nunca chegam aos recibos
  • Medido, não presumido — cada afirmação acima é respaldada por uma medição publicada (evidência, resultados de spike)

v0.3.0 — "Survive the Long Middle" adicionou o sistema de captura PreCompact, loops abertos e rastreamento de revisão — notas de versão v0.3.0


Comandos CLI

ComandoDescrição
npx rekindle initConfigurar .rekindle/ no diretório atual
npx rekindle init --globalConfigurar no diretório inicial
npx rekindle init --with-hooksInicializar + configurar hook de captura PreCompact
npx rekindle init --with-deliveryInicializar + configurar hook de entrega SessionStart
npx rekindle setup-hooksConfigurar hook de captura PreCompact (autônomo)
npx rekindle setup-deliveryConfigurar hook de entrega SessionStart (autônomo)
npx rekindle session-startEmitir pacote de orientação orçado (hook SessionStart)
npx rekindle session-start --client cursorO mesmo, no formato de resposta de hook do Cursor
npx rekindle precompact-captureCapturar contexto antes da compactação (hook)
npx rekindle capture-nowCapturar manualmente o contexto da sessão atual
npx rekindleIniciar servidor MCP (usado pelo Claude Code)

Instalar a partir do Código Fonte

git clone https://github.com/Skitchy/rekindle.git
cd rekindle
npm install
npm run build
node dist/init/cli.js init
Configuração do Hook PreCompact

O comando setup-hooks grava isso em .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
          }
        ]
      }
    ]
  }
}

O hook recebe o contexto da sessão no stdin (session_id, transcript_path, cwd, hook_event_name) e grava capturas em .rekindle/captures/.

VariávelPadrãoDescrição
REKINDLE_PRECOMPACT_MAX_MESSAGES80Máximo de mensagens para capturar
REKINDLE_PRECOMPACT_MAX_CHARS120000Máximo de caracteres para capturar
REKINDLE_BASE_DIRResolvido (veja abaixo)Diretório base para .rekindle/

Resolução da raiz de armazenamento. Todos os pontos de entrada do Rekindle (servidor, hook PreCompact) resolvem o diretório que contém .rekindle/ por uma regra, em ordem:

  1. REKINDLE_BASE_DIR, se definido — o explícito sempre vence
  2. Derivado de REKINDLE_DB_PATH, quando aponta para um layout canônico de <base>/.rekindle/db/
  3. Um .rekindle/ existente no diretório de trabalho atual (nunca quando o cwd é a raiz do sistema de arquivos)
  4. Um .rekindle/ existente no seu diretório inicial
  5. Caso contrário: seu diretório inicial — nunca o ponto de spawn

As regras 3 e 5 existem porque alguns hosts (por exemplo, Claude Desktop) iniciam servidores MCP em cwd=/; um ponto de spawn não é um local de armazenamento. Se o armazenamento não puder ser criado, o servidor sai com uma mensagem indicando a correção em vez de um stack trace.

Privacidade e Segurança
  • Todos os dados são locais. Nada é enviado a servidores externos.
  • Sem chamadas de rede. O servidor MCP se comunica via stdio. Sem HTTP, sem telemetria, sem análise.
  • As transcrições contêm texto de conversa. Não ative a captura de transcrições se suas sessões contiverem segredos ou credenciais.
  • A instalação do hook é opcional. Tanto o hook de captura (setup-hooks) quanto o hook de entrega (setup-delivery) devem ser solicitados explicitamente, por comando ou por flag. O init simples nunca instala nenhum deles.
  • O banco de dados SQLite é um arquivo comum. Não é criptografado. Use criptografia de disco em nível de sistema operacional, se necessário.
  • .rekindle/ é ignorado pelo git. O comando init lida com isso automaticamente.
  • boot_report lê arquivos locais. Os caminhos não são isolados. Use apenas com clientes MCP e prompts em que você confia.

Compatibilidade

"Entrega completa" significa que o pacote de orientação chega automaticamente nos limites da sessão e o modelo demonstravelmente o vê — medido com sondas canário tanto na camada de recebimento quanto na camada do modelo, não presumido. Detalhes e evidências: resultados de spike de compatibilidade.

Superfície do clienteFerramentas MCPEntrega no início da sessão
Claude Code terminal (macOS)TestadoEntrega completa, medida (inicialização, retomada, /clear, /compact)
Claude Code terminal (Windows)TestadoEntrega completa, medida
Claude Code terminal (Linux/WSL2)TestadoCanal de hook idêntico; medição de entrega pendente
Claude Desktop, superfície CodeTestadoEntrega completa, medida (/clear reentrega via inicialização de nova sessão)
Claude Desktop, superfície de chatTestadoSomente modo ferramenta: hooks não suportados pelo cliente; orientação acessível via busca de ferramentas do modelo
CursorTestadoVia .cursor/hooks.json, medido (veja abaixo)
Qualquer cliente MCP stdioCompatívelDepende do suporte a hooks do cliente

Claude Code: orientação no início da sessão (opcional)

npx rekindle setup-delivery

escreve isto em .claude/settings.local.json:

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

O pacote é limitado a 8.000 bytes UTF-8 válidos — medido: quando a saída do hook excede o limite do host, o modelo vê apenas a porção inicial, sem nenhum erro exibido. Se seções forem descartadas para caber no orçamento, um marcador dentro do pacote indica isso, e o recibo em .rekindle/receipts/session-start.jsonl registra exatamente o que foi emitido, sem nunca afirmar que o modelo viu.

Cursor: orientação de início de sessão (opt-in)

O sistema de hooks do Cursor pode entregar o pacote de orientação orçado no início da sessão, medido no spike de compatibilidade v0.3.1. A configuração é manual e opt-in — o Rekindle nunca instala hooks sem ser solicitado. Adicione a .cursor/hooks.json no seu projeto:

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

Privacidade: o payload do hook do Cursor inclui seu e-mail de conta e caminhos do workspace. O adaptador trata esse payload como pessoal por padrão: ele extrai apenas o ID da sessão e a raiz do workspace (usados em processo para resolução de armazenamento), e nem o payload bruto, nem o e-mail, nem qualquer caminho são gravados em recibos ou qualquer outro artefato. Agentes em segundo plano são ignorados por padrão (com recibo verdadeiro); opte com REKINDLE_ORIENT_BACKGROUND_AGENTS=1.

Arquitetura
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/

Armazenamento: SQLite + FTS5 via better-sqlite3. Ranqueamento BM25 reforçado por importância. Registros tipados com type, source, session_id.

Transporte: stdio (MCP padrão). Funciona com Claude Code de fábrica.

Testes

npm test

148 testes: CRUD de armazenamento + ranqueamento FTS5, domínio de orientação (detecção de lacunas, pontuação, serviço, renderização), gerenciador de captura (análise, limites, rastreamento de revisão, formatação), entrega (orçamento de pacote, recibos, canais de orientação, sentinelas de privacidade do Cursor), configuração de hooks para ambos os hooks (esquema, idempotência, recusa de corrupção) e integração MCP (todas as 10 ferramentas mais metadados de servidor derivados do pacote).

Roadmap

v0.4: "Pensa em redes" — Ativação por propagação, busca semântica via embeddings, ferramentas de análise de lacunas, harness de avaliação.

Licença

MIT