阅读时间 4 分钟

Claude Code 离开一会儿回来上下文被压缩了?关闭闲置压缩(idleCompaction)的三种方法

Claude Code 闲置压缩是什么、什么时候触发,以及关闭或调高门槛的方法。

用 Claude Code 跑长任务,中途去开个会、吃个饭,回来发现对话被压缩了,前面聊的细节没了,终端里多了一行:

Compacted while idle, before the prompt cache expired

VS 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。

参考:Claude Code 设置参考、Claude Code 更新日志。