335 字
2 分钟
Claude Code:`/compact` 之后 `/branch` 会 uncompact,记得再 compact 一次

今天发现一个 Claude Code 的 bug。

/compact 完之后立刻跑 /branch,发现 compact 的效果被撤销了——新 branch 里 context 又变回完整的,要重新再 compact 一遍。

为什么会这样#

查了一下 compact 的底层机制。Claude Code 的 compact 是在 session 里插入一个 compact boundary,boundary 之前的内容仍然存储在磁盘上的 JSONL transcript 里,只是不再作为 prompt 发给 model——compact 是 session 状态层的东西,不是 transcript 层的。

/branch 的实现是复制底层 JSONL 文件来创建 fork。新 branch session 打开的是完整 transcript,compact 的 session 状态没有跟着复制,compact 效果消失。

GitHub 上有一个相关 issue(#49508),报告者在 compact 之后跑 /branch 得到了 “Failed to branch conversation: Conversation transcript is too large to branch (77253918 bytes)” 的错误——同一根因的另一个症状:branch 操作基于完整 transcript 大小判断,compact 后 transcript 文件本身没有变小。

Workaround#

Branch 之后立刻手跑一次 /compact

代价是两次在同一份 transcript 上跑同样的 summarization:parent 里一次,branch 里一次。多一倍的 token 消耗和等待,compact 摘要的质量也不会因为跑两遍就更好。没有其他办法。

这是一个设计缺陷:/compact 应该 flush 一份 compact-aware 的 transcript 快照到磁盘,而不只维护 session 层的 boundary。在 Anthropic 修这个之前,branch 完记得 compact。

Claude Code:`/compact` 之后 `/branch` 会 uncompact,记得再 compact 一次
https://blog.lishuyu.app/posts/2026-06-19-claude-code-compact-branch-uncompact/
作者
猫猫魔女
发布于
2026-06-19
许可协议
CC BY-NC-SA 4.0