Claude Code 离开一会儿回来上下文被压缩了?关闭闲置压缩(idleCompaction)的三种方法
用 Claude Code 跑长任务,中途去开个会、吃个饭,回来发现对话被压缩了,前面聊的细节没了,终端里多了一行:
Compacted while idle, before the prompt cache expiredVS Code 插件和 Claude 桌面版里的提示是另一句:
Compacted using a summary written while you were away · turn off with "idleCompaction": false in settings.json这是 Claude Code 新加的闲置压缩(idle compaction)。这篇讲清楚它什么时候触发、为什么要有这个功能,以及怎么关掉或调整。
它什么时候会触发
下面几个条件同时满足才会触发:
- 在交互式终端、VS Code 插件的聊天面板,或者 Claude 桌面版的 Code 页签里用(本机或 SSH 都算)
- 自动压缩(
autoCompactEnabled)是开着的 - 当前对话用的是 1 小时的提示词缓存
- 上下文已经达到阈值,默认 20 万 token
- 距离上一次请求大约过了一小时(更新日志写的是约 54 分钟),而且这期间电脑一直没休眠
所以短对话、上下文不大的会话不会被压缩,主要影响的是跑了很久、上下文很大的长会话。
为什么要有这个功能
Claude Code 会把对话缓存起来,缓存命中时再发消息又快又省。这个缓存的有效期是 1 小时,过期之后你再发一条消息,几十万 token 的上下文要整个重新处理一遍,又慢又费额度。
闲置压缩就是赶在缓存过期前,先把对话压缩成摘要,这样你回来发下一条消息时,不用再把整段长对话重新处理。代价是前面的细节会被压缩成摘要,某些具体内容可能就不记得了。
如果你更在意完整的上下文,比如中途离开但回来还要接着改同一批文件,可以把它关掉。
方法一:在 /config 里关(最简单)
Claude Code 2.1.302 起,在会话里输入:
/config找到 Idle compaction 这一行,切换成关闭。改动会存进你的用户设置,立即生效,以后所有项目都不会再闲置压缩。
方法二:写进 settings.json
在设置文件里加一行:
{
"idleCompaction": false
}放在哪个文件决定了作用范围:
~/.claude/settings.json:对你所有项目生效(Windows 是C:\Users\你的用户名\.claude\settings.json)- 项目里的
.claude/settings.json:只对这个项目生效,会跟着项目一起提交,团队成员也受影响 - 项目里的
.claude/settings.local.json:只对这个项目、只对你自己生效
文件里原来有别的设置的话,把这一行加进去,别整个覆盖。
注意版本:idleCompaction 这个设置要 Claude Code 2.1.290 及以上才认,旧版本会直接忽略。先用 claude --version 看一下,不够就升级:
claude update方法三:只想这一次不压缩
启动前设一个环境变量,只对这一次会话生效:
# Mac / Linux
DISABLE_AUTO_COMPACT=1 claude
# Windows PowerShell
$env:DISABLE_AUTO_COMPACT="1"; claude不过它关的是全部自动压缩,不只是闲置压缩:上下文快满时也不会自动压缩了,聊太长可能会直接撞上上下文上限,要自己留意,必要时手动 /compact。
同理,在设置里把 autoCompactEnabled 关掉,闲置压缩也会跟着关掉。
不想关,只想调高门槛
如果你觉得 20 万 token 就压缩太早,可以用环境变量把阈值调高:
CLAUDE_CODE_IDLE_COMPACT_MIN_TOKENS=400000 claude上下文没到这个数就不会闲置压缩。这个值最低是 10 万,设得比 10 万小也会按 10 万算。
怎么知道刚才被压缩过
- 终端:会出现一行以
Compacted while idle, before the prompt cache expired开头的提示 - VS Code / 桌面版:显示
Compacted using a summary written while you were away。桌面版里如果没看到,切到详细(Verbose)视图找 "Claude Code notice" 那一行
被压缩后觉得 Claude 忘了什么,直接把关键信息再告诉它一遍就行。
顺带一个新设置:禁止改工作目录以外的文件
同一批更新(2.1.314)还加了一个实用的安全设置:
{
"permissions": {
"blockWritesOutsideWorkingDirectories": true
}
}开了之后,不管在哪种权限模式下,Claude Code 的写文件、改文件工具都不会动工作目录以外的路径,防止它误改系统文件或别的项目。注意它不限制 shell 命令和 MCP 工具,只管写文件那几个工具。
想让 Claude Code 走更便宜的模型,可以看 Claude Code 接入 DeepSeek;接第三方 Key 的配置看 Claude Code 接第三方 / 中转 Key。