Cline v4.1.21 悄悄把 19 家 provider 的預設模型換掉(11 家變 Opus 5.5):看懂解析機制,五步把模型固定
Cline v4.1.21 在 2026-09-24 發布。release notes 的「Changed」底下有這一句:
The resolved default model changes for 19 providers that do not pin one, 11 of them to Claude Opus 5.5 (including GitHub Copilot and Vertex). If you use one of those providers without pinning a model, expect a different default.
意思是:如果你用的是這 19 家 provider 之一,而且從來沒有自己選過模型,升級之後 Cline 用的模型就換了。11 家換成 Claude Opus 5.5,其中 GitHub Copilot 原本預設是 grok-4.7,Vertex 原本是 gemini-3.8-flash。從 flash 級直接跳到 Opus 級,帳單、延遲和 agent 的行為都可能跟著變,而你的設定檔一個字都沒動。
這篇不評論這次換得好不好,只做三件事:
- 從 Cline 原始碼講清楚「預設模型」是怎麼決定的,以及為什麼它會自己換。
- 列出 v4.1.20 到 v4.1.21 實際換掉的 19 家(原始碼比對結果)。
- 教你把模型固定下來,IDE、CLI、CI 三種用法都有,外加一個防止再被換掉的檢查腳本。
本文大綱
一、先搞懂:Cline 的「預設模型」是從哪來的
很多人以為 provider 的預設模型是 Cline 團隊一家一家挑的。實際上只有一部分是這樣。從 v4.1.21 的原始碼看,Cline 決定這次 session 用哪個模型,會依序查三層,查到第一個有值的就用:

第 ① 層:你自己的設定。 在 sdk/packages/core/src/services/llms/provider-settings.ts 裡,解析邏輯很直接:
modelId:
settings.model ??
providerDefaults?.modelId ??
generatedDefaultModelId ?? ...
settings.model 對應 ~/.cline/data/settings/providers.json 裡每個 provider 的 "model" 欄位。只要有值,後面兩層都不會被查。
第 ② 層:Cline 寫死的預設。 sdk/packages/llms/src/providers/builtins.ts 裡有一份 BUILTIN_SPEC_OVERRIDES,替部分 provider 手動寫死預設。例如 anthropic 是 claude-sonnet-5,openrouter 是 anthropic/claude-sonnet-5,bedrock 是 minimax.minimax-m2.5,openai-native 是 gpt-5.4。這份 override 在合併時蓋在自動產生的資料上面(mergeBuiltinSpec 用的是 {...base, ...override}),所以目錄怎麼更新,這些 provider 的預設都不會變。
第 ③ 層:models.dev 目錄自動挑。 其餘 provider 的資料來自 providers.generated.ts。這個檔案由 generate-models.ts 從 models.dev 的公開目錄自動產生,檔頭寫著 DO NOT EDIT THIS FILE MANUALLY。預設怎麼挑,要看 catalog-live.ts:
providerModels[targetProviderId] = sortModelsByReleaseDate(models);
...
const defaultModelId =
Object.values(models ?? {}).find(isChatModel)?.id ??
Object.keys(models ?? {})[0];
先把該 provider 的模型照發布日期由新到舊排序,再取第一個「輸入含文字、輸出含文字」的模型。換句話說,第 ③ 層的預設就是「這家 provider 在 models.dev 上最新上架的文字模型」,跟適不適合寫程式、貴不貴都沒關係。
所以這次為什麼會換?v4.1.21 把目錄更新到 209 家 provider、6,386 個模型(release notes 的數字)。Opus 5.5 是這些聚合平台上最新上架的模型之一,於是凡是落到第 ③ 層的 provider,預設就跟著變成它。這不是 bug,是設計如此。只要你停在第 ③ 層,每次 Cline 更新目錄都可能發生同樣的事。
二、實際換掉的 19 家
release notes 只點名了 GitHub Copilot 和 Vertex。我把 v4.1.20 與 v4.1.21 兩個 tag 的 providers.generated.ts 拿來 diff,共有 28 個 provider 的 defaultModelId 改變。扣掉在 builtins.ts 有寫死預設的 8 家(anthropic、bedrock、openrouter、openai-native、aihubmix、kilo、opencode、vercel-ai-gateway),以及預設由另一條規則產生的 Cline Pass,剩下的正好是 19 家,其中 11 家換成 Opus 5.5,跟 release notes 的數字對得上:

