DAY 174 · 2026-06-22

多台裝置共用一個 Claude 訂閱

家裡三台 Mac——一台 MBP、兩台 MacBook Air——加上好幾個會吃 Claude 的工具,但 Claude Max 訂閱只有一份。

每台機器各自登入一次當然可以,但這樣有兩個問題:每台在 Anthropic 眼中都是獨立的一台機器(device),而且像 Hermes 這種 "不是 Claude Code" 的 client,根本碰不到 Max 的額度。

於是我把所有東西都指向同一個地方——一個跑在家裡那台 always-on(不關機)MBP 上的 cc-gateway(自己架的一層 proxy)。它是整套裡唯一握有真正 Claude Max 登入的元件,其他 client 身上都只帶一個隨手設的本地 token,碰不到真的憑證。

結果是:三個 client 共用同一份訂閱,Anthropic 那邊只看到一台 device;連 Hermes 這種講 OpenAI 格式、根本不是 Claude Code 的工具,也吃得到 Max 額度。

設計:只有一個元件碰得到真的登入

cc-gateway 跑在 MBP 上,監聽 *:8443,對家裡的 LAN 開放。它做的事只有一件核心的:手上握著從 ~/.claude/.credentials.json 讀出來的真 Max OAuth(Claude Max 訂閱的登入憑證),負責對外送請求。

其他每個連進來的東西,帶的都不是真憑證,而是一個我自己設的字串當門票,例如:

  • Claude Code(MBP 本機)帶 whiletrue0x
  • Hermes 那條路帶 hermes-ccgateway
  • 看額度的 OpenUsage(不是聊天 client,只是讀額度)帶 openusage

筆電那台 Air 的 Claude Code 也帶自己的一張。gateway 認得這些票,認過了才幫你換上真的登入。所以就算哪張票外流,外面的人也只是拿到一個只能打我家 gateway 的字串,碰不到 Claude Max 帳號本身。

三個 client 怎麼連進來

Client 怎麼到 :8443 帶的 token
Claude Code(MBP) 本機 127.0.0.1:8443 whiletrue0x
Claude Code(MBA) 走 LAN,cc-switch 指過去 cc-gateway client token
Hermes(MBP) :3457 轉接 → 生一個真 CLI → :8443 hermes-ccgateway

MBP 上自己的 Claude Code 最單純,本來就是真 Claude Code,直接打本機 127.0.0.1:8443

筆電那台(MBA)也是真 Claude Code,只是用 cc-switch(一個切換 Claude Code 連線端點的小工具)把它指到 http://dawsons-macbook-pro:8443——同一個 gateway,只是改從網路連、不是 localhost。

Hermes 那條最繞,因為它根本不是 Claude Code。

為什麼 Hermes 要先繞一圈

Max 的 OAuth 有個隱形條件:Anthropic 只認「自稱 Claude Code、而且帶對 beta header」的請求。你拿 Max 登入、但請求長得不像 Claude Code,照樣被擋。

Hermes 講的是 OpenAI 的 /v1/chat/completions 格式,怎麼看都不是 Claude Code。所以它不能直接打 gateway,得先繞一圈:

  1. Hermes 打本機的 claude-max-api-proxy:3457,把 OpenAI 格式轉成 Claude Code CLI 能懂的形式)
  2. 這個 proxy 會去生一個真正的 Claude Code CLI 子行程,由這個 CLI 蓋上「You are Claude Code…」那個身分
  3. CLI 再帶著 hermes-ccgateway 這張票往 :8443

換句話說,gateway 真正在解的問題不是「共用一個 token」,是「讓每個 client 都長得像同一台 Claude Code」。Hermes 自己變不出那個身分,就借一個真 CLI 的身分來用。

gateway 收到請求後做的四件事

不管哪個 client 進來,gateway 收下之後都跑同一套:

  1. 驗票——確認帶的是我設過的 token 之一(whiletrue0xhermes-ccgatewayopenusage 這些)
  2. 換登入——把那張假票拔掉,換上真正的 Max OAuth Bearer,再補上 Claude Code 的 beta header
  3. 統一 device——把 device_id 一律改成同一個(我這邊是 751f0615… 開頭那串)。所以不管幾台機器、幾個 client 打進來,Anthropic 看到的都是同一台 device
  4. 轉發——拔掉一個 billing header,送到 api.anthropic.com

第 3 步是整套最有意思的地方:三個 client 散在 MBP 跟一台 Air 上,到了 Anthropic 卻收斂成同一台。

對照組:另一台 Air 故意不走 gateway

家裡其實還有第二台 Air,我故意沒把它接上 gateway。它就是一般的 Claude Code,自己登入同一個 Max 帳號,直接打 api.anthropic.com,全程沒有 gateway。

差別很清楚:這台在 Anthropic 眼中是「自己一台 device」,不像走 gateway 的那三個被收斂成同一台;但帳一樣記在同一份 Max 訂閱上。

把這台擺進來當對照,gateway 多做的那些事就一目了然——device 收斂、不用每台各自存登入、讓非 Claude Code 的工具也能用。第二台 Air 就是「一般做法」,其他三個是被 gateway 取代掉的版本。

那我會注意的地方

整套最脆的點:gateway 是唯一碰得到登入的元件,而且跑在家裡那台 MBP 上。MBP 一關機或睡著,三個 client 同時斷線——憑證集中換來的乾淨,代價是全押在一台機器上。

另外老實說,把多個 client 收斂成同一個 device、還讓不是 Claude Code 的工具吃 Max 額度,本來就踩在訂閱原本設計的邊上。這是自己家裡玩的 homelab,斟酌著用。

一句話總結

一份訂閱要餵多台裝置,與其每台各自登入,不如讓一個 gateway 獨佔登入、其他人帶張假票進場。

方便是因為憑證只有一份;風險也是因為憑證只有一份。

最近開始做免費的一對一諮詢,幫你把 AI 接進自己的工作流——有需要的話可以約:https://www.dawsonwang.com/

延伸閱讀
看完整 174 篇 →