参考 Claude Code 的记忆分类系统(
src/memdir/memoryTypes.ts), 结合 OpenClaw 实践经验设计。
Claude Code 将记忆严格分为 4 种类型,每种有明确的保存/使用规范:
类型用途何时保存示例user用户角色、偏好、知识水平学到用户任何身份信息时"数据科学家,偏好 Python"feedback用户纠正/确认的方法论用户纠正或确认非直觉操作时"不要 mock 数据库,上次出过事故"project项目进展、目标、deadline了解到"谁在做什么、为什么、什么时候""周四后冻结非关键合并"reference外部系统指针了解到外部资源位置时"pipeline bug 跟踪在 Linear"
{type}-{subject}.md(如 user-role.md、 feedback-testing.md)记忆文件使用 {type}-{subject}.md 格式:
类型示例文件名说明useruser-da-lao-profile.md用户画像feedbackfeedback-operating-rules.md方法论、教训projectproject-calendar-add-v2.md项目进展referencereference-deployed-skills.md外部资源
命名规则:
type 固定为 user / feedback / project / referencesubject 用小写英文 + 连字符,简短描述主题text
workspace/
├── MEMORY.md # 索引文件(手动维护)
└── memory/ # 记忆目录
├── user/ # 用户画像、偏好
│ └── user-{subject}.md
├── feedback/ # 方法论、教训
│ └── feedback-{subject}.md
├── project/ # 项目进展
│ └── project-{subject}.md
├── reference/ # 外部资源指针
│ └── reference-{subject}.md
└── YYYY-MM-DD.md # 可选:每日原始日志
手动创建(或用模板):
powershell
# 在 workspace 根目录执行
New-Item -ItemType Directory -Path "memory\user","memory\feedback","memory\project","memory\reference" -Force
将现有的 MEMORY.md 改为索引格式。参考模板: templates/MEMORY-index.md
markdown
# MEMORY.md - 长期记忆索引
> 每行一条记忆,按类型分组。详细内容见 `memory/` 子目录。
> 单条 ≤150 字符。超过 200 行时清理旧条目。
## User(用户画像)
- [用户名称](memory/user/xxx-profile.md) — 基本信息、偏好
## Feedback(方法论 & 教训)
- [教训名称](memory/feedback/xxx-lesson.md) — 核心要点,日期
## Project(项目进展)
- [项目名称](memory/project/xxx-progress.md) — 当前状态
## Reference(外部资源)
- [资源名称](memory/reference/xxx-resource.md) — 位置、用途
每个记忆文件使用 frontmatter + 正文格式:
markdown
---
name: 记忆名称
description: 一句话描述
type: user | feedback | project | reference
created: YYYY-MM-DD
updated: YYYY-MM-DD
---
# 标题
## 内容...
## Why(为什么重要)
...
## How to apply(怎么用)
...
参考各类型模板:
templates/user-example.mdtemplates/feedback-example.mdtemplates/project-example.mdtemplates/reference-example.md场景类型操作用户说了自己的偏好/背景user更新或创建 user 文件 + 索引用户纠正了你的操作feedback创建 feedback 文件,记录"为什么"和"怎么避免"项目有进展/决策/变更project更新 project 文件 + 索引发现外部工具/文档/资源reference创建 reference 文件日常对话中有趣的事—写入 memory/YYYY-MM-DD.md 日志
写 Why,不写 What:
写 How to apply:
控制长度:
记忆有"新鲜度",不同类型的衰减速度不同:
类型衰减周期处理方式user6 个月超期后检查是否仍然准确,更新 updated 或标记过时feedback不衰减长期有效,除非明确被推翻project1 个月项目状态变化快,超期未更新的标记为 [stale] 候选清理reference3 个月检查资源是否仍然可用
清理流程(MEMORY.md 超 150 行时触发):
updated 日期[stale] 标记写入记忆文件前必须检查以下模式:
模式示例处理API Keysk-xxx, BSAxxx, ghp_xxx❌ 不写入,改为"已配置 [服务名] API Key"密码/token长随机字符串(>20 字符的 hex/base64)❌ 不写入,改为"已配置凭证"OAuth Tokenya29.xxx, gho_xxx❌ 不写入内部 URL 含 tokenhttps://xxx?token=yyy只写域名,去掉 query string邮箱(可选脱敏)user@example.com视场景,user 类型可记录
正则参考(用于自动扫描):
text
sk-[a-zA-Z0-9]{20,} # OpenAI/OpenRouter API Key
BSA[a-zA-Z0-9]{20,} # Brave Search API Key
ghp_[a-zA-Z0-9]{36,} # GitHub PAT
ya29\.[a-zA-Z0-9_-]+ # Google OAuth
[a-f0-9]{32,} # 通用长 hex(可能是 token)
原则: 宁可多拦不漏。记忆文件中出现敏感信息时,记录"已配置 [服务] 凭证"即可,不需要记录具体内容。
markdown
## Session Startup
1. 读 SOUL.md
2. 读 USER.md
3. 读 memory/YYYY-MM-DD.md(今天 + 昨天)
4. 如果是主 session:也读 MEMORY.md
在 AGENTS.md 的 Session Startup 部分加入:
markdown
## 记忆四类型
保存记忆时分类为 user/feedback/project/reference,写独立文件 + 更新 MEMORY.md 索引。
不保存可从代码推导的内容。MEMORY.md 每行 ≤150 字符,200 行截断。
在 HEARTBEAT.md 中加入定期记忆维护任务:
markdown
- [ ] 每 3 天:读最近 daily log,提取重要事件更新 MEMORY.md
Q: 和 daily log 是什么关系? A: daily log 是原始流水账(什么都记),memory/ 下的四类型文件是提炼后的结构化记忆。 好比:daily log = 日记本,memory/ = 笔记卡片。
Q: 一个事件同时涉及 user 和 project 怎么办? A: 分别记录。user 文件记"用户偏好",project 文件记"项目进展"。不要混在一起。
Q: 可以跨 session 使用吗? A: 可以。所有 session 共享同一套 memory/ 目录和 MEMORY.md。 但 MEMORY.md 只在主 session(直接对话)中加载,共享/群聊场景不加载以防泄露。
Q: 需要脚本自动化吗? A: 可选。基本用法靠 agent 手动维护就够了。 高级场景可以用 cron + 子代理做自动提取(类似 Claude Code 的 SessionMemory)。