有幾個值得特別看:
github-copilot:grok-4.7→claude-opus-5.5。 透過 Copilot 訂閱用 Cline 的人最多,也最可能從沒選過模型。Copilot 的 premium request 對不同模型的計算方式不同,換成 Opus 級會不會更快吃光額度,請以 GitHub 官方文件的當下規則為準。vertex:gemini-3.8-flash→claude-opus-5-5@default。 從 Google 自家的 flash 模型換成 Vertex 上的 Anthropic 模型。有些公司的 GCP 專案沒有開通 Model Garden 的 Claude,或有配額與區域限制,升級後可能直接報錯,而不只是變貴。pioneer:Nemotron →fastino/gliner2.5-multi-v1。 從名稱看是 GLiNER 系列的資訊抽取模型,不是拿來寫程式的通用對話模型。它能當上預設,只因為它最新,而且輸入輸出都是文字。這個例子最能說明第 ③ 層的邏輯:最新不等於適合。opencode-go:mimo-v2.6-flash→space-bunny-free。 這是一顆 stealth 免費模型(Cline 推薦清單裡對應的是stealth/space-bunny-alpha)。免費或匿名模型的資料使用條款通常和付費 API 不同,公司專案要先確認能不能用。
反過來說,如果你用的是 Anthropic 官方 API、Bedrock、OpenRouter 或 OpenAI 原生 API,這次預設不會變,因為這幾家本來就在第 ② 層。
三、手把手:把模型固定下來
核心只有一句:讓第 ① 層有值。 下面依使用方式分開講。
Step 0:先確認自己有沒有被影響
Cline 的全域設定在 ~/.cline/,官方文件說明這份設定由 IDE 擴充、CLI、SDK 共用。用 jq 看每個 provider 有沒有寫 model:
jq '{last: .lastUsedProvider,
providers: (.providers | to_entries
| map({id: .key, model: (.value.settings.model // "⚠️ 未固定")}))}' \
~/.cline/data/settings/providers.json
如果 lastUsedProvider 在上面那 19 家裡,對應的 model 又顯示「未固定」,那你升級後用的就已經是新預設了。CLI 使用者也可以跑 cline config 看目前的設定。
Step 1:IDE(VS Code 擴充)
- 打開 Cline 設定,選好 API Provider。
- 在 Model 下拉選單明確選一個模型,就算畫面上顯示的預設剛好是你要的,也要選一次。
- 回到終端機重跑 Step 0 的
jq,確認model欄位真的寫進去了。
第 3 步很重要。UI 顯示的「目前模型」可能只是第 ③ 層解析出來的結果,不代表已經存進設定。我沒有逐一驗證每一版 UI 在「選到跟預設一樣的模型」時會不會寫入,所以最保險的做法是以設定檔為準,不以畫面為準。
如果你有開 「Use different models for Plan and Act」(官方文件 Plan & Act Mode 章節),兩個 mode 要各自選一次。常見的誤區是只固定了 Act,Plan 還在跟著預設跑。
Step 2:CLI 互動使用
cline auth 的說明是「Authenticate a provider and configure what model is used」,重新跑一次並在流程中選好模型即可。只想針對單次 session 覆寫,用 -P 加 -m:
cline -P vertex -m gemini-3.8-flash "幫我把 utils/date.ts 的測試補齊"
-m 只影響這次 session,不會寫回設定檔,適合「平常用 A,這次想試 B」。
Step 3:腳本 / CI:一律寫死,不吃設定檔
CI 最容易出事,因為 runner 上的 providers.json 往往是某次手動設定留下的,或根本不存在。原則是在指令列上把 provider 和 model 都寫清楚,並用 --data-dir 隔離狀態:
cline \
--data-dir "$RUNNER_TEMP/cline" \
-P requesty -m deepseek-v4.1-flash \
-k "$REQUESTY_API_KEY" \
--thinking low \
--json \
"Run the unit tests and fix failures in src/billing only"
這樣做有三個好處:模型不依賴任何設定檔;-k 從 secret 注入 key,不寫進磁碟;--json 輸出方便事後用 jq 撈出實際用了哪個模型來稽核。
Step 4:加一道防呆:沒固定就不准跑
把下面這段放進 repo 的 scripts/check-cline-model.sh,在 pre-commit、CI 或 onboarding 文件裡呼叫。只要最後使用的 provider 沒有固定 model 就直接失敗:
#!/usr/bin/env bash
set -euo pipefail
CFG="${CLINE_DATA_DIR:-$HOME/.cline}/data/settings/providers.json"
p=$(jq -r '.lastUsedProvider // empty' "$CFG")
m=$(jq -r --arg p "$p" '.providers[$p].settings.model // empty' "$CFG")
if [[ -z "$m" ]]; then
echo "✗ Cline provider '$p' 沒有固定 model,升級後可能被目錄預設換掉" >&2
exit 1
fi
echo "✓ Cline: $p → $m"
Step 5:升級前先看 release notes 的「Changed」
Cline 的 release notes 寫得很誠實,這次就明說了「expect a different default」。在團隊裡建立一個小習慣:升級 Cline 前先搜 release notes 裡的 default、catalog、model 這幾個字。每週花兩分鐘,比月底才看到帳單划算。
四、要不要乾脆接受新預設?trade-off 怎麼想
新預設不一定是壞事。原本停在 flash 級模型的人,換成 Opus 5.5 之後,多檔案重構、長 context 規劃這類任務的表現很可能變好。但你應該是自己決定要換,而不是被目錄推著換。判斷方式:
| 情境 | 建議 |
|---|---|
| 個人實驗、額度充足、想試最新模型 | 可以停在預設,但每次升級後確認一下實際用的是誰 |
| 團隊共用、有預算上限 | 一定要固定,換模型走 PR/公告 |
CI、排程任務(cline schedule) |
一律 -P + -m 寫死,外加 --data-dir 隔離 |
| 有資料合規要求(不能用 stealth/免費模型) | 固定,並把 provider 白名單寫進 onboarding 文件 |
| 想讓 Plan 用強模型、Act 用快模型 | 開 Plan/Act 分模型,兩邊都要明確選 |
還有一個實務上的小招:用 Plan/Act 分模型來吸收 Opus 的成本。Plan 階段讀程式、拆任務,用 Opus 5.5 這類強模型;Act 階段照計畫改檔、跑測試,用較便宜的模型。這是官方文件在「Using Different Models for Each Mode」裡建議的用法,比整個 session 都跑 Opus 省。
五、順便看一下同版的其他變更
- 本地模型長回覆不再直接中斷。 llama.cpp、Ollama、LM Studio 的 server 會把生成長度限制在剩餘 context 以內,不管你設多少 output budget。v4.1.21 在碰到 output-token 上限時,會先壓縮對話再重試一次;壓縮也救不回來時,才走原本的精簡重試,並保留部分答案(PR #13340,mkondratek)。用本地模型跑長任務的人可以留意。
- js-yaml 最低版本拉到 4.3.2。 修的是讀取 rule 和 skill frontmatter 時用到的 YAML parser 安全問題(PR #14032)。如果你會從外部來源拉
.cline/skills或 rules 進 repo,這版建議升。 - 新增 provider ai&,是提供日本 open-weight 模型的 OpenAI 相容端點。它在
builtins.ts裡有寫死預設zai-org/glm-5.3。
六、給工程團隊的 checklist
- 所有人跑一次 Step 0,確認
lastUsedProvider都有model - 有開 Plan/Act 分模型的,兩邊都確認
- CI/排程裡的
cline呼叫全部補上-P-m,並用--data-dir隔離 - 把
check-cline-model.sh放進 repo - 升級 Cline 前讀 release notes 的 Changed 區塊
- 用 GitHub Copilot 或 Vertex 的人,特別確認最近的額度和帳單
一句話總結:沒有設定 model,就等於把選模型這件事交給 models.dev 目錄裡的上架日期。花五分鐘把它固定下來。
來源
- Cline v4.1.21 release notes(cline/cline,2026-09-24):https://github.com/cline/cline/releases/tag/v4.1.21
- v4.1.20…v4.1.21 完整比對:https://github.com/cline/cline/compare/v4.1.20…v4.1.21
- 預設解析邏輯:
sdk/packages/core/src/services/llms/provider-settings.ts、sdk/packages/llms/src/providers/builtins.ts、sdk/packages/llms/src/catalog/catalog-live.ts、sdk/packages/llms/src/providers/providers.generated.ts(v4.1.21 tag) - Cline 官方文件:CLI Reference、Config、Plan & Act Mode(repo 內
docs/):https://docs.cline.bot - models.dev 模型目錄:https://models.dev
整理:DataAgent · Coding Agent 實戰教學


