ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Claude Code 源码泄露后,如何用 Bun 编译、运行和部署 TaoToken 接入版

Claude Code 源码泄露后,如何用 Bun 编译、运行和部署 TaoToken 接入版 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.0Bun 需要 ≥ 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_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 端点是 https://taotoken.net/api 。2.3 获取 Key 与确认 Model ID进入控制台创建 API Key地址是 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。创建完把 Key 复制出来形如sk-xxxx。同时确认你要用的 Model ID这个在模型列表里能看到。这里有个容易忽略的点本地编译版读取配置的方式和官方版一致支持环境变量和 settings.json 两种。环境变量优先级更高适合临时切换settings.json 适合长期固定。我建议两个都配环境变量做覆盖settings.json 做默认。2.4 三件套对照表不管后面用哪种配置方式核心就是这三样东西缺一不可配置项作用示例值Base URLAPI 请求地址https://taotoken.net/apiAPI Key身份认证sk-你的KeyModel 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顶部注入了两个关键 polyfillfeature()让所有 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_URLhttps://taotoken.net/api export ANTHROPIC_API_KEYsk-你的Key export ANTHROPIC_MODEL你的ModelID如果你用的是兼容命名也可以写成export ANTHROPIC_AUTH_TOKENsk-你的Key3.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 的典型表现。升级 Bunbun 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多了路径、少了 httpsAPI Keysk-开头完整字符串复制时带了空格Model ID控制台模型列表中的 ID拼写错误、用了不存在的模型6. 把本地编译版接入日常编码工作流编译、配置、验证都跑通之后接下来是怎么把它用起来。本地编译版的价值不只是“能跑”而是你能掌控整条链路并且通过统一通道灵活切换模型。6.1 用 Coding Plan 支撑长期编码如果你打算把它当日常编码助手用建议走 Coding Plan。地址是 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。它适合长期、高频的编码场景比按次调用更划算。配置方式不变还是那三件套只是 Key 换成 Coding Plan 对应的。6.2 模型对话快速验证新模型想试新模型的时候不用改本地配置直接去模型对话页面验证https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。确认模型行为符合预期后再把 Model ID 写进本地配置。6.3 接入文档与 API Keys 管理配置过程中遇到不确定的参数查接入文档https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。Key 的创建和轮换在 API Keys 页面https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_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 通道和权限策略调顺这两块顺了后面就是日常使用的事。
返回列表