你离开一个很长的 Claude Code 会话一小时,回来后发现 Claude 似乎忘了对话里的一些细节。它不是忘了,而是 idle compaction(闲置压缩):会话闲置时,整段对话会被替换成一份摘要。要关闭它,在 settings.json 中加入 "idleCompaction": false(需要 Claude Code 2.1.290 或更新版本),或者在 /config 里修改 Idle compaction 这一行(需要 2.1.302 或更新版本)。
Claude Code 的 idle compaction 是什么,什么时候触发?
这是一种在你离开会话期间自动运行的压缩。根据设置参考文档,它默认开启,并且只有在下列条件全部满足时才会生效:
| 条件 | 文档说明 |
|---|---|
| 场景 | 交互式终端、VS Code 扩展的聊天面板,或桌面应用的 Code 标签页(会话运行在你的机器上或通过 SSH) |
| 自动压缩 | autoCompactEnabled 已开启 |
| 提示缓存 | 对话使用一小时的缓存 TTL |
| 大小 | 上下文达到 200,000 token 的阈值(可配置) |
| 闲置时间 | 距离上一次请求约一小时,且电脑保持唤醒 |
维护者在 issue anthropics/claude-code #106402 中解释,目的是避免缓存过期后恢复会话时产生一大笔费用。结果是 Claude 会从摘要继续,而不是从完整对话继续。
怎么判断我的会话被自动压缩了?
看终端里的提示。文档引用了一行以 Compacted while idle, before the prompt cache expired 开头的文字。在 VS Code 和桌面应用中,文字类似,并在结尾说明如何关闭。issue #106402 的作者看到的是这个版本:
Compacted after an hour idle, using a summary written while you were away · turn off with "idleCompaction": false in settings.json
如果你看到了这条提示,那个会话中的详细上下文已经被替换,无法找回。压缩无法在会话内撤销。
怎么关闭 idle compaction?
文档给出两种方式,效果相同。
通过 /config:在终端会话中打开 /config,修改 Idle compaction 这一行。你的选择会保存到用户设置并立即生效。这一行需要 Claude Code 2.1.302 或更新版本。
通过 settings.json:该键在任意设置文件中都有效,需要 2.1.290 或更新版本。
{
"idleCompaction": false
}
如果版本没问题,但 /config 里看不到这一行,文档给出两个原因:其他设置来源设置了该键(managed settings、--settings 参数,或项目、本地设置文件,它们会覆盖你的用户设置);或者在 2.1.314 之前,Claude Code 无法获取功能开关,此时 idle compaction 根本不会运行。
如果我只想让它晚一点触发呢?
用环境变量 CLAUDE_CODE_IDLE_COMPACT_MIN_TOKENS 修改大小阈值。默认值是 200000,低于 100000 的值会被提升到 100000,不是正整数的值会被忽略。该变量同样需要 2.1.290 或更新版本。
{
"env": {
"CLAUDE_CODE_IDLE_COMPACT_MIN_TOKENS": "600000"
}
}
文档里的示例用 150000,是为了降低阈值。像上面这样调高,只有当你的上下文窗口大于 200K(例如 issue 中的 opus[1m])时才有意义。在 200K 的窗口里,常规自动压缩会在到达之前先触发。
旧版本不认这个键怎么办?
关闭整个自动压缩。文档说明,关闭 autoCompactEnabled 时 idle compaction 也会一起关闭。只想针对单个会话的话,使用环境变量:
DISABLE_AUTO_COMPACT=1 claude
代价是在接近上下文上限时,常规自动压缩也没有了。手动 /compact 仍然可用。想连手动压缩一起关掉,可以用 DISABLE_COMPACT=1,但这通常不是你想要的。
后台代理还在运行时,idle compaction 会生效吗?
据一位用户反映,会。在 issue #106402 中,作者描述了一个后台代理的代码审查,08:54 启动,到 13:48 仍在写文件。主会话从 12:06 起没有再调用模型,因此在 13:47 发送消息时,它在 207,101 token 处被压缩,降到约 2.4 万。该报告只涉及一次运行,版本为 2.1.304,作者也说明没有重复测试。issue 中的官方回复是:可以在设置中关闭压缩。
实际建议:如果你让长时间运行的代理在后台工作,而主会话保存着它们返回后要用的上下文,请在开始前先关闭 idle compaction。上下文文档称,压缩之后后台代理会继续运行,但主会话此后拥有的记忆就是那份摘要。
怎么按自己的节奏压缩,而不是等自动触发?
当你觉得对话已经完成使命时,运行 /compact。摘要由你掌控,还可以附带说明要保留什么。Verboo Code 在终端中有同样的命令,教程见Verboo Code 中的 /compact。
在 Verboo Code 中,你用 /compact 决定何时压缩,而且 token 无限:长时间保持会话打开,不会消耗你的额度。



