1. Bun 1.3 里跑 Claude Code,卡住你的其实不是 Bun
Bun 1.3 发布之后,我身边不少做 AI 工具链的朋友都在讨论同一件事:Anthropic 把 Bun 收进自家体系,Claude Code、Claude Agent SDK 这些面向开发者的东西,未来大概率会围绕 Bun 这个运行时做深度协同。Bun 启动快、内存低、内置打包和 TypeScript 支持,拿来当 AI 编程工具的执行底座确实合适。于是很多人第一反应就是:那我本地装个 Bun 1.3,把 Claude Code 拉起来试试。
真正动手之后,问题往往不在 Bun 本身。Bun 的安装、bun init、bun run这些步骤都很顺,卡点集中在模型通道:Claude Code 要连的模型服务从哪来,Key 怎么创建,Base URL 到底填什么。原文第六节留了一句「试用最新 Bun v1.3+」,但没展开讲通道怎么配。这篇就把这一步补全,目标很明确——在 Bun 1.3 环境里把 Claude Code 跑通,发一条最小请求,确认有正常返回,并且在调用记录里能看到这次消耗。
适合谁看:本机已经装了 Bun 1.3、想验证 Claude Code 能不能用的人;手里有 Key 但不确定 Base URL 该填官网还是 API 地址的人;以及想确认「请求到底有没有真的打出去、有没有计费」的人。全程 TaoToken 只提供 Key 和 Base URL 两样东西,不参与 Bun 的打包、热重载、Isolate 沙箱或运行时自省,Bun 该怎么用还是怎么用。
2. 前置:注册 TaoToken 并创建一把 Key
在配置 Claude Code 之前,先把模型通道的凭证准备好。这一步不涉及 Bun,任何终端里都能做。
打开 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 注册账号,登录后进入控制台。控制台里找到 API Keys 相关入口,新建一把 Key。创建时建议给它起一个能认出来的名字,比如bun-claude-code-local,方便后面在调用记录里对照。Key 只在创建时完整显示一次,复制出来先放到安全的地方,别直接提交到 Git。
这里有个容易混的点:官网地址和 API 地址不是一回事。官网是给人看的页面,API 地址才是程序请求要填的。TaoToken 的 API 地址是:
https://taotoken.net/api注意两点:不要在后面加/v1,也不要把它填成官网首页地址。Claude Code 这类工具在配置 Base URL 时,通常自己会拼接后续路径,你多写一段/v1反而会拼出重复路径导致 404。Key 就用刚才创建的那把,Base URL 就用上面这个。
如果你后面还要做更长期的编码任务或者 Agent 类工作流,可以顺带了解一下 Coding Plan,它更适合持续性的编码场景;只是本篇这种「跑通一条最小请求」的验证,用刚创建的普通 Key 就够了。
3. 可复制配置:在 Bun 1.3 环境里接上 Claude Code
先确认 Bun 版本。终端里执行:
bun --version确认输出是 1.3.x 或更高。如果还没装,按 Bun 官方指引装好即可,这一步和模型通道无关。
接下来配置 Claude Code 的模型通道。Claude Code 读取的是环境变量,核心是两项:Base URL 和 API Key。在项目目录下建一个.env文件,或者在 shell 里导出都可以。用.env更清晰:
# .env ANTHROPIC_BASE_URL=https://taotoken.net/api ANTHROPIC_API_KEY=你刚创建的那把Key如果你习惯直接在终端里导出:
export ANTHROPIC_BASE_URL="https://taotoken.net/api" export ANTHROPIC_API_KEY="你刚创建的那把Key"这里再强调一次:ANTHROPIC_BASE_URL填https://taotoken.net/api,不带/v1,也不是官网地址。很多人填错就是在这两个地方二选一选错了。
然后写一个最小的 Bun 脚本,用来确认 Bun 运行时本身没问题,同时把环境变量读进来打印一下(不要打印完整 Key,只打印前几位做确认):
// check-env.ts const baseUrl = process.env.ANTHROPIC_BASE_URL; const apiKey = process.env.ANTHROPIC_API_KEY; if (!baseUrl || !apiKey) { console.error("缺少 ANTHROPIC_BASE_URL 或 ANTHROPIC_API_KEY"); process.exit(1); } console.log("Base URL:", baseUrl); console.log("Key 前缀:", apiKey.slice(0, 8) + "..."); console.log("Bun 版本:", Bun.version);用 Bun 跑:
bun run check-env.ts预期输出里 Base URL 应该是https://taotoken.net/api,Key 前缀能对上,Bun 版本是 1.3.x。这一步只是确认环境变量被正确读取,还没发模型请求。
4. 验证请求:发一条最小请求并确认调用记录
环境变量确认无误后,启动 Claude Code。在项目目录下执行:
claude进入交互界面后,发一条最小请求,比如:
用一句话说明 Bun 的启动速度优势。如果通道配置正确,Claude Code 会正常返回内容。这一步能返回,说明请求已经通过https://taotoken.net/api打出去了。
但「有返回」还不等于「调用被记录」。要确认这次消耗,回到 TaoToken 控制台,打开调用记录或用量页面,看最近一条记录:时间应该对得上你刚才发请求的时刻,模型名称、消耗量这些字段应该有值。能看到这条记录,才算真正跑通——请求发出去了、模型返回了、用量也计上了。
如果你更想先在网页里直接验证模型通道是否可用,可以打开模型对话页面发一条同样的请求,确认返回正常后再回到 Claude Code 里操作。两条路径用的是同一套 Key 和 Base URL,网页能通,Claude Code 基本也能通。
实测下来,最容易出问题的不是 Bun,而是 Base URL 多写了/v1或者填成了官网地址。这两个错误都会让请求打到错误路径上,表现可能是 404,也可能是连接被拒。
5. 本篇常见错排查
报错一:404 Not Found。最常见原因是 Base URL 写成了https://taotoken.net/api/v1。去掉/v1,只保留https://taotoken.net/api。Claude Code 会自己拼接后续路径,你多写一段就重复了。
报错二:401 Unauthorized。Key 不对或者没被读到。先确认.env里的ANTHROPIC_API_KEY和创建时复制的一致,没有多余空格或换行。如果你是在 shell 里 export 的,确认当前终端会话就是执行claude的那个会话,换一个终端窗口环境变量就没了。
报错三:请求发出去了但调用记录里没有。先确认你看的是不是同一个账号下的记录。如果 Key 是在 A 账号创建的,记录自然在 A 账号里。另外记录可能有几秒延迟,刷新一下再看。
报错四:Bun 脚本里读不到环境变量。Bun 默认会读取.env,但如果你在脚本里手动process.env读取,确认.env和脚本在同一目录,或者用bun --env-file=.env run check-env.ts显式指定。
报错五:Claude Code 启动后仍提示未配置。有些情况下 Claude Code 需要重启才能读到新的环境变量。退出后重新执行claude再试。
排查顺序建议:先看 Base URL 有没有多写/v1,再看 Key 有没有被正确读取,最后看调用记录。这三步能覆盖绝大多数情况。
6. 跑通之后:Key 和 Base URL 的分工要清楚
在 Bun 1.3 环境里把 Claude Code 拉起来,核心动作就两个:创建一把 Key,把 Base URL 填成https://taotoken.net/api。Bun 负责运行时、打包、热重载这些事,TaoToken 只负责提供 Key 和 Base URL,两边各管各的,不互相干扰。
如果你后面要长期在 Bun 里做编码任务或者 Agent 工作流,可以看看 Coding Plan,它更适合持续性的编码场景。日常接入和排障,API Keys 页面和接入文档是最先要看的两处。想先在网页里验证模型通道,模型对话页面发一条请求最快。
跑通这条最小请求之后,你可以把同样的配置用到 Claude Agent SDK 或者其他基于 Anthropic 接口的工具里,Base URL 和 Key 的填法是一致的。先把这条通道验证通,后面换工具、换项目,配置逻辑都不用重新摸。