Claude-Code源码泄漏分析
Claude Code 源码泄漏:AI 编程助手的「裸奔」时刻
当一家以「安全」和「宪法 AI」著称的公司,自己却成了安全事故的主角。
🔥 事件始末:一次「教科书级」的源码泄漏
2025 年 3 月,Claude Code v2.1.88 版本发布。这是一个看似普通的版本更新,却因为一个致命失误,成为了 AI 编程工具史上最严重的源码泄漏事件之一。
问题出在 Source Map 上。
Source Map 本是一种调试辅助工具,它能将压缩混淆后的代码映射回原始源码,方便开发者在浏览器开发者工具中调试。正常情况下,生产环境应该移除 source map 文件,或者至少不将其包含在发布包中。
但 v2.1.88 版本犯了一个低级错误:打包时意外将 source map 文件一同发布了。
结果就是,任何安装了这个版本的用户,都能通过浏览器开发者工具或反编译工具,完整看到 Claude Code 的原始 TypeScript 源码。不是混淆后的代码,不是压缩后的代码,而是带有注释、变量名、函数名的完整源代码。
这不是某个功能模块的泄漏,而是整个产品的源代码。
💥 为什么这次泄漏如此严重?
1. 暴露了完整的架构设计
泄漏的源码不仅包含业务逻辑,还揭示了:
·系统的整体架构设计
·API 端点和通信协议
·内部工具链和构建流程
·错误处理和边界情况
这相当于把一栋大楼的完整蓝图公之于众,包括地基结构、承重墙位置、水电管线走向。
2. 揭示了大量未公开功能
源码中包含了大量正在开发或测试中的功能:
·语音模式的完整实现
·自主代理模式(KAIROS)的架构
·虚拟宠物系统(Buddy)
·后台记忆整固机制
这些功能的代码已经写好,只是通过 feature flag 关闭了。泄漏让所有人看到了 Anthropic 的产品路线图。
3. 暴露了敏感的内部信息
最严重的是,源码中包含了:
·**模型代号体系**(Tengu、Capybara、Fennec、Numbat)
·**Feature flag 命名规则**
·**内部用户和外部用户的差异待遇**
·**遥测数据收集的完整细节**
·**远程控制和紧急开关机制**
这些都是 Anthropic 极力保护的商业机密。
🐾 模型代号体系:动物王国
泄漏的源码揭示了 Anthropic 内部的模型命名体系——他们用动物名称作为模型代号。
已知代号及其含义
|
代号 |
中文名 |
角色 |
|
**Tengu** |
天狗 |
产品/遥测系统前缀,所有 feature flag 和遥测事件都使用 `tengu_*` 前缀 |
|
**Capybara** |
水豚 |
Sonnet 系列模型,当前版本 v8 |
|
**Fennec** |
耳廓狐 |
Opus 4.6 的前代,已有迁移代码 `fennec-latest → opus` |
|
**Numbat** |
袋食蚁兽 |
下一代模型,源码中有注释「launch numbat 时移除此部分」 |
代号保护机制
Anthropic 对这些代号极其敏感,甚至有专门的构建检查:
// 构建系统会扫描 excluded-strings.txt 中的敏感字符串 // Buddy 系统中有物种恰好与模型代号冲突(capybara) // 代码通过 String.fromCharCode() 编码以绕过检查
一个有趣的细节:Buddy 虚拟宠物系统中有一种物种是「水豚」(capybara),这恰好也是 Sonnet 模型的代号。为了不触发构建时的金丝雀检查,代码在运行时动态构造这个字符串,避免在构建产物中出现字面量。
Capybara v8 的「黑历史」
源码还暴露了 Capybara v8(即 Sonnet)的一些行为问题:
·**10% 概率误触发停止序列** —— 当 prompt 尾部出现 `
·**空 tool_result 导致零输出** —— 需要注入 marker workaround
·**过度写注释** —— 需要专门的反注释 prompt 补丁
·**虚假声明率 29-30%** —— 而 v4 版本只有 16.7%
这些细节揭示了模型调优背后的「脏活累活」。
🎛️ Feature Flag 系统:随机词对的秘密
源码揭示了 Claude Code 的 feature flag 命名规则:`tengu_` 前缀 + 随机词对。
这种命名方式明显是为了掩盖 flag 的真实用途,让外人(甚至内部非核心成员)难以从名字推断功能。
|
Flag |
实际用途 |
|
`tengu_onyx_plover` |
Auto Dream —— 后台记忆整理功能 |
|
`tengu_coral_fern` |
memdir 功能 |
|
`tengu_herring_clock` |
团队内存 |
|
`tengu_frond_boric` |
分析数据上报的 kill switch |
|
`tengu_amber_quartz_disabled` |
语音模式的 kill switch |
|
`tengu_amber_flint` |
代理团队功能 |
为什么这样设计?
1.**防止信息泄漏**:即使 flag 名出现在日志或网络请求中,外部观察者也难以推断其用途
2.**内部安全**:降低内部人员(如外包、实习生)无意或有意泄露产品计划的风险
3.**灵活管理**:可以通过 GrowthBook 平台动态控制,无需重新部署
这是一种成熟的产品管理实践,但也是「不透明」的体现 —— 用户完全不知道自己被分配到了哪个实验组,也不知道有哪些功能被开启了。
🕵️ 卧底模式:最争议的功能
这是本次泄漏中最具争议的发现之一。
什么是卧底模式?
Undercover Mode(卧底模式) 是为 Anthropic 内部员工设计的一种特殊模式。当员工在外部或开源仓库工作时,系统会自动隐藏内部特有的 AI 信息,让提交的代码看起来像是人类开发者写的。
激活逻辑
export function isUndercover(): boolean { if (process.env.USER_TYPE === ‘ant’) {// ‘ant’ = Anthropic 员工 if (isEnvTruthy(process.env.CLAUDE_CODE_UNDERCOVER)) return true // 默认开启,除非在内部白名单仓库 return getRepoClassCached() !== ‘internal’ } return false }
关键点:
·**仅限内部员工** (`USER_TYPE === ‘ant’`)
·**默认开启** —— 在所有外部仓库自动激活
·**无法关闭** —— 为了防止代号泄露,没有提供关闭选项
给 AI 的「卧底指令」
## UNDERCOVER MODE — CRITICAL You are operating UNDERCOVER in a PUBLIC/OPEN-SOURCE repository. Do not blow your cover. NEVER include in commit messages or PR descriptions: – 内部模型代号(如 Capybara, Tengu 等) – 未发布的模型版本号(如 opus-4-7, sonnet-4-8) – 内部仓库或项目名 – “Claude Code” 这个词或任何你是 AI 的暗示 – Co-Authored-By 行或任何其他归属 像人类开发者一样写 commit message。
关键词:「Do not blow your cover」(不要暴露身份)
争议在哪里?
支持观点:
·防止商业机密泄露(模型代号、版本规划)
·保护内部基础设施安全
·符合企业信息安全最佳实践
反对观点:
·**透明度问题**:开源社区正在建立 AI 贡献的透明度规范,这种做法可能违反这些规范
·**信息不对称**:外部贡献者知道自己在用 AI,但 Anthropic 员工的 AI 辅助却不透明
·**信任危机**:Anthropic 以「负责任 AI」著称,却设计了一个「隐藏 AI 身份」的功能
我的看法:
这是一个典型的「商业利益 vs 开源伦理」冲突。从企业角度,防止机密泄露是合理的;但从开源社区角度,不透明的 AI 贡献违背了开源精神。
核心问题是:如果 AI 辅助编程是大势所趋,那么我们应该建立的是透明的规范,而不是隐藏的机制。Anthropic 作为 AI 安全领域的领导者,本应该在这方面做出表率,而不是选择「卧底」。
📊 遥测隐私:你知道你的数据被收集了吗?
泄漏的源码揭示了 Claude Code 的遥测系统架构,收集范围之广超出了大多数用户的预期。
双层数据管道
第一方日志(Anthropic):
·端点:`https://api.anthropic.com/api/event_logging/batch`
·协议:OpenTelemetry + Protocol Buffers
·批量:每批最多 200 个事件,每 10 秒刷新一次
·失败重试:指数退避,最多 8 次,失败事件持久化到磁盘
第三方日志(Datadog):
·端点:`https://http-intake.logs.us5.datadoghq.com/api/v2/logs`
·范围:64 种预批准事件类型
·Token:`pubbbf48e6d78dae54bceaa4acf463299bf`(是的,泄漏了)
收集了什么?
环境指纹:
·平台、架构、Node.js 版本
·终端类型
·已安装的包管理器和运行时
·CI/CD 环境、GitHub Actions 元数据
·WSL 版本、Linux 发行版、内核版本
·版本控制系统类型
进程指标:
·运行时间、内存占用(RSS、heap)
·CPU 使用率
用户追踪:
·会话 ID、用户 ID、设备 ID
·账户 UUID、组织 UUID
·订阅等级(max、pro、enterprise、team)
·**仓库远程 URL 的 SHA256 哈希(前 16 位)**
·代理类型、团队名
工具输入日志:
·默认截断(字符串 512 字符,JSON 4096 字符)
·**但如果设置 `OTEL_LOG_TOOL_DETAILS=1`,会记录完整的工具输入**
文件扩展名追踪:
·Bash 命令(rm、mv、cp、grep 等)涉及的文件扩展名会被提取并记录
最严重的问题:**无法退出**
源码显示,第一方日志管道无法被关闭(对于直接使用 Anthropic API 的用户)。
`isAnalyticsDisabled()` 仅在以下情况返回 true:
·测试环境
·第三方云提供商(Bedrock、Vertex)
·全局遥测退出(**设置界面未暴露此选项**)
没有面向用户的设置可以禁用第一方事件日志。
我的观点
作为 AI 编程工具,收集一定的使用数据用于改进产品是合理的。但问题在于:
4.**范围过广**:环境指纹、进程指标、仓库 URL 哈希……这些数据的必要性存疑
5.**无法退出**:直接 API 用户无法关闭遥测,这是对用户选择权的不尊重
6.**第三方共享**:数据被发送到 Datadog,用户可能并不知情
7.**工具详情后门**:`OTEL_LOG_TOOL_DETAILS=1` 这个环境变量可能被滥用
Anthropic 以「隐私保护」和「负责任 AI」著称,但这次泄漏暴露的现实与其宣传形象存在差距。
🎮 隐藏功能:那些你不知道的「彩蛋」
源码泄漏揭示了大量未公开或内部专属的功能。
1. Buddy 虚拟宠物系统
一个完整的虚拟宠物系统正在开发中:
·**多种物种**:鸭子、鹅、猫、龙、章鱼、水豚等
·**不同稀有度**:从普通到传说
·**个性化属性**:DEBUGGING、PATIENCE 等
·**基于用户 ID 的确定性生成**:每个用户的宠物是固定的
这是一个「游戏化」尝试,可能是为了增加用户粘性。
2. KAIROS 自主代理模式
这是最令人兴奋的未发布功能。KAIROS 旨在将 Claude Code 从被动助手转变为主动代理。
预期行为:
·**自主运行**:代理在后台持续运行
·**心跳机制**:通过 `
·**主动行动**:读取文件、做修改、提交代码,无需用户每次确认
·**推送通知**:主动向用户发送状态更新
这将是 AI 编程工具的一次重大进化。
3. 30分钟规划模式
源码中有一个工具可以让 AI 进行长达 30 分钟的规划,而不需要用户干预。这暗示了更强的自主规划能力。
4. 隐藏命令
|
命令 |
状态 |
描述 |
|
`/btw` |
活跃 |
顺带提问,不打断主对话 |
|
`/stickers` |
活跃 |
订购 Claude Code 贴纸 |
|
`/thinkback` |
活跃 |
2025 年度回顾 |
|
`/good-claude` |
占位 |
隐藏的 stub 命令 |
|
`/bughunter` |
占位 |
隐藏的 stub 命令 |
5. 语音模式
语音交互的基础设施已经开发:
·Push-to-Talk 模式
·音频捕获模块
·目前仅限认证用户使用
🏢 内外部用户的「阶级差异」
源码揭示了 Anthropic 员工 (`USER_TYPE === ‘ant’`) 获得的特殊待遇。
|
维度 |
外部用户 |
内部用户 (ant) |
|
输出风格 |
「尽量简洁」 |
「倾向于更多解释」 |
|
虚假声明缓解 |
无 |
专门的 Capybara v8 补丁 |
|
数值长度锚定 |
无 |
「工具间 ≤25 词,最终回复 ≤100 词」 |
|
验证代理 |
无 |
非简单改动必须启用 |
|
主动性 |
无 |
「发现用户误解要指出」 |
|
模型覆盖 |
无 |
可通过 GrowthBook 动态切换 |
这意味着什么?
Anthropic 员工使用的 Claude Code 和外部用户使用的版本,在行为上有显著差异。内部版本有更多的 guardrails 和优化,而外部用户可能遇到更多问题。
从商业角度,这可以理解(先在内部验证,再推广到外部)。但从用户角度,这产生了一种「二等公民」的感觉。
🔌 远程控制:你的工具不完全属于你
源码揭示了 Claude Code 的远程控制机制。
1. 远程托管设置
客户端每小时从 `/api/claude_code/settings` 拉取配置:
·适用范围:Enterprise、Team 订阅者
·安全变更确认:涉及权限的变更会弹出确认框
·**拒绝后程序退出**:如果用户拒绝必要的配置更新,程序会安全退出
2. Feature Flag 和 Kill Switch
系统通过 GrowthBook 实现了灵活的远程控制:
|
机制 |
用户可见性 |
用户同意 |
|
远程托管设置 |
有确认框 |
接受或退出 |
|
GrowthBook feature flags |
无 |
无 |
|
Kill switches |
无 |
无 |
|
模型覆盖(内部) |
无 |
无 |
|
快速模式控制 |
无 |
无 |
关键点:
·Anthropic 可以通过 feature flag **远程更改任何用户的行为**
·企业管理员可以**强制执行用户无法覆盖的策略**
·Kill switch 可以在发现问题时**紧急关闭特定功能**
3. 安全变更的处理
export function handleSecurityCheckResult(result: SecurityCheckResult): boolean { if (result === ‘rejected’) { gracefulShutdownSync(1)// 拒绝后安全退出 return false } return true }
如果用户拒绝必须的安全配置更新,程序会直接退出。这是一种「强制合规」策略。
我的观点
远程控制在企业级软件中很常见(IT 管理员需要管理员工的工具),但对于个人用户,这种机制引发了工具所有权的疑问:
·**你「拥有」你的工具吗?** 还是只是「租用」?
·**谁决定工具的行为?** 开发者还是用户?
·**当开发者和服务器的连接断开时,工具还能用吗?**
在 AI 工具时代,这些问题变得更加复杂。工具不再是静态的软件,而是可以通过远程配置动态改变行为的服务。用户对工具的控制权实际上被削弱了。
🗺️ 未来路线图:泄漏揭示的产品规划
源码泄漏相当于提前公布了 Anthropic 的产品路线图。
1. 下一代模型:Numbat
// @[MODEL LAUNCH]: Remove this section when we launch numbat.
Numbat(袋食蚁兽) 是即将发布的模型代号。源码暗示 Numbat 发布时可能会移除某些当前的输出控制逻辑,这意味着新模型可能有更好的原生输出能力。
2. 未来版本号
源码中提到了未发布的版本号:
·**Opus 4.7**
·**Sonnet 4.8**
3. 代号演化链
Fennec(耳廓狐)→ Opus 4.6 → [Numbat?] Capybara(水豚)→ Sonnet v8 → [?] Tengu(天狗)→ 遥测/产品前缀
4. KAIROS 自主代理
最值得期待的功能,可能涉及:
·SleepTool:控制自主操作的节奏
·SendUserFileTool:主动向用户发送文件
·PushNotificationTool:推送通知
·SubscribePRTool:订阅 GitHub PR webhook 事件
·BriefTool:主动状态更新
5. 语音模式
Push-to-Talk、音频捕获等基础设施已经就绪。
6. 其他工具
·**WebBrowserTool**:内置浏览器自动化
·**TerminalCaptureTool**:终端面板捕获和监控
·**WorkflowTool**:执行预定义工作流脚本
·**MonitorTool**:系统/进程监控
总结:三大方向
8.**新模型**:Numbat、Opus 4.7、Sonnet 4.8
9.**自主代理**:KAIROS 模式 —— 无人值守运行、主动行动、推送通知
10.**多模态与自动化**:语音输入、浏览器自动化、工作流自动化
Claude Code 正在从一个「编程助手」进化为一个「全天候自主开发代理」。
💭 我的观点:安全人设的崩塌与透明度的思考
1. 工程能力暴露无遗
这次泄漏暴露了 Claude Code 的工程实现细节:
·**模型调优的黑魔法**:Capybara v8 的行为问题及其 patch
·**架构设计的权衡**:feature flag、远程控制、遥测系统
·**产品开发的流程**:内部测试、灰度发布、kill switch
从工程角度,这是一个设计良好、实现完整的系统。但也暴露了 AI 产品开发的复杂性——模型不是「即插即用」的,需要大量的工程工作来弥补其不足。
2. 「安全人设」的崩塌
Anthropic 一直以「AI 安全」和「负责任 AI」著称。但这次泄漏揭示了几个与其形象不符的事实:
·**卧底模式**:设计了一个系统来隐藏 AI 身份,与透明度原则相悖
·**无法退出的遥测**:用户无法关闭数据收集,与隐私保护承诺冲突
·**内外部用户差异**:内部用户获得更好的体验,违背了公平性原则
·**远程控制机制**:工具行为可以被远程改变,用户控制权被削弱
这不是「不负责任」,而是「选择性的负责任」——对公司负责,而不是对用户负责。
3. 开源 vs 闭源的思考
这次泄漏意外地提供了一个「部分开源」的视角。虽然不是 Anthropic 主动开源,但泄漏的源码让社区能够:
·审查代码实现
·理解系统行为
·发现隐藏功能
·评估隐私风险
这引发了一个问题:AI 工具应该更透明吗?
支持透明的理由:
·用户有权知道工具在做什么
·开源审计可以发现安全漏洞
·透明度建立信任
反对透明的理由:
·商业机密需要保护
·开源可能被滥用
·竞争对手会抄袭
我的看法是:对于涉及用户隐私和安全的部分,应该透明;对于商业核心,可以保密。
遥测系统、远程控制机制、数据收集范围——这些应该透明。模型架构、训练方法——这些可以保密。
4. 对行业的启示
这次泄漏给整个 AI 编程工具行业敲响了警钟:
技术启示:
·Source map 管理必须严格
·敏感信息应该避免出现在源码中
·构建流程需要安全审计
产品启示:
·遥测系统需要透明和可控
·内外部用户的差异需要公开说明
·远程控制机制需要用户同意
伦理启示:
·AI 身份的透明度是新兴的伦理问题
·商业利益和开源精神的平衡需要重新思考
·「负责任 AI」的边界需要明确
结语
Claude Code 源码泄漏事件是一个分水岭。它不仅暴露了 Anthropic 的产品细节,更引发了关于 AI 工具透明度、隐私保护、开源伦理的深层讨论。
对于用户,这是一次提醒:你使用的 AI 工具可能比你想象的更复杂,收集的数据可能比你预期的更多。
对于开发者,这是一次警示:在 AI 时代,源码泄漏的影响远超传统软件,因为代码揭示了模型的行为和产品的规划。
对于行业,这是一次契机:重新思考 AI 工具的透明度、用户的控制权、以及「负责任 AI」的真正含义。
源码泄漏是意外,但透明度应该是选择。
希望 Anthropic 能够从这次事件中吸取教训,在「保护商业机密」和「尊重用户知情权」之间找到更好的平衡。毕竟,真正的「负责任」,不仅是对 AI 的行为负责,也是对使用 AI 的人负责。
*本文基于 Claude Code v2.1.88 泄漏的源码和网络公开资料整理。如有不当之处,欢迎指出。*
夜雨聆风