关于 Rekindle
Rekindle 是面向 Claude Code 用户的本地会话连续性 MCP 服务,使用 SQLite 保存记忆、检查点和压缩前捕获内容。它会在会话开始时整理项目上下文,并在结束或上下文压缩时记录后续工作所需信息。
主要功能
- 01启动时生成上下文导向报告
- 02结束会话时记录结构化检查点
- 03压缩前捕获会话内容
- 04按重要性搜索并管理记忆
- 05检测上下文缺口并评分
适用场景
- 01跨会话恢复项目进度
- 02压缩上下文前保存推理与待办
- 03按项目查找偏好和历史记录
- 04启动时发现缺失或过时信息
MCP 相关
Rekindle 作为本地 MCP 服务,向 MCP 客户端提供会话导向、记忆搜索与管理、检查点及捕获内容读取等能力。README 展示了 Claude Code、Claude Desktop 和 Cursor 的配置方式。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
10收录的工具列表 · 更新于 3 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| content | string | 是 | 要存储的记忆内容。纯文本,无长度限制。内容应完整自洽,因为后续检索时可能不会提供周边上下文。 |
| category | enum | 否 | 记忆类别。用于确定记忆在方向评估中的权重:“preference”和“relationship”会影响方向评分。“context”用于检查点和会话交接。“lesson”用于约束和警告。“general”为默认兜底类别。preference | lesson | context | relationship | general |
| importance | number | 否 | 重要性评分,范围为 1(低)到 10(关键)。重要性较高的记忆会优先显示在搜索结果中。约束默认为 9,检查点默认为 8,常规备注默认为 5。 |
| project | string | 否 | 用于限定此记忆范围的项目名称。设置后,boot_report 可将方向评估筛选到此项目。跨项目记忆请省略。 |
详细介绍
Rekindle
为 Claude Code 用户打造,解决每次会话都要重新解释项目背景而浪费时间的问题。
npx rekindle init
你的 AI 会忘记会话之间的一切。Rekindle 帮你解决这个问题。

