MCP 工具靠 agent 自觉调用——它有时不会去搜。hooks 把"走门"从选择变成管道的必然:每条提问自动检索、相关就注入、不相关就沉默。本页拆解从 kb hook install 到摘要出现在模型上下文里的每一步。
kb_search。它经常不觉得需要——直接凭训练知识回答,你的积累被绕过,笔记拿不到续命信号。
kb hook install 只做一件事:往 Claude Code 的 ~/.claude/settings.json 写两条挂点注册(先备份 .bak;加 --project 则写当前项目的 .claude/settings.json):
{
"hooks": {
"UserPromptSubmit": [{ "hooks": [{ "type": "command",
"command": "\"/path/to/node\" \"/path/to/cli.js\" hook prompt --vault \"/你的/vault\"" }] }],
"SessionStart": [{ "hooks": [{ "type": "command",
"command": "\"/path/to/node\" \"/path/to/cli.js\" hook session --vault \"/你的/vault\"" }] }]
}
}
kb-metabolism 标记,重装时先移除旧条目再写新的,不会越装越多;你自己的其他 hooks 原样保留。kb hook uninstall 按标记精确移除;kb hook show 打印配置片段供手动粘贴。从你按下回车到模型开始思考之间,发生了这 8 步——全程毫秒级:
{"prompt": "你输入的内容", …} 以 JSON 写进该进程的 stdin。kb hook prompt 启动,读 stdin 拿到提问原文。.kb/kb.db(SQLite),跑 纯字面检索 hookSearch——刻意不走 embedding:hook 阻塞提问,不能付网络延迟。kb_inject 到 .kb/access.log.jsonl(含 query 前 80 字、路径、kb_id)——这是第三档存活证据,免死 30 天。<kb-context> 块(每篇一行:路径 — 标题:摘要片段,外加一句"如需全文用 kb_read")。Claude Code 把这段文本放进本轮模型上下文——模型"未卜先知"地知道了你的相关积累。新会话(含 resume)第一时间注入一次 <kb-status>,内容三样:库概况(总数、L0 容量)、最近经门读过的 3 篇(按 kb_id 解析成当前路径——笔记移动过也指得到新家,给会话连续性),以及距上次消化超一周时的提醒("请转告用户")。库为空则沉默。
hooks 不只是便利功能——它是信号经济的一环。协议 v2 起,注入是第三档存活证据:
为什么注入配续命:摘要一眼够用的短笔记最有用,却恰恰因此永远不会被点开全文——v1 时代它们会被法医冤杀。为什么只有 30 天:注入是机器行为,效力必须低于人/agent 亲手读取与引用。为什么先收紧判准再给续命:判准不准,注入续命就是滥发免死金牌——顺序不能反。
kb hook install,否则 hook 静默失效(它连报错都不会——纪律①)。~/.claude/settings.json——你在任何项目的每条提问都会检索这个 vault 并可能注入个人笔记摘要。在意隔离就用 --project 只装到特定项目。kb stats/管理台信号页里有没有新的 kb_inject;或新开会话看有没有 <kb-status>。| 命令 | 作用 |
|---|---|
kb hook install [--project] | 写入两条挂点(备份 .bak,幂等),新会话生效 |
kb hook uninstall [--project] | 按标记精确移除 |
kb hook show | 打印配置片段,手动粘贴用 |
kb hook prompt / session | 挂点本体(Claude Code 调用,不需要手动跑) |