Claude Code 上下文快满时,压缩的核心不是"省空间",而是把有用的信号留下来、噪声扔掉。按优先级给一套实操路线:

1. 先看一眼谁在吃上下文

在输入框打:

/context

它会可视化显示上下文各部分的占比(读过的文件内容、tool result、MCP 工具定义、对话历史等),你才知道该清什么。

2. 首选:/compact — 对话变摘要,释放空间但不丢进度

/compact

更好的是带焦点指令,告诉它什么必须留、什么可以丢:

/compact 保留:已修改的文件列表、关键架构决策、未解决的 bug、下一步计划。丢弃:已完成任务的探索过程、重复试错记录。

⚠ /compact 是有损压缩——一些细节/中间分析会被摘要化,但对"继续推进"通常够用。

什么时候该压缩(最佳时机)

进阶:只压缩后半段

按 Esc + Esc(或 /rewind)→ 选一个检查点 → Summarize from here。这样早期的架构讨论保持完整,后半段冗长调试被摘要化。

3. 如果已"压缩过又满了" / Claude 开始犯蠢:用 /clear

开始新任务时用 /clear,继续长任务时用 /compact。

在 /compact 之前,先把以下内容写入 PROGRESS.md(或 CLAUDE.md 的临时区段):

  1. 今天确定的设计决策
  2. 已改的文件清单 & 未完成的 TODO
  3. 需要注意的坑

新会话靠 @PROGRESS.md 就能快速恢复认知。

4. 从根源减少上下文膨胀(比事后压缩更重要)

  1. 一 Session 一任务,别一个终端从早聊到晚。不相关的三件事挤在一个会话里,每条新消息都在为全部历史"买单"。
  2. 精确引用文件,别让 Claude 狂读。✅ "看 src/auth/jwt.ts 里的 verifyToken 函数" / ❌ "帮我理解整个 auth 系统"
  3. 大批量调查用 subagent 隔离上下文。子代理有独立上下文,只把摘要返回主会话,主上下文不会被读文件撑爆。
  4. 用 /btw 问小问题,不污染上下文。答案出现在浮层里,不进入对话历史,零上下文成本。
  5. 控制 CLAUDE.md 体积。CLAUDE.md 每个回合都会加载,只放"反复需要遵守的规则",偶尔用的知识迁到单独文档。
  6. 检查 MCP / 工具膨胀。/context 也能看到是不是某些 MCP server 的工具定义在吃空间;不用的可以 /mcp 里先禁用。

快速决策表

上下文 60–75%,还在同一个任务里 → /compact(最好带保留指令)

一个子任务刚结束,下一站完全不同 → /clear(重要状态先写文件)

Claude 已经开始忘事/重复/犯低级错 → /clear + 沉淀关键点 → 新会话

只是要查一个无关小细节 → /btw 而不是正常输入

要大面积扫描代码找信息 → 用 subagent 而非主会话硬读