news 2026/9/11 1:57:37

agentmemory Hooks 深度指南:让 AI 编码 Agent 全生命周期自动捕获记忆

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
agentmemory Hooks 深度指南:让 AI 编码 Agent 全生命周期自动捕获记忆

agentmemory Hooks 深度指南:让 AI 编码 Agent 全生命周期自动捕获记忆

【免费下载链接】agentmemory#1 Persistent memory for AI coding agents based on real-world benchmarks项目地址: https://gitcode.com/GitHub_Trending/age/agentmemory

agentmemory 为 Claude Code 等 AI 编码 Agent 提供了一套基于插件生命周期钩子(lifecycle hooks)的自动记忆捕获机制。本文将围绕plugin/skills/agentmemory-hooks/SKILL.md展开,深入讲解 12 个钩子事件如何在你无需手动调用memory_save的情况下,自动记录工具使用、用户提示词与会话边界,并解释“零 LLM 开销捕获”与可选的压缩、上下文注入开关。读完你不仅能快速安装启用 hooks,还能理解每个钩子背后的 REST 调用链路与排查思路。

快速开始:安装插件并自动注册钩子

在 Claude Code 中安装 agentmemory 插件后,全部生命周期钩子会自动注册,无需任何额外配置:

/plugin marketplace add rohitg00/agentmemory /plugin install agentmemory

安装完成后,打开实时观测面板http://localhost:3113,即可看到钩子捕获的观测(observations)实时落地。常规开发工作中你不需要手动调用记忆保存工具——钩子会替你完成工具调用、提示词与会话边界的观测写入。

从插件清单 plugin/plugin.json 可以看到,该插件还同时提供 54 个 MCP 工具、17 个技能与实时查看器;钩子系统只是其中自动采集数据的部分。

12 个生命周期钩子事件总览

钩子的注册配置集中在 plugin/hooks/hooks.json,每个事件绑定一个node脚本(通过${CLAUDE_PLUGIN_ROOT}定位插件根目录)。REFERENCE.md 记录了完整事件清单,共 12 个:

