Claude Code在恢复历史会话时,因一个过滤函数错误地丢弃了工具声明记录,导致每次恢复都要重新处理全部上下文,prompt缓存完全失效。实际测试显示缓存命中率从99%跌至26%,修复仅需两行代码。Anthropic工程师Boris已确认漏洞存在并将在下一版本修复,但也指出这只是众多token消耗问题之一。
有人用Codex逆向了泄露的Claude Code源码,找到了一个藏得很深的缓存漏洞,并写了个补丁。数据很直白:修复前,每次恢复会话的缓存命中率在26%左右;修复后,第二轮起稳定在99%。
根因在一个叫`db8`的过滤函数。它在保存会话文件时,会把所有`attachment`类型的消息丢掉。听起来无害,但`deferred_tools_delta`这种记录"我已经跟模型说过哪些工具"的附件也被一并过滤掉了。
下次你恢复会话,Claude Code会重新扫描历史消息来判断要不要重新声明工具。但这些记录已经被删了,它什么也找不到,于是把所有工具从头声明一遍。系统提示的位置变了,消息数组的长度变了,cache prefix整个失效,全部上下文变成`cache_creation`重新计费。对话越长,越烧钱。
修复是两行:在`db8`的白名单里加上`deferred_tools_delta`和`mcp_instructions_delta`,让这两类记录能够存活到会话文件里。
Claude Code团队的Boris在帖子下方确认了漏洞属实,并表示将在下一个版本中修复。不过他同时泼了点冷水,说这个修复的实际收益"不足1%",言下之意token暴耗另有其因。
讨论随即引起广泛关注。有观点认为这个漏洞的存在本身说明了一个问题:Anthropic一边声称内部工程师已经大规模用AI写代码、拥有"近乎无限的工程产能",一边让一个外部社区成员用竞争对手的产品在泄露的源码里发现并修复了一个影响所有付费用户的基础缓存bug。有网友直接引用Dario那句"我们的工程师已经不写代码了",语气里全是讽刺。
还有个更刻薄的解读:Anthropic"泄露"源码,免费得到了一轮社区QA。
有观点认为,这件事最值得注意的部分不是漏洞本身,而是它暴露的一种可能性:当工程团队完全依赖AI生成代码,谁来对系统行为真正负责?这些"deferred_tools_delta被过滤"式的静默错误,不会触发任何报错,只会让你的账单悄悄变贵。
不过,应用这个补丁本身存在合规风险。社区有多位用户提醒,Anthropic的服务条款明确禁止对产品进行逆向工程,以及绕过任何计费控制机制。帖子链接的GitHub仓库除了修复缓存漏洞,还有一个强制设置1小时cache TTL的补丁,后者明显是在绕过订阅等级限制。Boris对漏洞的确认,并不等于对这个补丁本身的背书。
如果你不想冒被封号的风险,最简单的规避方式是:不要恢复历史会话,每次开新对话。
这个问题现在已经公开。修复会来。但那些你不知道在哪里的"静默漏洞",大概还在计着费。