Rekindle 是一款 MCP 连续性引擎,解决的是会话衔接问题,而不只是存储。会话开始时梳理背景,会话结束时记录信息,在会话中途压缩上下文时也能延续。全部本地运行,全部使用 SQLite,无需 API 密钥。
v0.4.1 — --global 钩子设置现在会写入 ~/.claude/settings.json,这是 Claude Code 在每个项目中都会应用的文件(修复了 #25);初始化输出与本 README 保持一致。发行说明
快速开始
需要 Node.js 22 或更高版本。
npx rekindle init
这会在你的项目中创建 .rekindle/,其中包含 SQLite 数据库、身份模板、连续性策略、项目注册表、捕获目录和对话记录目录。然后为你的客户端添加 MCP 服务配置:
Claude Code
只需一条命令即可注册服务:
claude mcp add rekindle -- npx -y rekindle
或者手动将其添加到 ~/.claude.json:
{
"mcpServers": {
"rekindle": {
"command": "npx",
"args": ["-y", "rekindle"]
}
}
}
启用 PreCompact 保护(在会话中途压缩前捕获上下文):
npx rekindle setup-hooks
启用会话启动时的定向信息交付——预算内的定向信息包会在启动、恢复、/clear 和 /compact 时自动送达,因此模型会在每个上下文边界重新定位,无需提示:
npx rekindle setup-delivery
这两个钩子都是可选启用的;普通的 init 不会安装其中任何一个。npx rekindle init --with-hooks --with-delivery 可通过一条命令完成所有操作。
如果不使用 --global,这两个命令都会写入项目本地的 .claude/settings.local.json,因此钩子只会对在该目录中启动的会话运行。使用 --global 时,它们会写入用户范围的 ~/.claude/settings.json,Claude Code 会在此机器的每个项目中应用这些设置;请在相同范围注册服务,以便钩子触发时服务始终可用:claude mcp add --scope user rekindle -- npx -y rekindle(普通的 claude mcp add 仅对当前项目生效)。
会话启动交付会通过 .rekindle/projects.json 解析钩子的实际工作目录。默认情况下只匹配完全相同的根目录;只有当条目设置了 "include_descendants": true 时,嵌套目录才会继承配置。未映射或存在歧义的工作区会报告为 UNKNOWN PROJECT,绝不会接收来自其他项目的检查点或上下文记录。REKINDLE_PROJECT 仍可用于显式覆盖,回执会记录最终采用的解析规则。
.rekindle/policy.json 用于控制对话记录处理方式、启动字节预算以及数据包中的必需和可选部分。必需部分不可拆分:如果无法容纳,Rekindle 会生成有大小上限的失败清单,而不是不完整的锚点。可选部分会整体省略,并记录在回执中。将 "transcript_mode": "excluded" 设为排除,让 SessionStart 不读取对话记录文件或路径,并在定向信息评分中将对话记录覆盖率标记为 N/A。将 "background_writes_allowed": false 设为禁止后台写入,让自动 PreCompact 钩子退出而不创建捕获;手动捕获仍是独立的显式操作。
Claude Desktop
将以下内容添加到 claude_desktop_config.json(macOS:~/Library/Application Support/Claude/,Windows:%APPDATA%\Claude\):
{
"mcpServers": {
"rekindle": {
"command": "npx",
"args": ["-y", "rekindle"]
}
}
}
Cursor
将以下内容添加到项目根目录中的 .cursor/mcp.json:
{
"mcpServers": {
"rekindle": {
"command": "npx",
"args": ["-y", "rekindle"]
}
}
}
然后填写 .rekindle/identity.md,并将启动指令粘贴到项目的 CLAUDE.md 中。
会话 1 存储,会话 2 记忆,会话 10 预判。
问题所在(43 个会话的数据)
在 43 个会话中,我们测量了 AI 助手在会话开始时未能加载的内容:
| 指标 | 数值 |
|---|---|
| 分析的会话数 | 43 |
| 完整启动(已加载所有上下文) | 33% |
| 高信号缺失(5 项或更多) | 26% |
| 检索失败总数 | 173 |
现有记忆工具(Mem0、Letta、Zep)专注于优化检索准确率:AI 能否找到它存储的内容?这是必要条件,但并非充分条件。它们都没有解决 AI 是否为本次会话加载了正确的上下文,也没有解决 AI 能否检测到遗漏内容的问题。
Rekindle 解决的是会话定向问题:在助手开始工作前加载身份、近期上下文、记忆健康状态和上下文缺失警告。
完整研究数据集请参阅 docs/gap-analysis.md。
功能
启动:在会话开始时定向
boot_report 会在任何工作开始前运行定向流程:
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]"
挺过漫长的中场:PreCompact 捕获(v0.3)
会话中途的压缩会破坏推理链、失败的尝试、关系细节和语气。PreCompact 钩子会在压缩前自动触发,并保存原本会丢失的内容:
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
三种读取模式用于控制 token 开销:
- summary — 一个段落,开销低
- structured — 决策/循环/警告,开销中等
- raw — 完整的对话摘录,开销高(仅在需要时使用)
捕获:在会话结束时闭环
end_session 会存储结构化的连续性记录,而不只是摘要:
| 字段 | 捕获内容 |
|---|---|
checkpoint | 我们进行到哪里(必填) |
decisions | 做了什么决定,以及原因 |
open_loops | 尚未解决的任务或问题 |
constraints | 不得违反的边界 |
relational_delta | 工作关系发生了什么变化 |
next_session_focus | 下次会话从哪里继续 |
preferences | 新了解到的用户偏好 |
warnings | 下次会话需要留意的事项 |
所有记录都带有 type、source 和 session_id 元数据。下次 boot_report 会自动加载检查点。
会话之间:搜索和管理
| 工具 | 描述 |
|---|---|
store_memory | 存储内容、类别、重要性(1-10)和项目范围 |
search_memory | 使用 BM25 排名进行全文搜索,并按重要性加权 |
list_memories | 浏览记忆,按时间从新到旧排列。可按类别或项目筛选 |
delete_memory | 按 ID 删除 |
update_memory | 更新内容、类别或重要性 |
list_captures | 列出 PreCompact 捕获内容(可按会话筛选) |
read_capture | 以 summary、structured 或 raw 模式读取捕获内容 |
capture_now | 按需手动捕获当前会话上下文 |
类别: preference lesson context relationship general
为什么不直接用 CLAUDE.md?
静态文件是被动的。AI 可以读取它,却无法搜索、排序、跟踪已检索的内容,也无法指出缺失的信息。Rekindle 提供:
- 搜索 — 按重要性加权排名的全文搜索
- 结构 — 按类别和项目划分记忆范围
- 方向指引 — 启动时主动加载上下文,而不只是按需检索
- 缺口检测 — 标记缺失的身份信息、空类别和过时数据
- 评分 — 透明的检查清单,让你了解 AI 的方向感如何
- 会话捕获 — 通过检查点、决策和未完成事项进行结构化收尾
- 压缩后续存 — PreCompact 捕获内容可保留摘要压缩掉的信息
版本亮点
v0.4.1
--global钩子可在所有位置触发 —setup-hooks --global、setup-delivery --global和init --global --with-*现在会写入~/.claude/settings.json(用户范围),而不是~/.claude/settings.local.json;Claude Code 仅会在从主目录启动的会话中读取后者(#25)。项目本地设置不变。每条命令都会打印写入的文件- 未解析工作区警告会说明修复方法 — 当会话启动数据包无法将工作区映射到项目时,现在会说明未加载检查点,并指出两种解决方法:将工作区添加到所读取的注册表(项目存储使用
.rekindle/projects.json,--global存储使用~/.rekindle/projects.json),或设置REKINDLE_PROJECT。警告不会暴露注册表的绝对路径 - Init 输出与本 README 保持一致 —
init会优先显示claude mcp add rekindle -- npx -y rekindle(使用--global时显示claude mcp add --scope user ...,以便在全局钩子触发的位置注册服务),列出两个可选钩子(使用时附带--global),并在使用--global时打印~/.rekindle/...路径
v0.4.0
- 需要 Node.js 22 或更高版本 — Node 20 已于 2026 年 4 月结束生命周期,不再受支持;CI 使用 Node 22、24 和 26 运行
- 遵循策略的会话启动 —
.rekindle/policy.json控制转录处理方式(transcript_mode:captured、tail-read-only或excluded)、启动字节预算、必需与可选的数据包部分,以及后台钩子是否可以写入(background_writes_allowed) - 安全的项目交付 —
.rekindle/projects.json将工作区映射到项目;未映射或存在歧义的工作区会标记为UNKNOWN PROJECT,绝不会收到其他项目的检查点;REKINDLE_PROJECT是显式覆盖项 - 尾部模式下不显示转录文件名 — 在
tail-read-only模式下,数据包会显示转录尾部内容,但不显示文件名 - 原子化会话写入 — 会话行与审计行要么一起提交,要么都不提交
- 生产环境审计无问题 —
npm audit --omit=dev检查发现零个漏洞(生产依赖) - 更小的软件包 — npm 压缩包大小从约 1.9 MB 降至约 110 KB;证据和设计文档保留在 GitHub 上
v0.3.3
- 协议元数据与版本保持一致 — MCP 初始化响应从随包发布的元数据中获取版本,避免发布版本不一致
- 软件包页面信息准确 — 发布到 npm 的 README 会在创建标签和软件包之前标明当前版本
- 扩展自动化测试,并新增打包产物检查,用于比对 MCP 元数据与已安装软件包的版本
v0.3.2
- 一条命令安装交付功能 —
npx rekindle setup-delivery(或init --with-delivery)配置 SessionStart 钩子的启用选项:可重复执行、保留其他工具的钩子,并拒绝损坏的设置文件 - 147 项自动化测试
v0.3.1 — “五项实测门槛”
- 会话启动时交付 —
rekindle session-start通过 SessionStart 钩子,在启动、恢复、/clear和/compact时输出符合预算的定向数据包 - 数据包有预算,回执如实 — 数据包上限为 8,000 个有效 UTF-8 字节,并带有数据包内截断标记;回执仅证明内容已输出,绝不声称模型已看到内容
- 桌面端安全存储 — 存储根目录绝不根据启动位置推导(Claude Desktop 会在
/目录下启动 MCP 服务);采用明确的解析顺序,解析失败时立即报错 - 双通道指引 — 工作流指引同时通过工具描述和 MCP 指令传递,从结构上杜绝内容不一致
- Cursor 适配器 —
session-start --client cursor使用白名单解析 stdin;电子邮件和工作区路径绝不会进入回执 - 以实测为依据,而非凭假设 — 上述每项声明均有已发布的测量结果作为依据(证据,试验结果)
v0.3.0 — “挺过漫长的中途阶段” 新增了 PreCompact 捕获系统、未完成事项和审查跟踪 — v0.3.0 发布说明
CLI 命令
| 命令 | 说明 |
|---|---|
npx rekindle init | 在当前目录中设置 .rekindle/ |
npx rekindle init --global | 在主目录中设置;钩子写入 ~/.claude/settings.json |
npx rekindle init --with-hooks | 初始化并配置 PreCompact 捕获钩子 |
npx rekindle init --with-delivery | 初始化并配置 SessionStart 投递钩子 |
npx rekindle setup-hooks | 配置 PreCompact 捕获钩子(独立操作) |
npx rekindle setup-delivery | 配置 SessionStart 投递钩子(独立操作) |
npx rekindle session-start | 输出受预算限制的方向说明包(SessionStart 钩子) |
npx rekindle session-start --client cursor | 相同功能,但采用 Cursor 的钩子响应格式 |
npx rekindle precompact-capture | 在压缩前捕获上下文(钩子) |
npx rekindle capture-now | 手动捕获当前会话上下文 |
npx rekindle | 启动 MCP 服务(由 Claude Code 使用) |
从源代码安装
git clone https://github.com/Skitchy/rekindle.git
cd rekindle
npm install
npm run build
node dist/init/cli.js init
PreCompact 钩子配置
setup-hooks 命令会将以下内容写入 .claude/settings.local.json(使用 --global 时写入 ~/.claude/settings.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
}
]
}
]
}
}
钩子通过标准输入接收会话上下文(session_id、transcript_path、cwd、hook_event_name),并将捕获内容写入 .rekindle/captures/。
| 变量 | 默认值 | 说明 |
|---|---|---|
REKINDLE_PRECOMPACT_MAX_MESSAGES | 80 | 捕获的最大消息数 |
REKINDLE_PRECOMPACT_MAX_CHARS | 120000 | 捕获的最大字符数 |
REKINDLE_BASE_DIR | 已解析(见下文) | .rekindle/ 的基础目录 |
存储根目录解析。 所有 Rekindle 入口点(服务、PreCompact 钩子)都按以下顺序通过同一规则解析存放 .rekindle/ 的目录:
- 如果设置了
REKINDLE_BASE_DIR,则使用该路径——明确指定的路径始终优先 - 当
REKINDLE_DB_PATH指向规范的<base>/.rekindle/db/布局时,从该路径推导 - 当前工作目录中已存在的
.rekindle/(当前工作目录为文件系统根目录时除外) - 主目录中已存在的
.rekindle/ - 否则使用主目录——绝不使用启动目录
规则 3 和 5 是因为某些宿主(例如 Claude Desktop)会在 cwd=/ 时启动 MCP 服务;启动目录并非存储位置。如果无法创建存储目录,服务会退出并说明如何修复,而不是输出堆栈跟踪。
隐私与安全
- 所有数据都保存在本地。 不会向外部服务发送任何内容。
- 不会发起网络调用。 MCP 服务通过标准输入/输出进行通信,不使用 HTTP,也不收集遥测数据或分析信息。
- 对话记录包含对话文本。 如果会话中包含秘密或凭据,请勿启用对话记录捕获。
- 钩子安装需主动选择。 捕获钩子(
setup-hooks)和投递钩子(setup-delivery)都必须通过命令或标志明确请求。单独执行init绝不会安装任何一个钩子。 - SQLite 数据库是普通文件。 未加密。如有需要,请使用操作系统级磁盘加密。
.rekindle/已加入 Git 忽略列表。 init 命令会自动处理。- boot_report 会读取本地文件。 路径不受沙箱限制。仅与可信的 MCP 客户端和提示词搭配使用。
“完整交付”是指方向说明包在会话边界自动送达,且模型确实能看到它——通过在接收层和模型层进行金丝雀探测来测量,而非凭空假定。详情和证据:兼容性测试结果。
| 客户端界面 | MCP 工具 | 会话开始时交付 |
|---|---|---|
| Claude Code 终端(macOS) | 已测试 | 完整交付,已测量(启动、恢复、/clear、/compact) |
| Claude Code 终端(Windows) | 已测试 | 完整交付,已测量 |
| Claude Code 终端(Linux/WSL2) | 已测试 | Hook 通道相同;交付测量待完成 |
| Claude Desktop,Code 界面 | 已测试 | 完整交付,已测量(/clear 通过新会话启动重新交付) |
| Claude Desktop,聊天界面 | 已测试 | 仅工具模式:客户端不支持 hooks;可通过模型的工具搜索获取指导 |
| Cursor | 已测试 | 通过 .cursor/hooks.json,已测量(见下文) |
| 任意 MCP stdio 客户端 | 兼容 | 取决于客户端对 hooks 的支持情况 |
Claude Code:会话开始时的方向说明(可选启用)
npx rekindle setup-delivery
会将此内容写入 .claude/settings.local.json(或使用 --global 时写入 ~/.claude/settings.json):
{
"hooks": {
"SessionStart": [
{
"matcher": "startup|resume|clear|compact",
"hooks": [
{ "type": "command", "command": "npx rekindle session-start", "timeout": 60 }
]
}
]
}
}
数据包上限为 8,000 个有效 UTF-8 字节——经测量:当 hook 输出超过主机限制时,模型只会看到开头部分,且不会显示任何错误。如果为适应预算而删减部分内容,数据包内会有标记说明;.rekindle/receipts/session-start.jsonl 中的回执会准确记录实际发出的内容,但绝不会声称模型看到了这些内容。
Cursor:会话开始时的方向说明(可选启用)
Cursor 的 hook 系统可在会话开始时交付符合预算限制的方向说明包,经测量,已在 v0.3.1 兼容性测试中正常工作。设置需手动进行,且为可选启用——未经请求,Rekindle 绝不会安装 hooks。在项目的 .cursor/hooks.json 中添加:
{
"version": 1,
"hooks": {
"sessionStart": [ { "command": "rekindle session-start --client cursor" } ]
}
}
**隐私:**Cursor 的 hook 负载包含你的账户邮箱和工作区路径。适配器默认将该负载视为个人信息:只提取会话 ID 和工作区根目录(在进程内用于解析存储位置),原始负载、邮箱和任何路径都不会写入回执或任何其他产物。默认跳过后台 Agent(并如实记录回执);设置 REKINDLE_ORIENT_BACKGROUND_AGENTS=1 可选择启用。
架构
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 UTF-8 packet construction and atomic mandatory sections
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/
**存储:**通过 better-sqlite3 使用 SQLite + FTS5。BM25 排名根据重要性加权。类型化记录包含 type、source、session_id。
**传输:**stdio(标准 MCP)。开箱即用,适用于 Claude Code。
测试
npm test
该测试套件在 CI 中通过 Node 22、24 和 26 运行,涵盖:存储 CRUD + FTS5 排名、方向说明领域(差距检测、策略感知评分、项目解析、服务、渲染)、捕获管理器(解析、限制、审核跟踪、格式化)、交付(原子数据包预算、回执、指导通道、Cursor 隐私哨兵)、两个 hook 的设置(架构、幂等性、拒绝损坏配置),以及 MCP 集成(全部 10 个工具及基于软件包信息生成的服务端元数据)。
路线图
下一步:“以网络的方式思考”——扩散激活、通过嵌入实现语义搜索、差距分析工具、评估测试框架。
许可证
MIT
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。