发现 链接到标题
执行 openclaw doctor 时看到这样一行警告:
Found 127 orphan transcript files in ~/.openclaw/agents/main/sessions.
These .jsonl files are no longer referenced by sessions.json.
127 个文件——不是小数目。但它们是什么、从哪来、为什么成了孤儿?
排查:它们是什么 链接到标题
查看这些 .jsonl 文件的会话头发现,全部是定时任务(cron)的历史执行记录——Dreaming(记忆处理)、Wiki Compile(知识库编译)等系统级自动化任务,不是用户聊天对话。
年龄分布:大部分在 7~30 天之间,每日凌晨产生。
根因:两层存储不同步 链接到标题
OpenClaw 的会话存储一直是两层结构:
sessions.json(索引)——记录 sessionKey 到 sessionId 的映射及元数据*.jsonl(数据)——完整的对话/任务执行原始记录
会话维护机制(cron.sessionRetention 默认 24h、session.maintenance.pruneAfter 默认 30d)会定期清理 sessions.json 中的过期条目。但清理索引时不会删对应的 .jsonl 文件,日积月累,文件成了孤儿。
检查结果:
sessions.json 条目:51 条
引用的 sessionId:56 个
活跃 .jsonl 文件:106 个
孤儿 .jsonl 文件:127 个(含 trajectory)
新产生的会话正常写入 .jsonl,但索引清理产生的孤儿文件越积越多。
官方文档怎么说 链接到标题
OpenClaw 官方文档明确说明会话存储使用两层:
- Store:
~/.openclaw/agents/<agentId>/sessions/sessions.json- Transcripts:
~/.openclaw/agents/<agentId>/sessions/<sessionId>.jsonl
SQLite(state.db)仅存 cron 运行历史与插件安装元数据,不存会话数据。
社区反馈 链接到标题
这个问题在社区已有讨论:
-
Bug: Rapid token depletion due to stale .jsonl transcript files #91868 (2026-06-10,Open)
- 用户反馈
/clear和/reset后.jsonl文件残留在磁盘,后续 prompt 重新加载导致大量 token 被浪费 - 官方尚未修复
- 用户反馈
-
Fix live orphan session transcript visibility #92261 (2026-06-11,PR 进行中)
- 尝试修复 memory-core 侧孤儿文件可见性问题
- ClawSweeper 审查未通过,尚未合入
-
Memory leak: unbounded session trajectory growth causes OOM #91179 (关联问题,被跳过)
影响评估 链接到标题
- 孤儿文件均为 cron 任务会话,不会被重新加载到对话 prompt 中(#91868 的 token 浪费问题在 cron 场景不适用)
- 不影响用户对话渠道的消息收发
- 纯粹是磁盘空间占用问题
当前方案 链接到标题
OpenClaw 暂无内置的孤儿文件自动清理机制。社区已知但尚未修复。手动管理方式:
- 先用
openclaw doctor检查孤儿文件数量 - 对比
sessions.json中的 sessionId 与文件列表,确认孤儿范围 - 删除未引用的
.jsonl和.trajectory.jsonl文件
或定期运行清理脚本,删除超过 30 天且不在 sessions.json 中引用的 .jsonl 文件。
后记 链接到标题
这不是数据丢失——孤儿文件的数据已经被 sessions.json 解除引用,Agent 已无法读取这些历史记录。删除只是清理磁盘残留。期待官方后续版本能内置自动清理机制。