context-handoff
# Context Handoff
把“账号切换 / session 清理”和“项目上下文延续”拆开处理。
不要依赖聊天窗口历史天然保留;需要延续的内容必须落盘到本地文件。
## 使用目标
支持两类本地文件:
1. **会话级上下文**:绑定某个具体聊天窗口/对话用途
2. **项目级摘要**:绑定某个项目本身,与具体聊天窗口解耦
推荐目录:
- 会话级:`/root/.openclaw/workspace/handoffs/sessions/`
- 项目级:`/root/.openclaw/workspace/projects/`
## 何时使用哪一种
### 会话级上下文
当用户表达下面这些意思时,保存到:
- “保存当前对话摘要”
- “把这个会话记下来”
- “切号前保存一下上下文”
- “下次回这个聊天框继续”
会话级文件建议命名:
- `handoffs/sessions/<slot>.md`
如果拿不到系统级 session id,不要假装知道“当前聊天窗口是谁”。
让用户自己给一个 **上下文槽位名**,例如:
- `main-chat`
- `oauth-switch-chat`
- `project-a-thread`
### 项目级摘要
当用户表达下面这些意思时,保存到:
- “保存这个项目的进展”
- “记一下这个项目目前做到哪了”
- “以后恢复这个项目”
- “做个项目摘要”
项目级文件建议命名:
- `projects/<project-name>.md`
项目名由用户指定;如果没有指定,先问。
## 执行动作
### A. 列出会话级上下文槽位
当用户要求列出已有会话级上下文时:
1. 查看目录:
- `/root/.openclaw/workspace/handoffs/sessions/`
2. 列出其中所有 `.md` 文件
3. 按文件最后修改时间倒序排序(最近更新的放前面)
4. 返回时优先给出:
- 槽位名
- 最后更新时间
- 文件路径
5. 如果目录不存在或为空,明确告诉用户还没有已保存的会话级上下文
实现时优先使用能直接读到文件 mtime 的方式;不要按文件名排序来冒充“最近更新”。
### B. 保存会话级上下文
当用户要求保存会话级上下文时:
1. 如果用户没有给 `slot` 名,先问一个简短问题:
- “要保存到哪个上下文槽位名?例如 `main-chat` / `oauth-switch-chat`”
2. 生成结构化摘要,不要直接整段复制聊天记录
3. 写入:
- `/root/.openclaw/workspace/handoffs/sessions/<slot>.md`
4. 如果目录不存在,先创建
5. 覆盖写入为最新版本(默认不做历史堆叠,除非用户明确要求追加)
推荐内容结构:
```md
# 会话级上下文
- 槽位名:
- 保存时间:
- 当前讨论主题:
- 已完成:
- 当前决定:
- 未完成 / 下一步:
- 关键文件:
- 关键命令:
- 备注:
```
### C. 恢复会话级上下文
当用户要求恢复会话级上下文时:
1. 如果没有给 `slot` 名,先问
2. 读取:
- `/root/.openclaw/workspace/handoffs/sessions/<slot>.md`
3. 用简洁方式把内容总结给用户
4. 不要把整份 markdown 原样全贴,除非用户要求“完整显示”
### D. 列出项目级摘要
当用户要求列出已有项目摘要时:
1. 查看目录:
- `/root/.openclaw/workspace/projects/`
2. 列出其中 `.md` 文件
3. 排除明显不是项目摘要的全局说明文件(例如通用 README,可按上下文判断)
4. 按文件最后修改时间倒序排序(最近更新的放前面)
5. 返回时优先给出:
- 项目名
- 最后更新时间
- 文件路径
6. 如果没有合适结果,明确告诉用户还没有已保存的项目摘要
实现时优先使用能直接读到文件 mtime 的方式;不要按文件名排序来冒充“最近更新”。
### E. 保存项目级摘要
当用户要求保存项目级摘要时:
1. 如果没有给项目名,先问
2. 生成结构化项目摘要
3. 写入:
- `/root/.openclaw/workspace/projects/<project-name>.md`
4. 默认覆盖更新为“当前项目最新状态”
推荐内容结构:
```md
# <项目名>
- 更新时间:
- 项目目标:
- 当前进展:
- 已完成:
- 关键决定:
- 风险 / 注意事项:
- 关键文件:
- 关键命令:
- 下一步:
```
### F. 恢复项目级摘要
当用户要求恢复项目级摘要时:
1. 如果没有给项目名,先问
2. 读取:
- `/root/.openclaw/workspace/projects/<project-name>.md`
3. 优先返回:
- 当前进展
- 已完成
- 下一步
- 风险 / 注意事项
## 写作要求
- 用中文写摘要
- 以“恢复工作状态”为目标,不要写成长篇会议纪要
- 重点保留决定、文件、命令、下一步
- 不要把敏感 token、密钥、cookie、完整账号凭据写进去
## 回答风格
### 保存成功时
告诉用户:
- 已保存什么类型(会话级 / 项目级)
- 保存到哪个文件
- 后续恢复该用什么关键词
例如:
- “已把当前会话上下文保存到 `handoffs/sessions/main-chat.md`。下次你说‘恢复 main-chat 上下文’就行。”
- “已把项目摘要保存到 `projects/oauth-switch.md`。下次你说‘恢复 oauth-switch 项目摘要’即可。”
### 恢复时
优先给用户一个压缩版恢复结果,例如:
- 当前在做什么
- 已完成什么
- 下一步是什么
必要时再补充文件路径和命令。
## 重要约束
- 不要假设终端脚本知道“当前聊天窗口”是谁
- 如果用户没有提供槽位名或项目名,先问
- 默认覆盖更新,不要无限追加导致文件越来越乱
- 如果文件不存在,明确告诉用户“还没有保存过这份上下文”
标签
skill
ai