钩子事件触发时机对应脚本
SessionStart会话开始scripts/session-start.mjs
UserPromptSubmit用户提交提示词scripts/prompt-submit.mjs
PreToolUse工具调用前(匹配Edit\|Write\|Read\|Glob\|Grepscripts/pre-tool-use.mjs
PostToolUse工具调用后scripts/post-tool-use.mjs
PostToolUseFailure工具调用失败scripts/post-tool-failure.mjs
PreCompact宿主压缩上下文前scripts/pre-compact.mjs
SubagentStart子代理启动scripts/subagent-start.mjs
SubagentStop子代理结束scripts/subagent-stop.mjs
Notification收到通知scripts/notification.mjs
TaskCompleted任务完成scripts/task-completed.mjs
Stop代理停止/每次轮次结束scripts/stop.mjs
SessionEnd会话结束scripts/session-end.mjs

值得注意的是PreToolUse钩子带有matcher: "Edit|Write|Read|Glob|Grep"过滤器,只对这些核心文件/搜索类工具生效。REFERENCE.md 由 scripts/skills/generate.ts 从hooks.json自动生成,修改注册后需运行npm run skills:gen重新生成,不应手工编辑。

各钩子职责详解:从“记什么”到“怎么记”

会话边界:SessionStart / SessionEnd / Stop

会话开始与结束钩子为每一段工作划定边界,使handoff技能能够在后续会话中恢复它。查看 scripts/session-start.mjs 的实现:

  • 从 stdin 读取 JSON 载荷,提取session_id/sessionId/conversation_id,缺省时生成ses_前缀的临时 ID;
  • 通过hookCwd解析工作目录(优先取载荷中的cwd,其次workspace_roots,再次DEVIN_PROJECT_DIR/CLAUDE_PROJECT_DIR环境变量);
  • 调用resolveProject确定项目名:优先AGENTMEMORY_PROJECT_NAME,否则尝试git rev-parse --show-toplevel取仓库根目录的 basename,最后退回当前目录名;
  • 向 daemon 的/agentmemory/session/start端点 POST{ sessionId, project, cwd }完成注册。

SessionEnd(scripts/session-end.mjs)还会尝试从transcript_path指向的 JSONL 转录文件中抽取最多 50 条用户文本提示(支持<user_query>标签包裹格式),逐条以hookType: "prompt_submit"补录,然后通知/agentmemory/session/end关闭会话。Stop钩子(scripts/stop.mjs)与 SessionEnd 行为类似,也会 POST/agentmemory/session/end——由于 Stop 在每个代理轮次都会触发,daemon 侧对这类高频结束信号做了合并去重(详见下文“压缩冷却”)。

工具使用:PreToolUse / PostToolUse / PostToolUseFailure

工具调用钩子是recallrecap技能的原始素材来源,记录“改了什么、为什么改”。以 scripts/post-tool-use.mjs 为例:

  • 兼容多种载荷字段(tool_name/toolNametool_input/toolArgstool_response/tool_output/tool_result等),适配不同宿主;
  • 调用extractImageData识别 base64 图片输出(data:image/前缀或 PNG/JPEG 特征头),将图片数据与文本输出分离,文本位置替换为[image data extracted],图片单独放入image_data字段;
  • 输出经truncate截断到 8000 字符(对象则序列化后截断),避免超大工具输出撑爆记忆存储;
  • 最终以hookType: "post_tool_use"POST 到/agentmemory/observe,超时 3 秒。

所有钩子脚本采用“尽力而为”策略:fetch失败即静默吞掉(.catch(() => {})),超时后短暂延时退出,绝不阻塞宿主主流程。这也意味着钩子离线不会导致 Agent 报错,只是观测丢失。

意图与上下文保全:UserPromptSubmit / PreCompact

UserPromptSubmit(scripts/prompt-submit.mjs)把用户提示原文(data.prompt/data.userPrompt)以hookType: "prompt_submit"写入/agentmemory/observe,保留“用户当时想要什么”的意图锚点。

PreCompact则在宿主压缩/裁剪上下文之前争取最后机会保全关键内容。scripts/pre-compact.mjs 会:

  1. 若设置CLAUDE_MEMORY_BRIDGE=true,先同步 Claude 记忆桥/agentmemory/claude-bridge/sync
  2. 再向/agentmemory/contextPOST{ sessionId, project, budget: 1500 },把预算内的相关上下文写入 stdout,供宿主在压缩前吸收。

提交关联:post-commit 钩子

虽然hooks.json未直接列出 post-commit(它由宿主侧的 git 钩子机制触发),scripts/post-commit.mjs 的实现说明它如何把提交与会话绑定:

  • 解析AGENTMEMORY_COMMIT_SHA或执行git rev-parse HEAD取提交 SHA;
  • 通过多条git命令收集分支、远端仓库 URL、提交信息、作者与变更文件列表(git diff-tree --no-commit-id --name-only -r);
  • 整体 POST 到/agentmemory/session/commit,为commit-contextcommit-history技能提供数据基础——这两个技能正是通过GET /agentmemory/session/by-commit?sha=<sha>GET /agentmemory/commits查询提交维度的记忆。

默认零 LLM 捕获与两个付费开关

SKILL.md 强调了一个核心设计原则:捕获默认开启,且零 LLM 开销。从 src/config.ts 的注释可以还原完整演进逻辑:

  • 自 0.8.8 起,逐条观测的 LLM 压缩默认关闭。关闭时观测通过“合成压缩”(synthetic compression)路径完成索引,recall/search依然可用;
  • 自 0.8.10 起,会话级上下文注入默认关闭。关闭时 pre-tool-use 与 session-start 钩子仍会 POST 观测用于后台捕获,但不再向 stdout 写入上下文,避免 Claude Code 在每个工具轮次都吞入约 4000 字符的额外内容,烧掉模型输入窗口的 token。

因此以下两个能力都是独立选配,开启后才会消耗 token:

环境变量作用代价
AGENTMEMORY_AUTO_COMPRESS=true用 LLM 为每条观测生成更丰富的摘要Claude API token 用量随工具调用频率线性上升
AGENTMEMORY_INJECT_CONTEXT=true把相关记忆注入会话上下文每次工具轮次额外增加约 4000 字符输入

配置写入~/.agentmemory/.env。开启注入会收到明显的启动警告,提醒你正在为上下文注入付费。

钩子底层的环境变量与 REST 协议

所有钩子脚本共享同一套连接配置(见各脚本开头的_project.ts片段):

环境变量默认值说明
AGENTMEMORY_URLhttp://localhost:3111daemon 基础地址,钩子所有请求都打到这个 base URL
AGENTMEMORY_SECRET非空时钩子为每个请求附加Authorization: Bearer <SECRET>头;默认本地 daemon 开放且拒绝多余请求头
AGENTMEMORY_PROJECT_NAME显式指定项目名,优先级高于 git 仓库推断
AGENTMEMORY_INJECT_CONTEXTfalse是否把记忆注入会话上下文(见上文)
AGENTMEMORY_AUTO_COMPRESSfalse是否启用 LLM 逐条压缩摘要
AGENTMEMORY_CONSOLIDATION_COOLDOWN_MS300000(5 分钟)Stop 钩子触发/session/end后合并语料的防抖窗口,设为 0 关闭防抖

AGENTMEMORY_URL默认指向 3111 端口(REST daemon),而实时观测面板在 3113 端口;二者端口不同,不要混淆。daemon 只在启动时读取.mcp.json,因此修改端口或鉴权后必须重启 daemon,两个传输层(MCP 与 REST)才能感知变更。

排查:观测缺失时按顺序检查

SKILL.md 明确给出两条排查线索,完整恢复步骤见 plugin/skills/_shared/TROUBLESHOOTING.md:

  1. 确认插件已启用且 daemon 在运行。钩子脚本对 daemon 的请求是尽力而为的(失败静默),所以 daemon 挂掉不会报错,只会丢观测——这正是观测“消失”最常见的隐性原因。
  2. 若 MCP 工具缺失,则按序执行:/plugin list确认agentmemory处于 enabled → 重启宿主(.mcp.json仅在启动时读取,中途启用插件不会注册工具)→/mcp确认agentmemory服务器连接为 live。

当 MCP 工具不可用但 daemon 在跑时,可回退到 REST 直连:设置AGENTMEMORY_URL(默认http://localhost:3111),仅在设置了AGENTMEMORY_SECRET时才附加Authorization头。不同技能对应 REST 端点可查阅 TROUBLESHOOTING 中的端点映射表(如rememberPOST /agentmemory/rememberrecallPOST /agentmemory/smart-search)。

相关技能与进一步阅读

钩子产出的数据由以下技能消费,形成完整的“自动采集 → 主动利用”闭环:

  • agentmemory-config:捕获与注入相关的全部配置项;
  • handoffrecapsession-history:直接消费本钩子系统记录的会话与观测;
  • commit-contextcommit-history:依赖 post-commit 钩子建立的提交-会话关联。

若要基于真实事件验证钩子行为,可参考仓库中的钩子实现源码(plugin/scripts/ 目录)与注册配置 plugin/hooks/hooks.json,并配合实时面板观察观测落库过程。

【免费下载链接】agentmemory#1 Persistent memory for AI coding agents based on real-world benchmarks项目地址: https://gitcode.com/GitHub_Trending/age/agentmemory

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/11 1:57:10

DeepSeek Harness本地部署实战:从Docker安装到Ollama接入与插件配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/11 1:56:30

江苏省30m DEM地形处理实战:从RAR解压到坡度分类

简介&#xff1a;江苏省地形地貌最新30m精度数据包&#xff0c;面向地理信息、测绘、国土规划与环境研究从业者&#xff0c;提供统一按省整理的tif栅格数据。内容包括海拔分级、起伏程度分类、陆地地貌类型等图层&#xff0c;并附带WGS84与Albers投影坐标参考&#xff0c;便于直…

作者头像 李华
网站建设 2026/9/11 1:55:17

XTween对象池深度解析:从GC Alloc到双向链表的性能优化实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/11 1:52:50

高铁受电弓检测数据集解析:VOC与YOLO格式转换及YOLOv8训练实战

简介&#xff1a;一套面向高铁受电弓检测场景的目标检测数据集&#xff0c;适合轨道交通视觉检测、设备巡检等方向的算法工程师与研究者使用。数据集中包含1245张jpg图片&#xff0c;并分别提供Pascal VOC格式的xml标注和YOLO格式的txt标注&#xff0c;覆盖“roi”与“sdg”两个…

作者头像 李华
网站建设 2026/9/11 1:52:25

Python双目立体视觉测距实战:从标定到毫米级距离输出

简介&#xff1a;本资源是一套完整的基于Python的双目立体视觉测距毕业设计项目&#xff0c;面向计算机、人工智能、自动化等专业本科生&#xff0c;解决目标物体三维空间距离实时测量这一典型CV应用问题&#xff0c;特别适合作为课程大作业或毕业设计选题&#xff0c;难度适中…

作者头像 李华
网站建设 2026/9/11 1:51:18

能碳IBMS集成平台:破解建筑智能化数据孤岛难题

1. 项目背景与核心价值 能碳IBMS集成平台是当前建筑智能化领域的重要突破&#xff0c;它解决了传统建筑管理系统长期存在的"数据孤岛"问题。在商业综合体、产业园区、大型公共建筑等场景中&#xff0c;暖通空调、照明、电梯、安防等子系统往往采用不同厂商的独立系统…

作者头像 李华