OpenClaw 版 Claude-Mem:自动扫描旧 Session 文件,AI 提炼决策、偏好、事实,追加写入 memory/;同步清理 .jsonl + .trajectory.jsonl,释放数百 MB 磁盘。提炼比清理先跑,记忆不丢失。
---
name: Session Memory Extractor
slug: session-memory-extractor
version: 1.0.4
homepage: https://clawhub.ai/hasakyi/session-memory-extractor
description: OpenClaw 版 Claude-Mem:自动扫描旧 Session 文件,AI 提炼决策、偏好、事实,追加写入 memory/;同步清理 .jsonl + .trajectory.jsonl,释放数百 MB 磁盘。提炼比清理先跑,记忆不丢失。
changelog: "v1.0.4: 安全修复-收窄触发词避免误触发+删除歧义别名SME+强化删除前确认;v1.0.3: 修复飞书通知提取数为0的bug(key名extractions→results);修复预览大小显示0B的bug(stat -f %s→-f %z);飞书通知增加内容示例展示(3条snippet);v1.0.2: 支持config.env配置化、快速预览、并行处理、自然语言触发、飞书通知"
metadata: {"clawhub":{"emoji":"🧠","requires":{"bins":["python3"]},"os":["linux","darwin","win32"],"configPaths":["~/.openclaw/workspace/skills/session-memory-extractor/"]}}
---
# Session Memory Extractor
> 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.
---
## When to Use
用户**明确要求**提炼 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 | 运行提炼 |
**⚠️ 以下宽泛表达不触发技能(避免误触发导致数据丢失):**
- ❌「整理 session 记忆」
- ❌「清理 session 文件」
- ❌「整理记忆」
- ❌「清理文件」
- ❌「SME」单独使用
## 触发命令
识别到上述语句后,**先运行预览**,不直接执行删除:
```bash
bash ~/.openclaw/workspace/skills/session-memory-extractor/session-memory-extractor.sh --agent main --preview
```
这会快速扫描并显示:
- 将处理多少个 session
- 预计耗时
- 最早/最新文件日期
**⚠️ 确认步骤(必须严格执行):**
1. 预览完成后,向用户展示扫描结果
2. 告知将执行的操作及风险:
- **提炼内容**:将提取到 `memory/`,供后续 session 查阅
- **删除原始文件**:`.jsonl` 原始文件将被永久删除,**无法恢复**
- **隐私风险**:session 中可能包含密码、密钥、敏感对话等,提炼内容会写入 memory/,存在隐私泄露风险
3. 等待用户**明确输入 `YES`(大写)**后,才执行提炼
4. 提炼完成后,询问是否删除原始文件,需用户再次**输入 `YES`(大写)**确认删除
用户确认后,再跑实际提炼:
```bash
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` 只提炼不删除(需确认后执行)
---
## 版本历史
### v1.0.4 (2026-05-26) — 安全修复
**安全问题修复(来自 ClawHub 安全审计):**
- **收窄触发词**:删除宽泛触发词(「整理 session 记忆」「清理 session 文件」),避免用户无意图时误触发导致数据丢失
- **删除歧义别名**:移除「SME skill」等歧义触发词,减少意外激活概率
- **强化确认步骤**:明确要求在预览后、执行前、执行后三次确认,确保用户全程知情
### v1.0.3 (2026-05-24)
**Bug 修复:**
- 飞书通知显示"(无提炼内容)"——实际提取了 300 条,原因是 JSON 报告 key 名是 `results` 但代码读的是 `extractions`,现已修复
- 预览 `total_size=0B`——原因是 macOS 上 `stat -f %s` 返回的是 512 字节块数量而非文件大小,现改用 `stat -f %z`
**体验改进:**
- 飞书通知新增 3 条提取内容示例(snippet),不只显示数字统计
- 飞书通知现在会显示所有类型计数(DECISION/PREFERENCE/FACT/TODO),即使某类为 0 也会显示
### v1.0.2 (2026-05-21)
**改进:**
- 支持 `config.env` 配置文件,所有参数可通过配置文件修改,无需触碰代码
- 模型选择从硬编码改为可配置(默认 MiniMax-M2)
- API Key 来源可选择(auth-profiles.json / 环境变量)
- 新增自然语言触发:用户可通过"用 sme 整理 session 记忆"等语句调用
---
## 痛点
OpenClaw 的 Session 文件(`.jsonl` / `.trajectory.jsonl`)越积越多,用了几个月轻松达到数百 MB。
**问题是:**
- 内置 Compaction 只在上下文快满时触发,不清理历史文件
- 内置 Dreaming 不会从旧 .jsonl 里提取内容
- 手动删除 .jsonl = 直接丢失所有上下文
---
## 解决思路
```
扫描 session 目录 → AI 提炼关键内容 → 写入 memory/ → 删除原始文件
```
- **提炼**:用 AI 从原始对话中提取决策、偏好、事实、待办,标注置信度
- **写入**:追加到 `memory/YYYY-MM-DD.md`,永久保留
- **删除**:同时清理 sessions.json 和磁盘上的 .jsonl / .trajectory.jsonl
- **通知**:完成后发送飞书报告(需配置)
---
## 快速开始
### 1. 安装
下载 skill 后,复制配置示例文件:
```bash
cd ~/.openclaw/workspace/skills/session-memory-extractor
cp config.env.example config.env
```
### 2. 配置
编辑 `config.env`,修改以下必填项:
```bash
# 模型(默认 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
```
### 3. 运行
```bash
# 完整提取 + 清理
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
```
### memory/ 写入格式
```markdown
## Extracted from session: {session-id}
- **[DECISION]** 用户选择了航天赛道作为主要内容方向
Confidence: HIGH
- **[PREFERENCE]** 用户喜欢先给结论再展开
Confidence: HIGH
```
---
## 多 Agent 支持
```bash
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 本身不内置定时,由用户自行配置:
```xml
<!-- 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/ ← 运行报告目录
```
---
## 安全说明
- **API Key 不写入日志**:API Key 只在内存中使用,不写入任何输出文件
- **auth-profiles.json 读取**:默认从 `~/.openclaw/agents/main/agent/auth-profiles.json` 读取,无需手动配置
- **环境变量回退**:如果 auth-profiles.json 读取失败,回退到 `MINIMAX_API_KEY` 环境变量
---
## 故障排除
### API 调用失败
检查项:
1. `config.env` 中 `API_KEY_SOURCE` 是否正确
2. `auth-profiles.json` 是否存在且包含有效的 API Key
3. 网络是否正常
### 提炼结果为空
可能原因:
- session 文件内容已被压缩/加密
- session 主要是闲聊无实质内容
- 文件日期未超过 `MIN_AGE_DAYS`
### 磁盘空间未释放
检查项:
1. 是否有其他进程正在读取 .jsonl 文件
2. `sessions.json` 是否有写权限don't have the plugin yet? install it then click "run inline in claude" again.