2026 年 7 月 17 日,資深開源開發者 Olaf Alders 發表文章〈Claude Code: Anatomy of a Misfeature〉,逐行還原 Claude Code 一場只活了兩天的功能風波:7 月 1 日的 2.1.198 版,當 Agent 透過 AskUserQuestion 向使用者提問後,若 60 秒內沒有回應,最後 20 秒會出現倒數,然後「依最佳判斷」自行繼續執行。這個行為沒有寫進 changelog,當時的文件也沒有記載。文章登上 Hacker News 首頁,獲得約 140 分與 120 則討論。
事件時間軸
按時間整理:7 月 1 日,2.1.198 隨更新推出自動續跑行為,changelog 與文件皆未提及——作者用 Wayback Machine 存檔驗證過這一點。7 月 2 日,Aleksey Nogin 在 GitHub 提出 issue #73125,標題直接點名「60 秒無回應後未等待答案繼續執行」,迅速累積數百個反應與上百則留言;而逃生口環境變數 CLAUDE_AFK_TIMEOUT_MS 是在討論串裡被翻出來的,並沒有出現在任何發布說明。7 月 3 日,2.1.200 把行為改回選擇性開啟。7 月 4 日,issue 關閉。維護者在釘選留言補充:逾時只在終端機失去焦點時起算,按下任意鍵就會取消,時間窗可以在設定中調整。
為什麼不只是小毛病:安全閘門被繞過
AskUserQuestion 常被團隊當成安全閘門:用規則與 hooks 強迫 Agent 在關鍵決策前停下來問人。自動續跑等於讓閘門自己消失。作者檢視的對話紀錄還顯示更糟的情況:使用者填到一半的答案,會連同模型替其餘選項補上的決定一起送出。權限提示不受這個機制影響,但對使用 --dangerously-skip-permissions 或大量白名單的團隊來說,這個提問往往是最後一道閘門——它一被繞過,就沒有任何東西擋在模型與檔案系統之間。
有埋點的功能,不是意外
Alders 的核心論證是:這不是漏寫的程式碼。2.1.198 的二進位檔裡出現了分析事件 tengu_ask_user_question_afk_auto_advance,還附帶 hadPartialAnswers 計數器——用他的話說,這是「附帶測量儀器的功能」。與此同時,公開的 GitHub 儲存庫只有 changelog、文件與機器人腳本,找不到對應的 commit 或設計說明,也沒有任何公開線索指向人類的審核與簽核流程。
二進位比對:閉源不等於不可讀
Claude Code 的發布二進位檔由 Bun 編譯而且未剝除內容,因此可以直接對 2.1.197 與 2.1.198 做字串層級的比對。把變更字串過濾到只剩英文敘述後,大約只有 156 行——「一杯咖啡就能讀完」的量級。作者的結論很尖銳:這個行為距離不發生「只差一個 && 條件」,而一位認真看 diff 的發布負責人理應會看到它。閉源不代表不可檢驗:每個版本都能從 npm 下載下來讀,只是不該指望使用者逐版 grep 兩百多 MB 的二進位檔。
自動更新放大風險,教訓是什麼
預設開啟的自動更新,讓這類未記錄的行為變更會在使用者毫無動作的情況下進到終端機。想把更新關掉也有死角:三個環境變數會連外掛更新一起凍結,解法是另設 FORCE_AUTOUPDATE_PLUGINS=1;而 CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC 即使設為 0 仍然會停用更新,因為它是靠變數存在與否來判斷的。Alders 肯定 Anthropic 兩天內回滾的速度,但強調重點不在單一 bug,而在流程:changelog 的準確性、閉源產品的可檢驗性,以及當編碼 Agent 變成開發基礎設施時,「沉默的行為變更」本身就是一種風險。
參考來源
- Claude Code: Anatomy of a Misfeature — Olaf Alders
- Issue #73125 — anthropics/claude-code
- Hacker News 討論串
本文由 AI 協助自上述來源整理,經人工審核後發布。
