Hook与插件接入原理:Memmy如何实现Claude Code、Codex的实时记忆采集与任务接续(完整指南)
【免费下载链接】memmy-agent🍙 A personal AI agent & local memory hub for all AI agents, gives every AI one shared, fully controlled memory and persistent context — all AI remember the same you. Now supports Claude Code, Codex, OpenClaw and Hermes Agent etc.项目地址: https://gitcode.com/gh_mirrors/me/memmy-agent
Memmy(memmy-agent)是一个为所有 AI Agent 提供共享记忆中枢的开源个人 AI 记忆工具:它通过 Hook 与插件机制接入 Claude Code、Codex、OpenClaw、Hermes 等 AI Agent,实现实时记忆采集与跨 Agent 任务接续,让每一个 AI 都"记得同一个你"。本文将带你拆解 Memmy 的 Hook 与插件接入原理,看清它是怎么在不侵入 Agent 核心的前提下,完成会话采集、上下文注入与任务接力三大能力的。
一、为什么 AI Agent 需要"共享记忆"
如果你同时使用多个 AI 编程助手,大概率遇到过这类问题:
- 在 Claude Code 里调试到一半,换到 Codex 继续时,它完全不知道之前做了什么;
- 同一个项目背景、偏好、踩过的坑,每个 Agent 都要重新交代一遍;
- Agent 会话结束后,有价值的上下文随进程消失,无法沉淀复用。
Memmy 的解法是把"记忆"从各个 Agent 里抽离出来,变成一个独立的本地记忆服务(local memory hub),再让每个 Agent 通过轻量 Hook 把关键节点的事件上报给它。这样所有 Agent 共享同一份记忆,且数据始终由用户本地掌控。
二、接入原理总览:三层架构
Memmy 的 Agent 接入不是"写死"在某一个产品里的,而是分层的。以 Claude Code 和 Codex 为例,接入由三层协作完成:
| 层次 | 角色 | 关键实现 |
|---|---|---|
| Hook 层 | 在 Agent 生命周期的关键事件上执行脚本,实时采集与注入上下文 | 注册到settings.json/hooks.json |
| Skill 层 | 通过CLAUDE.md/AGENTS.md标记块 + 技能目录,教会 Agent"如何使用记忆" | <!-- memmy:start v=1 -->标记块 |
| Adapter 层 | 独立扫描 Agent 的会话文件(JSONL transcript / rollout 文件),把完整对话结构化为记忆 | adapters/ |
Hook 负责"实时",Skill 负责"引导",Adapter 负责"兜底沉淀"——三者互补,这就是 Memmy 能同时做到实时记忆采集与任务接续的原因。
三、Claude Code 接入:注册 5 个 Hook 事件
Claude Code 官方支持在~/.claude/settings.json中注册 Hook。Memmy 的安装插件逻辑在 claude-code/target.ts 中实现,installPlugin会做这几件事:
- 写入 Hook 脚本:把
memmy-resume-hook.mjs(由 memmy-resume-hook.ts 模板渲染生成)安装到~/.claude/hooks/目录,同时写入配套的memmy-memory-config.json配置文件和memmy-workspace-bridge.mjs工作区桥接运行时; - 注册 5 个 Hook 事件:在
settings.json的hooks字段中,为UserPromptSubmit、Stop、SessionStart、PostCompact、SessionEnd五个事件各追加一条 command 类型 Hook,超时设为 60 秒; - 写入引导指令:在
~/.claude/CLAUDE.md中用<!-- memmy:start v=1 -->标记块注入技能引导,并同步替换技能目录; - 提供斜杠命令:写入
commands/memmy-resume.md,让 Claude Code 用户可以通过/memmy-resume快速触发记忆检索与任务接续。
这里有个值得注意的细节:Hook 命令永远用 Node 执行,绝不用 Electron。hook-command.ts 中的resolveNodeExecutable会按优先级(环境变量 → Homebrew → 系统路径 → PATH)解析出一个安全的node可执行文件,并显式排除任何带 electron 字样或.app/Contents/MacOS/路径的候选——因为 Hook 是在用户终端的 Agent 进程里触发的,用桌面应用宿主进程执行会引入不必要的依赖和安全隐患。
另外,所有对settings.json、CLAUDE.md的修改都是幂等的 upsert:先移除旧的 Memmy 条目再写入新的,卸载时(uninstallPlugin)也能干净地把这 5 个事件里的 Memmy 条目逐个摘除,不破坏用户自己配置的其他 Hook。
四、Codex 接入:hooks.json 与 Hook 信任机制
Codex 的 Hook 配置格式与 Claude Code 不同,使用~/.codex/hooks.json。Memmy 的 Codex 接入实现在 codex/target.ts,整体套路与 Claude Code 一致:
- Hook 脚本同样安装到
~/.codex/hooks/目录; - 引导指令写入
~/.codex/AGENTS.md(Codex 的约定指令文件),技能块同样带memmy:start标记; - 通过
upsertCodexHookConfig把 Hook 命令幂等地写入hooks.json。
Codex 接入比 Claude Code 多一步:Hook 信任持久化。由于 Codex 对第三方 Hook 有信任校验,hook-trust.ts 中的trustMemmyCodexHooks会在安装时把 Memmy 用户级 Hook 的信任状态写入 Codex 的配置,保证 Hook 安装后能直接被 Codex 执行,而不需要用户每次手动确认。
五、Hook 脚本内部:记忆如何被"实时"采集
安装好的memmy-resume-hook.mjs是一个独立的 Node 脚本,Agent 在触发对应事件时执行它。它读取同目录的memmy-memory-config.json(内容指向 Memmy 的配置文件~/.memmy/config.yaml及记忆服务地址),然后与本地记忆服务通信,主要做两类事:
- 事件上报:
Stop、SessionEnd等事件发生时,把当前会话的关键上下文(工作目录、近期对话摘要、用户输入)提交给 Memmy 记忆服务,由服务端完成敏感信息脱敏(见 secret-redactor.ts)后写入记忆库; - 上下文注入:
UserPromptSubmit、SessionStart事件触发时,根据当前工作区检索相关记忆,把记忆上下文注入到即将发送的提示中——Agent 因此"开口即懂你"。
工作区身份识别由 memory-workspace-identity.ts 等契约模块统一处理,保证不同 Agent 在同一项目目录下映射到同一份工作区记忆。
除了 Hook 这条"实时通道",Adapter 层还会周期性扫描会话源文件做补充沉淀:
- Claude Code:transcript-reader.ts 解析
~/.claude下的 JSONL 会话记录; - Codex:rollout-reader.ts 解析 Codex 的 rollout 会话文件。
扫描结果经过去重、截断与预算控制(memory-token-budget.ts)后写入记忆库,即使用户某个会话没触发 Hook,内容也不会丢失。
六、任务接续:换一个 Agent,无缝接上
"任务接续"是 Memmy 最实用的场景。流程大致是:
- 在 Claude Code 中完成一部分工作后,Memmy 已实时采集了该会话的目标、进展与决策;
- 切到 Codex(或其他 Agent),触发
/memmy-resume命令或直接提问; - Hook 拦截请求,按工作区 + 查询词从记忆库中检索最近的上下文,注入给当前 Agent;
- 新 Agent 立刻获得"前情提要",接续任务而不必从头交代。
/memmy-resume的斜杠命令本质是一个解析垫片(parser shim):target.ts 中写入的命令文本会携带MEMMY_RESUME_COMMAND_ARGUMENTS标记,正常情况下被 UserPromptSubmit Hook 直接拦截处理;只有当 Hook 未正确安装、文本真正流入模型时,才会提示用户重新安装 Hook——这是一个精巧的自检设计。
七、安全与可卸载性
- 原子写入:所有配置文件修改都走"写临时文件 → rename"的原子流程(
writeFileAtomically),不会留下半截 JSON 把 Agent 配置搞坏; - 最小侵入:Memmy 从不修改 Agent 本体,只操作其约定配置目录(
~/.claude、~/.codex); - 一键卸载:
uninstallPlugin会摘除全部 Hook 条目、删除 Hook 脚本、清理标记块与技能目录,Agent 恢复原状; - 本地可控:记忆服务默认运行在本地,敏感数据在入库前经过脱敏处理。
总结
Memmy 的 Hook 与插件接入可以概括为一句话:用官方 Hook 事件做实时通道,用约定指令文件做行为引导,用 Adapter 扫描做兜底沉淀。这一套机制在 Claude Code(settings.json+CLAUDE.md)和 Codex(hooks.json+AGENTS.md)上被完整复用,并延伸支持 OpenClaw、Hermes、Cursor 等多个 Agent,最终实现了"所有 AI 共享同一份记忆、任务跨 Agent 无缝接续"的核心体验。
想进一步了解各 Agent 的接入细节,可以查看 integration/ 目录下的目标注册表与 docs/cn/memory/sources.mdx 中的记忆源说明。
【免费下载链接】memmy-agent🍙 A personal AI agent & local memory hub for all AI agents, gives every AI one shared, fully controlled memory and persistent context — all AI remember the same you. Now supports Claude Code, Codex, OpenClaw and Hermes Agent etc.项目地址: https://gitcode.com/gh_mirrors/me/memmy-agent
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考