openclaw没有内置复杂的记忆治理工程实现,仅通过分类的文本文件实现记忆介质的作用,后续应该会提供更多上下文管理相关勾子,通过这些勾子可以实现外挂独立的记忆治理能力。
文本文件内的记忆在agent运行时注入LLM上下文,但决策依旧取决于LLM如何理解。所以openclaw的记忆文件只负责记录,并不负责LLM在执行上一定遵从,这也就是说写入记忆的约定不一定被LLM稳定执行。
下面是openclaw记忆文件的基本结构与作用
记忆文本文件:
.openclaw/workspace/├── MEMORY.md # 长期记忆(核心)├── IDENTITY.md # 身份定义├── SOUL.md # 性格与原则├── USER.md # 用户信息├── TOOLS.md # 工具配置├── HEARTBEAT.md # 定时任务├── AGENTS.md # 启动加载规则├── data/│ └── heartbeat-state.json # 状态追踪└── memory/└── YYYY-MM-DD.md # 每日日志
文件 | 作用 | 更新频率 |
|---|---|---|
MEMORY.md | 核心约定、技术经验 | 有新约定时更新 |
SOUL.md | 性格、原则 | 很少更新 |
USER.md | 用户信息、偏好 | 有新偏好时更新 |
memory/YYYY-MM-DD.md | 每日日志 | 每天更新 |
heartbeat-state.json | 任务状态 | 每次任务后更新 |
每次会话启动时:1. 读取 SOUL.md → 我是谁2. 读取 USER.md → 你是谁3. 读取 memory/YYYY-MM-DD.md → 最近发生了什么4. 如果是主会话 → 读取 MEMORY.md → 长期记忆
通过以上方式确保助手每次醒来都能恢复上下文(但这不是程序化设定,所以不保证结果)
我自己把openclaw的关键文件备份在github的私有库中,并在变更后触发自动备份,这是我给openclaw设定的任务,属于长期记忆并写入了memory.md中,以方便我看到文件的内容都记录了什么。我发现它的memory、heartbeat文件记录的内容并不是很完善,内容不仅杂乱还充斥了一些不重要信息,这会影响到你的使用体验。你可以要求它把内容发给你,然后要求它整理,或者教它怎么记录,设定一个更新原则,之后结构就好很多了。
我设定的更新流程:
获取新信息↓判断:是否属于「我们的共同记忆」?↓是 → 用明确结论写入 MEMORY.md 对应分类否 → 放 Notion 或忽略↓git commit + git push 同步
结构化记录:按类别组织信息
- 信息精简:避免冗余,只保留必要内容
- 及时更新:配置变更后同步更新
- 分类清晰:身份、约定、技术经验分开
记忆记录原则
应该记录的:
身份与关系(我们是谁、沟通偏好) 约定与承诺(共识等) 踩过的坑(技术经验、配置细节) 你的偏好(文档风格、提醒方式)
不应该记录的:
通用知识 可搜索到的信息 与「我们的关系」无关的内容
记录风格:
使用明确结论,不要含糊描述 核心原则:MEMORY.md 记录的是「我们的共同记忆」,不是「知识库」

夜雨聆风