1906
TypeScript 源文件
51.2万
代码行数
59.8MB
Source Map 大小
3小时
暴露窗口期
目录
  1. 事件经过:一次失误引发的全曝光
  2. 整体架构:1906个文件的秘密
  3. Undercover Mode:专为卧底内部员工设计的隐身模式
  4. Fast Mode = 企鹅模式(Penguin Mode)
  5. Buddy 宠物系统:Terminal 里的电子鸡
  6. Dream 记忆整理:后台运行的 AI 整理工
  7. 模型代号与演进历史:Fennec → Opus
  8. 8个未发布功能全景
  9. 技术观点与安全启示

一、事件经过:一次失误引发的全曝光

⚠️ 泄露根因

Bun 打包器默认开启 source map 生成,但发布脚本的 .npmignore 没有排除 *.map 文件,导致 59.8MB 的 source map(包含完整 TypeScript 原始代码)被打包进 npm 生产版本。

2026-03-31 · 凌晨
Anthropic 发布 Claude Code v2.1.88,npm 包中意外包含 cli.js.map(59.8MB)
2026-03-31 · 约3小时后
安全研究员 Chaofan Shou (@Fried_rice) 首先发现泄露并公开,Anthropic 紧急下架 v2.1.88
2026-03-31 · 随后24小时
源码被迅速镜像至 GitHub,出现大量 fork;Anthropic 发布 v2.1.89 修复版本,并从 npm 删除 v2.1.88
2026-04-01 ~ 今
社区开始系统性分析,多篇技术分析文章流传,部分镜像仓库仍可访问
🔥 讽刺之处

Anthropic 专门构建了 Undercover Mode 防止 AI 在代码提交中泄露内部信息 —— 结果源码本身通过一个 .npmignore 疏漏完整泄露,包括 Undercover Mode 本身的完整实现、所有内部代号和未发布功能。

二、整体架构:1906个文件的秘密

技术栈

Claude Code 的技术栈出乎很多人意料:

核心目录结构

src/
├── main.tsx              # CLI 入口 (~800KB),含引导、REPL、主循环
├── QueryEngine.ts        # 核心 LLM 调用引擎
├── Tool.ts               # 工具基类
├── tools/                # 184 个文件,40+ 工具
│   ├── AgentTool/        # 子 Agent 管理
│   ├── BashTool/         # Shell 执行(含安全模块)
│   ├── FileEditTool/     # 文件编辑
│   ├── WebSearchTool/    # 网页搜索
│   └── MCPTool/          # MCP 协议工具
├── services/             # 130 个文件
│   ├── analytics/        # GrowthBook + 事件埋点
│   ├── autoDream/        # 后台记忆整理(Dream 系统)
│   └── MCP/              # MCP 服务器管理
├── buddy/                # 6 个文件 — 宠物伙伴系统
├── commands/             # 207 个文件 — CLI 命令
├── components/           # 389 个文件 — React 组件
├── utils/                # 564 个文件 — 工具函数
└── migrations/           # 11 个文件 — 数据迁移历史

编译期特性门控(完整列表)

Claude Code 使用 Bun 的 feature() 函数实现编译期死码消除,发布版本中所有 false 的门控分支都不会出现在最终 JS 里。以下是从源码中找到的完整未发布功能清单:

特性名功能说明状态
PROACTIVE / KAIROS永续助手模式,主动观察和行动未发布
BRIDGE_MODE与 claude.ai 远程连接控制未发布
DAEMON后台守护进程常驻模式未发布
VOICE_MODE语音输入命令未发布
COORDINATOR_MODE多 Agent 编排协调器未发布
TRANSCRIPT_CLASSIFIERML 自动审批(AFK 模式)未发布
BUDDYTerminal 宠物伙伴系统未发布
WORKFLOW_SCRIPTS工作流自动化脚本未发布

三、Undercover Mode:专为卧底内部员工设计的隐身模式

这是泄露源码里最有意思的功能之一。Anthropic 内部员工大量使用 Claude Code 参与开源开发,但为了防止 AI 在 commit 消息、PR 描述中无意泄露内部信息,专门为此构建了 Undercover Mode。

工作原理

// src/utils/undercover.ts
export function isUndercover(): boolean {
  if (process.env.USER_TYPE === 'ant') {
    // 强制开启
    if (isEnvTruthy(process.env.CLAUDE_CODE_UNDERCOVER)) return true
    // 自动模式:不在内部仓库白名单就开启
    return getRepoClassCached() !== 'internal'
  }
  return false  // 外部用户不生效
}

三档激活逻辑:① 环境变量强制② 自动模式(不在内部白名单就开启)③ 没有强制关闭选项(安全优先)

隐藏的内容类型

当 Undercover Mode 开启时,系统提示词会注入以下指令,要求 AI 在 commit/PR 内容中隐藏:

四、Fast Mode = 企鹅模式(Penguin Mode)

