Kimi Code 集成
概述¶
Kimi Code 适配器为运行在 Kimi Code CLI 中的代理提供 claude-mem 持久记忆。它处理三件事:
- 观察记录 — 从 Kimi 的钩子系统中捕获工具使用情况,并将其发送给 claude-mem worker 进行 AI 处理
- 上下文注入 — 通过
UserPromptSubmit钩子的 stdout(链接在session-init之后),在每个会话中注入一次观察时间线(并在每次压缩后注入一次),让MEMORY.md保持空闲,专供代理策展记忆使用 - MCP 搜索工具 — 注册
mcp-searchstdio 服务器,以便你可以在 Kimi 会话内部手动查询记忆
Info
Kimi Code 使用由 ~/.kimi-code/config.toml 驱动的、类似 Claude Code 的钩子系统。claude-mem 安装程序会将钩子规则合并到该文件中,并在 ~/.kimi-code/mcp.json 中注册一个 MCP 服务器,而不会改动你的个人 AGENTS.md 或 ~/.agents/ 文件。
工作原理¶
Kimi Code CLI
│
├── SessionStart (startup|resume) ──→ worker start
├── UserPromptSubmit ───────────────→ Init session + context injection (first prompt of session only)
├── PostToolUse ────────────────────→ Record observation
├── PostToolUseFailure ─────────────→ Record observation (failed call)
├── PreToolUse (Read) ──────────────→ File-context observation
├── Stop ───────────────────────────→ Summarize session
└── PreCompact (manual|auto) ───────→ Summarize session
│
▼
Claude-Mem Worker (per-user port)
├── POST /api/sessions/init
├── POST /api/sessions/observations
├── POST /api/sessions/summarize
├── POST /api/sessions/complete
└── GET /api/context/inject ──→ First-prompt context (once per session)
事件生命周期¶
1. 会话开始(SessionStart startup|resume)
当 Kimi 启动或恢复会话时,钩子会启动 claude-mem worker(如果它尚未运行)。此钩子仅预热 worker;其 stdout 不会被附加到 Kimi 的上下文中。
2. 用户提交提示词(UserPromptSubmit)
单一的复合 session-init-context 钩子会将用户提示词发送到 POST /api/sessions/init,以便 worker 创建或继续会话。在会话的首个提示词时,它还会通过 stdout 将注入的观察时间线附加到 Kimi 的上下文中;同一会话后续的提示词会跳过时间线获取(~/.claude-mem/state/kimi-context-injected/ 下的标记会跟踪这一情况)。这是一个可阻塞的 Kimi 事件;claude-mem 始终以 0 退出,因此提示词永远不会被阻塞。
3. 工具即将读取文件(PreToolUse Read)
在 Kimi 执行 Read 工具之前,钩子会针对目标路径查询 GET /api/observations/by-file,并将返回的时间线作为附加上下文注入。这对应 Claude Code 的 PreToolUse 匹配器。
4. 工具使用已记录(PostToolUse)
在一次成功的工具使用之后,钩子会将工具名称、输入和响应发送到 POST /api/sessions/observations。这是即发即弃的——它不会阻塞代理继续工作。
5. 会话停止(Stop)
当会话停止时,钩子会提取最后一条助手消息,并将其发送到 POST /api/sessions/summarize。
6. 上下文压缩(PreCompact manual|auto)
在 Kimi 手动或自动压缩上下文之前,钩子会触发另一次 summarize 调用,以便在压缩前保留会话状态,并清除注入标记,使压缩后的首个提示词重新注入新的时间线。
事件映射¶
| Kimi 钩子事件 | 匹配器 | claude-mem 内部事件 | 说明 |
|---|---|---|---|
SessionStart |
startup\|resume |
worker start | 仅预热 worker |
UserPromptSubmit |
(all) | session-init-context |
复合钩子;可阻塞事件;我们始终退出 0;时间线 stdout 仅在会话的首个提示词时附加到 Kimi 上下文 |
PostToolUse |
(all) | observation |
载荷包含 tool_output |
PostToolUseFailure |
(all) | observation |
一次失败的工具调用;载荷包含 error |
PreToolUse |
Read |
file-context |
对应 Claude 的匹配器 |
Stop |
(all) | summarize |
|
PreCompact |
manual\|auto |
summarize |
同时清除注入标记,以便压缩后重新注入上下文 |
v1 中未使用(Claude 集成同样忽略它们):SessionEnd、SessionHeartbeat、SubagentStart/Stop、TurnStarted、Notification、PermissionRequest/Result、Interrupt、PostCompact、UserPromptQueued。
上下文注入¶
UserPromptSubmit 钩子通过将 worker 格式化的上下文写入 stdout,将会话间的观察上下文注入到 Kimi 会话的首个提示词中。内容来自 GET /api/context/inject?projects=<project>,它会从 SQLite 数据库生成一条 Markdown 时间线。复合的 session-init-context 事件在单个进程中执行 session-init 和 context 工作,因此钩子载荷只会被消费一次。
Kimi 在每条消息上都会触发 UserPromptSubmit,并且只会将该事件的 stdout 附加到上下文(SessionStart 的 stdout 会被丢弃),因此时间线无法在会话开始时直接交付。为了避免将完整时间线重新注入每条提示词,处理器会在成功注入后记录一个按会话标记(~/.claude-mem/state/kimi-context-injected/<sessionId>),并在标记存在时跳过时间线获取。PreCompact 钩子会清除该标记,因此压缩后的首个提示词会重新注入新的时间线。如果 worker 不可达,则不会写入标记,因此注入会在下一条提示词时重试。选择启用的按提示词语义注入(CLAUDE_MEM_SEMANTIC_INJECT=true)不受影响,仍会在每条提示词上运行。
这种方法让 MEMORY.md 始终由你掌控,用于策展长期记忆(决策、偏好、持久事实),而观察时间线则通过提示词提交上下文传递,这正是其所属的位置。
安装¶
运行交互式安装程序,让其自动检测 Kimi Code:
安装程序通过 ~/.kimi-code/ 目录或 PATH 上的 kimi 二进制文件来检测 Kimi。你也可以直接管理该 harness:
# Install only the Kimi harness
npx claude-mem kimi install
# Check whether hooks and MCP are registered
npx claude-mem kimi status
# Remove the claude-mem managed block and its MCP entry (preserves other config)
npx claude-mem kimi uninstall
安装内容¶
安装程序会将一个以标记分隔的托管块写入 $KIMI_CODE_HOME/config.toml(默认为 ~/.kimi-code/config.toml),其中包含七条 [[hooks]] 规则:
# >>> claude-mem kimi hooks (managed by claude-mem; do not edit) >>>
[[hooks]]
event = "SessionStart"
matcher = "startup|resume"
command = "..."
timeout = 60
# ... remaining rules ...
# <<< claude-mem kimi hooks <<<
仅会写入 event、matcher、command 和 timeout 这四个字段。超时时间范围为 60–120 秒。
如果 mcpServers 下尚不存在 mcp-search stdio MCP 服务器,安装程序还会将其合并到 $KIMI_CODE_HOME/mcp.json 中,并保留任何已配置的服务器。
Info
当设置了 KIMI_CODE_HOME 时,会优先使用该值;否则默认根目录为 ~/.kimi-code。
Warning
安装程序首次修改 config.toml 时,会在进行任何更改之前将备份写入 config.toml.bak-<YYYYMMDD>。
命令¶
npx claude-mem kimi install¶
安装或升级 Kimi harness。如果托管块已存在,则会在原位替换(可安全升级)。
npx claude-mem kimi status¶
报告托管钩子块是否存在于 config.toml 中。
npx claude-mem kimi uninstall¶
精确地从 config.toml 中移除 claude-mem 托管块,并移除 claude-mem 写入 mcp.json 的 mcp-search 条目(指向其他位置的同名条目将保持不变)。所有其他 Kimi 配置均不受影响。npx claude-mem uninstall 会执行同样的清理操作。
错误处理¶
所有 Kimi 钩子均采用失败开放(fail open)策略:如果 worker 不可达、命令崩溃或发生任何内部错误,钩子都会以退出码 0 退出,因此 Kimi 绝不会阻塞会话。这与 Kimi 自身的钩子语义一致,即退出码 0 表示允许,stdout 可附加到上下文中。
要求¶
- 已安装并配置 Kimi Code CLI
- Claude-mem Worker Service 正在运行(如有需要,可由
SessionStart钩子自动启动) - Kimi 进程与 worker 之间可通过每用户端口进行网络访问
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 cl/claude-mem