mcpField
R
Rekindle

Rekindle

本地服务
github.com/Skitchy记忆与知识5今天更新

关于 Rekindle

Rekindle 是面向 Claude Code 用户的本地会话连续性 MCP 服务,使用 SQLite 保存记忆、检查点和压缩前捕获内容。它会在会话开始时整理项目上下文,并在结束或上下文压缩时记录后续工作所需信息。

主要功能

  1. 01启动时生成上下文导向报告
  2. 02结束会话时记录结构化检查点
  3. 03压缩前捕获会话内容
  4. 04按重要性搜索并管理记忆
  5. 05检测上下文缺口并评分

适用场景

  1. 01跨会话恢复项目进度
  2. 02压缩上下文前保存推理与待办
  3. 03按项目查找偏好和历史记录
  4. 04启动时发现缺失或过时信息

MCP 相关

Rekindle 作为本地 MCP 服务,向 MCP 客户端提供会话导向、记忆搜索与管理、检查点及捕获内容读取等能力。README 展示了 Claude Code、Claude Desktop 和 Cursor 的配置方式。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"rekindle": {
"command": "npx",
"args": [
"-y",
"rekindle"
]
}
}
}
启动命令npx -y rekindle

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npmrekindle0.5.0

工具

10

收录的工具列表 · 更新于 3 周前

参数类型必填说明
contentstring是要存储的记忆内容。纯文本,无长度限制。内容应完整自洽,因为后续检索时可能不会提供周边上下文。
categoryenum否记忆类别。用于确定记忆在方向评估中的权重:“preference”和“relationship”会影响方向评分。“context”用于检查点和会话交接。“lesson”用于约束和警告。“general”为默认兜底类别。preference | lesson | context | relationship | general
importancenumber否重要性评分,范围为 1(低)到 10(关键)。重要性较高的记忆会优先显示在搜索结果中。约束默认为 9,检查点默认为 8,常规备注默认为 5。
projectstring否用于限定此记忆范围的项目名称。设置后,boot_report 可将方向评估筛选到此项目。跨项目记忆请省略。

详细介绍

Rekindle

npm CI license Glama score

为 Claude Code 用户打造,解决每次会话都要重新解释项目背景而浪费时间的问题。

npx rekindle init

你的 AI 会忘记会话之间的一切。Rekindle 帮你解决这个问题。


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_MESSAGES80捕获的最大消息数
REKINDLE_PRECOMPACT_MAX_CHARS120000捕获的最大字符数
REKINDLE_BASE_DIR已解析(见下文).rekindle/ 的基础目录

存储根目录解析。 所有 Rekindle 入口点(服务、PreCompact 钩子)都按以下顺序通过同一规则解析存放 .rekindle/ 的目录:

  1. 如果设置了 REKINDLE_BASE_DIR,则使用该路径——明确指定的路径始终优先
  2. 当 REKINDLE_DB_PATH 指向规范的 <base>/.rekindle/db/ 布局时,从该路径推导
  3. 当前工作目录中已存在的 .rekindle/(当前工作目录为文件系统根目录时除外)
  4. 主目录中已存在的 .rekindle/
  5. 否则使用主目录——绝不使用启动目录

规则 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

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。