源码直接确认了 Fast Mode 的内部代号是 Penguin Mode(而不是坊间猜测的其他名字)。

// API 端点
const endpoint = `/api/claude_code_penguin_mode`

// 配置键
penguinModeOrgEnabled

// 杀死开关(GrowthBook)
tengu_penguins_off

// 分析事件
tengu_org_penguin_mode_fetch_failed
tengu_fast_mode_fallback_triggered

状态机架构

Fast Mode 有完整的四层状态机:

不可用原因free(免费账户)/ preference(组织禁用)/ extra_usage_disabled(超额计费未开启)

冷却触发rate_limitoverloaded,冷却时长由 API 返回的 resetTimestamp 决定

五、Buddy 宠物系统:Terminal 里的电子鸡

这是泄露代码里最令人意外的发现。Anthropic 正在开发一个在终端里显示的宠物伙伴系统,完整度相当高——不是玩笑项目,是正经的产品规划。

19 个物种(不是 18 个)

所有物种名通过 String.fromCharCode() 混淆,防止在源码搜索中暴露:

🦆 duck🪿 goose🫧 blob🐱 cat
🐉 dragon🐙 octopus🦉 owl🐧 penguin
🐢 turtle🐌 snail👻 ghost🦎 axolotl
🐭 capybara🌵 cactus🤖 robot🐰 rabbit
🍄 mushroom🐾 chonk(19个,社区普遍说18个,实际多一个 chonk)

抽卡系统

稀有度概率属性下限
Common60%5
Uncommon25%15
Rare10%25
Epic4%35
Legendary1%50

5 项属性:DEBUGGING(调试力)/ PATIENCE(耐心)/ CHAOS(混乱度)/ WISDOM(智慧)/ SNARK(毒舌度)

确定性:使用 Mulberry32 PRNG,种子 = hash(userId + 'friend-2026-401'),同一用户永远抽到同一只宠物。只有 "Soul"(AI 生成的名字和个性)会持久化存储。

六、Dream 记忆整理:后台运行的 AI 整理工

Dream 系统是 Claude Code 的后台记忆整理机制,当满足特定条件时自动 fork 一个子 Agent 在后台整理你的 memory 文件。

三门触发机制

门1:时间门   → 距上次整理 >= 24小时
门2:会话门   → 新会话数 >= 5
门3:锁门     → 获取排他锁(防止并发)
全部通过 → Fork 子 Agent 执行整理

四阶段整理流程

✅ 安全约束

Dream Agent 的 Bash 权限严格受限,只允许 lsgrepcat 等只读命令,所有写操作全部拒绝。无法被利用做危险操作。

七、模型代号与演进历史

动物命名体系

源码 migrations/ 目录里的迁移文件揭示了完整的模型演进路径:

// migrateFennecToOpus.ts
'fennec-latest'        → 'opus'
'fennec-latest[1m]'    → 'opus[1m]'
'fennec-fast-latest'   → 'opus[1m]' + fastMode: true

// migrateSonnet45ToSonnet46.ts
'claude-sonnet-4-5-20250929'    → 'sonnet'
'sonnet-4-5-20250929[1m]'       → 'sonnet[1m]'

确认的代号体系:

🔧 Capybara 生产工程问题

源码揭示 Anthropic 观察到 Capybara 模型在 Prompt 形状类似 turn boundary 时会提前停止生成。已实施缓解措施:强制插入 Tool loaded. 安全标记、重新定位有风险的兄弟块、压缩工具输出内容。

八、8个未发布功能全景

功能内部代号说明状态
永续助手 KAIROS 不等用户输入,主动观察和行动的后台 Agent 未发布
超长规划 ULTRAPLAN 30分钟 CCR 远程规划会话(Opus 4.6) 未发布
记忆梦想 Dream 后台记忆整理 Agent(已见上文) 未发布
宠物伙伴 Buddy Terminal 电子鸡(已见上文) 未发布
多 Agent 编排 COORDINATOR 并行工作 Agent + 协调器 未发布
Agent 群 Agent Swarms 跨进程队友协作(需 opt-in) 需申请
计算机使用 Chicago @ant/computer-use-mcp 集成 Max/Pro限定
语音输入 VOICE_MODE 语音命令输入 未发布

九、技术观点与安全启示

工程质量评价

优秀方面:

需要改进的地方:

与社区分析的差异

基于直接阅读源码,对社区流传分析的几点修正:

💡 最重要的结论

这次泄露最大的意义不是"Claude Code 有多少 bug",而是揭示了 AI 工具的真实研发节奏:发布版本只是冰山一角,大量功能已经完成甚至生产就绪,只是通过特性门控锁住。Anthropic 在 Claude Code 上的投入,远超产品表面呈现的规模。

源码版本:v2.1.88 · 分析日期:2026-04-04 · 免责声明:本文仅用于技术研究,所有源码版权归 Anthropic PBC 所有

← 返回 AI 学习者