projectmem 编程记忆
让编程代理记住失败尝试、修复与决策,并在重蹈覆辙前发出警告。
- Star 数
- ★ 868
- 最近更新
- 20 天前
- License
- MIT
- 主语言
- Python
- FA 评分
- 74/100 · 存在缺口
30 秒速览
- 运行形态
- 可在哪里用
- 通用 · 跨平台Codex · Claude Code · Claude.ai
- 费用
- 免费,无需付费服务
- 上手难度
- 中 · 需要几步配置
- 开始前需要
- 典型场景
- 经常切换或重开 AI 编程会话的开发者,用它保存昨天的调试失败、已确认修复和架构决定,避免下一次会话从零开始。
- 不适合
- 需要图形界面、不想碰终端和 Git 钩子的开发者
- 不愿在客户端配置绝对 Python 路径并冷启动重启的团队
- 需要云端同步或跨机器共享记忆的团队
- 源码审查
- 74/100 · 存在缺口
这个 Agent 能做什么,适合哪些场景?
projectmem 是面向 AI 编程代理的本地优先、事件溯源式记忆与判断层,记录问题、尝试、修复、决策和备注。它由 Python CLI、原生 MCP 服务器、Git 钩子、文件监视器、项目注册表以及本地可视化面板组成,并可通过一个 MCP 服务器访问多个已注册项目。每个项目的记忆保存在仓库内的 .projectmem/ 中,原始事件写入 events.jsonl,工具再生成供代理读取的精简摘要、问题文件和项目地图。预提交检查会结合失败历史、文件变更频率、未解决问题和可能过期的记忆,在提交前给出警告;旧记录不会被静默删除,而是可以标记过期或由新决策取代。它适合希望在 Claude Code、Claude Desktop、Cursor、Antigravity、Codex 或其他 MCP 客户端之间共享项目经验,同时坚持无账户、无遥测和本地存储的开发者。采用时需要接受 Python、Git 钩子、项目内记忆文件和客户端 MCP 配置带来的维护成本,并注意部分客户端必须完全重启才能加载服务器。
运行 pjm init 后,projectmem 创建 .projectmem/,安装预提交、提交后分类和合并后跟踪三个 Git 钩子,构建代码结构,并启动实时文件监视器。开发过程中可用 pjm log、pjm attempt、pjm fix、pjm decision 和 pjm note 写入带类型的事件;pjm regenerate 从 events.jsonl 重建 summary.md。MCP 客户端通过 get_instructions()、get_summary()、get_project_map()、get_plan()、get_issue(id) 和 search_events(query) 读取上下文,并通过 log_issue、record_attempt、record_fix、add_decision、add_note 写回经验。代理编辑文件前可调用 precheck_file(path),命令行上的 pjm precheck 则在提交前检查已失败方案、高频变更文件、未解决问题和可能过期的文件相关决策。pjm brief 生成会话开场简报,pjm context 与 pjm wrap 生成受令牌预算约束的上下文,pjm export --claude-md 或 --cursor 可把有效经验导出给不支持 MCP 的代理。pjm visualize 生成单项目六标签页本地面板,pjm dashboard 聚合所有已初始化项目,pjm map --build 从 Python 导入关系构建结构图并叠加失败热度。自 0.3.0 起,项目注册表允许单个 MCP 服务器路由到多个仓库;显式 --root 可将服务器严格限制在一个项目。
- 经常切换或重开 AI 编程会话的开发者,用它保存昨天的调试失败、已确认修复和架构决定,避免下一次会话从零开始。
- 同时维护多个仓库的工程师,用一个全局 MCP 配置连接所有已注册项目,并通过
project参数或活动项目选择写入目标。 - 担心代理重复修改高风险文件的团队,在提交前用
pjm precheck查看该文件的失败尝试、高频变更和可能过期的决策。 - 使用不支持 MCP 的 Copilot、普通 Claude 或其他文件读取型助手的用户,把当前决策、注意事项和不可重试清单导出到
CLAUDE.md或.cursorrules。 - 需要回顾研发过程或展示调试成本的项目,用本地面板、时间轴、问题链、失败热图和
pjm score查看记忆与估算的节省效果。 - 希望团队共享精炼经验但保留原始日志隐私的仓库,将摘要、项目地图、说明和问题文件提交到 Git,同时让原始
events.jsonl保持忽略状态。
如何安装或部署这个 Agent?
需要 Python、Git 仓库以及可执行 shell。首次安装或升级:
pip install -U projectmem进入目标仓库并初始化:
cd your-project
pjm init若已有旧项目或正在从 0.1.x/0.2.x 升级,先扫描,再注册发现的项目:
pjm doctor
pjm doctor --fix不需要账户、API 密钥或云端服务。默认运行不需要网络;只有显式使用 pjm doctor --online、--auto 或在面板点击更新检查时才会查询新版本。
如何使用这个 Agent?
先查看会话简报和已有记忆:
pjm brief
pjm show记录一次完整的问题处理过程:
pjm log "authentication callback returns an empty session"
pj m attempt "increase callback timeout" --failed上例第二条命令在来源中没有这种带空格的别名写法;实际应使用:
pjm attempt "increase callback timeout" --failed
pjm fix "preserve the session cookie during callback"在编辑或提交前检查历史风险:
pjm precheck构建项目结构并打开本地视图:
pjm map --build
pjm visualize为所有已注册项目配置一个 MCP 服务器,可将以下内容加入客户端配置,并把 Python 路径替换成机器上的绝对路径:
{
"mcpServers": {
"projectmem": {
"command": "/absolute/path/to/python",
"args": ["-m", "projectmem.mcp_server"]
}
}
}Codex 使用 ~/.codex/config.toml:
[mcp_servers.projectmem]
command = "/absolute/path/to/python"
args = ["-m", "projectmem.mcp_server"]完全退出并重新打开客户端后,让代理在会话开始调用 get_instructions()、get_summary() 和 get_project_map();编辑文件前调用 precheck_file(path),工作中及时记录问题、尝试、修复、决策和备注。若希望服务器只能访问一个仓库,在启动参数中加入 --root 和仓库绝对路径。
这个 Agent 有哪些优点和局限?
- 不仅保存聊天记录,而是用问题、尝试、修复、决策和备注等类型化事件保留可检索的开发因果链。
- 预提交判断层能在修改高频文件或重复已失败方案时主动警告,这是普通被动记忆检索无法提供的工作流。
- 数据默认保存在项目内的普通文件中,无账户、无遥测、无常驻数据库;更新检查也是显式启用。
- 单个 MCP 服务器可服务多个已注册仓库,同时支持
--root单仓库边界,并在每次写入后回显实际目标项目。 - 不支持 MCP 的工具仍可通过 Markdown 导出或
pjm wrap使用精炼记忆。 - 提供项目级与全局面板、结构关系图、失败热度和事件时间线,便于审阅积累的工程经验。
- 初始化会安装三个 Git 钩子并自动启动文件监视器,会改变仓库的本地开发流程,需要团队理解和维护这些行为。
- 多项目模式依赖本地注册表和正确的项目路由;活动项目或客户端工作区配置错误可能把事件写入错误仓库,因此必须核对写入回显。
- MCP 模式要求 Python 解释器的绝对路径、客户端配置和冷启动;Claude Desktop 与 Cursor 还不能依赖
cwd进行定位。 - README 对 MCP 工具数量存在不一致:多处称有 17 个工具,但功能比较表称 15 个,列出的读写工具合计也是 15 个。
- 令牌节省、调试时间和美元保护属于项目提供的估算或 ROI 指标;来源没有给出可独立复核的通用基准结果。
- 结构关系解析明确提到 Python 导入图,来源没有证明其他语言能获得同等深度的依赖解析。
这个 Agent 与同类方案有什么区别?
项目将自身定位为“记忆 + 判断”层,并与 claude-mem、agentmemory、mem0 和 Letta(MemGPT)比较。其明确差异是使用类型化开发事件、提交前失败警告、只标记过期而不自动删除记忆、可保留历史的决策取代机制、普通文本 events.jsonl、本地多项目面板以及独立的 plan.md。README 将 claude-mem 描述为偏向会话捕获,将 agentmemory 描述为带衰减和裁剪的记忆引擎,将 mem0 描述为会在更新时改写事实的聊天记忆,将 Letta 描述为需要服务器和数据库的代理框架。这些是截至 2026 年 6 月由项目给出的功能快照,并非性能基准。
与相关度最高的同类 agent 并排比较关键指标。
| Agent | 源码审查 | 形态 / 费用 | Star | 最近更新 | 主语言 | 完整支持的平台 |
|---|---|---|---|---|---|---|
| projectmem 编程记忆 当前 | 74 · 存在缺口 | 命令行工具免费 | ★ 868 | 20 天前 | Python | Codex · Claude Code · Claude.ai |
| Piia Engram | 88 · 表现良好 | 命令行工具免费 | ★ 163 | 今天 | Python | Codex · Claude Code |
| Jev Review | 81 · 表现良好 | Agent 插件 / 技能免费 + 模型费 | ★ 245 | 1 个月前 | TypeScript | Codex · Claude Code |
| ContextLattice 持久上下文层 | 65 · 存在缺口 | 命令行工具免费版 + 付费版 | ★ 156 | 1 个月前 | Go | Codex |
FollowAgents 如何评估这个 Agent?
查看各维度的扣分理由
证据显示:本地优先、无遥测,唯一网络调用是用户显式开启的更新检查;SECURITY.md 用表格明确各文件存储位置与去向,并列出六条诚实的权衡(含 git hooks、后台 watcher、AI 提示注入风险);提供完整卸载与 hooks uninstall,registry 迁移保留 .bak。扣分点:pjm init 默认自动安装三个 git hooks 并自动启动后台 watcher 进程,属于未经逐次确认的环境变更(虽有 --no-watch 等退出项);依赖声明宽松,且未提供 lockfile 或依赖审计证据。未发现任何恶意行为、隐蔽外传或破坏性默认。
证据显示:测试覆盖了路径发现、registry 幂等、不可读配置显式报告等失败路径,doctor 提供自检。扣分点:README 自相矛盾——同一文档中 MCP 工具数先称 17 个,后两处称 15 个,SECURITY.md 又称 8 个;pyproject 将 0.3.2 标为 Production/Stable 但版本仍在 0.x 且曾出现全新安装即坏的回归,发布纪律不严。
证据显示:支持多种 MCP 客户端及无 MCP 的 CLAUDE.md 导出路径;0.3.x 集中修复 Windows 问题并有针对性测试,跨平台意识扎实。扣分点:能力边界描述掺入营销语气("Save up to 50%+ of AI tokens"无实验支撑);precheck 触发精度只有描述性主张,无静态证据表明误报率可控。
证据显示:文档架构清晰,安装说明具体到客户端差异与冷启动要求;canonical 命令与别名定义明确;CHANGELOG 逐版详述并署名贡献者;known limitations 以 "Honest trade-offs" 系统呈现,含提示注入风险;MIT 许可完整。扣分点:维护责任仅由个人与一个邮箱支撑,无治理或多人维护证据;示例多依赖外部链接,仓库内 FAQ 缺失。
证据显示:输出形态多样且可验证——dashboard 有快照/实时标注、测试确保全局视图只读不写、precheck 警告列出具体失败尝试。扣分点:核心差异化主张(唯一 pre-commit 警告、50% token 节省、可证明 ROI)全部是自我声明,仓库内无基准数据;hooks + watcher + summary.md 入库的隐性维护成本未量化。
证据显示:README 明确区分"设计能力,非基准结果",changelog 引用具体 PR 和贡献者。扣分点:关键定量主张(50% token 节省、207 事件研究、arXiv 论文 2606.12329)在源文件内无法追溯验证,且 arXiv 编号格式可疑;对竞品的负面断言无仓库内证据。
- README 中 MCP 工具数量在 17/15/8 之间不一致,使用前请以实际运行的 pjm-mcp 为准。
- pjm init 会默认安装 git hooks 并启动后台 watcher,敏感仓库请使用 --no-watch 并在 init 后检查 .git/hooks。
- summary.md 与 PROJECT_MAP.md 默认提交进 git 且会被 AI 读取,注意提示注入风险:像审代码一样审这些文件的变更,勿在事件日志中记录密钥。
- "节省 50% token"、"可证明 ROI"、arXiv 论文等定量主张均未经独立验证,采购决策不应以此为准。
- 0.3.2 虽标为 Production/Stable,仍属 0.x 早期项目且曾出现全新安装即损坏的回归,建议锁定安装版本。
- 跨项目全局记忆 (~/.projectmem/global/) 会在项目间共享内容,敏感仓库使用 pjm init --no-global。
最近版本
来自该项目 GitHub Releases 的最新发布记录,说明为上游原文摘录,未经本站改写或测试。
-
v0.3.4 v0.3.4 — memory that stays small, and warnings you can trust
发布说明摘录
Three community reports, three community fixes, and six more bugs found by checking them. Each report was reproduced end to end before it was fixed, and every fix was reviewed by someone other than its author. ```bash pip install -U projectmem ``` Then run pjm init once in each project. Older projects keep the AI_INSTRUCTIONS.md and git hooks of the release that created them; re-running init now refreshes both. Your previous instructions are kept as AI_INSTRUCTIONS.md.bak, and anything of yours outside projectmem's block in a hook is left untouched. Fixed …在 GitHub 查看 ↗ -
v0.3.3 v0.3.3 — precheck stops getting slower, and Windows works end to end
发布说明摘录
Six field reports closed, and the check that runs before every edit no longer gets slower as your project ages. Every fix below was found by running projectmem on the machine that reported it — Windows 11, and all four MCP clients — not by reading the code. Two of them were found only because a client launched the server from a directory we did not expect. ```bash pip install -U projectmem ``` Faster pjm precheck was taking 26 seconds on a 1,200-event project, and getting worse every week. …在 GitHub 查看 ↗ -
v0.3.2 v0.3.2 — Windows watch support, and a doctor that tells the truth
发布说明摘录
Windows works properly now — and pjm doctor stops saying green when it cannot see. ```bash pip install -U projectmem ``` Every fix below was found by running the thing on Windows, not by reading the code. The watcher works on Windows pjm watch --daemon crashed there with AttributeError: module 'os' has no attribute 'fork'. Daemonisation used the POSIX-only os.fork() and os.setsid(); it now spawns a detached worker with subprocess.Popen — DETACHED_PROCESS | CREATE_NEW_PROCESS_GROUP | CREATE_NO_WINDOW on Windows, start_new_session=True elsewhere. …在 GitHub 查看 ↗
常见问题
它需要付费、账户或 API 密钥吗?
它会把代码或记忆上传到云端吗?
.projectmem/ 和用户级全局目录中,无遥测;只有显式启用命令行或面板的更新检查时才会访问 PyPI。团队会共享哪些数据?
summary.md、PROJECT_MAP.md、AI_INSTRUCTIONS.md 和 issues/,而原始 events.jsonl 及运行时文件被忽略。若要完全私有,可把整个 .projectmem/ 加入 .gitignore。不使用 MCP 的编程助手还能使用它吗?
pjm export --claude-md、pjm export --cursor 和 pjm wrap <agent> 可把有效决策、注意事项和失败清单转换为文件或预注入上下文。多项目服务器如何避免写错仓库?
--root、调用中的 project、客户端工作区根、活动项目和当前目录依次解析;无法唯一确定时会拒绝猜测。每次写入都会显示目标项目,严格隔离时可使用固定 --root 的服务器。