跳转至

Kimi Code 集成

概述

Kimi Code 适配器为运行在 Kimi Code CLI 中的代理提供 claude-mem 持久记忆。它处理三件事:

  1. 观察记录 — 从 Kimi 的钩子系统中捕获工具使用情况,并将其发送给 claude-mem worker 进行 AI 处理
  2. 上下文注入 — 通过 UserPromptSubmit 钩子的 stdout(链接在 session-init 之后),在每个会话中注入一次观察时间线(并在每次压缩后注入一次),让 MEMORY.md 保持空闲,专供代理策展记忆使用
  3. MCP 搜索工具 — 注册 mcp-search stdio 服务器,以便你可以在 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:

npx claude-mem install

安装程序通过 ~/.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