命令字典
Slash 命令、CLI 子命令、Hook 事件、启动参数的字典与演进史。
Slash 命令、CLI 子命令、Hook 事件、启动参数的字典与演进史。
通过汇总对话内容来释放上下文空间
/compact [instructions]/compact 是 Claude Code 的上下文压缩命令,将当前会话的完整对话历史替换为一份摘要,从而腾出 context window 空间以继续当前任务。它与 /clear 的根本区别在于:/clear 彻底清空上下文,而 /compact 保留压缩后的摘要作为新的对话起点。
可选地接受一段自然语言说明([instructions]),用于控制摘要的侧重点。
Claude 自行决定哪些内容最重要,生成摘要替换全部历史:
/compact
通过 instructions 参数指定摘要的关注方向:
/compact Focus on the API changes
/compact 只保留 TODO 项和已修改的文件列表
指令为自由格式自然语言,紧跟命令名即可。
当会话接近上下文限制时,Claude Code 自动管理上下文:官方原文是"clears older tool outputs first, then summarizes the conversation if needed"——先清除较早的工具输出,仍不够再摘要整段对话。自动压缩走的逻辑与手动 /compact 完全相同(官方:"The automatic pass works the same way as the /compact step")。
保留与丢弃(官方原文):你的请求和关键代码片段会保留("Your requests and key code snippets are preserved"),对话早期的详细指令可能丢失("detailed instructions from early in the conversation may be lost")。所以"放规则"的正确位置是 CLAUDE.md 而非对话历史。
关于触发阈值:官方文档只说"as you approach the limit / manages context automatically",未公开具体百分比数字,本文不臆测确切阈值。
如果单个文件或单条工具输出大到每次摘要后上下文立即又被填满,Claude Code 会在尝试几次后停止自动压缩并报错,而不是无限循环(官方:"stops auto-compacting after a few attempts and shows an error instead of looping")。恢复办法见官方 troubleshooting 的 "Auto-compaction stops with a thrashing error" 一节——通常是把超大文件改用 subagent 隔离读取或 /clear 重来。
若只想压缩会话的某一段,而非全部:
Esc + Esc,或运行 /rewind 打开 rewind 菜单(若输入框有内容,Esc + Esc 只会清除输入而非打开菜单)压缩并不是把所有东西平等摘要——不同来源加载的内容命运不同(官方 "What survives compaction" 表):
| 机制 | 压缩后 |
|---|---|
| 系统提示词 / output style | 不变(不属于消息历史) |
项目根 CLAUDE.md 与无 paths: 的规则 | 从磁盘重新注入 |
| auto memory(MEMORY.md) | 从磁盘重新注入 |
带 paths: frontmatter 的路径规则 | 丢失,直到再次读到匹配文件才重载 |
子目录里的嵌套 CLAUDE.md | 丢失,直到再次读到该目录下文件才重载 |
| 已调用过的 skill 正文 | 重新注入,但每个 skill 上限 5,000 token、总计上限 25,000 token,超出时最旧的先丢(截断保留文件开头,故重要指令要写在 SKILL.md 顶部) |
| hooks | 不涉及——hook 是代码不是上下文 |
实战推论:想让某条规则跨压缩存活,就别用 paths: 限定、把它放进项目根 CLAUDE.md;散在对话里的临时约束压缩后基本会被摘要掉。
在 CLAUDE.md 中加一段压缩指令,可持久影响自动压缩和手动 /compact 的行为,确保关键信息在摘要中保留。官方推荐在 CLAUDE.md 里专门开一节 "Compact Instructions":
## Compact Instructions
When compacting, always preserve the full list of modified files and any test commands.
该指令对自动压缩和手动 /compact 均生效(官方:"To control what's preserved during compaction, add a 'Compact Instructions' section to CLAUDE.md or run /compact with a focus")。
无论写进 CLAUDE.md 还是临时跟在 /compact 后面,越具体越不会被摘要丢掉。几个可直接套用的方向:
/compact 保留:①当前正在改的 bug 复现步骤与根因结论;②已修改文件清单及其 diff 摘要;③还没跑通的测试命令。丢弃大段工具输出和探索弯路。
/compact Focus on the auth refactor: keep the final API contract we agreed on,
the list of files touched, and any TODO still open. Drop exploratory dead-ends.
| 命令 | 效果 | 对话历史 | 典型场景 |
|---|---|---|---|
/compact [instructions] | 用摘要替换全部历史 | 保留摘要 | 会话过长但仍需继续当前任务 |
/clear | 彻底清空上下文 | 清空(可 --resume 恢复) | 切换到完全不相关的任务 |
/context | 显示上下文占用情况 | 不修改 | 判断是否需要压缩 |
/btw | 侧边提问,答复不进上下文 | 不修改 | 快速查询不想污染历史 |
/rewind + Summarize | 压缩会话某一段 | 部分保留 | 只想压缩早期的探索阶段 |
/compact/compact Focus on the database migration changesWhen compacting... 指令,保证文件列表和测试命令在任何压缩后都不丢失/context 确认上下文快满后,立即手动 /compact,比等自动压缩更可控/rewind 救回:/compact 是把对话替换成摘要,但原始消息仍在本地 JSONL transcript 里没删。若摘要丢了你需要的细节,按 Esc + Esc 或 /rewind 回到压缩前的检查点,重新带指令 /compact 一次(或干脆不压)。/compact 与 /clear 的选型边界:继续同一个任务只是嫌历史太长 → /compact(保留摘要);切到完全不相关的新任务 → /clear(旧对话既占 token 又会挤掉接下来要用的文件,官方建议"Clear between tasks when switching to unrelated work")。早期详细指令在压缩后丢失:如果你在对话开头给了大量规则或约束,自动/手动压缩后这些内容可能被摘要省略。解法:将关键规则写入 CLAUDE.md,或在 /compact 的 instructions 里明确点名要保留它们。
混淆 /compact 与 /clear 的效果:/clear 后的会话仍可通过 claude --resume 恢复完整原始记录;/compact 则用摘要替换活跃上下文,但原始消息仍保留在会话 transcript(本地 JSONL)中,Claude 在需要时仍可回溯这些细节。需要"重启上下文但不丢数据"用 /compact,需要"完全切换任务"用 /clear。
修复会话过大导致无法容纳自身请求时的上下文超限错误
修复了 `/compact` summary 在 SDK consumers 中作为 user bubble 渲染的问题。
修复安装许多 user skill 时内置 `/compact` 命令在自动完成下拉列表中被隐藏的问题
修复运行 /compact 后 context remaining 警告未隐藏的问题
修复运行 /compact 后 Context left until auto-compact 警告未消失的问题
修复 /compact 因 prompt_too_long 失败的问题,现在正确处理已有的 compact 边界