给 Kimi Code 加记忆

一条 /plugins install,会话就不再从空白开始

Kimi Code 每个会话都从空白开始,而它留下来的会话只是它自己的。真正能回答今天这个问题的历史,通常散在前几个月你用过的其他工具里。

Kimi 已经有的部分

会话写在 ~/.kimi-code/sessions 下,是 JSONL 线上日志,一个会话里的每个 agent 各一份(KIMI_CODE_HOME 可以把整棵树搬走)。这些文件可读、也完整;只是没有谁会替你读回来。

接上召回

/plugins install https://github.com/vshulcz/deja-vu

Kimi 直接从仓库装插件——清单文件放在仓库根目录,这也是那个文件存在的唯一原因。它需要 deja 二进制,建索引和检索都由它来做:

brew install deja-vu
# 或者
curl -fsSL https://raw.githubusercontent.com/vshulcz/deja-vu/main/install.sh | sh

如果走 CLI,deja install kimi-auto 会把 MCP 服务器写进 mcp.json,把一个 [[hooks]] 块写进 config.toml。两种方式并存没问题:插件会读这两个文件,安装器已经覆盖的部分它就跳过。

装完多了什么

  • MCP 服务器,带 deja 工具和它在各处都提供的六种模式。
  • deja-history 技能,这样在工具不可达时智能体也知道 CLI 的用法。
  • /deja:recall <查询>,用来直接提问。
  • 会话第一次提问时的项目摘要,之后每次提问时的召回——都走 UserPromptSubmit 钩子。Kimi 会把钩子的 stdout 追加到这一轮的上下文里,并且会把该事件上的每个钩子都跑一遍,所以两者并存;摘要限制为每个会话一次。历史给不出答案时,召回保持沉默。
  • 压缩时的遗忘,走 PreCompact 钩子:线程丢掉上下文时,已经给它看过的块列表也一起丢掉,这样召回可以再说一遍。

在 Kimi Code 0.28.1 上靠读它实际发出的请求量过:UserPromptSubmit 是唯一一个输出能到达模型的事件。SessionStart 钩子会跑,但输出无处可去,所以摘要改成搭第一次提问的车;PreToolUse 能拦住一个工具,却不能往里加东西;PostToolUse 和 PostToolUseFailure 是发出即忘,所以命令失败之后的那次修复——Claude Code 和 Codex 有的那一份——在这里没有落点。

和这个 harness 无关的那一半

索引覆盖这台机器上每个智能体的转录——今天是三十四个,各有各的格式——所以在一个工具里找到的修法,能回答在另一个工具里提的问题,包括这一切装上来之前的会话。这就是选择索引、而不是选择边用边记的原因。

这里没有任何东西在写记忆,所以也就没有什么能凭空编进你的历史里;建索引和检索都在本地,凭据在建索引时就被脱敏(隐私说明)。每次提问注入上限 1536 字节,每次工具调用约 4 KB——记忆要花多少 token 里有实测对比。

快速开始 · 同一面墙又撞上来 · 插件源码