会话交接
目标是让下一次会话能核对原始记录,并快速恢复决定、产出、进度和待办。
按用户请求选择产物
- 完整交接:对话全记录、路由器、重启提示语。
- 用户明确说“只导出原文”时:只生成对话全记录。
- 用户明确说“只更新路由器”时:读取现有记录和产出后更新路由器。
- 用户明确说“只要重启提示语”“不用导出”或“不要创建文件”时:只给提示语;若缺少可靠上下文,明确哪些信息待补。
用户说“加载交接 Skill”“使用交接 Skill”“会话存档”“保存对话”或“准备退出重启”时,默认做完整交接;即使同一句还提到“给我重启提示语”,也不能因此跳过对话全记录和路由器。只有用户用“只”“仅”“不用导出”“不要创建文件”等明确措辞缩小范围时,才改为单项产物。
完整交接流程
- 确认当前会话、主题和保存目录。优先使用用户已配置的存档根目录;否则使用当前工作区中的明确目录。
- 通过平台原生导出能力或本 Skill 的脚本读取 user/assistant 原文。不要凭记忆生成“全记录”。
- 生成路由器,只保留恢复任务需要的决定、产出、进度、待办和新教训。
- 核对文件存在、消息数量级合理、来源标记准确。
- 报告所有产物的绝对路径,最后直接给出可复制的重启提示语。
格式见 references/formats.md。只有需要选择或排查导出后端时才读 references/export-backends.md。
原文真实性
- “对话全记录”必须来自可核查的会话数据源。
- 默认保留 user/assistant 可见文本,过滤工具调用、工具输出、推理记录、环境注入和空占位。
- 不把摘要、路由器或模型回忆标成原文。
- 导出不完整时写明已获得的范围和“待补存”,不要声称数据必然永久存在。
- 单条截断会损失原文;只有用户要求控制体积或平台限制无法避免时才截断,并在文件头记录阈值和数量。
路由器
路由器是导航,不复述整段对话。至少写清:
- 关键决策及其理由。
- 已完成产物的绝对路径与状态。
- 正在进行的工作、已做到哪里、下一步是什么。
- 尚未解决的问题和明确待办。
- 只有本次新出现且可复用的经验教训。
外部链接只记录需要继续使用的最终入口。敏感凭证不写入路由器。
导出工具
- Hermes SQLite:
scripts/export_transcript.py - Claude Code / Codex JSONL:
scripts/export_jsonl_transcript.py
脚本只负责导出原文,不负责生成路由器。先用 --list 找到会话,再指定会话和输出路径;本机存在多个后端时不要猜测。
当前活跃会话不会出现在 --list 中。导出步骤:session_search 搜当前对话关键词 → 从结果提取 session_id → export_transcript.py --session <id> --output <绝对路径>。此路径对活跃会话和已结束会话同样有效。
完成检查
- 交付内容与用户请求的产物范围一致。
- 全记录文件头写明数据源、会话标识、时间范围、消息数和导出方式。
- 完整交接时,两个文件均已报告绝对路径,重启提示语已直接发给用户。
- 失败和截断情况如实标注,没有用摘要冒充原文。
Pitfalls
1. 永远不要声称"导不出来"(2026-09-04/09-08 实战教训)
用户明确要求导出时,不得以"当前活跃session"为由放弃。导出路径:session_search 提取 session_id → export_transcript.py --session <id>。这招对活跃会话和已结束会话都有效。
此错误已导致用户暴怒两次。如果 --list 找不到,换 session_search;如果 session_search 也找不到,如实报告,但先试完两条路再说。
2. 重启提示语和路由器中必须使用绝对路径(2026-09-04/09-08 实战教训)
- ❌
~/Documents/Hermes_Workspace/...(~不是绝对路径,用户会暴怒) - ✅
/Users/likai/Documents/Hermes_Workspace/...
所有文件路径一律用 /Users/likai/ 开头。包括重启提示语、路由器产出清单、用户给的指引。用户已多次纠正此问题。