让你的 AI 记住你定过什么,也记住后来改成了什么。
你现在用的 AI 就能接,有一个就够。记忆是一个纯 Markdown 文件夹,你能在 Obsidian 或任何编辑器里打开、阅读、修改。问一句「封面标题我们是怎么定的」,答案会注明出自哪一页。纠错之后,新结论直接取代旧结论,不会两个一起冒出来。记忆里没有的,AI 会被明确告知「没有」,而不是拿一条差不多的凑数。写代码、写稿、做视频、学习、工作,凡是定过又会改的事都适用。
· English:
README.md
每次提交都在 Linux、macOS、Windows 上跑测试。一行安装下载的是最新发布版(只用 tag,从不拉 main),运行任何东西之前先核对 SHA-256;每个发布版还带 GitHub 构建来源证明(gh attestation verify <安装包> --repo 398894496-arch/KRouter)。你问的问题从不离开本机。

别人出的基准,按出题方自己的标注机械评分,不用模型当裁判:
这两项测的是「找没找对页」,不是「模型最后答没答对」,所以和别家公布的答案准确率不是一回事,不能直接比。纯 BM25 找到的页数也差不多(447/470、968/1 540)。
弱点:如果问的是记忆里某件事的「近邻」,它还是会作答。LongMemEval 里 30 道没有答案的题只拒了 3 道,LoCoMo 446 道陷阱题只拒了 37 道。
我们自己的 200 道留出题(中英文,从没拿来调过分,由 Claude Opus 在单独会话里出题):KRouter 引错 26%,claude-mem 64%,basic-memory 78%。80 道记忆里答不了的题,KRouter 拒答 47 道,另外两个一道都不拒。60 道「决定后来改过」的题,KRouter 答对 50 道,它们是 34 和 16 道。这个差距有一部分是结构决定的:给纯全文检索加上 KRouter 那两条规则,它就和 KRouter 打平。KRouter 多出来的,是这两条规则默认就开着,外加出处回执和一个你能直接编辑的记忆库。每个数字和测法 · 自己复现
curl -fsSL https://raw.githubusercontent.com/398894496-arch/KRouter/main/scripts/bootstrap.sh | sh
Windows(PowerShell):irm https://raw.githubusercontent.com/398894496-arch/KRouter/main/scripts/bootstrap.ps1 | iex · Claude Code 插件:/plugin install krouter --marketplace 398894496-arch/KRouter(需要 Claude Code 2.1.275 或更高;在 shell 里用 claude plugin install krouter --marketplace 398894496-arch/KRouter 需要 2.1.292)。第三方插件市场不会自动更新:运行 claude plugin update krouter@krouter,或在 /plugin → Marketplaces → krouter 里选 Enable auto-update。
想先看看再装?下面只有最后一行会改动你的机器:
git clone https://github.com/398894496-arch/KRouter.git && cd KRouter
./scripts/first_run.sh # 在自带的示例库上出一张回执
python3 scripts/bootstrap.py --dry-run # 列出安装会做的每一处改动,一处都不做
python3 scripts/bootstrap.py --vault ~/notes --no-timer # 装到你自己的库,先不开夜间任务
唯一的前提是 Python 3。安装脚本会建一个记忆文件夹(已有的用 --vault 指定,一个文件都不覆盖);本机装了 Claude Code 或 Codex 的话,通过 MCP 把它们接上,就到此为止:只装查询,什么都不问,没有任何内容离开本机。用的是别的 AI 应用?看能接哪些应用。想让它开始记住,运行它最后打印的那一行(bootstrap.py --ask),它会问你两个问题。
| 应用 | 怎么接 | 状态 |
|---|---|---|
| Claude Code | 插件,或 MCP(安装脚本自动注册) | 已实测 |
| Codex | MCP(安装脚本自动注册) | 已实测 |
| Cursor | 规则和 skill(安装脚本自动加上) | 已实测 |
| DeepSeek Harness | 插件(dsh plugin --profile web add github:398894496-arch/KRouter) |
已实测 |
| 任何能跑本地 MCP 服务的应用:Claude Desktop、VS Code、Windsurf、Zed、Gemini CLI…… | 把下面这段加进应用的 MCP 设置 | 应该能用,我们还没逐个实测:告诉我们 |
{ "mcpServers": { "krouter": { "command": "python3",
"args": ["/Users/you/.agents/skills/krouter-obsidian/scripts/mcp_server.py"] } } }
路径要写到你自己的用户目录(Windows 上是 C:\\Users\\you\\.agents\\…,命令常常是 python 而不是 python3)。一行安装之后,这个服务自己就能找到你的记忆库。它只用 Python 标准库,走 stdio,提供两个只读工具:krouter_ask 和 krouter_status。用一个普通的 MCP 客户端连它,initialize、tools/list、带出处的回答、recall: none 都走得通。
--ask 时,适用于 Claude Code、Codex 和 Cursor) 答应后,近 7 天的会话会变成页面,每个会话一页,内容是你的提问和每轮最后的回答。像 key 的文字会先脱敏,全程不出本机。同意导入之后,什么都不用你维护:
extras/host-daily-evolution/intraday_capture.py,附 macOS launchd 示例)。90 系统文件/自动化/记忆变更记录.md。记忆文件夹是 git 仓库时(运行一次 git init 就行),每一轮还是一个单独的提交,import_sessions.py --undo <轮次> 一条命令就能撤回。#不记(或 #nocapture)。适合:你在用 AI 助手,哪一个都行,却总要把同一个决定反复交代,或者它总拿几周前已经改掉的说法来回答你。还没有笔记?安装脚本会帮你建好文件夹。同时用好几个 AI 是加分项,不是前提:它们会共用同一份记忆。不适合:你要基于向量的语义搜索、要把上一轮聊天自动塞进下一轮、要给自己开发的应用找一个托管的记忆 API,或者希望装好就是一个装满的大脑。
不只用于写代码:同样的事放到短视频工作里,录法一样(Claude Code 加插件、演示库、真实输出):

