Skill: lmqiang-711/session-memory-extractor (version 1.0.4)

--- 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` 是否有写权限


Security scan verdicts — ClawScan: suspicious | static analysis: clean | VirusTotal:  | SkillSpector: suspicious (MEDIUM)