Appearance
Claude Code 会话恢复时 token 消耗异常飙升
问题
恢复(resume)Claude Code 历史会话时,即使只发一条简单消息,token 消耗也会在瞬间暴增——有用户报告恢复一个会话就消耗了 20~37% 的每周配额。
根因:Claude Code 恢复会话时会将完整的 JSONL 历史重新发送(重新加入上下文),如果会话积累了大量内容:
- 多个 CLAUDE.md 文件
- MCP 服务器的缓存输出
- 大量工具调用的返回结果(文件读取、Bash 输出等)
……则恢复时的输入 token 会爆炸式增长。失败重试会让情况雪上加霜,每次重试都会再发一遍完整历史。
解决方案
目前官方尚未修复,以下为社区有效的缓解方案:
方案 1:在恢复前运行 /compact
/compact/compact 会压缩当前会话历史,移除冗余的工具输出和 progress noise,保留语义上重要的对话轮次。在退出前执行一次,下次恢复时历史体积大幅缩小。
方案 2:定期使用 /clear 开启新会话
对于长期持续的任务,每完成一个阶段就 /clear 重置上下文,不依赖历史恢复。
方案 3:使用 SessionStart hook 监控大会话(提前预警)
在 ~/.claude/settings.json 中添加:
json
{
"hooks": {
"SessionStart": [
{
"type": "command",
"command": "bash -c 'STATE=\"/tmp/cc-tool-count-$(echo \"$PWD\" | md5sum | cut -c1-8)\"; if [ -f \"$STATE\" ]; then COUNT=$(cat \"$STATE\" 2>/dev/null || echo 0); if [ \"$COUNT\" -gt 100 ]; then echo \"⚠ 大会话:$COUNT 次工具调用,建议先运行 /compact\" >&2; fi; fi'"
}
]
}
}工具调用次数超过 100 次时在恢复时发出警告,提示在继续前先压缩。
说明: Anthropic 工程团队已知晓此问题,Dispatch 功能的持久上下文设计是根本原因之一。如受影响较严重,建议在 GitHub Issue #38029 中留言以提高修复优先级。