DAY 156 · 2026-06-05

不用 API key,用訂閱就能跑官方 ant CLI

Anthropic 最近出了官方的 Claude API CLI,叫 ant。它把 Messages API 包成一行指令——在終端機直接 ant beta:messages create 就能叫模型回話,也能串進 script 裡自動跑,不用自己刻 HTTP request。預設它認的是 API key。

我想試的是另一條路,純粹好奇:不另外付 API key,直接拿 Claude Code 訂閱那把鑰匙(就是 Day 154 講的第 6 條 OAuth)來跑,用我已經在付的訂閱額度。卡關的點在於——ant 走訂閱那條 OAuth 時,後端會多檢查一件事:「你是不是真的 Claude Code」。

它在檢查什麼

這篇就來搞懂那道身分關卡到底在檢查什麼、它怎麼分辨真假 Claude Code。

它跟 API key 打的是同一個後端,差別只在多了這道身分關卡。要過關,關鍵就一個:帶上一段固定的 --system 開場白,讓後端認得你是 Claude Code。補上之後就成功了:

# token 藏在 Claude Code 的憑證檔裡(Mac 上同時也寫進 Keychain)
TOKEN=$(jq -r '.claudeAiOauth.accessToken' ~/.claude/.credentials.json)

ant beta:messages create \
  --auth-token "$TOKEN" \
  --model claude-sonnet-4-5-20250929 \
  --max-tokens 1024 \
  --system "You are Claude Code, Anthropic's official CLI for Claude." \
  --message '{content:[{text:"your prompt",type:text}],role:user}'

兩個關鍵:

  • --auth-token:帶的是訂閱的 OAuth token,不是 API key。
  • --system "You are Claude Code…":這格才是真正的關卡。少了它,Anthropic 就把你當非法請求擋掉,回那個假的 429——其他欄位再齊也沒用。

你可能會在別的範例看到再帶一個 --beta oauth-2025-04-20,因為真正的 Claude Code 會一起送這個 header。但我實測拿掉它、其他都不動,照樣 200,連 OAuth token 都還是認——所以這裡直接省了。

說白了這就是在「冒充 Claude Code 的身分」過那道防濫用閘門——它本來就是設計來擋這種事的。

還有件事有點詭異

可以理解有 CLI 的需求,且會希望使用者都用 API key 呼叫、視用量收費。但卻又可以用 ANTHROPIC_AUTH_TOKEN(就是前面 --auth-token 的環境變數版本),就很詭異了——相當於偷偷告訴你用訂閱額度也可以喔。而且這件事只有在 GitHub 的 README 上提到,官方文件隻字未提。

我為什麼追了老半天

因為被擋下來時,收到的不是「身分不符」,而是一個 429 rate_limit_error,訊息只有 Error,再沒別的——既沒有 retry-after、也沒有那一整排 anthropic-ratelimit-* header。真正的限流兩樣都會附上。我繞過去直接打 api.anthropic.com、其他條件不變,立刻回 200 OK,額度根本還有(5 小時窗口才用 75%)。那個 429 從頭到尾在說謊。

留一條判斷線給你(也給當初鬼打牆的我):錯誤訊息給你的「類型」是線索,不是結論。 當它說 rate limit、但該有的證據一個都不在,先懷疑訊息本身,再去隔離變因——別照著字面一路修下去。


Sources:

SLIDES · 5
Day 156 slide 1Day 156 slide 2Day 156 slide 3Day 156 slide 4Day 156 slide 5
1 / 5
延伸閱讀
看完整 163 篇 →