关于 Project Memory
Project Memory 是面向编码 Agent 的本地 MCP 服务,将项目决策、问题记录和偏好保存在仓库的普通文件中。它支持跨项目搜索与持续记忆,不依赖后台服务。
主要功能
- 01读取和搜索项目记忆
- 02记录决策、经验与偏好
- 03记录并检索问题历史
- 04跟踪和关闭未解决问题
- 05管理多阶段计划
适用场景
- 01调试前查找以往问题和修复
- 02为新会话恢复项目背景
- 03记录团队代码习惯和项目决策
- 04跨项目查看待处理问题
MCP 相关
MCP 服务提供读取、搜索和更新项目记忆的工具,包括问题追踪与计划管理;记忆本身以普通文件保存在磁盘上。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
npx -y @kaaustubh/project-memory-mcpPROJECT_MEMORY_ROOTAbsolute path to the folder that holds your projects (the memory root). Defaults to the parent of the script if unset, so set it when running via npx.本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
12收录的工具列表 · 更新于 3 周前
此工具无需参数。
详细介绍
project-memory MCP 服务
一个小型、本地的 MCP 服务,为 AI Agent(Claude Code、Cursor、VS Code / GitHub Copilot 等)提供代码文件夹中各个项目的共享持久记忆——包括每个项目的用途、已做出的决策,以及开发过程中遇到的每个 bug/问题。
它是无状态的:每个工具都会读取/写入磁盘上的纯文本文件,因此多个客户端(以及多台机器)共享同一个事实来源。
模型
| 层 | 存放位置 | 自动加载到上下文中? | 用途 |
|---|---|---|---|
| 项目记忆 | <project>/AGENTS.md | ✅ 是(通过 CLAUDE.md → @AGENTS.md) | 项目身份、技术栈、运行命令、简明决策/经验——保持精简 |
| 问题日志 | <project>/issues.jsonl | ❌ 否 | 大量 bug/问题历史——按需获取 |
设计原则: 持久、低频的信息放入 AGENTS.md(自动加载)。大量历史记录(bug)放入 issues.jsonl(通过 search_issues 查询)。这样既能让始终加载的上下文保持精简,又能确保所有内容都可搜索。
MCP 受限时也能正常工作
一些组织会通过策略禁用第三方 MCP 服务(例如 GitHub Copilot 的 MCP 允许列表强制机制)。 由于记忆是纯文本文件,而非服务,即便如此,核心价值仍然不受影响:
- 记忆本身只是文件。 编辑器读取
AGENTS.md时会自动加载——无需调用 MCP——因此项目身份、决策、经验和偏好仍会进入 Agent 的上下文。 - 该策略仅适用于 Copilot,且按客户端区分。 它不会影响 Claude Code 或 Cursor 中使用同一服务;采用仅允许列表 / 仅注册表模式的组织也可以允许使用它——此服务已发布到官方 MCP 注册表(
io.github.kaaustubh/project-memory-mcp)。
只有交互式工具(log_issue、search_issues 等)会通过 MCP 通道运行;基于文件的记忆无需 MCP 也能正常工作。
工具
list_projects、get_project、search_memory— 读取项目记忆append_decision、append_learning— 在AGENTS.md中追加一条带日期的列表项remember_preference— 将一次纠正/明确表达的习惯转化为记忆模式(全局习惯写入根目录AGENTS.md的## Preferences,项目专属习惯则写入对应项目的文件);通过自动加载机制生效,因此下次会话中仍可获取log_issue— 记录 bug/问题 →issues.jsonlsearch_issues— 跨所有项目搜索“之前遇到过这个问题吗?”(按字段限定;可选tags筛选)list_open_issues、resolve_issue— 跟踪/关闭 bugsync_registry— 根据磁盘上的内容同步根目录AGENTS.md中的项目表(为新项目添加行,标记过时项目)find_by_file— 根据文件路径,显示与之相关的问题和决策/经验(“这段代码为什么这样写?”)start_initiative、get_initiative、list_initiatives、update_initiative— 跟踪一个命名的多会话工作(代号、计划、不断更新的待办列表),让它可以在之后任意会话中按名称继续,而不仅限于启动它的会话;详见下文的计划事项check_in、check_out— 标记工作日的开始/结束,并根据从磁盘收集的证据生成站会摘要(所有仓库中的 git 提交、未提交的进行中工作、记忆写入、计划事项进展);第二天早上的check_in会返回该摘要——这就是你的站会。无需 Agent,随时可以打印:npx -y @kaaustubh/project-memory-mcp standup
你无需直接调用这些工具——只需用自然语言与 Agent 对话,它会选择合适的工具。关于实际该怎么说,请参阅下文的日常使用。
日常使用
大部分操作会自动完成:打开项目时会自动加载其 AGENTS.md(Agent 已了解该项目),并会主动捕获信息(还可选用 Stop 钩子)。你主要需要在合适的时候提取记忆。只需与 Agent 对话:
| 何时 | 可以这样说 | 触发的操作 |
|---|---|---|
| 开始调试前 | "以前遇到过这个吗?<paste error>" | 在所有项目中执行 search_issues |
| 开始处理你在其他地方做过的事情 | "我在任何项目里是怎么验证 Stripe webhook 的?" | 执行 search_memory(跨项目) |
| 遇到令人困惑的代码 | "index.js 为什么是这样?查一下记忆。" | 执行 find_by_file |
| 你做出了重要决定/修复了实际问题 | (无需操作——系统会自行记录并告知你) | 执行 append_decision / log_issue |
| 你纠正了 Agent 的工作方式 | "不,提交前一定要运行类型检查——记住这一点。" | 执行 remember_preference(全局或针对项目) |
| 分类处理 | "我的项目中还有哪些问题未解决?" | 执行 list_open_issues |
| 修复了一个问题 | "解决 pulse_stripe-004——通过……修复" | 执行 resolve_issue |
| 添加了新项目 | "同步注册表。" | 执行 sync_registry |
**最重要的习惯:每次调试前,都要条件反射般地问一句“以前遇到过这个吗?”。这正是记忆工具发挥作用的地方;其他事情由系统处理。
记录会先确认,不会悄无声息地进行——Agent 记录内容时会用一行话告知你。你可以随时纠正它:“别记录这个”,或者*“其实,这个也记录一下。”*
应急选项:PROJECT_MEMORY_HOOK=off 可在当前会话中停用 Stop 钩子;uninstall-hook 可彻底移除它。
安装(npm — 推荐)
在你的代码/项目文件夹中运行:
cd ~/code # the folder that holds your projects
npx -y @kaaustubh/project-memory-mcp install
这会将服务注册到本机所有具有 MCP 配置位置的客户端,并将当前目录设为项目根目录:
| 客户端 | 写入的配置 |
|---|---|
| Claude Code | 用户级,通过 claude mcp add 配置 |
| Cursor | ~/.cursor/mcp.json |
| VS Code / GitHub Copilot Chat | 用户配置文件中的 mcp.json(适用于每个工作区) |
| GitHub Copilot CLI | ~/.copilot/mcp-config.json(或 $COPILOT_HOME) |
| JetBrains Copilot 插件(IntelliJ、PyCharm、WebStorm、…) | ~/.config/github-copilot/intellij/mcp.json |
| Visual Studio(Windows) | %USERPROFILE%\.mcp.json — 全局配置,适用于所有解决方案 |
| Kimi Code CLI | ~/.kimi-code/mcp.json(或 $KIMI_CODE_HOME) |
| Gemini CLI | ~/.gemini/settings.json |
| OpenAI Codex CLI | ~/.codex/config.toml(唯一使用非 JSON 格式的客户端——以 TOML 合并) |
| Windsurf | ~/.codeium/windsurf/mcp_config.json |
每次写入都会合并到现有文件中(不会影响你已配置的其他 MCP 服务),并尽力独立完成——本机未安装的客户端会被静默跳过,其余客户端仍会完成注册。重启你使用的应用,然后向 Agent 说*“为这个文件夹设置项目记忆”*,为每个项目生成 AGENTS.md。
**Copilot 使用场景(VS Code、CLI、JetBrains、Visual Studio):**工具只能在 Agent 模式下运行,配置更改需要重启后才会生效。
无需克隆,无需全局安装——MCP 配置只会运行
npx,按需获取并运行最新版本。
**团队记忆(Beta 注册):**希望团队成员共享这些记忆,而不只是保存在你的机器上?请登记意向:https://github.com/kaaustubh/project-memory-mcp/issues/1
通过源码安装
git clone https://github.com/kaaustubh/project-memory-mcp.git ~/code/.memory-server
cd ~/code/.memory-server && ./install.sh
安装后的工作方式
常见问题:“安装后,它就会自动开始做事吗?” 不完全是—— 该服务是被动的。实际流程如下:
- 重启编辑器。 MCP 服务会在启动时加载,因此只有下次启动 Claude Code / Cursor / VS Code 时,该服务才会 可用。
- 推送层(自动执行,并非由服务完成): 打开项目时,编辑器会将
AGENTS.md(通过CLAUDE.md→@AGENTS.md)读入模型的上下文。这就是为什么 Agent“自然就知道”你的项目是什么——这是编辑器内置的功能。 - 拉取层(服务按需响应): 服务会公布其工具,然后等待。它不会自行执行任何操作。只有在相关时,Agent 才会调用工具——例如,你说 “记录这个 bug” 或 “以前遇到过这个问题吗?”,或者模型判断工具有用。没有后台进程,也不会进行扫描。
第一天是空的。 全新设置尚无
AGENTS.md文件,因此自动加载没有内容可加载,而且在项目记忆存在之前,log_issue会拒绝执行。请先让 Agent 初始化一次:“为这个文件夹设置项目记忆”——它会创建AGENTS.md文件。之后,一切就能正常运行。
简而言之:一套约定(自动加载的文件)+ Agent 自行决定是否使用的工具 + 一次性设置。 没有魔法,也没有守护进程。
主动记录(无需你说“记录这个”)
该服务提供了一套常驻的记录策略(连接时发送给客户端,并附带指令性工具描述),因此 Agent 会自行记录,而不是等你提出要求:
- 调试报告的问题之前 → 它会通过
search_issues查找以前的修复方案。 - 修复了非简单 bug 之后 → 它会调用
log_issue。 - 做出实际决策或发现值得长期记住的注意事项之后 → 调用
append_decision/append_learning。 - 你纠正了它的工作方式或说明了一种习惯之后 → 调用
remember_preference,这样一次性的纠正就会成为它在下次会话中重新提起的模式。
这是主动但不会悄无声息的:Agent 会用一句话告诉你它记录了什么;不确定时会先询问,而不是记录无关内容;也会跳过琐事和机密信息。你始终可以覆盖它的行为——说“记录这个”或“别管了”。常驻策略尽力而为(取决于模型是否遵循);如需硬性保证,请添加下方的选择启用型 Stop hook。
保证记录(选择启用型 Stop hook)
常驻策略可能会在会话中途被遗忘。Stop hook 可让记录变成必选项:当 Agent 尝试结束一轮时,它会运行一次,并在以下任一情况下阻止结束,要求进行一次记录:(a) 完成了实际工作(编辑文件或提交了更改),但项目记忆中没有任何记录;或 (b) 你纠正了它的工作方式,但没有保存偏好。如果已经写入记忆,或者没有任何更改且你也没有纠正它,hook 就会保持静默,让这一轮正常结束。
npx -y @kaaustubh/project-memory-mcp install-hook # turn it on (then restart Claude Code)
npx -y @kaaustubh/project-memory-mcp uninstall-hook # turn it off
- 默认关闭——普通的
install不会添加它;需要显式启用。 - 不会循环——每轮最多触发一次(由
stop_hook_active控制),之后就让 Agent 停止。 - 每会话紧急关闭开关——设置
PROJECT_MEMORY_HOOK=off即可禁用,无需卸载。 - 开销——只有在修改了代码却没有记录的会话中,或你纠正了 Agent 但没有保存偏好的情况下,才会额外增加一轮模型调用;其他情况下保持静默。
自动回忆(可选的 UserPromptSubmit hook)
捕获只是闭环的一半——另一半是记得查找。回忆 hook 补上了另一半:每次提交提示词时,它都会将你的请求与问题 历史记录以及决策/经验/偏好进行匹配,并静默注入最相关的内容作为 上下文。因此,过去的修复或决策会自动浮现,无需你(或 Agent)记得去搜索—— “以前遇到过这个吗?”的习惯就此自动养成。
npx -y @kaaustubh/project-memory-mcp install-recall # turn it on (then restart Claude Code)
npx -y @kaaustubh/project-memory-mcp uninstall-recall # turn it off
- 语义匹配(可用时)——如果安装了可选的嵌入模型
(
@xenova/transformers),回忆会按含义进行匹配,因此即使没有共同词语,记录为 *“编译失败”的问题仍会在你说“构建坏了”*时浮现。 完全离线运行(模型只获取一次,之后会缓存)。如果没有安装,回忆会自动回退到 关键词匹配——无需配置,也不会影响其他功能。 - 仅在相关时静默注入——对于无关紧要的提示词或没有匹配项时,不会注入任何内容。
- 排序并限制数量——当前项目的匹配结果优先级最高;最多注入 4 行。
- 默认关闭——与 Stop hook 一样,它是可选的(每次提示词都会产生开销)。普通的
install不会添加 这两个 hook。 - 按会话关闭——设置
PROJECT_MEMORY_RECALL=off,即可停用,而无需卸载。
**预热缓存:**在记录大量内容后(或启用回忆后运行一次),执行
npx -y @kaaustubh/project-memory-mcp reindex,预先为所有内容生成嵌入,这样首次回忆时 就无需承担这项开销。向量会按项目缓存在派生文件.embeddings.json中(可安全删除/加入 git 忽略;.jsonl+AGENTS.md始终是 唯一事实来源)。
配合 Stop hook 使用,整个流程便可自动运行:Stop hook 确保内容被 保存,回忆 hook 确保它们在恰当时机重新出现。
计划(跨会话的命名工作跟踪)
决策/经验记录的是已完成的事实,而 issues.jsonl 记录的是 bug 历史——
两者都无法容纳一个有名称、正在进行、跨多个会话的工作:“给它起个代号,
跟踪计划和待办事项,并让我即使在从未见过它的会话中,也能按名称恢复工作。”
这就是 start_initiative / get_initiative / list_initiatives /
update_initiative 的用途。
you: "Let's call this HashGate. Track the plan and todos under that name."
→ start_initiative(project, codename: "HashGate", plan: "...", todos: [...])
(new session, days later)
you: "Where did we leave off on HashGate?"
→ get_initiative(project, codename: "hash gate") # case/spacing-insensitive match
you: "Continue where I left off" (no codename given)
→ list_initiatives(project) # or omit project to search everywhere
每个计划都保存在独立文件 <project>/initiatives/<slug>.md 中——其中包含计划、
复选框待办清单和带日期的进度日志,均可直接编辑。项目的
AGENTS.md 中会在 ## Active Initiatives 下同步维护每个进行中计划的一行说明,
因此全新的会话无需调用任何工具,就能在自动加载的上下文中了解正在进行的工作。
将计划标记为 done 会移除该说明;文件本身会作为历史记录保留,仍可按名称查找。
在多台机器间同步
工具和你的记忆内容分别同步:
- **工具:**无需同步——
npx始终获取已发布的版本(如果你从源代码安装,则使用git pull更新)。 - **内容:**每个项目的
AGENTS.md+issues.jsonl都位于该项目自己的 git 仓库中,因此克隆项目时也会一并带上记忆。无需复制任何内容。
issues.jsonl包含真实的 bug 详情——只能将它提交到私有仓库中。
新项目脚手架
对于根目录下的新项目,创建 <project>/CLAUDE.md,内容为 @AGENTS.md,
并创建包含 ## What this is、## Stack & layout、
## Run / build / test、## Decisions、## Learnings 部分的 <project>/AGENTS.md。
更新日志
v1.11.1
- **修复:**重新生成了
package-lock.json——其中仍声明版本为1.8.3,而package.json已依次更新至 1.9.0/1.10.0/1.11.0。这是因为发布惯例只会更新package.json中的版本和McpServer({version})字符串,却从未刷新锁文件。这不会导致npm ci失败(已在 npm 10/11/12 上验证),但属于同一类版本漂移,曾在 v1.8.3 中导致 CI 完全无法运行。 - **修复:**现在
scripts/已加入files白名单,因此从已安装的包运行npm test也能正常工作。此前,冒烟测试未包含在发布的 tarball 中,因此执行npm install && npm test的容器构建规范会因MODULE_NOT_FOUND而失败——只有从仓库克隆中才能正常运行。 - **修复:**新增了
start脚本(node index.js),因此 CMD 为npm start的构建/部署规范不再会因缺少脚本而失败。 - **文档:**如果你在容器中构建此项目(Glama 的 Deploy 构建测试或自己的镜像),请使用
npm ci --omit=optional。完整的npm ci会为一个 36 KB 的服务拉取 276 MB 的node_modules——其中几乎全是可选嵌入向量依赖链(onnxruntime-node、onnxruntime-web、@xenova/transformers、sharp),它们还会在安装期间下载预编译二进制文件,在磁盘/时间受限或网络受限的构建环境中会失败。--omit=optional只需 25 MB,且 18 个工具仍会全部注册;语义召回会按 v1.6.0 的设计回退到关键词召回。推荐规范:Node 20 ·npm ci --omit=optional· CMDnode index.js。
v1.11.0
- **功能:每日工作日志——
check_in/check_out工具和standup子命令。**每天开始时说“check in”,结束时说“checkout”。Checkout 会从磁盘收集当天的证据——根目录下所有仓库中的 git 提交(无论是否有AGENTS.md;.memory-server本身也包括在内)、各仓库中尚未提交的 WIP、当天记录的记忆(问题/决策/经验/偏好),以及该时间段内有过改动的计划文件——然后 Agent 严格依据这些证据整理出 3–6 条的站会摘要并保存(这是一种两阶段工具协议,可在任何 MCP 客户端中使用,因为一天的工作通常跨越多个会话,而结束当天工作的 Agent 往往看不到这些会话)。第二天早上的check_in会返回上一个工作日的摘要(周一会返回周五的),以及尚未解决的事项(仍有未完成待办的进行中计划、未解决的问题);而npx -y @kaaustubh/project-memory-mcp standup [YYYY-MM-DD]无需 Agent,即可直接在终端打印摘要。每日记录保存在ROOT/.worklog/YYYY-MM-DD.json中——时间戳使用本地时间并带有时区偏移量,每天可以包含多个签到/签退时段(例如午休),遗忘签退时会在下次签到时自动结束,并根据时间戳还原记录。记录会在WORKLOG_KEEP_DAYS天后清理(默认 10 天):这是刻意设计为临时数据,与只追加、不删除的记忆文件不同。
v1.10.0
- 功能:
install现在还会注册 Kimi Code CLI(~/.kimi-code/mcp.json,或$KIMI_CODE_HOME——注意,这不同于使用~/.kimi/mcp.json的独立产品“Kimi CLI”)、Gemini CLI(~/.gemini/settings.json)和 Windsurf (~/.codeium/windsurf/mcp_config.json)——这三者都采用现有的mcpServers/不含type的架构,registerMcp已能处理 Cursor,因此每个只需添加一行。 OpenAI Codex CLI(~/.codex/config.toml)则需要实际处理:它是首个非 JSON 客户端,通过 TOML[mcp_servers.<name>]表进行配置。新增了registerMcpToml,采用基于文本的查找表/替换或追加合并方式(与appendBulletToFile的标题匹配思路相同),而没有依赖 TOML 解析器——继续保持零硬依赖。发布前发现并修复了其中一个实际问题:第一版将表的内容匹配为“直到下一个字面量[之前的所有内容”,但args = [...]数组也会用到[,导致表内容被截断——现已改为匹配“直到下一行以[开头的内容”,并通过预置了无关表的 config.toml 验证了多次运行install后结果仍具幂等性。
v1.9.0
- 功能:计划事项。 新增四个工具——
start_initiative、get_initiative、list_initiatives、update_initiative——用于跟踪一项有名称、跨多个会话的工作(代号、计划、不断更新的待办列表),使其今后可在任意会话中按名称恢复,而不局限于发起它的会话。此功能旨在解决一个真实的失败案例:有人使用另一个 Agent 的会话本地“代号”惯例时遇到问题——没有将名称映射到会话的持久注册表,待办事项仅保存在单个会话的私有存储中,而且查找时必须在原始记录中进行精确字符串匹配。这里通过为每项计划事项存储一个 Markdown 文件(<project>/initiatives/<slug>.md——内容可变,因此待办复选框可原地切换)来解决,并在项目自动加载的AGENTS.md中新增## Active Initiatives标题及同步的指向条目,让全新会话无需调用任何工具就能看到正在进行的事项。代号匹配不区分大小写和空格(slugify会先拆分驼峰边界,因此"HashGate"和"hash gate"会解析到同一项计划事项)。未指定项目时,list_initiatives会搜索所有项目,因此“我之前在做什么?”也不需要记得工作所在的仓库。
v1.8.3
- 基础设施: 新增了实际的 CI 工作流(
.github/workflows/ci.yml,Node 18/20/22 矩阵),并配套新增 stdio 冒烟测试(scripts/smoke-test.mjs——启动服务,执行initialize→tools/list握手,并断言 12 个工具均已注册),以及 CodeQL 工作流。此前这些内容完全缺失,因此 Glama 的质量页面显示“CI 状态不可用”和“未发现代码扫描结果”——这并不代表项目通过了健康检查,而是“从未测量过”。 - 修复: 重新生成了
package-lock.json——它是在解析@xenova/transformers并包含可选依赖之前生成的,因此在干净的 CI 运行器上执行npm ci会失败。此外还运行了npm audit fix(不会造成破坏性变更),修复了@modelcontextprotocol/sdk的传递依赖hono/body-parser/fast-uri的安全公告。已知问题:@xenova/transformers(可选依赖,为语义回忆功能提供支持)仍会通过onnxruntime-web/protobufjs/sharp依赖链带来 1 个严重和 4 个高危 CVE;唯一的修复方式是降级到存在破坏性变更的1.4.2,目前有意暂不处理——已列为后续事项。
v1.8.2
- 文档/元数据: 新增了
glama.json(声明maintainers),以通过 Glama 的“No glama.json”资料完整性检查。同时为此版本创建了实际的 GitHub Release(此前我们只推送了 git 标签,而 Glama 的“有发布版本”检查不会查看标签——它读取的是 Releases API)。
v1.8.1
- **文档:**根据 awesome-mcp-servers 的收录要求,在 README 中添加 Glama 质量评分徽章。使用
/badges/score.svg(真正的 SVG),而不是纯/badge路径——后者会返回 200,但提供的是 0 字节的image/png,也就是损坏的图片。
v1.8.0
- 功能:
install现在还会注册 GitHub Copilot CLI(~/.copilot/mcp-config.json,或$COPILOT_HOME)、JetBrains Copilot 插件(IntelliJ/PyCharm/WebStorm/…)以及 Windows 上的 Visual Studio(全局.mcp.json),补齐 VS Code 注册(在 1.7.0 中添加)之外的所有 Copilot 平台。每个目标都会合并到现有配置中(保留其他服务),并独立尽力注册,因此未安装的客户端会被静默跳过,不会导致整个安装失败。不同客户端的架构各不相同(顶层键为mcpServers或servers;Copilot CLI 使用type: "local",IDE 内嵌版本使用type: "stdio")——实现前已对照各客户端的当前文档进行核实。所有五个目标的合并逻辑已整合到一个registerMcp()辅助函数中。
v1.7.0
- 功能:
install现在还会将服务注册到 VS Code / GitHub Copilot(用户配置文件中的mcp.json,因此适用于每个工作区),此前已有 Claude Code 和 Cursor 注册。其架构与 Claude/Cursor 不同(使用servers键,每个条目的类型为type: "stdio"),而 Copilot 工具仅在 Chat 的 Agent 模式下运行。
v1.6.2
- **文档:**添加了团队记忆测试版注册说明(README 安装部分 +
install子命令的控制台输出)——https://github.com/kaaustubh/project-memory-mcp/issues/1
v1.6.1
- **文档:**添加“即使 MCP 受到限制也能运行”说明——阐明基于文件的记忆(自动加载
AGENTS.md)即使在组织禁用了第三方 MCP 服务(例如 GitHub Copilot 的 MCP 允许列表)的情况下仍可使用,因为只有交互式工具会使用 MCP 通道。
v1.6.0
- 语义召回(可选的本地嵌入)。召回钩子现在会根据含义而非共同子串,将提示词与记忆进行匹配——*“构建失败了”可以找到记录为“编译失败”*的问题。该功能由本地离线嵌入模型提供支持(通过可选的
@xenova/transformers依赖使用Xenova/all-MiniLM-L6-v2);向量会按项目缓存到派生文件.embeddings.json中,并以内容哈希为键,因此编辑或移除的条目会自动失效。如果未安装模型,会自动回退到之前的关键词匹配——无需配置,也不会出问题。新增的reindex子命令会预先嵌入所有记忆,避免首次召回变慢。这补齐了长期推迟的“语义检索”功能,为召回和search_issues提供支持;关键词匹配仍是零依赖的基础方案。
v1.5.0
- **自动召回(可选的
UserPromptSubmit钩子)。**新增install-recall/uninstall-recall子命令,用于注册钩子。该钩子会将每条提示词与问题历史和决策/经验/偏好进行关键词匹配,并静默注入匹配度最高的内容作为上下文——这样即使无人记得搜索,先前的修复和决策也能浮现出来。这补上了记录↔召回循环的另一半。对于简单或无匹配的提示词保持静默(忽略通用填充词),当前项目中的匹配项优先级最高,最多注入 4 行。默认关闭;可通过会话级开关PROJECT_MEMORY_RECALL=off禁用。
v1.4.1
- 打包:添加了在官方 MCP Registry 中列出服务所需的
mcpName字段(io.github.kaaustubh/project-memory-mcp)。无功能变更。
v1.4.0
remember_preference— 将纠正内容转化为记忆模式。 新增工具,可在## Preferences下写入一条带日期的项目符号,写入位置可以是根目录的AGENTS.md(作用范围为global,适用于每个项目),也可以是单个项目的文件。由于偏好保存在会自动加载的AGENTS.md中,无需额外操作即可回忆:一次性纠正(“绝不添加共同作者署名”“提交前始终运行类型检查”)会在下个会话中再次生效,无需重新纠正。这让跨会话记忆不再局限于项目事实,也涵盖了你的工作偏好。- 感知纠正内容的 Stop hook + 记录策略。 常驻策略现在会在收到纠正后提示使用
remember_preference,而选择启用的 Stop hook 会扫描会话中的行为纠正短语(“从现在起……”“不,不要……”“始终使用……”):如果你纠正了 Agent,但没有保存偏好,它会阻止停止一次并询问——这是现有“代码有变更但未记录”检查之外的第二个独立触发原因。
v1.3.2
- 文档:新增 **“日常使用”**一节,介绍对应各个工具的自然语言提示词、一个重要习惯(“之前遇到过这个问题吗?”)以及退出方式。明确说明,你是与 Agent 对话,而不是直接调用工具。
v1.3.1
- Stop hook:将直接编辑记忆也计为记录。 之前,hook 只识别
mcp__project-memory__*工具调用,因此直接编辑AGENTS.md/issues.jsonl(一种认可的记录方式)仍会触发提醒。现在,hook 也会将对文件名以AGENTS.md或issues.jsonl结尾的文件执行Edit/Write视为已记录,从而消除误报。 append_decision/append_learning:不再产生重复章节。 标题匹配原先要求整行完全匹配(^## Learnings$),因此带有尾随文本的标题(## Learnings (gotchas …))无法匹配,导致追加了重复章节。现在只匹配标题的开头词。
v1.3.0
- 确保记录(选择启用的 Stop hook)。 新增
install-hook/uninstall-hook子命令,用于注册 Claude CodeStophook。当会话修改了代码却未将任何内容记录到记忆中时,该 hook 会强制执行一次记录操作,将尽力而为的策略变为硬性保证。默认关闭,每轮最多触发一次(不会循环),在没有变更或记忆已写入时保持静默,并可通过PROJECT_MEMORY_HOOK=off按会话禁用。
v1.2.0
- 更精准的问题搜索。
search_issues现在只匹配文本字段(symptom/cause/fix/id/tags),而不再匹配原始 JSON,因此查询不会再因字段名而产生误命中。新增可选的tags筛选条件;query现在也可省略(仅按标签搜索)。 sync_registry。 将根目录AGENTS.md中的项目表与磁盘上的项目进行同步:为表中缺失的项目添加占位行,标记目录已不存在的行,并报告仍在处理的问题数量。自动完成此前需要手动执行的“新建项目 → 添加一行”步骤。保留手动维护的列;apply=false仅报告差异。find_by_file。 给定文件路径/片段后,返回涉及该文件的问题(通过其files字段),以及提及该文件的决策/经验(通过AGENTS.md中的项目符号)——将代码与记忆关联起来,解答“这段代码为什么会这样?”
v1.1.1
- 仅更新文档:将更新日志发布到 npm 页面,以保持内容一致(无功能变更)。
v1.1.0
- 主动记录。 Agent 现在会自行记录记忆,而不再等待你说“记录这个”:常驻记录策略会在
initialize时发送,写入/搜索工具的描述也会明确指示记录操作。Agent 会告知你记录了什么,在不确定时会询问,并跳过琐事和机密信息。仍可通过显式调用覆盖默认行为。 - 文档:新增“安装后的工作方式”和“主动记录”章节。
v1.0.1
- 修复
npx … install因“找不到命令”而失败的问题——将二进制文件重命名为project-memory-mcp,使其与未限定作用域的包名一致(符合 npx 解析规则)。
v1.0.0
- 首次发布:基于
AGENTS.md和issues.jsonl的无状态 MCP 服务,包含 9 个工具 (项目记忆和问题跟踪)、用于 Claude Code 和 Cursor 的npx … install,以及 推送/拉取记忆模型。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。