--- allowed-tools: Read, Write, Bash, Grep, Glob description: 总结并保存当前会话到本地存储 --- 智能分析当前会话内容,提取关键信息(项目进度、实施方案、关键决策、文件变更),并保存到分层存储结构中。 **核心特性**: - 📊 **智能提取**: 自动识别 TodoWrite、AskUserQuestion、文件操作等关键信息 - 💾 **分层存储**: 摘要文件 + 完整日志,兼顾查询效率和数据完整性 - 🔍 **防失真**: 保留完整对话记录,避免压缩导致信息丢失 - 🌐 **跨平台**: 完全兼容 Windows / macOS / Linux --- ## 执行步骤 ### 1. 定位当前会话文件 找到 Claude Code 当前会话的 JSONL 文件。 **位置**:`~/.claude/projects/` 目录下 **匹配规则**: - 项目目录名包含当前工作目录的路径信息 - 例如:项目在 `/Users/user/my-project` - 对应目录可能是:`-Users-user-my-project/` - 文件名格式:`{session-uuid}.jsonl` - 排除 `agent-` 开头的文件 - 选择最新的文件(按修改时间) **如果找不到**: - 输出错误信息 - 说明可能原因: - 当前不在 Claude Code 会话中 - 会话数据已被清理 - 项目路径不匹配 **提取信息**: - 会话文件的完整路径 - 会话 UUID(文件名不含扩展名) ### 2. 读取并解析会话数据 a. 使用 Read 工具读取整个 JSONL 文件 ```bash # 读取会话文件 Read tool: $CURRENT_SESSION ``` b. 解析 JSONL 数据并提取关键信息 - 使用 Python 脚本处理 JSON 数据(跨平台兼容) - 提取以下信息: * 第一条用户消息(作为会话标题) * 所有用户消息和 AI 响应 * TodoWrite 工具调用(进度信息) * AskUserQuestion 工具调用(关键决策) * Write/Edit 工具调用(文件变更) * 消息时间戳(开始和结束时间) c. 解析脚本实现 ```python import json import sys from datetime import datetime # 读取 JSONL 并解析 messages = [] todos = [] decisions = [] file_changes = [] for line in sys.stdin: msg = json.loads(line.strip()) messages.append(msg) # 提取 TodoWrite if msg.get('type') == 'tool_use' and msg.get('name') == 'TodoWrite': todos.append(msg.get('input', {}).get('todos', [])) # 提取 AskUserQuestion if msg.get('type') == 'tool_use' and msg.get('name') == 'AskUserQuestion': decisions.append({ 'timestamp': msg.get('timestamp'), 'questions': msg.get('input', {}).get('questions', []), 'answers': msg.get('input', {}).get('answers', {}) }) # 提取文件操作 if msg.get('type') == 'tool_use' and msg.get('name') in ['Write', 'Edit']: file_changes.append({ 'operation': 'created' if msg.get('name') == 'Write' else 'modified', 'path': msg.get('input', {}).get('file_path', ''), 'timestamp': msg.get('timestamp') }) # 输出结果 print(json.dumps({ 'messages': messages, 'todos': todos, 'decisions': decisions, 'file_changes': file_changes })) ``` ### 3. 生成会话摘要 a. 提取会话元数据 ```json { "version": "1.0", "sessionId": "{SESSION_UUID}", "projectPath": "{CURRENT_DIR}", "projectName": "{从路径提取最后一部分}", "savedAt": "{当前时间 ISO 8601}", "startTime": "{第一条消息时间}", "endTime": "{最后一条消息时间}", "messageCount": {总消息数}, "userMessageCount": {用户消息数}, "assistantMessageCount": {AI 响应数} } ``` b. 生成会话概览 - 标题:使用第一条用户消息(限制 100 字符) - 描述:简要总结会话内容(AI 生成,100-200 字) - 关键词:从标题和主要操作中提取(3-5 个) c. 整理进度信息 - 从最后一次 TodoWrite 调用中提取任务列表 - 统计已完成/进行中/待办任务数量 - 保留任务的 content、status、activeForm d. 整理关键决策 - 记录所有 AskUserQuestion 交互 - 包含问题、选项、用户答案 - 记录时间戳 e. 整理文件变更 - 列出所有文件操作 - 记录操作类型(创建/修改/删除) - 记录相对路径和时间戳 f. 检测实施方案文档 - 搜索 docs/todo/ 目录下的方案文档 - 如果找到,提取文件路径 - 提取方案要点(前 3-5 个要点) ### 4. 保存到分层存储 a. 创建存储目录(项目本地) ```bash # 存储目录结构(相对路径,跨平台兼容) SUMMARY_DIR="./.claude-sessions/summaries/$SESSION_UUID" mkdir -p "$SUMMARY_DIR" # 创建导出目录 EXPORT_DIR="./.claude-sessions/exports" mkdir -p "$EXPORT_DIR" ``` b. 写入 summary.json - 使用 Write 工具写入摘要文件 - 包含所有元数据、概览、进度、决策、文件变更信息 - 格式化 JSON(便于阅读) c. 复制完整 JSONL(使用 Bash cp 命令或 Read+Write 工具) - 将找到的会话文件复制到存储目录 - 目标:`$SUMMARY_DIR/details.jsonl` - 确保完整复制,不修改内容 d. 验证保存成功 - 检查文件是否存在 - 验证文件大小 > 0 - 如果失败,输出错误信息 ### 5. 输出确认信息 输出格式化的成功信息: ``` ✅ 会话已成功保存! ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 📄 保存位置(项目本地) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 存储目录: ./.claude-sessions/summaries/{session-uuid}/ ├── summary.json ({文件大小}) └── details.jsonl ({文件大小}) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 📊 会话信息 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 会话标题: {标题} 项目名称: {项目名} 会话时间: {开始时间} - {结束时间} 消息总数: {数量} ({用户消息数} 用户 + {AI消息数} 助手) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 📈 工作进度 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ✅ 已完成: {数量} 🔄 进行中: {数量} 📋 待办: {数量} 总计: {总数} ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 📂 文件变更 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ {列出前5个文件变更,格式:} ✨ 已创建: path/to/file1 📝 已修改: path/to/file2 ... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 💡 下一步 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 使用以下命令在新会话中继续工作: /session-manager:continue 🤖 Generated by session-manager plugin ``` --- ## 错误处理 ### 场景 1: 会话文件不存在 ``` ❌ 错误:找不到当前会话文件 可能原因: 1. 当前不在有效的 Claude Code 会话中 2. 会话数据已被清理 3. 项目路径编码错误 建议: - 确保在 Claude Code 会话中执行此命令 - 检查 ~/.claude/projects/ 目录是否存在 - 尝试在新会话中重试 ``` ### 场景 2: 存储目录创建失败 ``` ❌ 错误:无法创建存储目录 目标目录: {目录路径} 可能原因: 1. 磁盘空间不足 2. 权限不足 3. 目录路径无效 建议: - 检查磁盘空间:df -h - 检查目录权限:ls -ld ~/.claude - 手动创建目录:mkdir -p {目录路径} ``` ### 场景 3: JSONL 解析失败 ``` ❌ 错误:会话数据解析失败 文件: {文件路径} 错误: {错误信息} 可能原因: 1. JSONL 文件格式损坏 2. 文件编码问题 3. 不完整的 JSON 行 建议: - 检查文件完整性 - 尝试使用文本编辑器查看文件 - 联系支持获取帮助 ``` ### 场景 4: 文件写入失败 ``` ❌ 错误:无法写入摘要文件 目标文件: {文件路径} 错误: {错误信息} 可能原因: 1. 磁盘空间不足 2. 文件权限问题 3. 目标目录不存在 建议: - 检查磁盘空间:df -h - 检查文件权限 - 确保存储目录存在 ``` --- ## 跨平台兼容性 ### 路径处理 - ✅ 使用 `$HOME` 而非 `~` - ✅ 使用 `pwd` 获取绝对路径 - ✅ 使用 `sed` 进行路径编码(标准工具) ### JSON 处理 - ✅ 优先使用 Python 3(系统自带) - ✅ 备选:使用 jq(如果可用) - ✅ 使用标准 JSON 格式 ### 时间处理 - ✅ 使用 `date -u` 生成 UTC 时间 - ✅ 使用 ISO 8601 格式(跨平台标准) ### 文件操作 - ✅ 使用 `cp` 复制文件 - ✅ 使用 `mkdir -p` 创建目录 - ✅ 使用 `ls -t` 排序文件 --- ## 性能考虑 ### 大文件处理 - 会话文件 < 1MB:直接处理 - 会话文件 1MB - 10MB:正常处理,提示可能需要等待 - 会话文件 > 10MB:警告用户,建议分批保存 ### 内存使用 - 一次性读取整个 JSONL 文件到内存 - 对于大文件,可考虑流式处理(未来优化) ### 存储空间 - 每个会话约占用 100KB - 2MB - 建议定期清理旧会话(手动或自动) --- ## 使用示例 ### 基本使用 ```bash # 在工作一段时间后保存会话 /session-manager:save # 输出: # ✅ 会话已成功保存! # 会话标题: 实现用户认证功能 # 进度: 5/8 已完成 # ... ``` ### 长期项目 ```bash # 每天结束工作前保存 /session-manager:save # 第二天开始工作时恢复 /session-manager:continue ``` ### 任务切换 ```bash # 项目 A - 保存当前进度 /session-manager:save # 切换到项目 B cd ~/project-b # 项目 B - 保存进度 /session-manager:save # 稍后回到项目 A cd ~/project-a /session-manager:continue ``` --- **最佳实践**: 1. 🕐 定期保存:建议每完成一个重要阶段就保存一次 2. 📝 清晰命名:第一条消息尽量描述清楚要做什么 3. 📋 使用 TodoWrite:便于跟踪和恢复进度 4. 💬 记录决策:重要选择使用 AskUserQuestion 记录 5. 🗂️ 整理文件:重要方案保存到 docs/todo/ 目录 --- **注意事项**: - ⚠️ 此命令不会修改原始会话数据 - ⚠️ 保存的数据仅在本地存储 - ⚠️ 建议定期备份 ~/.claude/session-summary/ 目录 - ⚠️ 敏感信息(API 密钥、密码)也会被保存,注意安全 --- 🤖 Generated with Claude Code