跳至内容

会话连续性与战略压缩

长会话最常见的两个问题是:

  • 上下文变“浑”:讨论越久,越容易跑偏、遗忘关键约束。
  • 中断后接不回去:第二天继续时,需要重新解释一遍背景。

一个更工程化的答案是:用 Hooks 把“关键节点”变成可追溯的检查点,并把压缩(compact)从“被动发生”变成“主动选择”。

1) 战略压缩:把 compact 用在“阶段切换”上

与其等自动压缩在随机时刻触发,不如在你可控的节点手动压缩:

  • 完成“探索/调研”,准备开始动代码前
  • 完成一个里程碑(某个模块改完、测试跑通)准备进入下一个模块前
  • 发现上下文已经接近满载、模型开始“健忘/跑偏”时(先用 /context 诊断)

如果你的版本支持 /compact(或类似“压缩上下文”的操作),建议把它当成“阶段切换”的习惯动作。

2) 用 Hook 做“压缩前标记”:PreCompact

社区仓库提供了一个思路:在 PreCompact 事件中记录“这次压缩发生了”,并把标记写入你的会话记录文件,避免后续回看时断层。

示例脚本(节选,原仓库写法)会把日志写到 ~/.claude/sessions/compaction-log.txt,并在最近的 session 文件里追加一条标记:

  • hooks/memory-persistence/pre-compact.sh

要点不是照抄脚本,而是把“压缩发生过”这件事变成显式记录。

3) 用 Hook 做“会话交接”:SessionStart / SessionEnd

一种常见做法是在会话结束时写入一个当天的临时文件(示例路径 ~/.claude/sessions/YYYY-MM-DD-session.tmp),包含:

  • 当前状态(做到哪)
  • 已完成/进行中清单
  • 下次最小动作(Next Step)
  • 下次需要加载的上下文文件列表(Context to Load)

这种结构的价值是:你不需要“记住一切”,只要保证会话结束时把关键东西落盘,第二天就能从这份 handoff 继续。

如果你不想写脚本,也可以手动维护一个 SCRATCH.md 或 SESSION.md,结构建议如下(推荐直接复制做模板):

## 任务主线(一句话)

## 已打通
- ...

## 未打通
- ...

## 下一步最小动作(可执行)
- ...

## 验收方式(命令/页面/日志)
- ...

## 下次需要加载的文件
- `path/to/file`

4) “提醒型 Hook”比“阻断型 Hook”更适合起步

社区仓库里既有提醒型(建议用 tmux 跑长命令),也有阻断型(直接 exit 1 阻止某些命令/写文件)。团队落地建议:

  1. 先上提醒型(几乎不会引起反感)
  2. 再上校验型(例如:console.log 扫描提醒、格式化/类型检查)
  3. 最后才考虑阻断型(并且一定要明确“为什么阻断/如何绕过/谁来维护”)

5) 一个容易忽略的细节:计数型脚本要用“稳定键”

仓库里有一个“工具调用次数达到阈值就提醒 compact”的脚本思路(hooks/strategic-compact/suggest-compact.sh)。注意其中一种实现方式使用 $$ 作为临时文件名的一部分,这会导致每次执行产生不同的计数文件,从而无法累计计数。

如果你确实想做“累计计数提醒”,建议用更稳定的键(例如固定文件名、或使用 Claude Code 暴露的会话 ID 环境变量——如果版本提供的话)。

下一步

参考

无