60 秒的沉默:一次没写进更新日志的默认行为
· 阅读约 3 分钟
刷到这周的选手时,它已经在 issue 区攒了三百多个赞了。这期不推新工具,挖的是一张 issue——anthropics/claude-code 的 #73125。上周发生在 Claude Code 里的一件事,我觉得值得每个写 agent 的人看一遍。
7 月 1 号,2.1.198 发布。AskUserQuestion 多了个脾气:你 60 秒没回应,它不问了,自己接着往下跑。更新日志里一个字没提。更微妙的是,如果你已经开始回答但没答完,超时后它会把你已经选了的答案交上去,让模型带着半个答案继续跑。常写 agent 的应该懂这个分量——你给工作流加了个"人类审批"环节,结果它等不及,拿着你答到一半的意见把活干完了。
7 月 2 号,Aleksey Nogin 把这事捅进了 issue 区。384 个赞,143 条评论,评论区开始翻箱倒柜。有评论者提到一个叫 CLAUDE_AFK_TIMEOUT_MS 的环境变量,说能控超时时长——这个变量从来没进过任何发布说明。官方文档 7 月 1 号当天也完全没提;直到 7 月 3 号修复发布后,文档才补上对这个变量的说明。最初的线索全来自社区评论和二进制 diff,官方渠道一个字都没有。
这案子怎么破的,得插一段。Anthropic 的公开仓库里没有产品源码,只有 changelog、文档和脚本——想用 git 看这功能从哪次提交进来的,看不出来。社区只能去对比 npm 上的两个版本:2.1.197 的二进制里干干净净,2.1.198 里冒出一串 away from keyboard 和 CLAUDE_AFK_TIMEOUT_MS。这个我服,真相真是靠拆包拆出来的。
但最让我在意的其实是另一件事。这个功能几乎不可能是手滑:自动继续的行为、倒计时显示、schema 字段,外加一个叫 tengu_ask_user_question_afk_auto_advance 的分析事件,全在同一版里出现。tengu 这名字也不知道谁起的,我盯着它看了好几秒……行吧跑题了,拉回来。写一个功能顺手把埋点一起写好,这不叫写漏,这是设计过、打算测的。Anthropic 从头到尾没发过任何设计文档或变更日志来解释它为什么存在——做了个东西,想好了怎么观测它,然后什么都不说。
7 月 3 号,2.1.200 把默认行为改了回去,顺便在变更日志里第一次——也是至今唯一一次——承认了这个功能的存在:AskUserQuestion 默认不再自动继续,/config 里多了 askUserQuestionTimeout,可以选 60 秒、5 分钟、10 分钟或永不。更有意思的是,二进制里那套超时机制还在——默认值变成 never,CLAUDE_AFK_TIMEOUT_MS 和 CLAUDE_AFK_COUNTDOWN_MS 依然能翻出来用。功能没删,只是从默认打开变成了默认关闭,钥匙还留着。
顺带撂一个翻 issue 时顺手记的坑:禁用自动更新的环境变量只检测它存不存在,设成 0 一样触发禁用——想"微妙地关掉自动更新"的人可能把插件更新也一起冻了。跟这次的事没关系,就是顺路挖到的。
谁该去翻这张 issue:跑多 agent 编排、有些任务本来就指望挂机等人类拍板的——版本没锁的话,2.1.198 这个行为真会把你晾在一边就把活干完了。谁可以跳过:单轮脚本、人工从头盯到尾的,跟你们关系不大。
一个功能设计得这么仔细,连埋点都埋好了,却连一句为什么都没留下。候选池里还有几个在等回复的,等有结论了再一起讲。这期就到这儿,看不看随你。
评论
还没有评论,写下第一条讨论。