不需要:装 Obsidian(它只是可选的查看器)、维护别名表、
自己设环境变量。已经有库?--vault 一个文件都不改。默认就只装查询:不装夜间任务,不导入会话。
| KRouter | 常见的 agent 记忆 | |
|---|---|---|
| 记忆放在哪 | 你能打开、编辑、比对、同步的 Markdown 页 | 数据库或向量库 |
| 纠错之后 | 新页取代旧页,旧页标成「已取代」 | 新旧两条都能匹配上,只能指望对的那条排前面 |
| 什么都对不上时 | 返回 recall: none,AI 会说记忆里没有 |
拿最接近的一条,说得很肯定 |
| 每条答案 | 带出处页和回执 | 通常没有出处 |
| 谁在用 | 本机每个 AI 应用都读同一个文件夹(MCP、skill、规则) | 通常只服务一个工具 |
在用 claude-mem? 不用卸掉。导入器已经在真实安装的 claude-mem 13.35.0 上完整跑通过。安装时会发现它的记忆库并问你要不要导入:会话总结变成页面,每个项目的决定汇成一页,等你确认。你的模型还能把这些决定理一遍,分出哪些还有效、哪些被后来的决定取代了,这一步是 claude-mem 自己不做的。Claude Code 插件也能做到 claude-mem 让人觉得「有记忆」的那两件事,只是存成纯 Markdown:会话结束时自动记下;开新会话时,自动带上这个仓库最近的决定,纠错排在前面,每条都注明出处页。仓库按路径区分,不按文件夹名。这两件事都要你先同意导入才会做。
查询从不外发:查找走本地的 SQLite 全文索引,每次约 110 ms。导入会话也只在本机做。只有你点过头的步骤才会把文字发给模型,就是提炼会话和夜间整理两步,发给你本来就在用的 CLI 或 API key,用 --dry-run 可以先看会发多少。key 和标成机密的页从不外发,也从不引用。夜间写入用 API key 通道时,本机不跑任何写入进程;用 CLI 通道时,
各家 CLI 能读到的范围不同,安装时会告诉你选的是哪一条。细节见 SECURITY.md。
备份。 运行 backup.py init --dir <一个会同步到别处的文件夹>,就会每晚给整个库(连同历史)做一个加密备份包,并且当晚重新打开验证过才算数。可以指向 iCloud 云盘、OneDrive、Dropbox、网盘同步文件夹或移动硬盘,也可以同时指两个;KRouter 不连任何云。为什么这样做,而不是直接同步或推送整个库:DETAILS.zh.md → 备份你的库。
| 测了什么 | 结果 |
|---|---|
| LongMemEval S,别人出的题和标注(第 7 套;KRouter 1.1.1;按出题方标注机械评分,跑之前先登记方案) | 470 道可答题里 439 道引到答案所在的会话;72 道「知识更新」题里 70 道引到最新那次(只引到旧的:1 道);470 道可答题拒了 12 道;30 道无答案的题只拒了 3 道。纯 BM25 不设下限、取前三页:447/470 和 69/72,持平 |
LoCoMo,别人的对话和标注(第 10 套;KRouter main,2026-10-30;只有英文) |
1 540 道可答题里 991 道第一条就引到证据会话,1 204 道在前三条里;446 道陷阱题只拒了 37 道。纯 BM25:第一条命中 968 道,前三条 1 257 道 |
| 该拒答时拒答(公开测试集,CI 跑) | 离题问题英文 12/12、中文 6/6 拒答 |
| 在一个没人调过分的库上的错误引用率(第三套测试集,200 道留出题,中英各半,带日志干扰页;方括号是 95% 区间) | 默认设置下:KRouter 引错 26% [19, 33],80 道近邻题拒答 47 道,120 道可答题答对 102 道;纯全文检索引错 58% [52, 65]。和认真做的基线比是持平,不是领先:给纯全文检索加上同样的两条规则(跳过已被取代的旧页、低于分数下限就拒答),答题数相同时它引错 42 页、KRouter 36 页,答对 96 道对 102 道,但两项差距都不显著(配对区间:引错率 [-10.2, +1.3] 个百分点,答对 [-2, +14])。同样这 200 道题、都用默认设置:claude-mem 13.39 引错 64% [58, 71],basic-memory 0.23 引错 78% [72, 84];80 道近邻题两者一道都没拒;60 道「决定改过」的题,它们分别答对 34 和 16 道,KRouter 50 道 |
| 精确命中和向量检索比(「已取代」和「近邻」题,CI 跑) | 精确命中会拒答;TF-IDF、MiniLM、BGE-M3 会引一个近邻。本地向量做成可选档:测过了,没有上线(DENSE-OPTIN.md) |
| 作者自己的真实提问 | 208 道历史提问由 Grok 盲评(2026-10-16):KRouter 0.36,加了两条规则的 BM25 0.25(满分 2),配对区间 [−0.02, +0.24]:没有显示出差距。裁判只在约 5% 的题里找到「提问之前就已经存在的答案页」,这种评分方式会奖励拒答,所以这次结果只报告、不当证据(第 5 套)。新提问上的盲测要等攒够 50 条,到 2026-11-09 记下了 30 条。更早的 0.62 → 1.47 是开发集(VERIFY.md) |
不用安装、不用模型,只要 Python 3;题目就在仓库里,留出题的数字大约一秒就能跑出来:
python3 bench/memory_honesty/run.py --set heldout3 --ci # KRouter,带 95% 区间
python3 bench/memory_honesty/run.py --set heldout3 --vs-matched bm25-floor # 和加了同样两条规则的 BM25 比
别人出的基准要先下载它们的数据:数据不在仓库里,脚本也不会自己下载(每个脚本开头写了文件名、下载地址和许可):
python3 bench/longmemeval/lme.py convert --data longmemeval_s_cleaned.json
python3 bench/longmemeval/lme.py run --system krouter && python3 bench/longmemeval/lme.py score
python3 bench/locomo/locomo.py convert --data locomo10.json
python3 bench/locomo/locomo.py run --system krouter && python3 bench/locomo/locomo.py score
方法和还没做好的地方:docs/VERIFY.md。
SECURITY.md:每条模型通道能看到什么、能做什么docs/FOR-AGENTS.md:给 agent 判断 KRouter 适不适合它的用户时参考的事实CHANGELOG.md · CONTRIBUTING.md:适合新人的 issue 都打了标签维护。 目前只有一个维护者,这是采用它最大的风险,欢迎外部贡献。小版本每周最多一个,补丁随时发;KROUTER_TAG=v1.3.0(换成任何 tag)可以固定版本。哪些算稳定接口:DETAILS.md → Stability and versions。问题和 bug 提 issue;安全问题见 SECURITY.md。
原名 DSH-KRouter,旧链接、旧 clone 地址和旧安装命令都会自动跳转。 MIT 协议。