Claude Code × agentmemory:深入原理与最佳实践
在会话末尾告诉 Claude:请用 memory_save 保存本次会话的关键决策和注意事项Stop hook 会自动做合并,但手动触发一次能确保重要信息被标记高优先级。
Claude Code × agentmemory:深入原理与最佳实践
摘要:本文深入解析 Claude Code 与 agentmemory 的集成原理与最佳实践。agentmemory 通过异步 hooks 自动捕获会话中的关键观察(Observations),定期合并为结构化记忆(Memory),并强化为高置信度长期记忆(Crystal)。它提供 53 个 MCP 工具,支持混合检索(BM25 + 语义),召回准确率(R@5)达 95.2%。最佳实践包括:优先项目级连接、会话结束前手动总结、主动使用
/agentmemory:recall等命令、定期清理低质量记忆,并与 CLAUDE.md 形成互补——CLAUDE.md 记录“应该怎样”,agentmemory 记录“实际发生了什么”。
记忆的生命周期
理解 agentmemory 的核心,需要先搞清楚一条记忆从产生到被召回的完整路径:
原始会话内容
│
▼ hooks 捕获
Observation(观察)
│
▼ 定期合并(LLM 或 BM25)
Memory(记忆条目)
│
▼ 结晶化(crystallize)
Crystal(高置信度长期记忆)
│
▼ 语义检索 + BM25
Recall(召回注入上下文)
Observation
最原始的记忆单元。每次会话中,hooks 自动将以下内容标记为 Observation:
- 用户的关键 prompt
- Claude 做出的重要决策
- tool call 的输入输出摘要
- 代码变更的上下文
每条 Observation 带有时间戳、项目路径、重要性评分(0–10)。
Memory → Crystal
Observations 随时间积累后,agentmemory 定期触发合并流程:将同一主题的碎片观察整合成结构化的 Memory 条目,再经过多次验证强化的条目升级为 Crystal(晶体)——高置信度、长期保留的知识。
这个过程类似人类的记忆巩固:短期记忆通过反复强化变成长期记忆。
Hooks 机制
agentmemory 注册 12 个 hooks,覆盖 Claude Code 的完整生命周期:
| Hook 时机 | 触发动作 |
|---|---|
PreToolUse |
捕获 tool 调用意图,更新工作上下文 |
PostToolUse |
记录 tool 执行结果,提取关键信息 |
Notification |
处理 Claude 的状态通知 |
Stop(会话结束) |
触发记忆合并 pipeline,写入本次会话摘要 |
关键设计:hooks 是异步、非阻塞的。它们在后台执行,不会让 Claude Code 的响应变慢。
hooks 写入项目的 .claude/settings.json(按项目连接时)或 ~/.claude/settings.json(全局连接时),格式如下:
{
"hooks": {
"PreToolUse": [{
"matcher": "",
"hooks": [{"type": "command", "command": "agentmemory hook pre-tool ..."}]
}]
}
}
MCP 工具分类
53 个 MCP 工具按功能分为几类:
核心记忆操作(始终可用)
| 工具 | 说明 |
|---|---|
memory_save |
手动保存一条记忆 |
memory_recall |
语义检索相关记忆 |
memory_smart_search |
混合检索(语义 + BM25) |
memory_sessions |
列出历史会话 |
高级操作(需服务运行)
| 工具 | 说明 |
|---|---|
memory_consolidate |
手动触发记忆合并 |
memory_crystallize |
将记忆升级为 Crystal |
memory_export |
导出记忆为 Markdown |
memory_governance_delete |
审计删除特定记忆 |
注意:MCP shim 在没有服务运行时退化为 7 个核心工具。完整 53 工具需要 agentmemory 服务在 3111 端口运行。
存储架构
agentmemory 的存储完全本地,无外部依赖:
~/.agentmemory/
├── data/ # KV 存储(记忆条目、会话索引)
├── vectors/ # 向量索引(语义检索)
└── .env # 配置文件
召回策略:Hybrid Search
- BM25 全文检索:基于关键词,无需 GPU,速度快
- 向量语义检索:使用本地
all-MiniLM-L6-v2模型,捕捉语义相似性 - 重排序:综合两者分数,返回最相关的结果
官方 benchmark(LongMemEval):R@5 = 95.2%,即检索 5 条结果中有 95.2% 的概率包含正确答案。
实时 Viewer
访问 http://localhost:3113 打开 Viewer,提供:
- Live 面板:实时观察当前会话的记忆写入过程
- Replay 面板:选择任意历史会话回放,逐步查看 prompts、tool calls、responses
- Memory 面板:浏览所有存储的记忆条目、Crystal、会话列表
Viewer 是调试和理解「Claude 现在知道什么」的最直观方式。
最佳实践
1. 项目级连接优于全局连接
不同项目有不同的上下文,混在一起反而降低召回精度。对每个重要项目单独执行 agentmemory connect claude-code。
2. 会话结束前做一次手动总结
# 在会话末尾告诉 Claude:
请用 memory_save 保存本次会话的关键决策和注意事项
Stop hook 会自动做合并,但手动触发一次能确保重要信息被标记高优先级。
3. 利用 /agentmemory:recall 主动检索
新会话开始时,上下文注入是自动的,但对于跨项目的通用知识,可以主动触发:
/agentmemory:recall # 检索与当前任务相关的历史记忆
/agentmemory:handoff # 恢复上次会话的断点
/agentmemory:recap # 查看近期会话摘要
4. 定期清理低质量记忆
记忆积累过多会引入噪音。使用 Viewer 定期审查,或:
# 通过 MCP 工具审计低置信度记忆
memory_audit
5. 不适合存入记忆的内容
- 临时调试代码和一次性 patch
- 包含敏感信息(密钥、密码)的内容——agentmemory 有隐私过滤,但最好避免
- 频繁变动的配置值
与 CLAUDE.md 的关系
agentmemory 和 CLAUDE.md 是互补的:
| CLAUDE.md | agentmemory | |
|---|---|---|
| 内容 | 人工维护的规范和约定 | 自动捕获的会话历史和决策 |
| 更新 | 手动 | 自动 |
| 适合 | 项目规范、架构说明 | 「上次为什么这么做」「踩过什么坑」 |
实践建议:CLAUDE.md 写「应该怎样」,agentmemory 记「实际发生了什么」。
更多推荐

所有评论(0)