☰
Claude Code 源码泄露后,如何用 Bun 编译、运行和部署 TaoToken 接入版
2026/10/1 20:42:52 网站建设 项目流程

1. 源码泄露之后,本地编译 Claude Code 到底能跑出什么

Claude Code 源码泄露这件事,在终端 AI 编码圈里讨论度一直很高。很多人第一反应是去 GitHub 找那份可编译的源码,想在自己机器上跑一个本地版本。但真正动手之后会发现,问题不在“能不能拿到源码”,而在“拿到之后怎么编译、怎么配、怎么让它稳定连上模型”。我自己在 macOS 和一台 Ubuntu 服务器上都试过,踩的坑主要集中在 Bun 版本、workspace 依赖解析、以及 API 通道配置这三块。

先说清楚这个本地编译版是什么。它本质上是 Anthropic 官方 Claude Code CLI 的一个本地兼容实现,基于泄露源码做了 stub 补全和 polyfill 处理,采用 Bun monorepo 架构,TypeScript 开发。构建产物可以在 Bun 或 Node.js 上启动。它能做什么?完整的 REPL 交互界面、流式对话与工具调用循环、Bash/文件读写编辑/Web 搜索/Agent 等工具集、权限管理、会话恢复、70 多条斜杠命令。适合谁?适合想在本地掌控编码助手运行链路、需要统一 API 通道、或者想研究 CLI Agent 架构的开发者。

但这里有个关键点:源码本身不带可用的模型通道。你编译出来的只是一个空壳 CLI,真正让它干活的是背后的 API。所以整条链路是“获取源码 → Bun 安装依赖 → 构建 → 配置运行环境 → 接入统一 Key/API 通道 → 启动验证”。这篇就按这个顺序,把每一步的可复制命令和配置都写出来。

需要提前说明的是,本文聚焦的是本地编译与部署链路,不涉及任何网络访问方式的讨论。你需要的只是一个可用的 API 端点和对应的 Key。

2. 编译前的环境准备与 TaoToken 统一通道配置

在动手编译之前,先把运行环境和 API 通道这两件事定下来。环境不对,构建脚本会直接报错;通道不配,编译出来也跑不通。

2.1 Bun 与 Node 版本要求

这个项目对运行时版本有硬性要求。Node.js 需要 ≥ 22.22.0,Bun 需要 ≥ 1.3.11,官方推荐用 Bun 做安装和构建。版本低了会在 workspace 解析阶段就挂掉。检查命令:

node -v bun -v

如果 Bun 没装,用官方脚本装一个:

curl -fsSL https://bun.sh/install | bash

装完记得把~/.bun/bin加进 PATH,否则新开终端会找不到bun命令。

2.2 为什么用 TaoToken 做统一 API 通道

本地编译版支持多种后端:Anthropic Direct、AWS Bedrock、Google Vertex、Azure Foundry。但对个人开发者来说,最省事的是走一个统一的 API 通道,把 Key 和 Base URL 配好就行,不用去折腾各家云平台的凭据刷新。

TaoToken 在这里扮演的就是这个统一通道的角色。它提供兼容的 API 端点,你只需要一个 Key,就能让本地编译的 Claude Code 把请求发出去。官网地址是 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API 端点是 https://taotoken.net/api 。

2.3 获取 Key 与确认 Model ID

进入控制台创建 API Key,地址是 https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 。创建完把 Key 复制出来,形如sk-xxxx。同时确认你要用的 Model ID,这个在模型列表里能看到。

这里有个容易忽略的点:本地编译版读取配置的方式和官方版一致,支持环境变量和 settings.json 两种。环境变量优先级更高,适合临时切换;settings.json 适合长期固定。我建议两个都配,环境变量做覆盖,settings.json 做默认。

2.4 三件套对照表

不管后面用哪种配置方式,核心就是这三样东西,缺一不可:

配置项作用示例值
Base URLAPI 请求地址https://taotoken.net/api
API Key身份认证sk-你的Key
Model ID指定模型控制台模型列表中的 ID

把这三个记下来,后面所有配置都是围绕它们展开的。

3. 用 Bun 完成依赖安装与构建的可复制配置

环境准备好之后,进入实际的编译环节。这一步的目标是把源码变成dist/cli.js加一堆 chunk 文件。

3.1 获取源码与目录结构

先把源码拉到本地,进入项目根目录。项目结构大致是这样:

claude-code/ ├── src/ │ ├── entrypoints/ │ │ ├── cli.tsx # 入口文件(含 MACRO/feature polyfill) │ │ └── sdk/ # SDK 子模块 stub │ ├── main.tsx # 主 CLI 逻辑(Commander 定义) │ └── types/ │ ├── global.d.ts │ └── internal-modules.d.ts ├── packages/ # Monorepo workspace 包 │ ├── color-diff-napi/ # 完整实现 │ ├── modifiers-napi/ # stub │ └── @ant/ # Anthropic 内部包 stub ├── scripts/ # 自动化 stub 生成脚本 ├── build.ts # 构建脚本 ├── dist/ # 构建输出 └── package.json # Bun workspaces monorepo 配置

入口文件src/entrypoints/cli.tsx顶部注入了两个关键 polyfill:feature()让所有 feature flag 返回 false,跳过未实现分支;globalThis.MACRO模拟构建时宏注入,比如 VERSION。这就是为什么 30 个 feature flag 全部关闭——不是没实现,是构建时被 polyfill 掉了。

3.2 安装依赖

在项目根目录执行:

bun install

这一步会通过 Bun workspaces 解析packages/下的内部包。原先手工放在node_modules/下的 stub 已经统一迁进packages/,通过workspace:*解析。如果这一步报 workspace 解析错误,八成是 Bun 版本太低,回去检查 2.1 的版本要求。

3.3 开发模式验证

装完依赖先跑开发模式,确认源码本身没问题:

bun run dev

看到版本号2.2.0说明成功了。这一步只是验证源码可运行,还没到构建阶段。

3.4 执行构建

构建命令:

bun run build

构建脚本build.ts用的是Bun.build加 code splitting,产物输出到dist/目录,入口是dist/cli.js,外加约 450 个 chunk 文件。构建出的版本 Bun 和 Node 都能启动,你 publish 到私有源也可以直接启动。

3.5 环境变量配置片段

构建完成后,配置运行环境。先看环境变量方式,在 shell 配置文件里加上:

export ANTHROPIC_BASE_URL="https://taotoken.net/api" export ANTHROPIC_API_KEY="sk-你的Key" export ANTHROPIC_MODEL="你的ModelID"

如果你用的是兼容命名,也可以写成:

export ANTHROPIC_AUTH_TOKEN="sk-你的Key"

3.6 settings.json 配置片段

长期固定的话,写进 settings.json。路径和官方版一致,通常在~/.claude/settings.json:

{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_API_KEY": "sk-你的Key", "ANTHROPIC_MODEL": "你的ModelID" }, "permissions": { "defaultMode": "auto" } }

注意permissions.defaultMode这里,本地编译版支持 plan/auto/manual 三种模式。auto 适合日常编码,plan 适合先规划再执行,manual 适合每一步都要确认。第一次跑建议先用 manual,确认工具调用行为符合预期再切 auto。

3.7 启动命令

配置好之后,用构建产物启动:

bun dist/cli.js

或者用 Node 启动:

node dist/cli.js

启动后应该能看到 REPL 界面。如果界面出来了但对话没反应,那就是 API 通道的问题,往下看验证部分。

4. 启动验证与接口连通性检查

编译和配置都做完,不代表就能用。这一步专门做验证,把“能启动”和“能对话”分开确认。

4.1 启动后先跑 /doctor

进入 REPL 后,第一件事是跑诊断命令:

/doctor

它会检查版本、API、插件、沙箱。重点看 API 那一项,如果显示连接异常,说明 Base URL 或 Key 有问题。这一步能快速定位是环境问题还是通道问题。

4.2 用 /status 确认当前配置

/status

这个命令会显示当前会话的状态信息,包括你正在用的模型和端点。确认这里显示的 Model ID 和你配置的一致。如果显示的是默认值而不是你配的,说明环境变量没生效,检查 shell 是否重新加载了配置。

4.3 发一条最小请求验证连通性

最直接的验证是发一条简单消息:

你好,请回复"连通正常"四个字

如果模型正常返回,说明整条链路通了。如果卡住或报错,看下一节的排查。

4.4 用 curl 单独测 API 端点

有时候 CLI 报错不够直观,可以绕过 CLI 直接测端点:

curl -s https://taotoken.net/api/v1/messages \ -H "Content-Type: application/json" \ -H "x-api-key: sk-你的Key" \ -H "anthropic-version: 2023-06-01" \ -d '{ "model": "你的ModelID", "max_tokens": 64, "messages": [{"role": "user", "content": "ping"}] }'

如果这个 curl 能返回正常 JSON,说明 Key 和端点没问题,问题在 CLI 配置;如果 curl 也报错,那就是 Key 或 Model ID 的问题。

4.5 工具调用验证

连通之后,验证工具调用是否正常。让它读一个文件:

读取当前目录的 package.json,告诉我 name 字段是什么

正常的话它会调用 FileReadTool,返回文件内容并给出答案。如果工具调用被拦截,检查 permissions 模式,manual 模式下每次工具调用都需要你确认。

4.6 会话恢复验证

跑一次/resume,确认会话恢复功能正常。这个功能依赖本地会话存储,如果恢复失败,检查项目目录的写权限。

5. 编译与接入过程中的常见报错排查

这一节按真实报错来,每个都给出定位思路和解决动作。

5.1 401 认证失败

报错长这样:

API Error: 401 Unauthorized

这是最常见的。原因通常是 Key 没配、配错、或者环境变量没生效。排查顺序:先确认ANTHROPIC_API_KEY的值没有多余空格;再确认 shell 重新加载了配置(source ~/.zshrc或重开终端);最后用 4.4 的 curl 单独测,如果 curl 也 401,那就是 Key 本身的问题,回控制台重新生成一个。

5.2 local proxy failed

报错:

local proxy failed: connect ECONNREFUSED

这个通常出现在你配了本地代理地址但代理没起来的情况。检查ANTHROPIC_BASE_URL是不是被改成了本地地址。正确值应该是https://taotoken.net/api,不要带多余的路径或端口。

5.3 reading choices 相关报错

报错:

Error reading choices: unexpected response format

这个多半是 Model ID 写错了,或者端点返回的不是预期格式。确认 Model ID 和控制台模型列表一致,确认 Base URL 没有拼错。有时候是ANTHROPIC_MODEL和ANTHROPIC_DEFAULT_MODEL两个变量冲突,只保留一个。

5.4 OAuth 相关报错

报错:

OAuth token refresh failed

本地编译版支持 OAuth,但如果你走的是 API Key 通道,就不需要 OAuth。检查是不是误触发了/login。用 API Key 的话,跑/logout清掉 OAuth 状态,然后确认环境变量里的 Key 生效。

5.5 Bun 版本导致的构建失败

报错:

error: workspace protocol not supported

这是 Bun 版本低于 1.3.11 的典型表现。升级 Bun:

bun upgrade

升级后重新bun install和bun run build。

5.6 构建产物启动报模块找不到

报错:

Cannot find module './chunk-xxxx.js'

这是 code splitting 产物不完整。删掉dist/重新构建:

rm -rf dist && bun run build

如果还不行,检查构建过程中有没有中断,450 个 chunk 文件要全部生成才算完整。

5.7 三件套配置检查清单

出现任何连接类报错,先对照这张表逐项确认:

检查项正确值常见错误
Base URLhttps://taotoken.net/api多了路径、少了 https
API Keysk-开头完整字符串复制时带了空格
Model ID控制台模型列表中的 ID拼写错误、用了不存在的模型

6. 把本地编译版接入日常编码工作流

编译、配置、验证都跑通之后,接下来是怎么把它用起来。本地编译版的价值不只是“能跑”,而是你能掌控整条链路,并且通过统一通道灵活切换模型。

6.1 用 Coding Plan 支撑长期编码

如果你打算把它当日常编码助手用,建议走 Coding Plan。地址是 https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 。它适合长期、高频的编码场景,比按次调用更划算。配置方式不变,还是那三件套,只是 Key 换成 Coding Plan 对应的。

6.2 模型对话快速验证新模型

想试新模型的时候,不用改本地配置,直接去模型对话页面验证:https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 。确认模型行为符合预期后,再把 Model ID 写进本地配置。

6.3 接入文档与 API Keys 管理

配置过程中遇到不确定的参数,查接入文档:https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 。Key 的创建和轮换在 API Keys 页面:https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 。

6.4 日常使用中的几个实用技巧

第一,把常用斜杠命令记下来。/context看上下文占用,/compact压缩对话,/cost看会话费用,/diff看改动。这几个在长会话里特别有用。

第二,权限模式按场景切换。写新功能用 auto,改生产代码用 manual,做架构规划用 plan。

第三,会话恢复配合 git 分支用。每个分支开一个会话,/resume的时候不容易混。

第四,构建产物可以 publish 到私有源,团队里其他人直接装,不用每人编译一遍。

6.5 关于 Claude Code 源码编译的边界

最后说一个实际经验:本地编译版虽然功能覆盖很全,但 feature flag 关闭的那些能力(比如 KAIROS 自主 Agent、BRIDGE_MODE 远程控制、VOICE_MODE 语音)是真的用不了,不是配置问题。如果你需要这些,得等上游实现或者自己补。日常编码用到的核心能力——REPL、工具调用、权限管理、会话恢复——都是完整的,够用。

把编译产物和配置固定下来之后,这套本地 Claude Code 就能稳定跑在你的工作流里了。真正花时间的不是编译,是把 API 通道和权限策略调顺,这两块顺了,后面就是日常使用的事。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询