用 token-share 跑 Claude Code

Claude Code 走的是 Anthropic Messages API,这个网关在 /v1/messages 上提供。改掉 base URL、把各档位变量钉死、按所选 id 设好 context 就行。

为什么不需要插件就能跑

Claude Code 说的就是 Anthropic Messages API。目录里每个 Claude id 都按同一套形状提供服务——POST /v1/messages,用 x-api-key 认证,带 anthropic-version: 2023-06-01——所以把 CLI 指过来只是改一个 base URL,不算做集成。

这对全部 12 个 Claude id 都成立,从官方 1/5 美元的 stable-claude-haiku-4-5,到 10/50 美元的 Fable 通道,都一样。不管指向哪个,CLI 用的线上协议都不变。

但有个前提:Claude Code 并不是只跑一个模型,它会按任务类型挑档位。不把各档位变量钉死,就会有一部分活儿悄悄跑到你没选的档位上。把所有档位变量都指向同一个 id,账单才会和你选的那个 id 对得上。

把 Claude Code 指向网关,并把所有档位钉死在同一个 id 上。
export TOKEN_SHARE_KEY="<your-pool-api-key>"
export ANTHROPIC_BASE_URL="https://token-share.app"
export ANTHROPIC_API_KEY="$TOKEN_SHARE_KEY"

# Pin every tier, or the CLI picks one per task class.
export ANTHROPIC_MODEL="claude-sonnet-5"
export ANTHROPIC_DEFAULT_OPUS_MODEL="claude-sonnet-5"
export ANTHROPIC_DEFAULT_SONNET_MODEL="claude-sonnet-5"
export ANTHROPIC_DEFAULT_HAIKU_MODEL="claude-sonnet-5"
export CLAUDE_CODE_SUBAGENT_MODEL="claude-sonnet-5"

# Match the context of the id above: 1000000 here, 200000 for a 200K id.
export CLAUDE_CODE_MAX_CONTEXT_TOKENS="1000000"
export CLAUDE_CODE_ATTRIBUTION_HEADER=0

claude

context 要跟着所选 id 走

CLAUDE_CODE_MAX_CONTEXT_TOKENS 告诉 CLI 在触发压缩之前可以用多大空间。它必须和 id 对齐,不能超:这里 12 个 Claude id 有 9 个是 100 万 token,而 claude-sonnet-4-6、stable-claude-sonnet-4-6、stable-claude-haiku-4-5 按 20 万提供。

设得比 id 上限高,CLI 会拼出一个模型收不下的请求;设得远低于上限,它又会提前压缩——把大窗口本来要帮你省掉的那几轮摘要请求,又还回去了。

输出上限同理:100 万那批单次最多 12.8 万 token,20 万那批是 6.4 万。所以"一次生成一个超长文件"这种场景,会因为档位钉在哪个 id 上而表现不同。

该把档位钉在哪个 id 上

Claude 家族内部的单价能差一个数量级,而 Claude Code 在输入和输出两头都很能吃。池子通道上,claude-sonnet-5 是 0.30 / 1.50 美元每百万;claude-opus-5、claude-opus-4-8、claude-opus-4-6 是 0.50 / 2.50——两头都是 1.67 倍。

stable-* 是同一份权重走我们自己 key 的专用通道,不经过共享池,倍率 0.4 而不是 0.1。stable-claude-opus-5 折算下来是 2.00 / 10.00 美元每百万,是池子通道 Opus 的 4 倍,并且不参与池内 failover。

这里不存在一个对所有人都正确的 id,因为一次 Claude Code 会话的成本主要由用法决定——工作集多大、多久压缩一次、transcript 有多少是重复的。钉一个 id 干一天真活儿,回头看用量,再换一个钉上去对比。这一次实测比任何排名都有价值。

出问题先验端点,再查 CLI

出了状况,最快区分"网关问题"还是"CLI 问题"的办法,是用同一个 key、同一个 model id,对 /v1/messages 直接 curl 一次。curl 通了而 claude 不通,说明凭据和路由都没事,问题在 CLI 读到的环境里。

最常见的原因是变量没换干净:shell profile、某个配置文件、编辑器内置终端里残留的 ANTHROPIC_API_KEY 或 ANTHROPIC_BASE_URL,会不声不响地盖掉你刚敲的那行 export。

如果 curl 也失败,响应体会直说原因——是 key 被拒、model id 不认,还是请求本身不合法。那是另一类修法,跟 CLI 配置无关。

常见问题

为此需要改项目里的东西吗?
不需要。改的是你启动 claude 那个 shell 里的环境变量。CLI 说的始终是 Anthropic Messages API,ANTHROPIC_BASE_URL 决定发给哪个 host,各档位变量决定按哪个 model id 计费。
为什么四个档位变量都要钉到同一个 id?
因为 Claude Code 会按任务类型挑档位,没钉住的那个会自己决定。而这里的 Claude id 实付输入价从 0.30 到 4.00 美元每百万都有,一个没钉的档位就是账单上你没选过的一笔。全钉住,成本才可预测。
可以指向 stable-* 的 id 吗?
可以。stable 系列就是目录里的普通 id,同样走 /v1/messages,填进同样那几个变量即可。差别在倍率:0.4 而不是 0.1,所以 stable-claude-opus-5 是 2.00 / 10.00 美元每百万,claude-opus-5 是 0.50 / 2.50。它们是我们自己 key 的专用通道,不参与池内 failover。