ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

projectmem:让 AI 编码助手“长记性“!这个 MCP 专治重复踩坑,还能省 50% Token

projectmem:让 AI 编码助手“长记性“!这个 MCP 专治重复踩坑,还能省 50% Token 项目名projectmemriponcm/projectmemGitHubGitHub - riponcm/projectmem: Open-source coding agents memory. Records issues, attempts, fixes and decisions, then warns your agent before it repeats an approach that already failed. Native MCP server for Claude Code, Cursor, Antigravity and Codex. 100% local, no cloud, no telemetry. MIT. · GitHub 官网Open-source coding agent memory for Claude Code, Cursor Codex — projectmem 版本v0.2.0 协议MIT Star7452026-05 新建 语言Python 适用Claude Code / Claude Desktop / Cursor / Antigravity / Codex开篇AI 啥都好就是记性比鱼还差用 Claude Code / Cursor 写过两周以上代码的人大概率都遇到过这几个让你血压升高的瞬间同一个 bug上周刚花两小时修好今天 AI 又给你写出一模一样的错误方案上次试过某个库的某个版本不兼容踩了半天坑三个月后 AI 又推荐同一个每开一个新 sessionAI 都要把你项目里十几个关键文件重读一遍token 哗哗烧你跟它讲过一百遍我们项目用 MyBatis-Plus不要写 JPA下个 session 它又开始写 JPA 注解。模型不是不聪明是没有记忆皮层。每次对话都是从零开始。最近挖到一个项目projectmem专门治这个病2026 年 5 月刚上线名字很直白Local-first AI coding memory. Records issues, attempts, fixes and decisions, then warns your agent before it repeats an approach that already failed.最猛的一点它有一个**pre-commit warning**——AI 刚准备改代码它发现这个方案以前踩过坑直接弹警告阻止。其他所有记忆工具都只在事后总结它在事前拦。这篇是我在 Java 题库项目上实测一周的完整笔记包含 MCP 接入、工作流、token 节省对比、踩坑。目录projectmem 是什么和 claude-mem / mem0 / Letta 比有什么不一样核心概念Event、Judgment、PlanWindows 安装3 分钟搞定接入 Claude Code / Cursor 的 MCP 配置实战在一个 Spring Boot 项目里养出记忆Pre-commit Warning 实战演示15 个 MCP 工具速查Token 到底能省多少跨项目 Dashboard一张屏看所有仓库常见坑和解决方案适合谁 / 不适合谁一、projectmem 是什么按官方说法projectmem is an open-sourceagent memorylayer. It islocal-first: memory lives in a plain.projectmem/directory inside your repository, with no cloud, no account and no telemetry. A nativeMCP serverexposes 15 tools to Claude Code, Claude Desktop, Cursor, Antigravity and Codex.拆开看四个关键词1. Local-first所有记忆存在你项目里的.projectmem/目录your-project/ ├── .projectmem/ │ ├── events.jsonl # 只追加的原始事件日志 │ ├── plan.md # 你的意图、计划 │ ├── summary.md # AI 读的小文件 │ └── index/ # 派生索引gitignore └── src/...没有数据库、没有云、没有账号、没有遥测。MIT 开源随便审计。2. Event-sourced事件溯源它不存对话历史而是存结构化事件issue碰到的问题attempt尝试过的方案fix最终怎么修好的decision架构/技术决策note自由备注。每条事件有类型、时间、相关文件、上下文。这是它能做判断而不只是回忆的关键。3. Judgment判断层这是 projectmem 最特别的地方。它不只记发生了什么还会在 AI 准备动手时判断这个方案以前试过吗试过的话结果怎么样失败了要不要警告这就是pre-commit warning业界独一份。4. MCP 原生一个 stdio 子进程15 个工具Claude Code/Cursor 一连就用。不用跑后台服务、不用配端口。二、和 claude-mem / mem0 / Letta 比有什么不一样官方对比表2026 年 6 月快照能力projectmemclaude-memagentmemorymem0Letta/MemGPT核心定位记忆 判断会话抓取记忆引擎聊天记忆Agent 框架Pre-commit 失败预警✅独有❌❌❌❌过时记忆标记不删✅❌❌ 静默衰减❌❌可替换Supersede不丢历史✅❌❌❌❌记录架构决策✅❌❌无 MCP 也能用CLAUDE.md 导出✅❌❌❌跨项目记忆✅ 库级可验证 ROI 评分✅ A 到 F 钱❌❌❌❌纯文本可 grep✅ events.jsonl❌❌❌无需服务/数据库✅ stdio 文件❌❌❌❌ 要 Postgres无遥测、无账号✅❌ 默认开✅❌原生 MCP✅ 15 工具✅ 53 工具全局 Dashboard✅ 读时聚合❌ 中央存储❌❌可编辑意图plan ≠ memory✅ plan.md❌❌❌价格✅ 免费 MIT免费付费免费Freemium免费云几个关键差异claude-mem跑后台 worker37777 端口、默认开遥测mem0更新时会重写事实旧信息没了agentmemory用衰减算法自动降权甚至删除老记忆Letta要跑 Postgres 或云服务projectmem只追加、不删除、不静默改过时的记忆会被标记为 stale由你决定怎么处理。这设计哲学很对工程师胃口——审计日志就是只能追加。三、核心概念Event、Judgment、Plan3.1 Event事件五种类型每条都是 JSONL 一行{ id: evt_abc123, type: attempt, timestamp: 2026-08-21T10:30:00Z, summary: Tried Spring AI 1.0 M0 with DeepSeek, tool calls failed, files: [pom.xml, src/.../AiClientFactory.java], related_issues: [evt_xyz789], outcome: failed, failure_reason: Spring AI M0 DSML dialect missing for DeepSeek tool calls }3.2 Judgment判断pjm score给项目打 A 到 FA大量 issue/attempt/fix/decision 闭环AI 能从记忆里学到东西C有记忆但缺决策记录F只有碎片笔记没结构。还会折算成节省的 token / 美元——这是我见过最实在的 ROI 指标。3.3 Plan意图v0.2.0 新增的plan.md和记忆分开事件日志 发生了什么plan.md 你打算做什么。AI 可以直接编辑plan.md但不会把它混进事件历史。这解决了一个大问题以前想给 AI 写下一步计划要么改 CLAUDE.md污染要么写到 issue断开。现在pjm plan一条命令搞定。四、Windows 安装3 分钟搞定4.1 前置Python 3.10一个支持 MCP 的 AI 编码工具Claude Code / Cursor / Antigravity / Codex4.2 安装pip install projectmem验证pjm --version4.3 在项目里初始化cd D:\develop\exam-bank pjm init会在项目根目录创建.projectmem/骨架并问你几个问题项目名、主要语言、技术栈摘要。4.4 让 AI 自己接 MCP最简单的方式直接让你的 AI 帮你配。在 Claude Code 里说帮我把 projectmem MCP server 配置到 Claude Code按它官方文档的方式来。AI 会自己改.mcp.json或~/.claude/mcp.json。它有文件系统和 shell30 秒搞定。当然你也可以手动配见下一节。五、接入 Claude Code / Cursor 的 MCP 配置5.1 Claude Code编辑~/.claude/mcp.json全局或项目根目录.mcp.json项目级{ mcpServers: { projectmem: { command: pjm, args: [mcp], env: { PROJECTMEM_PROJECT_ROOT: D:/develop/exam-bank } } } }Windows 如果pjm不在 PATH用绝对路径where pjm # 假设返回 C:Python311Scriptspjm.exe{ mcpServers: { projectmem: { command: C:\Python311\Scripts\pjm.exe, args: [mcp] } } }5.2 CursorSettings → MCP → Add new serverName:projectmemType:commandCommand:pjm mcp5.3 验证重启 Claude Code在对话框里用 projectmem 列一下当前项目的记忆摘要。AI 会调用get_summary()返回当前项目的 issue/fix/decision 概览。第一次是空的正常。六、实战在一个 Spring Boot 项目里养出记忆拿你自己的 AI 题库项目举例D:\develop\exam-bank。6.1 第一周让 AI 自动记录正常写代码、修 bug、做决策。每次解决一个问题告诉 AI用 projectmem 记一下我们刚踩了 PaddleOCR 在 Windows 上 MKLDNN 崩溃的坑最终方案是降级到 2.7.0 并关闭 mkldnn。或者更省事——直接说这次修 bug 的过程用 projectmem 记一下。AI 会自动调log_issue、log_attempt、log_fix把来龙去脉结构化存下来。6.2 典型事件示例你这项目里值得记的事件大概有Decision使用 DeepSeek 豆包双模型不直接绑定 OpenAIIssuePython 服务/api/files/{filename}路径穿越漏洞Attempt试图用 RAPIDOCR 替换 PaddleOCRWindows 兼容性问题FixCORS 配置只允许http://localhost:5173Noteapplication.yml里的 API key 已经是死配置真实配置走 DBDecision多租户改造暂不做单用户买断优先。6.3 一周后查看pjm score pjm contextpjm context会输出一份压缩的项目上下文~2500 token你可以直接放进 PR 描述、issue、或给新加入的 AI session。6.4 注入到 CLAUDE.mdpjm wrappjm wrap会把摘要和关键事件生成一个 markdown 片段你把它 include 到CLAUDE.md里任何 AI 工具不用 MCP 也能读到记忆。七、Pre-commit Warning 实战演示这是 projectmem 的杀手锏必须单独讲。7.1 场景你三个月前修过一个 bugIssueChatController 的 SSE 端点用sessionId查询参数但没做归属校验任何登录用户能看别人对话。Fix从HttpSession取当前用户 ID不再信任前端传参。三个月后新的需求让 AI 改 SSE它灵机一动写了GetMapping(value /stream, produces MediaType.TEXT_EVENT_STREAM_VALUE) public SseEmitter stream(RequestParam String sessionId) { ChatSession session chatService.getById(sessionId); // ... }7.2 projectmem 怎么拦MCP server 在代码被写入前会做一次判断扫当前 AI 准备改的文件、改的方式查事件日志有没有相关 failed attempt发现高度匹配直接返回pre-commit warning⚠️projectmem warning: This approach was attempted on 2026-05-12 and failed. Reason: Taking sessionId from query param without ownership check caused IDOR vulnerability. Fixed by: HttpSession.getAttribute(loginUser). Related files: ChatController.java, LoginInterceptor.java Are you sure you want to proceed?AI 看到警告会主动停下来告诉你这个方案以前踩过坑我们上次用 XXX 方案修的这次要不要同样处理7.3 为什么其他工具做不到mem0 / claude-mem 只做回忆不会主动判断当前动作它们返回的是你以前说过……projectmem 返回的是你现在要做的事以前失败过关键是事件类型和文件关联是结构化的不是模糊文本匹配。这一个功能按官方 207 个事件的 dogfooding 研究能挡住约 23% 的重复错误。八、15 个 MCP 工具速查按用途分四组8.1 读工具作用get_summary()当前项目浓缩摘要~500 tokenget_issue(id)取某个 issue 详情和相关 attempts/fixeslist_events(filter)按类型/文件/时间筛选search_events(query)全文搜索list_stale()列出过时但未删除的记忆get_plan()读 plan.md8.2 写工具作用log_issue(...)记录新问题log_attempt(...)记录某次尝试含 outcomelog_fix(...)记录最终修复log_decision(...)记录架构决策log_note(...)自由备注supersede(old_id, new_id)标记某条记忆被新的替代不删旧的edit_plan(content)写 plan.md8.3 判断工具作用check_context(files, intent)pre-commit 判断返回 warning 或 passget_score()A 到 F token 节省估值8.4 维护工具作用reindex()重建派生索引调用都是 AI 自动触发你不用记。只有check_context是它在你每次准备让 AI 改代码前自动跑。九、Token 到底能省多少官方给的数据我自己用下来也差不多访问模式Token / session工作方式不用 projectmem基线5,000 – 20,000AI 每次重读源文件通用模式markdown 注入~2,500AI 一次读 3 个小文件MCP 模式推荐~800 – 1,500AI 先get_summary()按需取 issuepjm wrap预注入500 – 2,000预生成token 预算可控省 50-75%的关键是AI 永远不直接读events.jsonl那个文件会越来越大只读工具派生出的小摘要。需要细节时才按 ID 取单条事件。按 DeepSeek 价格算输入 ¥1/百万 token一个活跃项目一天跑 50 次 AI 会话一个月省下来大概 ¥30-80。Claude Sonnet 价格更贵省得更多。十、跨项目 Dashboard一张屏看所有仓库v0.2.0 新功能我挺喜欢pjm dashboard终端启动一个只读的跨项目视图所有pjm init过的仓库每个仓库的评分A 到 F、open issues、token 节省点击钻取到具体项目。关键设计Serverless by default纯本地读时聚合不跑后台服务加--serve才临时起个 HTTP 服务器CtrlC 就停每个项目的记忆永远只存在自己的 .projectmem 目录里dashboard 不集中存储。对于同时维护七八个项目的人比如你既写 Java 后端又写 Python 服务又写 Vue 前端这个视图能让你一眼看出哪个项目最近踩坑最多哪个项目缺决策记录评分低上个月在哪个项目上烧了最多 token。十一、常见坑和解决方案Q1pjm命令在 Claude Code 里报 not foundMCP 客户端 spawn 进程时不读 shell PATH。用绝对路径where pjm把返回的完整路径填进command。Q2MCP 连上了但 AI 不主动记录需要在CLAUDE.md或项目规则里加一句遇到 bug、尝试方案、修复、架构决策时主动调用 projectmem 记录。准备改代码前先 check_context。也可以装官方 skill如果有。Q3events.jsonl 越来越大怎么办这个文件就是给工具读的AI 永远不会直接读。体积到几十 MB 也不影响性能因为有派生索引。真介意可以pjm archive归档老事件。Q4怎么把记忆从 mem0 / Letta 迁过来v0.2.1 计划提供pjm import支持 mem0 / agentmemory / Letta / Claude session logs。当前可以手动导出 JSON 后用脚本批量log_note。Q5多人协作记忆会冲突吗.projectmem/events.jsonl建议提交到 Git团队共享记忆.projectmem/index/进.gitignore派生数据本地重建。事件只追加 Git 合并冲突好解。Q6能记录非编码事件吗比如产品决策能log_decision接受任意 tag。可以记产品决策、用户反馈、运营策略只要和项目有关。Q7Python 3.13 兼容吗官方支持 3.103.13 也能跑。某些依赖如 numpy 在 3.13 上可能需要新版本pip install -U projectmem即可。Q8AI 太激进乱记事件怎么办pjm config set auto_log off关掉自动记录只在你明确说记一下时记。或者在 CLAUDE.md 里写明只有 issue/fix 级别的事件才记不要记录琐碎的语法修改。十二、适合谁 / 不适合谁✅ 适合长期维护一个项目3 个月以上AI 会话开了几十上百次踩过的坑 AI 老重复踩同时管多个代码库想看清哪里最烧 token注重隐私不想要云端记忆服务团队协作想把为什么这么写沉淀成项目资产喜欢 Git、JSONL、纯文本这类能 grep、能 diff工具的工程师。❌ 不适合一次性脚本、demo、throwaway 项目记忆没价值完全不允许本地文件被 AI 工具读取的环境期待AI 自动变聪明而不愿意花一点精力整理事件的人重度依赖 Letta/MemGPT 那种 agent 框架自带记忆的方案。⚠️ 注意记忆质量取决于你和 AI 记录的质量前两周要有意识地喂Pre-commit warning 不是强制锁是提醒——最终决定权在你不要把密钥、密码、客户数据写进事件里即使是本地。最后总结projectmem 不解决AI 不够聪明的问题它解决的是**AI 永远是新人**的问题。Git 告诉你代码改成了什么样projectmem 告诉你为什么这么改、试过什么、什么失败了。花 10 分钟装上坚持记录 2 周你会发现同样的坑不再踩第二遍AI session 越来越懂你的项目token 账单肉眼可见下降。这是今年我用过性价比最高的 MCP 之一。项目地址GitHub - riponcm/projectmem: Open-source coding agents memory. Records issues, attempts, fixes and decisions, then warns your agent before it repeats an approach that already failed. Native MCP server for Claude Code, Cursor, Antigravity and Codex. 100% local, no cloud, no telemetry. MIT. · GitHub 官方文档User Guide — Setup, MCP clients, multi-project, cross-project memory — projectmem 论文[2606.12329] PROJECTMEM: A Local-First, Event-Sourced Memory and Judgment Layer for AI Coding Agents PyPIprojectmem · PyPI下一篇我准备写在一个 3 万行 Spring Boot 项目里养 projectmem 30 天AI 到底少踩了多少坑感兴趣的点关注。
返回列表