坑在哪
长任务跑到一半,Claude Code 自动压缩上下文。压缩后的摘要往往只剩一句:「auth 测试之前在报错」。断言、期望值、文件行号、你口头定的验收标准都没了。Agent 接着修的是它自己转述的那个 bug,修完就说「好了」——你一跑测试,还是红的。
@alexlavaee 把机制说清楚了;@Fide_x_ 按可落地程度重排了建议。这和「压缩后用进度文件续上」(见长任务不断档)是同一类问题的另一面:进度在,验收细节也可能丢。
普通用户先做的两步
官方 hooks 指南 明确:可用 SessionStart + matcher compact,在每次自动或手动压缩后把命令输出重新灌进上下文。社区侧更强调验证,而不是只灌「做到哪」:
- 压缩结束后先重跑当初失败的那条检查,用新输出说话,不要信摘要里的「之前失败 / 已经修好」。
- 把验收标准写进仓库里的固定文件(例如
ACCEPTANCE.md或测试契约),在SessionStart(compact)hook 里cat回去,并加一句提醒:「压缩后先重跑失败的测试」。
示例思路(按项目改命令):
{
"hooks": {
"SessionStart": [
{
"matcher": "compact",
"hooks": [
{
"type": "command",
"command": "echo '压缩后:先重跑失败测试,勿信摘要里的已修复'; cat ACCEPTANCE.md 2>/dev/null || true"
}
]
}
]
}
}
官方还说明:CLAUDE.md、计划文件等会按机制回灌;更早由 hook 加进去的上下文会随对话一起被摘要。所以「验收标准」更适合落在磁盘文件上,再由 compact 匹配的 SessionStart 读回来。
别指望模型自己改压缩器
「压缩只删行不改写」「最近几轮永不进压缩」「忽略工具输出里的保护标记」——这些多半要改压缩实现本身,个人设置做不到。能立刻做的是:文件化验收 + 压缩后重跑 + hook 回灌。
小结
- 压缩丢掉的是「对什么算修好」,不只是「做到哪」。
- 摘要说修好了不算数;重跑失败检查才算数。
- 用官方支持的
SessionStart/compact把验收文件读回来。
如果你想在常开、整机独享的新加坡 Mac mini 上跑长任务并固定这些 hooks,可以了解 Zumac.Ai,咨询 Telegram @singatao。
