子代理沒指定 effort 時跑哪一級:CLAUDE_CODE_SUBAGENT_EFFORT 該不該設
主對話你開在偏高的 effort,叫 Claude 派幾個子代理去翻整個 repo 找東西。那幾個子代理是跟你同一級在翻,還是另有一級?
在 2.1.316(10 月 31 日)之前,答案是跟你同一級。changelog 在 2.1.316 那條的措辭是這樣:新增 CLAUDE_CODE_SUBAGENT_EFFORT,用來設定子代理在「沒有其他東西指名時」跑的 effort,「instead of inheriting the session’s」。換句話說,以前沒人點名的子代理,是繼承 session 的。
三天後,今天發的 2.1.317 又動了一條:子代理和 teammate 如果跑的模型跟主對話不同,改用「那個模型存下來的 effort 或它的預設值」,不再用 session 的 effort。
同一個問題,三天內被改了兩次。這篇想回答的是:你該不該為這個新變數動設定。先說結論:照現在文件寫的程度,我不急著設。理由卡在「沒人點名」到底是指沒有誰。
先搞清楚誰有資格點名
拿餐廳點餐比喻。你一進門跟店員說「今天我都小辣」,這是 session 的 effort。菜單上某幾道菜自己標了辣度,那是子代理檔案的 effort 欄位。你點某一道時特別補一句「這道不要辣」,那是派工當下的參數。最後,如果店裡有條鐵規「一律中辣」,那就是 CLAUDE_CODE_EFFORT_LEVEL。
新變數像是廚房牆上貼的一行:客人沒講、菜單也沒標的時候,預設做幾辣。以前這一格的答案是「照你剛剛說的小辣」,現在可以改成固定的一級。
這個比喻只撐到文件有寫的地方。
子代理檔案 frontmatter 的 effort 欄位,文件說它「Overrides the session effort level, but not the CLAUDE_CODE_EFFORT_LEVEL environment variable」,可填 low、medium、high、xhigh、max,能用哪幾級看模型。Claude 派非 fork 子代理時,也可以帶一個 effort 參數,它蓋過 frontmatter,子代理被 resume 時仍然有效,需要 2.1.292 以上。這兩層上面,文件說 CLAUDE_CODE_EFFORT_LEVEL 優先。model-config 那頁還補了一句:maxEffortLevel 或組織設的上限,照樣會壓住子代理最後跑的那一級。
所以有明文的順序是:環境變數 CLAUDE_CODE_EFFORT_LEVEL、派工參數、frontmatter、session。新變數該插在哪,下面再說。
1 | --- |
1 | # 啟動 claude 之前,把等級換成你要的那一級 |
上面兩段分別照文件與 changelog 寫的示範,我沒有實際跑過。第二段我故意留了佔位。原因在下一節。
CLAUDE_CODE_SUBAGENT_EFFORT 目前只在 changelog 看得到那一行。我讀 env-vars 那一頁,沒找到這個變數;它的合法值是不是跟 frontmatter 一樣那五級、格式要不要大小寫一致、跟 frontmatter 與派工參數誰先誰後,文件都沒寫。另外 model-config 與 sub-agents 兩頁各有一段結尾我沒讀到,可能別處有說明,我不確定。
字面讀得出什麼,讀不出什麼
changelog 那句「when nothing else names one」,字面意思是保底。frontmatter 有寫、派工時有帶參數,就輪不到它。這是我對那句話的讀法,不是文件的排序表。要是它其實排在 frontmatter 前面,那整篇的判斷就要換。
更麻煩的是 2.1.317。那一條讓不同模型的子代理改看「該模型的 saved effort」。我不知道這個 saved effort 對應的是哪個設定。站上 9 月寫過一篇談模型來源優先序,裡面提過從 2.1.251 起 /effort 改成按模型分別記住預設等級,我猜指的是這個,但我沒有去核對 2.1.317 的那句話是不是同一件事。
還有一個洞:子代理跑不同模型時,新變數跟這個「該模型自己的 effort」誰優先,文件沒寫。如果你的子代理大多跑跟主對話不同的模型,這個變數對你還剩多少作用,我答不出來。
什麼情況下我不會設它
先逆向問:什麼情況下設它是壞選擇。
你的子代理檔案本來就都寫了 effort。照字面讀,這種子代理沒有「沒人點名」的時刻,變數對它們沒有作用。設了也只是白設,你還會以為自己動了什麼。
你的子代理跑的是跟主對話不同的模型。上一節講過,這裡有兩個來源在搶,文件沒說誰贏。
你的 shell 或設定裡已經有 CLAUDE_CODE_EFFORT_LEVEL。文件對它的描述是蓋過 --effort、/effort、modelSettings 和 effortLevel,對 frontmatter 與派工參數也是它優先。以這個強度,我猜它也蓋過新變數,但這是我的推測,文件沒這樣寫。
照我的讀法,剩下的情況才是新變數的對象:主對話開高,子代理檔案沒寫 effort,派工時也沒帶參數,而且跟主對話同一個模型。派一堆探索型子代理去讀檔案,想把它們釘在跟主對話不同的一級,這個變數看起來就是衝著這種情況來的。至於釘低一點能省多少時間或額度,我沒量過,不寫數字。
設之前,先用 /tasks 看一眼
文件說 /tasks 會在子代理那一列顯示模型,以及「若有設」的 effort,需要 2.1.242 以上。我建議的順序是:先不設,派一個沒寫 effort 的子代理,看 /tasks 顯示什麼;再設變數,同樣派一次,比較兩次。
這個做法也有我不知道的地方。文件寫的是「若有設」,環境變數設出來的等級算不算「有設」、會不會顯示在那一列,沒說。如果兩次看起來一模一樣,你分不出是變數沒生效,還是只是沒顯示。
我的立場
在 env-vars 那頁出現這個變數、合法值寫清楚、跟 frontmatter 與派工參數的先後也寫明之前,我不會把它放進團隊共用的設定檔,頂多在自己機器上試。理由很單純:共用設定要的是別人照著做不會踩坑,而這個變數現在連「填什麼才算合法」都要靠猜。
會讓我改主意的有兩個條件。一是文件補上那一列,而且明寫它是最低優先的保底,那我會建議子代理很多、又懶得逐個檔案補 effort 的人直接設。二是 2.1.317 的跨模型行為有文件說明,講清楚不同模型的子代理在這個變數面前怎麼走,那我會把「跑不同模型的人別設」這條拿掉。
三天兩次改動,說明這一塊還在動。等它停下來、文件跟上,再決定要不要為它動設定也不遲。
參考來源:Changelog(2.1.316、2.1.317)、Subagents、Model configuration、環境變數。

















