Skip to content

会话生命周期:compact、clear、resume 与检查点

缓存篇讲了"别破坏前缀",上下文窗口篇讲了"窗口只增不减"。本篇讲日常操作层面:一个会话从开始到结束,什么时候该压缩、该重开、该回滚、该续跑。

核心命令速查

命令作用对上下文的影响
/context查看窗口占用明细无(诊断工具)
/compact把历史压缩成摘要大幅缩小,细节丢失
/clear清空对话,重新开始归零(系统提示、CLAUDE.md 仍在)
/resume列出历史会话,挑一个继续恢复所选会话的完整历史
claude -c / --continue直接续上最近一个会话同上
Esc Esc / /rewind回滚到之前的检查点对话和/或代码回到当时状态
/cost查看本会话花费(API 计费时)

Compact:压缩是有损的

窗口接近上限时,Claude Code 会自动 compact:把早期历史总结成一段摘要,腾出空间继续。这是保底机制,但把压缩时机交给自动触发有两个问题:压缩发生在任务中间(正是上下文最值钱的时候),而且你无法控制保留什么。

更好的做法是主动压缩,选好时机:

  • 在阶段边界压缩:一个功能改完、测试通过、刚提交——此刻旧历史的细节价值最低,是压缩的黄金时间;
  • 带指令压缩:/compact 保留所有文件修改记录和未解决的报错 —— 告诉它摘要里什么必须留下;
  • 压缩前把状态写进文件:让 Agent 先把进展、待办、关键决定写到一个 markdown(如 PROGRESS.md),文件不怕压缩——摘要丢了细节,随时能从文件读回来。这是长任务最重要的习惯。

与缓存的关系

compact 会改写对话历史 ⇒ 缓存前缀必然重建一次。所以"少量多次"是最差策略——每次都付重建成本。攒到阶段边界一次压到位,然后在新前缀上继续累积命中。

Clear:重开比压缩更常被低估

经验法则:换任务就 /clear,别舍不得

上一个任务的历史对新任务不但没帮助,还是三重负担:占窗口、增加每轮成本、且残留的旧上下文会干扰模型对新任务的判断(它可能"惯性"沿用上个任务的假设)。/clear 之后系统提示、CLAUDE.md、MCP 都还在,只是对话归零——相当于换了一张干净的桌子,而不是搬了办公室。

什么时候不该 clear:同一任务的自然延续(修复刚才实现里的 bug)、需要引用前面结论的追问。

Resume 与续跑:跨会话的长任务

会话历史保存在本地,随时可以捞回来:

  • claude --continue:续上最近一次会话,适合"昨天干到一半今天接着来";
  • claude --resume(或会话内 /resume):从列表中挑选历史会话。

但要清醒:恢复的会话把整个历史重新载入窗口,而且缓存早已过期(TTL 只有 5 分钟到 1 小时),第一轮是全额重建。所以跨天的长任务,靠 resume 不如靠文件化的状态:

text
推荐的长任务模式:
1. 让 Agent 维护一个 TODO.md / PROGRESS.md,每完成一步就更新;
2. 阶段完成 → 提交 git → /clear;
3. 新会话开场:"读 PROGRESS.md,继续下一项"。
   ── 每个会话都从小而干净的上下文开始,状态却一点不丢。

这个模式同时解决了窗口膨胀、缓存重建、compact 丢细节三个问题,是本站最推荐的工作方式。

检查点与回滚:大胆尝试的安全网

Claude Code 会在每次修改前自动记录检查点(checkpoint)。按 Esc Esc(或 /rewind)可以回滚,且对话和代码可以分开回:

  • 只回代码:方案 A 改坏了,代码回到改动前,但对话里保留"方案 A 为什么失败"的记忆——让 Agent 带着教训试方案 B(非常好用);
  • 只回对话:代码是对的,但对话被带偏了,回到之前的提问重新说;
  • 都回:彻底重来。

注意检查点不替代 git:它不覆盖 Bash 命令产生的副作用(比如脚本删的文件),跨会话的持久保障仍然是"小步提交"。

一张时机决策表

情形动作
开始一个不相关的新任务/clear
任务没完,窗口 /context 显示超过 ~60-70%阶段边界处 /compact(先写状态文件)
改动方向错了Esc Esc 回代码,保留对话教训
今天收工,明天继续状态写文件 + git 提交;明天新会话读文件(优于 resume)
改 CLAUDE.md / 增删 MCP / 换模型顺手 /clear——反正缓存要重建(见缓存策略)
大任务里的独立探索别污染本会话,派子代理

AI Coding Guideline — 面向 Claude Code / Codex 等 AI 编程工具的实践指南