The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the Rekindle listing page.
For Claude Code users who lose time re-explaining project context every session.
Your AI forgets everything between sessions. Rekindle fixes that.

Rekindle is an MCP continuity engine that solves session orientation, not just storage. Orient at session start, capture at session end, survive mid-session compaction. All local, all SQLite, zero API keys.
v0.3.3 — version-consistent MCP metadata and package documentation, on top of v0.3.2's one-command session-start delivery installer. Release notes
Requires Node.js 20 or newer.
This creates .rekindle/ in your project with a SQLite database, identity template, captures directory, and transcript directory. Then add the MCP server config for your client:
Add to ~/.claude.json:
Enable PreCompact protection (captures context before mid-session compaction):
Enable session-start orientation delivery — the budgeted orientation packet arrives automatically at startup, resume, /clear, and /compact, so the model re-orients at every context boundary without being asked:
Both hooks are opt-in; plain init never installs either. npx rekindle init --with-hooks --with-delivery does everything in one line.
Add to claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\):
Add to .cursor/mcp.json in your project root:
Then fill in .rekindle/identity.md and paste the boot instructions into your project's CLAUDE.md.
Session 1 stores. Session 2 remembers. Session 10 anticipates.
Over 43 sessions, we measured what an AI assistant failed to load at session start:
| Metric | Value |
|---|---|
| Sessions analyzed | 43 |
| Clean boots (all context loaded) | 33% |
| High-signal failures (5+ gaps) | 26% |
| Total retrieval failures | 173 |
Existing memory tools (Mem0, Letta, Zep) optimize for retrieval accuracy: can the AI find what it stored? That's necessary but not sufficient. None of them address whether the AI loaded the right context for this session, or whether it can detect what it missed.
Rekindle solves session orientation: loading identity, recent context, memory health, and missing-context warnings before the assistant starts work.
See docs/gap-analysis.md for the full research dataset.
boot_report runs an orientation pipeline before any work begins:
Mid-session compaction destroys reasoning chains, failed approaches, relational texture, and tone. The PreCompact hook fires automatically before compaction and saves what would otherwise be lost:
Three read modes control token cost:
end_session stores structured continuity records — not just a summary:
| Field | What it captures |
|---|---|
checkpoint | Where we left off (required) |
decisions | What was decided and why |
open_loops | Unresolved tasks or questions |
constraints | Boundaries that must not be violated |
relational_delta | What changed in the working relationship |
next_session_focus | Where to resume next session |
preferences | New user preferences learned |
warnings | Things next session should watch for |
All records stored with type, source, and session_id metadata. Next boot_report loads the checkpoint automatically.
| Tool | Description |
|---|---|
store_memory | Store with content, category, importance (1-10), and project scope |
search_memory | Full-text search with BM25 ranking, boosted by importance |
list_memories | Browse memories, newest first. Filter by category or project |
delete_memory | Delete by ID |
update_memory | Update content, category, or importance |
list_captures | List PreCompact captures (optionally filter by session) |
read_capture | Read a capture in summary, structured, or raw mode |
capture_now | Manually capture current session context on demand |
Categories: preference lesson context relationship general
A static file is passive. Your AI reads it, but it can't search it, rank it, track what's been retrieved, or tell you what's missing. Rekindle adds:
v0.3.3
v0.3.2
npx rekindle setup-delivery (or init --with-delivery) configures the SessionStart hook opt-in: idempotent, preserves other tools' hooks, refuses corrupted settings filesv0.3.1 — "Five Measured Gates"
rekindle session-start emits a budgeted orientation packet via the SessionStart hook at startup, resume, /clear, and /compact/); explicit resolution order, fail-loudsession-start --client cursor with whitelist stdin parsing; email and workspace paths never reach receiptsv0.3.0 — "Survive the Long Middle" added the PreCompact capture system, open loops, and review tracking — v0.3.0 release notes
| Command | Description |
|---|---|
npx rekindle init | Set up .rekindle/ in current directory |
npx rekindle init --global | Set up in home directory |
npx rekindle init --with-hooks | Init + configure PreCompact capture hook |
npx rekindle init --with-delivery | Init + configure SessionStart delivery hook |
npx rekindle setup-hooks | Configure PreCompact capture hook (standalone) |
npx rekindle setup-delivery | Configure SessionStart delivery hook (standalone) |
npx rekindle session-start | Emit budgeted orientation packet (SessionStart hook) |
npx rekindle session-start --client cursor | Same, in Cursor's hook response shape |
npx rekindle precompact-capture | Capture context before compaction (hook) |
npx rekindle capture-now | Manually capture current session context |
npx rekindle | Start MCP server (used by Claude Code) |
The setup-hooks command writes this to .claude/settings.local.json:
The hook receives session context on stdin (session_id, transcript_path, cwd, hook_event_name) and writes captures to .rekindle/captures/.
| Variable | Default | Description |
|---|---|---|
REKINDLE_PRECOMPACT_MAX_MESSAGES | 80 | Max messages to capture |
REKINDLE_PRECOMPACT_MAX_CHARS | 120000 | Max characters to capture |
REKINDLE_BASE_DIR | Resolved (see below) | Base directory for .rekindle/ |
Storage root resolution. All Rekindle entry points (server, PreCompact hook) resolve the directory holding .rekindle/ through one rule, in order:
REKINDLE_BASE_DIR, if set — explicit always winsREKINDLE_DB_PATH, when it points at a canonical <base>/.rekindle/db/ layout.rekindle/ in the current working directory (never when cwd is the filesystem root).rekindle/ in your home directoryRules 3 and 5 exist because some hosts (e.g. Claude Desktop) spawn MCP servers at cwd=/; a spawn point is not a storage location. If storage cannot be created, the server exits with a message naming the fix instead of a stack trace.
setup-hooks) and the delivery hook (setup-delivery) must be requested explicitly, by command or by flag. Plain init never installs either..rekindle/ is gitignored. The init command handles this automatically."Full delivery" means the orientation packet arrives automatically at session boundaries and the model demonstrably sees it — measured with canary probes at both the receipt layer and the model layer, not assumed. Details and evidence: compatibility spike results.
| Client surface | MCP tools | Session-start delivery |
|---|---|---|
| Claude Code terminal (macOS) | Tested | Full delivery, measured (startup, resume, /clear, /compact) |
| Claude Code terminal (Windows) | Tested | Full delivery, measured |
| Claude Code terminal (Linux/WSL2) | Tested | Hook channel identical; delivery measurement pending |
| Claude Desktop, Code surface | Tested | Full delivery, measured (/clear re-delivers via new-session startup) |
| Claude Desktop, chat surface | Tested | Tool-mode only: hooks unsupported by the client; guidance reachable via the model's tool-search |
| Cursor | Tested | Via .cursor/hooks.json, measured (see below) |
| Any MCP stdio client | Compatible | Depends on the client's hook support |
writes this to .claude/settings.local.json:
The packet is capped at 8,000 valid UTF-8 bytes — measured: when hook output exceeds the host's limit, the model sees only the leading portion, with no error surfaced. If sections are dropped to fit the budget, an in-packet marker says so, and the receipt in .rekindle/receipts/session-start.jsonl records exactly what was emitted without ever claiming the model saw it.
Cursor's hook system can deliver the budgeted orientation packet at session
start, measured working in the v0.3.1 compatibility spike. Setup is manual
and opt-in — Rekindle never installs hooks without being asked. Add to
.cursor/hooks.json in your project:
Privacy: Cursor's hook payload includes your account email and workspace
paths. The adapter treats that payload as personal by default: it extracts
only the session ID and workspace root (used in-process for storage
resolution), and neither the raw payload, the email, nor any path is ever
written to receipts or any other artifact. Background agents are bypassed by
default (truthfully receipted); opt in with REKINDLE_ORIENT_BACKGROUND_AGENTS=1.
Storage: SQLite + FTS5 via better-sqlite3. BM25 ranking boosted by importance. Typed records with type, source, session_id.
Transport: stdio (standard MCP). Works with Claude Code out of the box.
148 tests: storage CRUD + FTS5 ranking, orientation domain (gap detection, scoring, service, rendering), capture manager (parsing, limits, review tracking, formatting), delivery (packet budget, receipts, guidance channels, Cursor privacy sentinels), hook setup for both hooks (schema, idempotency, corruption refusal), and MCP integration (all 10 tools plus package-derived server metadata).
v0.4: "It thinks in networks" — Spreading activation, semantic search via embeddings, gap analysis tooling, eval harness.
MIT