Skill: zhaoyongxiu/subagent-archive (version 1.2.0)

--- name: subagent-archive version: 1.2.0 description: OpenClaw 子会话安全归档标准操作流程（SOP） author: 丞相（ChengXiang） tags: [系统管理, 子会话, 归档, OpenClaw, 操作流程] --- # 子会话安全归档技能 > 适用版本：OpenClaw 任意版本 > 适用系统：Windows PowerShell 环境 > 作者：丞相（ChengXiang） --- ## 功能说明 当需要清理或归档 OpenClaw 子会话时，必须按照本技能定义的标准流程执行，确保： 1. ✅ 内容被正确保存到记忆文件 2. ✅ 敏感信息不泄露 3. ✅ 原始文件被安全物理清理 4. ✅ 主会话（`:main`）永久保留 5. ✅ 归档记录追加写入，不覆盖原有记录 --- ## ⚠️ 核心铁律 | 铁律 | 说明 | |------|------| | **禁止删除主会话** | 包含 `:main` 的条目绝对不能删除 | | **追加写入** | 第3步和第4步必须使用 `Add-Content`，禁止 `write`/`Set-Content` | | **保留 :main** | sessions.json 清理时必须保留 `:main` 条目 | | **物理清理** | 必须执行 Remove-Item，仅重命名不算完成 | --- ## 适用场景 - 子任务完成后需要清理临时会话 - 下属智能体子会话闲置需要归档 - 系统维护时清理旧会话文件 - 释放磁盘空间 --- ## 完整操作流程（6步） ### 第1步：内容提取 ```powershell # 查找需要归档的子会话（.jsonl文件） Get-ChildItem 'C:\Users\Administrator\.openclaw\agents\<智能体>\sessions' -Filter '*.jsonl' # 读取会话前50行分析内容 Get-Content '<会话文件路径>' -Head 50 ``` **输出**：记录会话ID、创建时间、主要任务内容 --- ### 第2步：安全分析 分析会话内容，确认： - 是否包含敏感信息（密码、密钥、个人隐私等） - 是否有重要成果需要保留 - 是否有错误教训需要记录 **输出**：安全分析结论 --- ### 第3步：结构化归档（追加写入） 在当日记忆文件中**追加**归档记录，**先检查是否已存在相同会话ID**： ```powershell # 检查当日记忆文件是否存在 $memFile = 'memory/YYYY-MM-DD.md' if (Test-Path $memFile) { # 检查是否已存在该会话的归档记录 $existing = Select-String -Path $memFile -Pattern '<会话ID>' -SimpleMatch if ($existing) { Write-Host "该会话已归档，跳过第3步" } else { # 追加归档记录（不覆盖原有内容！） Add-Content -Path $memFile -Value @" ## ✅ 安全归档记录（YYYY-MM-DD HH:MM执行） | 智能体 | 归档文件 | 归档时间戳 | |--------|----------|-----------| | XXX | <会话ID>.jsonl | YYYY-MM-DD HH:MM | ### 会话内容摘要 - **用途**： - **创建时间**： - **结果**： "@ } } else { # 文件不存在则创建（首次执行时） New-Item -Path $memFile -ItemType File Add-Content -Path $memFile -Value @" # YYYY-MM-DD 工作记录 ## ✅ 安全归档记录（YYYY-MM-DD HH:MM执行） | 智能体 | 归档文件 | 归档时间戳 | |--------|----------|-----------| | XXX | <会话ID>.jsonl | YYYY-MM-DD HH:MM | ### 会话内容摘要 - **用途**： - **创建时间**： - **结果**： "@ } ``` **关键点**： - ✅ 使用 `Add-Content` 追加写入 - ❌ 禁止使用 `write` 或 `Set-Content` 覆盖写入 - ✅ 先检查是否已存在记录，避免重复 --- ### 第4步：当日记录（追加写入） 将本次归档操作作为系统管理记录**追加**到当日记忆文件： ```powershell # 追加归档操作记录（不覆盖原有内容！） Add-Content -Path $memFile -Value @" ## 📋 系统管理操作 ### 子会话归档 - **时间**：YYYY-MM-DD HH:MM - **目标**：<智能体> 的子会话 - **归档文件**：<会话ID>.jsonl - **操作**：安全归档完成 "@ ``` **关键点**： - ✅ 使用 `Add-Content` 追加写入 - ❌ 禁止使用 `write` 或 `Set-Content` 覆盖写入 --- ### 第5步：物理清理 **⚠️ 这是关键步骤！前4步完成后，必须执行物理删除！** ```powershell # 删除原始子会话文件（不可恢复） Remove-Item '<会话文件路径>' ``` **警告**： - 重命名（如 `.deleted.` 后缀）不是真正的清理 - 文件仍然占据磁盘空间 - 必须执行 Remove-Item 物理删除 --- ### 第6步：清理 sessions.json 索引 **⚠️ 很多人会漏掉这一步！** 物理删除文件后，必须同时清理 `sessions.json` 中的会话索引： ```powershell # 读取当前 sessions.json $json = Get-Content 'C:\...\sessions.json' -Raw | ConvertFrom-Json # 找出所有子会话条目（不包含 :main 的） $subagentKeys = $json.PSObject.Properties.Name | Where-Object { $_ -notmatch ':main$' } # 只删除子会话条目，保留主会话 foreach ($key in $subagentKeys) { $json.PSObject.Properties.Remove($key) } # 保存 $json | ConvertTo-Json -Depth 10 | Set-Content 'C:\...\sessions.json' -NoNewline ``` **❌ 错误做法**：直接清空 sessions.json 为 `{}` **✅ 正确做法**：只删除子会话条目，保留 `:main` 条目 **验证清理结果**： ```powershell openclaw sessions --agent <智能体ID> # 应该显示: Sessions listed: 1（只有主会话） ``` --- ## ❌ 禁止行为清单 - ❌ 直接删除文件（跳过归档流程） - ❌ 删除主会话文件或 sessions.json 中的 :main 条目 - ❌ 重命名后当作归档完成（文件仍存在） - ❌ 物理删除后忘记清理 sessions.json 索引 - ❌ 清空 sessions.json 为 `{}`（会丢失主会话） - ❌ 第3步和第4步使用覆盖写入（覆盖原有记录） --- ## 完整检查清单 - [ ] 第1步：内容提取 - [ ] 第2步：安全分析 - [ ] 第3步：结构化归档（**追加写入，Add-Content**） - [ ] 第4步：当日记录（**追加写入，Add-Content**） - [ ] 第5步：物理删除 .jsonl 文件 - [ ] 第6步：清理 sessions.json（只删子会话，保留 :main） - [ ] 验证：sessions list 显示 1 个会话（主会话） --- ## 使用示例 ### 场景：清理已完成的小说创作子会话 ```powershell # 1. 查找翰林学士的子会话 Get-ChildItem 'C:\Users\Administrator\.openclaw\agents\han-lin-xue-shi\sessions' -Filter '*.jsonl' # 2. 读取会话内容分析 Get-Content 'C:\Users\Administrator\.openclaw\agents\han-lin-xue-shi\sessions\xxx.jsonl' -Head 50 # 3. 归档记录（追加到当日记忆文件） Add-Content -Path 'memory/2026-05-03.md' -Value @" ## ✅ 安全归档记录（2026-05-03 15:00执行） | 智能体 | 归档文件 | 归档时间戳 | |--------|----------|-----------| | han-lin-xue-shi | xxx.jsonl | 2026-05-03 15:00 | ### 会话内容摘要 - **用途**：小说第15章创作 - **创建时间**：2026-05-02 08:00 - **结果**：成功完成约8000字 "@ # 4. 物理删除 Remove-Item 'C:\Users\Administrator\.openclaw\agents\han-lin-xue-shi\sessions\xxx.jsonl' # 5. 清理 sessions.json $json = Get-Content 'C:\Users\Administrator\.openclaw\agents\han-lin-xue-shi\sessions\sessions.json' -Raw | ConvertFrom-Json $subagentKeys = $json.PSObject.Properties.Name | Where-Object { $_ -notmatch ':main$' } foreach ($key in $subagentKeys) { $json.PSObject.Properties.Remove($key) } $json | ConvertTo-Json -Depth 10 | Set-Content 'C:\Users\Administrator\.openclaw\agents\han-lin-xue-shi\sessions\sessions.json' -NoNewline # 6. 验证 openclaw sessions --agent han-lin-xue-shi ``` --- ## 更新日志 | 版本 | 日期 | 更新内容 | |------|------|----------| | 1.2.0 | 2026-05-03 | 完善元数据，补充使用示例，优化文档结构 | | 1.1.0 | 2026-04-28 | 初始版本，6步标准流程 |


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