> cn: OpenClaw 版 Claude-Mem:自动扫描旧 Session 文件,AI 提炼决策、偏好、事实,追加写入 memory/;同步清理 .jsonl + .trajectory.jsonl,释放数百 MB 磁盘。提炼比清理先跑,记忆不丢失。
>
> en: OpenClaw's answer to Claude-Mem (71k GitHub stars): AI-scans old .jsonl/.trajectory.jsonl files, extracts decisions and facts into memory/, then safely deletes raw files. Extract first, cleanup second — context preserved, disk freed.
用户明确要求提炼 session 记忆时,触发本 skill:
| 用户说(中文) | 用户说(英文) | 含义 |
|---|---|---|
| --------------- | --------------- | ------ |
| 用 session-memory-extractor 提炼 session 记忆 | use session-memory-extractor to extract session memories | 运行提炼 |
| 提炼旧 session 记忆 | extract memories from old sessions | 运行提炼 |
| 运行 session-memory-extractor | run session-memory-extractor | 运行提炼 |
⚠️ 以下宽泛表达不触发技能(避免误触发导致数据丢失):
⚠️ 以下宽泛表达不触发技能(避免误触发导致数据丢失):
识别到上述语句后,先运行预览,不直接执行删除:
bash ~/.openclaw/workspace/skills/session-memory-extractor/session-memory-extractor.sh --agent main --preview
参数说明:
| 参数 | 作用 |
|---|---|
| ------ | ------ |
--preview | 仅扫描并显示统计数字(多少文件、多大空间、最早/最新日期),不提炼、不删除、不修改任何数据 |
--dry-run | 完整执行一次提炼(写入 memory/),但不删除原始文件,适合验证提炼质量 |
--parallel N | 并行数,建议 3-5 |
--min-age 14 | 自定义保留天数 |
⚠️ 确认步骤(必须严格执行):
memory/,供后续 session 查阅.jsonl 原始文件将被永久删除,无法恢复.quarantined--.jsonl ),原文件保留不删,记录到 reports/quarantine.logYES(大写)后,才执行提炼YES(大写)确认删除⚠️ v1.0.6 安全保证:
提炼失败的 session 绝对不会被静默删除。三种隔离机制:
extract_session.py 输出 __EXTRACT_OK__ marker,runner 必须看到这个 marker 才认定提炼成功[FACT] / [LEARN] / [TODO] / [INSIGHT] / [NOTE] / [REFERENCE] / [DECISION]),否则视为无效reports/quarantine.log 包含失败原因可用的 Quarantine reason:
no_marker:API 调用失败 / 返回空内容too_short:提取内容不足 50 字符no_structured_entries:提取内容无结构化标记⚠️ 隐私保护建议(重要):
--preview 查看涉及哪些 session用户确认后,再跑实际提炼:
bash ~/.openclaw/workspace/skills/session-memory-extractor/session-memory-extractor.sh --agent main --parallel 3
可选参数:
--preview 快速预览(不执行)--parallel 3 并行数(默认 1,建议 3-5)--min-age 14 自定义保留天数--dry-run 只提炼不删除(需确认后执行)背景: 2026-06-18 老板主 agent 的 auth-profiles.json 已被 OAuth SQLite 取代,原 skill 只读 auth-profiles.json,导致 31 个 session 提炼调用全部静默失败返回 NO_MEMORIES,文件却被删除——30/31 个 session 原始内容永久丢失。这是原 skill 的“吞错误 + 无条件删文件”双重设计失误。
修复:
| 改动点 | 原状 | v1.0.6 |
|---|---|---|
| ------ | ------ | -------- |
extract_session.py | 成功就 print,失败抛 RuntimeError 被 runner 吞为 NO_MEMORIES | 成功 print __EXTRACT_OK__\n;空内容抛 RuntimeError;失败 100% 走 stderr + 非零退出码 |
run_extractor.py | 始终写 memory + 删文件 | 验证 marker + 内容 + 结构后才写 memory/删文件;否则 Quarantine 文件 + 写 quarantine.log |
| Quarantine 机制 | 不存在 | 失败文件被 os.rename 为 .quarantined-(不删除);保留原内容供事后恢复 |
Shell wrapper find | 只排除 .deleted.* | 增加排除 .quarantined-,重跑不会再次处理已 quarantine 文件 |
| 审计 | 仅 report.json | 新增 reports/quarantine.log(append-only),含会话ID、文件日期、原因、文件大小 |
影响范围: 不影响成功路径(提炼成功的 session 仍会被删)。仅改变失败路径——原 session 不丢失。
审计问题修复(来自 ClawHub 安全审计):
--preview 仅扫描不提炼不删除,--dry-run 提炼但不删除安全问题修复(来自 ClawHub 安全审计):
Bug 修复:
results 但代码读的是 extractions,现已修复total_size=0B——原因是 macOS 上 stat -f %s 返回的是 512 字节块数量而非文件大小,现改用 stat -f %z体验改进:
改进:
config.env 配置文件,所有参数可通过配置文件修改,无需触碰代码OpenClaw 的 Session 文件(.jsonl / .trajectory.jsonl)越积越多,用了几个月轻松达到数百 MB。
问题是:
扫描 session 目录 → AI 提炼关键内容 → 写入 memory/ → 删除原始文件
memory/YYYY-MM-DD.md,永久保留下载 skill 后,复制配置示例文件:
cd ~/.openclaw/workspace/skills/session-memory-extractor
cp config.env.example config.env
编辑 config.env,修改以下必填项:
# 模型(默认 MiniMax-M2)
EXTRACTION_MODEL=MiniMax-M2
# API Key 来源:auth_profiles(默认,从 auth-profiles.json 自动读)
API_KEY_SOURCE=auth_profiles
# 保留天数
MIN_AGE_DAYS=7
# 飞书通知(可选)
NOTIFY_TARGET=ou_your_open_id_here
NOTIFY_ENABLED=false
# 完整提取 + 清理
bash session-memory-extractor.sh --agent main
# 预览模式(只提炼,不删除)
bash session-memory-extractor.sh --agent main --dry-run
# 自定义保留天数
bash session-memory-extractor.sh --agent main --min-age 14
| 配置项 | 默认值 | 说明 |
|---|---|---|
| -------- | -------- | ------ |
EXTRACTION_MODEL | MiniMax-M2 | AI 提炼使用的模型 |
API_KEY_SOURCE | auth_profiles | API Key 从哪读:auth_profiles=从 auth-profiles.json,env=从环境变量 |
MIN_AGE_DAYS | 7 | 超过此天数的 session 文件才会被处理 |
CLEAN_TRAJECTORY | true | 是否清理 .trajectory.jsonl 文件 |
NOTIFY_TARGET | (空) | 飞书 DM 目标(用户 open_id 或群 chat_id) |
NOTIFY_ENABLED | false | 是否启用飞书通知 |
DRY_RUN | false | dry-run 模式(只提炼不删除) |
Sessions processed: 12
Entries extracted: 31
Total bytes freed: 47.3 MB
Memory written: memory/2026-05-20.md
## Extracted from session: {session-id}
- **[DECISION]** 用户选择了航天赛道作为主要内容方向
Confidence: HIGH
- **[PREFERENCE]** 用户喜欢先给结论再展开
Confidence: HIGH
bash session-memory-extractor.sh --agent main # ~/.openclaw/workspace/memory/
bash session-memory-extractor.sh --agent space # ~/.openclaw/agents/space/workspace/memory/
bash session-memory-extractor.sh --agent math-tutor # ~/.openclaw/agents/math-tutor/workspace/memory/
Skill 本身不内置定时,由用户自行配置:
<!-- macOS LaunchAgent: 每周一 10:00 -->
<key>Label</key>
<string>com.user.session-memory-extractor</string>
<key>ProgramArguments</key>
<array>
<string>/bin/bash</string>
<string>/path/to/session-memory-extractor.sh</string>
<string>--agent</string>
<string>main</string>
</array>
<key>StartCalendarInterval</key>
<dict>
<key>Weekday</key><integer>1</integer>
<key>Hour</key><integer>10</integer>
<key>Minute</key><integer>0</integer>
</dict>
| 功能 | 内置 Compaction | 内置 Dreaming | 本 Skill |
|---|---|---|---|
| ------ | :---: | :---: | :---: |
| 从 .jsonl 提炼内容 | ❌ | ❌ | ✅ |
| 写入 memory/ | 仅 compaction 时 | 仅 light 阶段 | ✅ |
| 提炼后删除原始文件 | ❌ | ❌ | ✅ |
| 释放磁盘空间 | ❌ | ❌ | ✅ |
| 支持 dry-run 预览 | ❌ | ❌ | ✅ |
| 配置文件化 | ❌ | ❌ | ✅ |
session-memory-extractor/
├── SKILL.md ← 本文件
├── config.env.example ← 配置示例(下载后复制为 config.env)
├── config.env ← 用户配置(下载更新时保留)
├── session-memory-extractor.sh ← 主入口
├── run_extractor.py ← Python 处理器
├── extract_session.py ← AI 提炼
├── feishu_notify.py ← 飞书通知
└── reports/ ← 运行报告目录
~/.openclaw/agents/main/agent/auth-profiles.json 读取,无需手动配置MINIMAX_API_KEY 环境变量检查项:
config.env 中 API_KEY_SOURCE 是否正确auth-profiles.json 是否存在且包含有效的 API Key可能原因:
MIN_AGE_DAYS检查项:
sessions.json 是否有写权限共 6 个版本