一個英文單字塞進 prompt,Claude Code 底下到底動了哪幾個零件?

先說一個假設的處境:你在終端機打了「ultrathink 這個 flaky test 為什麼只在 CI 失敗」,那個字沒有變彩虹。你分不出這是正常,還是哪裡沒接上。這個處境是我假設的,我手上的資料裡沒有任何人回報過。我想拆的是另一件事:彩虹出現和不出現之間,隔了哪幾道關。

截至 2026 年 11 月 3 日我查到的最新版是 2.1.317。這篇的內容來自官方文件與 changelog,沒有實際跑過;除了兩處我會明講是自己合讀出來的推論,其餘都是文件怎麼寫我就怎麼轉述。

第一層:它認的是關鍵字

官方 model-config 那頁有一小節叫「Use ultrathink for one-off deep reasoning」,第一句就把範圍講完了:在 prompt 的任何位置放 ultrathink,會「request deeper reasoning on that turn without changing your session effort setting」。Claude Code 認得這個字,然後加一段 in-context instruction。

這一層只有一個機制:認字,加一段指示。

同一段後面還有一句容易讓老習慣破功的話。think、think hard、think more 這幾個說法,Claude Code 一律當成普通的 prompt 文字傳過去,不會當關鍵字。best-practices 頁的對照表也寫了同樣的事:think hard、think harder、be thorough 只是在你現有的 effort 範圍內推一把,真正控制 effort 的是 effort 設定本身。同一列接著特別說,ultrathink 仍然有效。

第二層:升到 xhigh 要多過幾道關

認字之後,還有第二個零件。model-config 的原文是:在終端機的 prompt 裡打這個字,「can also raise that turn to xhigh effort」,能升的時候,這個字會顯示成彩虹,需要 2.1.311 以上。

注意那個 can also。官方沒有說每次都升,只說能升的時候會有彩虹。所以彩虹是一盞燈,亮了代表這一輪真的會升到 xhigh,沒亮就是升不了。

沒亮的時候要過哪幾關,官方給了三條排查,我把它們排成一張表:

關卡 官方列的條件或處理
字放的位置 重打一次,放在引號、括號、路徑、指令之外,而且 prompt 不以 / 開頭
effort 的上限 若 CLAUDE_CODE_EFFORT_LEVEL 設得低於 xhigh 就 unset;或把自己的 maxEffortLevel 調到 xhigh 以上;或請組織管理員調高組織上限
模型與路徑 用 /model 換成 Opus 5.5、Sonnet 5.5、Haiku 5.5 或 Fable 5.1;像 Amazon Bedrock 這種字升不了 effort 的環境,改成直接設 effort 等級

第三列要補一句。2.1.311 的 changelog 把升級寫成「through Anthropic’s API」,列名的四個模型是 Opus 5.5、Sonnet 5.5、Haiku 5.5、Fable 5.1。Opus 5、Sonnet 5 這些模型遇到 ultrathink 會不會升,文件沒寫,我不替它補。

第一列也有 changelog 背書:同一批更新把彩虹改成「只出現在字真的能升 effort 的地方」,被引號框住或是檔案路徑的一部分時不會亮。

第二列最有意思,因為它牽涉到一個我自己拼起來的推論。maxEffortLevel 的設定頁寫得很直白:它是 effort 的天花板,更高的等級一律以天花板執行,點名了 /effort、/model 選單、--effort、環境變數、skill 或子代理的 frontmatter,還有模型自己的預設值。設定頁沒有把 ultrathink 列進那串名單。我把這段和官方排查第二條合起來讀,得到「ultrathink 的升級也會被 maxEffortLevel 封頂」。這是我讀兩段原文合出來的,官方沒有單獨一句這樣寫。組織層級也有同樣的上限,兩邊都設的話,取比較低的那個。

另一個讀法同樣是推論。字沒變彩虹的時候,Claude Code 是不是仍然加了那段 in-context instruction?第一段說它認得關鍵字並加指示,第二段說它「也」能升級,兩段合讀,我的看法是答案偏向「仍然加了」。官方沒有單獨一句對照,我只把它當閱讀,不當事實。

文章裡關於彩虹、升級條件的描述都來自官方文件與 changelog,封頂那段是我合讀出來的推論。我沒有在終端機實際看過彩虹,也沒量過 token 用量或耗時,官方也沒給任何這類數字,所以這篇不會有「加了 ultrathink 慢多少、貴多少」的比較。

為什麼要做成單輪

回頭看這個關鍵字為什麼只管一輪。官方沒寫理由,下面是我的讀法。

