| name | huxiang-handoff |
| description | 对话交接器。当前对话即将结束或上下文快满时,反思整场对话、把该沉淀的信息存入长期记忆、把该衔接的现场状态写成 handoff.md,供下一个对话框冷启动时秒懂现状。Use when user says '交接', '写个 handoff', '做个交接文档', '开新对话前', '这个对话要满了', '上下文快用完了', 'context快满了', 'wrap up', 'handoff'。也可在自己察觉对话已经很长、话题跨度很大、或者看到系统提示即将自动压缩上下文时,主动向用户建议执行。 |
| user_invocable | true |
| version | 1.0.0 |
huxiang-handoff:对话交接器
一场对话快开到头了,脑子里装的东西比屏幕上打出来的多。这个 skill 干的事:在断片之前,把「值得记一辈子的」和「只是这一局要接着打的」分开装箱。
触发时机
- 用户明说:交接、写个 handoff、开新对话前、这对话要满了、context 快用完了
- 自己觉察到:对话轮次已经很多、跨了好几个话题/任务、系统提示即将自动压缩(compact)、或者用户表现出要收尾切换的意思——这时候主动提一句「要不要我先写个交接」,别等用户想起来才做,那时候往往已经晚了
执行
一、通读,别摘抄
把整场对话从头看一遍。不是复制粘贴消息,是回答这几个问题:
- 这场对话本来要解决什么?现在解决到哪一步?
- 做出过哪些不那么显然的决定?为什么这么定的(别人接手要是不知道理由,很可能会推翻重来)?
- 哪些路走不通,已经试过了?(不写下来,下一个我会原地重试一遍)
- 用户纠正过我什么?确认过我什么做对了?
- 卡住的地方是什么,卡在哪个具体环节?
- 下一步第一件具体要做的事是什么?不是「继续推进」,是「打开哪个文件,改哪一行,跑哪条命令」
二、分诊:记忆 vs 交接
同一件事只能进一个箱子,别两边都塞。
判断标准:这件事下次这个项目/这个人出现时还有用,还是只对「接上这盘没下完的棋」有用?
- 前者 → 写入长期记忆(如果
~/.claude/projects/-Users-hx/memory/MEMORY.md 存在,就按它已有的 frontmatter 格式和 user/feedback/project/reference 四种类型走,写文件 + 在 MEMORY.md 加一行索引;不存在就跳过这步,在 handoff 里注明"未发现记忆系统")
- 后者 → 只进
handoff.md:具体的现场状态、临时决定、还没测完的分支、这次对话专属的上下文
不确定归哪边,就问自己:三个月后这条信息还有意义吗?有 → 记忆;没有 → 交接。
不要把整场对话的流水账塞进任一个箱子。只留活的——下次真会用到的。
三、写 handoff.md
结构固定,按顺序:
# Handoff · {项目/主题} · {YYYY-MM-DD HH:MM}
## 一句话现状
{一句话:现在卡在哪,或者刚做完什么}
## 目标
{这场对话本来要干什么}
## 已完成
- {具体成果,能验证的那种,不是"讨论了"}
## 进行中 / 未完成
- {具体差什么,差多少}
## 关键决定
- {决定了什么} — 为什么:{理由,别人/别的我看到能不重新纠结}
## 走不通的路
- {试过但放弃的方案} — 为什么放弃
## 下一步第一件事
{具体到可以直接执行的一个动作:打开哪个文件/跑哪条命令/问用户哪个问题}
## 相关路径与链接
- {文件路径、仓库、URL}
规则:
- 空的章节直接删掉,别写"无"
- 「下一步第一件事」必须具体到能直接上手,不能是"继续跟进"这种空话
- 长度服从内容,短对话交接三五行足够,别硬凑结构
四、存哪
- 当前目录是个项目(有
.git,或明显是某个具体项目的工作目录)→ 写到项目根目录 HANDOFF.md,覆盖旧版本(git 历史已经留档,不用自己维护多版本)
- 当前目录不是具体项目(比如就在
~ 下随便聊)→ 参考 denote 惯例,写到 ~/Documents/notes/{时间戳}--{关键词}__handoff.md,时间戳用 date +%Y%m%dT%H%M%S
如果项目根目录已有 CLAUDE.md 且它还没提到 handoff 机制,可以顺手建议用户加一行指向 HANDOFF.md,让下个对话自动读到——但这是建议,不要擅自改 CLAUDE.md。
五、收尾播报
写完之后,用两三句话告诉用户:
- 文件存在哪
- 长期记忆存了几条、分别是什么类型
- 下一个对话框打开后第一件事该干什么
不要把 handoff.md 全文再念一遍,用户自己会看文件。
边界
- 这个 skill 生成的是给「下一个我」看的交接文档,不是给用户看的工作汇报——语气可以直白、可以有缩写,不用照顾可读性以外的东西
- 不做记忆体系的整体审计(合并重复、清理过期记忆)——那是
consolidate-memory 的活,这里只负责这一场对话产生的增量
- 不擅自修改 hooks/settings.json 去做到"自动在压缩前触发"——那是配置变更,属于
update-config 的范畴,这个 skill 只负责被叫到时把活干好