context-mode Kimi Code安装完全教程:TOML hooks配置逐行讲解
【免费下载链接】context-modeContext window optimization for AI coding agents. Sandboxes tool output (98% reduction), persists session memory, and enforces routing across 17 platforms via MCP + hooks.项目地址: https://gitcode.com/GitHub_Trending/cl/context-mode
context-mode是一款开源 AI 编码代理上下文优化工具:它以 MCP 服务器 + hooks 的形式运行,能把工具输出沙箱化(最高节省 98% 上下文窗口)、持久化会话记忆,并跨 17 个平台强制路由。本文是context-mode 在 Kimi Code CLI 的安装完全教程,重点把~/.kimi-code/config.toml里的 TOML hooks 配置逐行讲清楚——零基础也能一次装对。
一、为什么 Kimi Code 需要 context-mode?
如果你用过 AI 编码 CLI,应该都遇到过这个痛点:
- 一次网页快照、一份日志文件,动辄几十 KB 涌进上下文窗口;
- 会话一长,压缩(compact)时 Agent 就"忘记"了自己在改哪个文件、做到哪一步;
- 上下文烧完了,token 账单也跟着烧。
context-mode 的思路是:原始数据不进上下文,只进本地 FTS5 索引库。Agent 需要时再搜索召回。配合 hooks,它还能在会话开始、工具调用前后、压缩前等关键节点自动介入,实现"断点续作"的会话连续性。
二、安装前准备(先检查这 2 项)
| 检查项 | 要求 | 验证命令 |
|---|---|---|
| Kimi Code CLI | 已安装,kimi命令在 PATH 中 | kimi --version |
| Node.js | >= 22.5(或使用 Bun) | node -v |
两项都满足后,进入正式安装。
三、一键安装:全局安装 context-mode
一条命令搞定:
npm install -g context-mode安装成功后,系统里会出现一个context-mode命令,后面所有 hooks 命令都是它的子命令。建议顺手验证一下:
context-mode --version💡 这一步只需要执行一次。它和 Claude Code 的插件市场安装方式不同——Kimi Code 没有插件市场,所以走的是"全局 npm 包 + 手动配置"路线。
四、第 1 步:注册 MCP 服务器
Kimi Code 读取 MCP 配置的文件是~/.kimi-code/mcp.json,写入以下 3 行核心配置:
{ "mcpServers": { "context-mode": { "command": "context-mode", "args": [] } } }这告诉 Kimi Code:启动会话时,把context-mode作为 MCP 服务器拉起来。装好后,Agent 就能调用ctx_execute、ctx_search、ctx_index等 11 个 MCP 工具。
五、第 2 步:TOML hooks 配置逐行讲解(核心)
打开(或新建)~/.kimi-code/config.toml,粘贴以下内容:
[[hooks]] event = "PreToolUse" matcher = "Bash|Shell|Read|Edit|Write|WebFetch|Agent|ctx_execute|ctx_execute_file|ctx_batch_execute|ctx_fetch_and_index|ctx_search|ctx_index|mcp__" command = "context-mode hook kimi pretooluse" timeout = 30 [[hooks]] event = "PostToolUse" command = "context-mode hook kimi posttooluse" timeout = 30 [[hooks]] event = "SessionStart" command = "context-mode hook kimi sessionstart" timeout = 30 [[hooks]] event = "PreCompact" command = "context-mode hook kimi precompact" timeout = 30 [[hooks]] event = "UserPromptSubmit" command = "context-mode hook kimi userpromptsubmit" timeout = 30 [[hooks]] event = "Stop" command = "context-mode hook kimi stop" timeout = 30 [[hooks]] event = "SessionEnd" command = "context-mode hook kimi sessionend" timeout = 30下面逐行拆解。📌
5.1 什么是[[hooks]]?
TOML 语法里,[[hooks]]表示往hooks数组中新增一个元素。上面一共 7 个[[hooks]]块,就是注册了 7 个钩子,分别挂在会话生命周期的 7 个事件上。每块的字段含义:
| 字段 | 必填 | 含义 |
|---|---|---|
event | ✅ | 触发事件,如PreToolUse(工具调用前) |
matcher | ⬜ | 正则,匹配哪些工具名才触发(仅PreToolUse用) |
command | ✅ | 事件触发时要执行的 shell 命令 |
timeout | ⬜ | 超时秒数,超时则放弃该钩子 |
5.2 逐行讲:PreToolUse块(最重要的一个)
event = "PreToolUse"事件类型:工具执行前触发。这是路由强制的核心——context-mode 在这里判断"这次工具调用是否应该被改道"。
matcher = "Bash|Shell|Read|Edit|Write|WebFetch|Agent|ctx_execute|..."matcher是一个正则表达式,|表示"或"。含义是:只有当以下工具被调用时才触发本钩子——
Bash/Shell:命令执行(比如curl抓网页);Read/Edit/Write:文件读写操作;WebFetch:抓取网页;Agent:子代理调用;ctx_execute、ctx_search等:context-mode 自家的 MCP 工具(需要放行并识别);mcp__:前缀匹配所有 MCP 工具。
如果 Agent 想直接curl下载大网页,这个钩子就会拒绝(Kimi Code 的PreToolUse只支持 deny 一种决策——见 5.3),并引导它改用ctx_fetch_and_index:内容进本地索引,不进上下文。
command = "context-mode hook kimi pretooluse"实际执行的命令。kimi是平台名,pretooluse是事件名。对应的源码实现在 hooks/kimi/pretooluse.mjs,它从 stdin 读取 Kimi 传来的 JSON,做路由判定,再输出 JSON 决策。
timeout = 3030 秒超时。hooks 是同步阻塞的,防止某个钩子卡死整个会话。
5.3 其他 6 个事件块各管什么?
| 事件 | 触发时机 | context-mode 在此做什么 |
|---|---|---|
PostToolUse | 每次工具调用完成后 | 记录工具输出摘要、更新节省统计 |
SessionStart | 新会话启动时 | 加载会话连续性数据库(SQLite) |
PreCompact | 上下文压缩发生前 | 把关键事件快照进 FTS5 索引,防止压缩后失忆 |
UserPromptSubmit | 你提交每轮消息时 | 注入路由指令(Kimi 无additionalContext通道,走此通道) |
Stop | 每一轮助手回答结束时 | 记录本轮统计 |
SessionEnd | 整个会话真正关闭时(Kimi 独有,区别于Stop) | 持久化/清理会话数据 |
两个容易混淆的点,专门提醒一下:
Stop≠SessionEnd:Stop是你每问一句它答完就触发一次;SessionEnd是退出kimi时才触发一次。两者都要配,缺一不可。- Kimi 的
PreToolUse只认"拒绝":它的运行器会静默丢弃ask、updatedInput(改参数)等字段,只有permissionDecision: "deny"或退出码 2 能拦截工具调用。所以 context-mode 对 Kimi 做的是"拒绝 + 引导改道",而不是直接改写你的命令。完整能力矩阵见官方文档 docs/adapters/kimi-code.md。
5.4 命令规律:好记不手抖
7 条命令其实是一个模板:
context-mode hook kimi <事件名小写>平台固定为kimi,后面跟小写事件名(pretooluse、sessionstart……)。配置模板可以直接参考仓库里的 configs/kimi/hooks.json(JSON 版清单,TOML 版见上面)。
六、验证安装是否成功
重启 Kimi Code CLI,开始新会话后输入:
ctx doctorctx doctor会运行完整诊断(运行时、hooks、FTS5 索引、版本一致性),全部显示[x]即安装成功。
接着输入ctx stats,能正常返回节省统计,说明MCP 服务器也连通了。
不想靠对话验证的话,也可以在终端手动测一个钩子:
echo '{"tool_name":"Bash","tool_input":{"command":"curl https://example.com"}}' \ | context-mode hook kimi pretooluse预期输出:一段 JSON,路由指引会引导改用ctx_execute/ctx_fetch_and_index。
七、常见问题速查
Q1:hooks 配了但没生效?先确认context-mode命令在 PATH 里(which context-mode)。Kimi 的 hooks 命令走 shell 解析,命令找不到会静默失败。
Q2:会话数据存在哪里?默认在~/.kimi-code/context-mode/sessions/。如果你设置了环境变量KIMI_CODE_HOME,则跟随它迁移到$KIMI_CODE_HOME/context-mode/sessions/——与 Kimi Code 自己的数据根目录解析方式一致。
Q3:为什么UserPromptSubmit和SessionStart看起来功能重叠?Kimi 没有additionalContext注入通道(上游运行器不解析该字段),所以上下文注入统一改由UserPromptSubmit的message通道完成;SessionStart只负责打开会话连续性数据库。
Q4:能否让钩子直接改写我的工具参数?不能。Kimi Code 的运行器会静默丢弃updatedInput字段,只能"拒绝 + 引导"。
八、写在最后:3 步回顾
npm install -g context-mode(全局装一次)- 往
~/.kimi-code/mcp.json加 MCP 服务器,往~/.kimi-code/config.toml加 7 个 hooks 块 - 重启
kimi,用ctx doctor验证
完成后,你的 Kimi Code 会话就有了:大输出自动沙箱、压缩不失忆、PreToolUse路由强制改道。完整的平台差异说明和源码引用,可查阅 docs/adapters/kimi-code.md;Kimi 适配器的实现代码在 src/adapters/kimi/,hooks 实现(含platform.mjs平台标记、pretooluse.mjs路由拦截)在 hooks/kimi/,想看"路由判定到底怎么写的"可以直接翻源码。🚀
【免费下载链接】context-modeContext window optimization for AI coding agents. Sandboxes tool output (98% reduction), persists session memory, and enforces routing across 17 platforms via MCP + hooks.项目地址: https://gitcode.com/GitHub_Trending/cl/context-mode
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考