effort 平常是怎麼決定的,model-config 寫了一條解析順序,取第一個適用的:先看 CLAUDE_CODE_EFFORT_LEVEL 環境變數,再來是你在 session 裡用 /effort 或 /model 選單挑的等級,接著是啟動時的 --effort,然後是設定檔存的值,最後才是模型自己的預設。預設值有個細節:多數支援 effort 的模型預設 high,但 Opus 5.5、Sonnet 5.5、Haiku 5.5 預設是 medium,Opus 4.7 預設是 xhigh。

這張順序表管的是整個 session。你用 /effort 改了,後面每一輪都跟著變。ultrathink 的承諾是不碰這條線,只在這一輪臨時多加一格。best-practices 給的判準很具體:只有下一則訊息需要,像是一整天例行工作裡的一個難題,就把 ultrathink 放進那則 prompt,不要去改設定。

拿老師改考卷來比。調整整個學期的批改標準,是 /effort;在某一張考卷上夾一張便條紙寫「這題請仔細看」,是 ultrathink。便條紙只對那一張有效,抽掉就沒了。排查第二條也順著這個比喻說得通:如果學校規定(環境變數或組織上限)所有考卷最多只能花十分鐘批,便條紙再大張也加不出時間。

另一個容易混在一起的是 CLAUDE_CODE_SUBAGENT_EFFORT,那管的是子代理沒被指名時跑哪一級。本篇管的是你自己這一輪想臨時加深,兩個變數管的對象不同。

八天內動了三次

這個關鍵字最近動得很頻繁,我照 changelog 把日期排出來:

  • 2.1.311(10 月 26 日):終端機裡的 ultrathink 改成在 Opus 5.5、Sonnet 5.5、Haiku 5.5、Fable 5.1 上用 xhigh effort 跑那一輪。如果是 Claude 正在工作時才打這個字,它會把那一輪剩下的部分升上去。同一批還把彩虹限縮到「字真的能升 effort 的地方」。
  • 2.1.316(10 月 31 日):新增 CLAUDE_CODE_DISABLE_ULTRATHINK,changelog 的說法是它「turns the ultrathink keyword off」。同一天的日期區塊下,另有一條標 VS Code 的條目,說 VS Code 裡的 ultrathink 也改成 xhigh 加彩虹,和終端機一致。我只確認它在 10 月 31 日這天,沒核對它是不是 2.1.316 本體。
  • 11 月 3 日(2.1.317 當天):一條 VS Code 的修正,telemetry 關閉時 ultrathink 不升 effort、也不顯示彩虹,這次修掉了。這條我只讀到 changelog 一行,沒有文件說明對應的行為,所以不拿它當主軸。

changelog 裡另有一條很舊的「Re-introduced the “ultrathink” keyword」,說這個詞早就有過,後來又重新引入。那條的版本號和日期我沒抓到,未查證。

那個新開關,我只讀到一行

最後是 CLAUDE_CODE_DISABLE_ULTRATHINK。它在 changelog 2.1.316 有一行,就是上面那句話。

我去 env-vars、settings-reference、interactive-mode 這幾頁找它,找不到。model-config 與 best-practices 兩頁有講 ultrathink,但只講關鍵字行為,沒有提到這個變數。env-vars 頁搜不到它,不是你找錯頁,是文件截至 11 月 3 日還沒跟上。

CLAUDE_CODE_DISABLE_ULTRATHINK 我只讀到 changelog 那一行。合法值怎麼填、是不是設 1 就算數,我不知道;關掉之後是連 in-context 指示都不加,還是只關升級 effort,我不知道;彩虹跟著關不關,我不知道;寫在 settings.json 的 env 區塊裡會不會生效,我也不知道。所以這篇不放任何範例值。

我的立場

臨時想加深一輪,就用 ultrathink;想讓後面每一輪都變深,就用 /effort,兩件事不要混。想自己確認的話,最小的做法只有三步:把 ultrathink 放進一句平常的話,不要加引號或路徑;看字有沒有變彩虹;沒變的話,照上面那張表從上往下查。哪一關擋住了,你會比任何文件更早知道。

至於 CLAUDE_CODE_DISABLE_ULTRATHINK,在文件補上合法值和關閉範圍之前,我不會把它寫進團隊共用的設定。共用設定得讓別人照著做就不踩坑,這個變數現在連怎麼填才算數都得猜。

哪天 env-vars 那頁出現這一行、合法值和範圍都寫清楚,我就會建議不想讓同事誤觸升級的團隊直接設。另外,如果我自己在終端機跑出彩虹與沒彩虹的對照,確認了它關掉的範圍,上面「推論」那兩處就會改成實測。

參考來源:Model configuration(Use ultrathink、Adjust effort level、Organization effort limits)、Best practices、Changelog(2.1.311、2.1.316、11 月 3 日條目)、環境變數、Settings reference:maxEffortLevel