介绍
# Context Manager Skill
为 OpenClaw 会话提供 AI 驱动的上下文管理。利用代理自身生成智能摘要,然后通过压缩的上下文重置会话。
## 快速开始
```bash # List all sessions with usage stats ~/openclaw/skills/context-manager/compress.sh list # Check status of a specific session ~/openclaw/skills/context-manager/compress.sh status agent:main:main # Generate AI summary (read-only, safe) ~/openclaw/skills/context-manager/compress.sh summarize agent:main:main # Compress session: generate summary, reset, inject (DESTRUCTIVE) ~/openclaw/skills/context-manager/compress.sh summarize agent:main:main --replace ```
## 使用场景
- 上下文使用率接近 70-80%+ - 具有大量对话历史记录的长会话 - 会话变慢或失去连贯性之前 - 主动操作以保持快速、专注的会话
## 工作原理
1. **AI 摘要**:向代理发送提示,要求它总结自己的上下文 2. **备份**:将原始 JSONL 会话文件保存到 `memory/compressed/` 3. **重置**:删除 JSONL 文件(官方重置方法) 4. **注入**:将 AI 生成的摘要作为新会话的第一条消息发送 5. **结果**:相同的会话密钥,新的会话 ID,压缩后的上下文
**核心洞察**:代理可以完全看到自己的上下文,因此它能生成最佳可能的摘要。
## 命令
### 会话命令
| 命令 | 描述 | |---------|-------------| | `list` | 列出所有会话及其 Token 使用情况 | | `status [KEY]` | 显示会话的详细状态 | | `summarize [KEY]` | 生成 AI 摘要(只读)| | `summarize [KEY] --replace`` | 生成摘要并使用压缩的上下文重置会话 | | `compress [KEY]` | 传统的基于 grep 的提取(不推荐)| | `check [KEY]` | 检查会话是否超过阈值 | | `check-all`` | 一次检查所有会话 |
### 配置命令
| 命令 | 描述 | |---------|-------------| | `set-threshold N` | 设置压缩阈值(50-99%,默认:80)| | `set-depth LEVEL`` | 设置深度:brief/balanced/comprehensive | | `set-quiet-hours HH` | 设置静默时段(例如 "23:00-07:00")| | `help` | 显示帮助和使用示例 |
## 示例
### 列出所有会话
```bash $ ~/openclaw/skills/context-manager/compress.sh list 📋 Available Sessions (4 total) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ # SESSION KEY KIND TOKENS USAGE 1 agent:main:main direct 70188 70% 2 agent:main:slack:channel:c0aaruq2en9 group 20854 20% 3 agent:main:cron:0d02af4b-... direct 18718 18% ```
### 检查会话状态
```bash $ ~/openclaw/skills/context-manager/compress.sh status agent:main:main 📊 Context Manager Status ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Session Key: agent:main:main Session ID: fc192a2d-091c-48c7-9fad-12bf34687454 Kind: direct Model: gemini-3-flash ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Threshold: 80% Tokens: 70188 / 100000 Usage: 70% ```
### 生成 AI 摘要(安全,只读)
```bash $ ~/openclaw/skills/context-manager/compress.sh summarize agent:main:main 🧠 Requesting AI summary for session: agent:main:main Session ID: fc192a2d-091c-48c7-9fad-12bf34687454 ✅ AI Summary generated! Saved to: memory/compressed/20260127-123146.ai-summary.md ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ### Session Summary: January 27, 2026 #### 1. What was accomplished - System audit completed - Essay generation with sub-agents ... ```
### 完整压缩(摘要 + 重置 + 注入)
```bash $ ~/openclaw/skills/context-manager/compress.sh summarize agent:main:main --replace 🧠 Requesting AI summary for session: agent:main:main Session ID: fc192a2d-091c-48c7-9fad-12bf34687454 Mode: REPLACE (will reset session after summary) ✅ AI Summary generated! ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ [AI-generated summary displayed] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 🔄 Resetting session and injecting compressed context... Backing up session file... Backup saved: memory/compressed/20260127-123146.session-backup.jsonl Deleting session JSONL to reset... Injecting compressed context into fresh session... ✅ Session compressed successfully! Old session ID: fc192a2d-091c-48c7-9fad-12bf34687454 New session ID: a1b2c3d4-... Session is ready to continue with compressed context ```
**结果**:70k tokens → 16k tokens(减少 77%)
## 输出文件
当发生压缩时,会在 `memory/compressed/` 中创建以下文件:
| 文件 | 描述 | |------|-------------| | `{timestamp}.ai-summary.md` | AI 生成的会话摘要 | | `{timestamp}.session-backup.jsonl` | 原始会话的完整备份(如需要可恢复)| | `{timestamp}.transcript.md` | 原始记录提取(传统)| | `{timestamp}.summary.md` | 基于 grep 的摘要(传统)|
## 环境要求
- **openclaw** - 网关必须正在运行 - **jq** - JSON 解析(`brew install jq`) - **网关访问权限** - 脚本使用 `openclaw agent` 和 `openclaw sessions`
## 技术细节
### 会话重置方法
该脚本使用 JSONL 删除来重置会话(官方方法):
1. 将 JSONL 备份到 `memory/compressed/` 2. 删除 `~/.openclaw/agents/{agent}/sessions/{sessionId}.jsonl` 3. 通过 `openclaw agent --to main` 发送压缩后的上下文 4. 新会话会自动创建,并将摘要作为第一条消息
### 为什么不使用 /reset?
`/reset` 斜杠命令仅在聊天界面中有效。当通过 `openclaw agent --session-id` 发送时,它被视为普通消息,代理会尝试将其解释为任务。
### AI 摘要提示词
脚本要求代理提供:
1. 完成了什么(关键任务) 2. 做出的关键决策(及其理由) 3. 当前状态(我们在哪里暂停) 4. 待处理任务(还有什么需要做) 5. 重要上下文(需要记住的关键信息)
## 故障排除
### 摘要文本为空
如果 AI 摘要提取失败,请检查 stderr 重定向: ```bash # The script uses 2>/dev/null to avoid Node deprecation warnings breaking JSON openclaw agent --session-id $ID -m "..." --json 2>/dev/null ```
### 会话未重置
验证 JSONL 文件路径: ```bash ls ~/.openclaw/agents/main/sessions/ ```
### 从备份恢复
如果出现问题: ```bash cp memory/compressed/{timestamp}.session-backup.jsonl \ ~/.openclaw/agents/main/sessions/{sessionId}.jsonl ```
### 检查日志
使用 `openclaw logs` 进行故障排除: ```bash openclaw logs --limit 50 --json | grep -i "error\|fail" ```
## 最佳实践
1. **先备份**:脚本会自动备份,但在测试前您也可以手动备份 2. **先在非关键会话上测试**:在主会话之前,先尝试在 Slack 频道或 cron 会话上运行 3. **检查摘要**:首先运行不带 `--replace` 的 `summarize` 以验证摘要质量 4. **监控 Token 数量**:使用 `status` 验证压缩是否生效
## 另请参阅
- `openclaw sessions --help` - `openclaw agent --help`