Jevmem – 为 Claude Code 打造的自动项目记忆,基于 Jev 构建

Hacker News Top 工具

摘要

Jevmem 是一个为 AI 编码助手如 Claude Code、Cursor 和 Codex 设计的自动项目记忆工具,它可以将聊天中的决策和约束保存到 markdown 文件中,以便未来参考。

暂无内容
查看原文
查看缓存全文

缓存时间: 2026/09/25 16:15

Avinash-jetwani/jevmem 来源:https://github.com/Avinash-jetwani/jevmem

jevmem

Claude Code 的自动项目记忆功能。同样适用于 Cursor 和 Codex。 npm 版本 (https://www.npmjs.com/package/jevmem) 许可证 node CI (https://github.com/Avinash-jetwani/jevmem/actions/workflows/ci.yml) M8ven 已验证 (https://m8ven.ai/mcp/avinash-jetwani/jevmem)

功能介绍

https://github.com/user-attachments/assets/ed77849e-db1c-4c05-9ad8-4cab0b3968a2

  • 将你与 Claude Code 聊天中的决策、约束、问题和待办事项自动保存到 JEVMEM.md。
  • 当你改变主意时,旧行会被标记为已取代,而不是删除。
  • 在下一次会话中,相关行会被添加到 Claude 的上下文中。
- [decision] 使用 Postgres 16 作为主存储;SQLite 在负载下会锁定
- [constraint] Node 20 是最低要求;CI 运行 20 和 22 版本
- [superseded] 使用 SQLite 作为主存储 → id:k3d9xq

安装(60秒内完成)

npm install -g jevmem
export TYPESAFE_API_KEY=... # https://typesafe.ai (可选 OpenAI 或 Anthropic 密钥)
cd your-project
jevmem init --tool claude

init 命令会创建 JEVMEM.md、jevmem.config.json 和一个被 git 忽略的 .jevmem/ 文件夹,并在 .claude/settings.local.json 中注册两个 Claude Code 钩子,同时将该文件添加到 .gitignore(详情)。

支持工具

下表列出了哪些操作是自动的,哪些依赖于代理工具:

工具设置捕获召回
Claude Codejevmem init --tool claude自动,通过 Stop 钩子在每轮对话时捕获自动,通过 UserPromptSubmit 钩子在每个提示时召回
Codexjevmem init --tool codex在 jevmem watch 运行时自动(它会跟踪该项目的 Codex 会话日志,并运行相同的 决策 → 写入 路径);否则需要代理通过 MCP add_memory 主动发起,由 AGENTS.md 部分提示代理主动发起:通过 MCP search_memory,由 AGENTS.md 提示
Cursorjevmem init --tool cursor代理主动发起:.cursor/rules/jevmem.mdc 规则会指示代理在你陈述决策时调用 MCP add_memory。如果代理未调用,则不会捕获任何内容代理主动发起:规则指示其在执行非平凡任务前调用 search_memory
Claude Desktopjevmem init --tool claude-desktop 会打印一个配置片段供粘贴(每个项目一个配置,使用 --root 指定名称)手动:要求它调用 add_memory(无钩子,无规则文件)根据请求:search_memory

MCP add_memory 通过与钩子相同的门控机制。客户端配置:docs/mcp.md。

决策机制

  1. 净化。 在消息离开你的设备之前,会从对话轮次中移除常见的密钥格式、电子邮件地址和卡号格式的数字。
  2. 向 Jev 提出类型化问题。 Jev(由 TypeSafe AI 提供,https://typesafe.ai)以概率形式回答一组固定的小问题:是否存在决策、规则或问题?是闲聊还是注入尝试?它改变了哪一行现有记录?
  3. 在代码中应用阈值。 基于这些概率的简单规则决定保存或跳过;这些规则存放在 jevmem.config.json 中,而不是在提示词中。
  4. 写入一行。 保存时,一个小型 LLM(或无需 LLM 密钥的确定性提取器)会写入最多 200 个字符的一行。
  5. 取代旧行。 如果本轮对话替换了一个现有记忆,则该行会被标记为 [superseded] ... → id:new 并保留在文件中。

层级、问题、策略、矛盾、召回与审计:docs/how-it-works.md。

基准测试

66 个待评估轮次,所有七个决策器在相同状态下进行,2026-09-23(方法、回归集、定价、p95、重试):

决策器保存/跳过准确率保存+类型准确率矛盾发现率p50 延迟每次决策成本
GPT-6 Astra98.5%98.5%5/53,469 毫秒$0.007489
GPT-6 Luna93.9%93.9%5/52,927 毫秒$0.000089
Claude Fable 5.195.5%95.5%5/54,290 毫秒$0.013256
Claude Opus 5.597.0%97.0%5/52,784 毫秒$0.005186
Gemini 3.8 Flash92.4%92.4%5/52,850 毫秒$0.001174
Grok 4.790.9%90.9%4/53,320 毫秒$0.004602
jevmem auto98.5%95.5%5/5300 毫秒$0.000127

0.30 秒是 Jev API 的决策时间;通过一个包含 Node 启动时间的真实 Stop 钩子进程,端到端时间为 0.6 秒(成本与延迟)。

在 66 个待评估轮次中,jevmem 的决策中位时间为 0.30 秒,而六个当前 LLM 的时间为 2.8–4.3 秒。其准确率处于 LLM 的范围内:98.5% 的保存/跳过准确率(与 GPT-6 Astra 并列最高)和 95.5% 的保存+类型准确率,而 LLM 的准确率为 90.9–98.5%。GPT-6 Astra(98.5%)和 Claude Opus 5.5(97.0%)在保存+类型准确率上更高;Claude Fable 5.1 持平;GPT-6 Luna、Gemini 3.8 Flash 和 Grok 4.7 准确率较低。

它发现了 5/5 个矛盾,六个 LLM 中的五个也做到了这一点。GPT-6 Luna 成本更低($0.000089 对 $0.000127),但准确率较低(93.9%),且慢约 10 倍。

这是一次运行的结果,一两个轮次的差异属于运行间的噪声范围。如果最准确的决策最重要,GPT-6 Astra 或 Claude Opus 5.5 更好,但其每次决策的成本高出约 40–60 倍,延迟高出 9–12 倍。jevmem 适用于当你需要对每条消息进行快速、低成本决策的场景。

隐私

  • 发送至 TypeSafe AI: 每轮对话的用户消息(以及用于问题和错误报告的助手回复)、前两轮对话和你的记忆行,用于评分。不收集遥测数据。如果你设置了 OpenAI 或 Anthropic 密钥,被保存轮次的文本也会发送给该提供商以写入行。
  • 先净化: 常见的凭证格式(API 密钥、令牌、*_PASSWORD= 样式的键值对、连接字符串密码、私钥)、电子邮件地址和 16 位数字;姓名、电话号码和地址不会被处理。
  • 零保留标志: jevmem 可以发送 zeroDataRetention: true(对于 Vercel AI Gateway URL 是自动的);是否适用取决于网关和 TypeSafe 的条款,jevmem 不验证这一点。

具体发送、存储和净化的内容:SECURITY.md。

诚实的局限性

  • 早期阶段: v0.4;两个评估集均由作者编写,均非独立基准。
  • 不是最准确的: GPT-6 Astra 和 Claude Opus 5.5 在保存+类型准确率上更高;jevmem 的优势在于速度和成本。
  • 召回质量未衡量: 测试了相关行是否被注入;答案质量是否提升未衡量。
  • 长期漂移未衡量: 测试框架覆盖的是五轮对话会话,而非数周的使用。
  • 自动捕获仅限于 Claude Code(以及 jevmem watch 运行期间的 Codex);Cursor 和 Claude Desktop 仅在代理调用 add_memory 时保存。
  • Jev 宕机会丢失轮次: 每次 Jev 调用有 2 秒预算;当 API 响应慢或宕机时,该轮会被跳过并记录在 .jevmem/log.jsonl 中,不会后续重试。

命令

jevmem init [--tool claude|cursor|codex|claude-desktop|all] [--no-hooks] [--command ""]
jevmem hook                              钩子入口点;从标准输入读取 Claude Code 钩子 JSON
jevmem daemon [status|start|stop]        钩子使用的预热 Jev 客户端(自动启动,空闲时退出)
jevmem watch [--replay] [--once]         从该项目的 Codex 会话日志中捕获轮次
jevmem mcp [--root <path>]               标准输入/输出 MCP 服务器
jevmem audit [--dry-run]                 根据代码库重新评分每条记忆,标记 [stale?]
jevmem search [--limit N]                按相关性对记忆进行排序
jevmem list [--all]                      打印记忆
jevmem add <line>                        手动添加一行(密钥会净化;不经过 Jev 检查)
jevmem why <id>                          显示一行或跳过轮次背后每个 Jev 答案
jevmem right <id>                        将决策标记为正确
jevmem wrong <id> [--should-be <line>]   将决策标记为错误
jevmem missed <text> [--kind <kind>]     标记一个应该被保存但未被保存的轮次
jevmem fit [--dry-run] [--force]         根据标签重新拟合权重和阈值(需要 40+ 标签)
jevmem stats                             延迟 p50/p95、每日成本、缓存命中率、升级率、标签数、上次拟合时间
jevmem log                               按标签显示 .jevmem/log.jsonl 的延迟、令牌和成本摘要

每个命令都接受 --help。设置 JEVMEM_VERBOSE=1 可在每次钩子运行后显示一行延迟/成本摘要。

链接

相似文章

Jev驱动的自动更正

Lobsters Hottest

一个无需使用空格键即可实现输入自动更正的工具,在GitHub上作为开源项目提供。