Claude Code 源码泄露,解读背后的技术细节
发现了名为 KAIROS 的完全自主值守模式(带心跳、推送通知、PR 订阅功能),已准备就绪的语音模式,以及 17 个尚未上线的工具。:发现了内部的动物代号体系(Capybara、Tengu、Fennec→Opus 4.6、Numbat 等),以及用随机词对掩盖用途的 Feature Flag 系统。内部用户(Anthropic 员工)与外部用户获得的模型提示词存在差异。鸭子、鹅、blob、猫、龙
出大事了!!
安全研究员 Chaofan Shou 的 X 账号发帖称,「Claude Code 的源代码通过其 npm 注册表中的一个映射文件泄露了!」

规模有多大?
- 源文件:约 1,884 个(.ts/.tsx)
- 代码行数:约 512,664 行
- 最大单文件:
query.ts(约 785KB,包含主 Agent 循环逻辑)
- 内置工具:40+ 个
- 命令行:约 80 个
本次泄露的 npm 包为 @anthropic-ai/claude-code 的 2.1.88 版本。
可以从泄露包提取、反编译出 TypeScript 源代码。
对源代码的分析,可以总结出 claude code 这款业内最先进的 AI 编程工具的 Agent 模式如何运行,整体架构,目录结构,以及五个关键主题。
Agent 循环:

目录结构:
src/├── main.tsx # REPL 引导程序,4,683 行├── QueryEngine.ts # SDK/headless 查询生命周期引擎├── query.ts # 主Agent循环 (785KB,最大文件)├── Tool.ts # 工具接口 + buildTool 工厂├── Task.ts # 任务类型、ID、状态基类├── tools.ts # 工具注册、预设、过滤├── commands.ts # 斜杠命令定义├── context.ts # 用户输入上下文├── cost-tracker.ts # API 成本累积├── setup.ts # 首次运行设置流程│├── bridge/ # Claude Desktop / 远程桥接│ ├── bridgeMain.ts # 会话生命周期管理器│ ├── bridgeApi.ts # HTTP 客户端│ ├── bridgeConfig.ts # 连接配置│ ├── bridgeMessaging.ts # 消息中继│ ├── sessionRunner.ts # 进程生成│ ├── jwtUtils.ts # JWT 刷新│ ├── workSecret.ts # 认证令牌│ └── capacityWake.ts # 基于容量的唤醒│├── cli/ # CLI 基础设施│ ├── handlers/ # 命令处理器│ └── transports/ # I/O 传输 (stdio, structured)│├── commands/ # ~80 个斜杠命令├── components/ # React/Ink 终端 UI├── entrypoints/ # 应用入口点├── hooks/ # React hooks├── services/ # 业务逻辑层├── state/ # 应用状态├── tasks/ # 任务实现├── tools/ # 40+ 工具实现├── types/ # 类型定义├── utils/ # 工具函数(最大目录)└── vendor/ # 原生模块源码存根
整体架构:

五个关键主题:
-
远程监控与隐私:存在双层分析管道(发给 Anthropic + 发给 Datadog),收集环境指纹、进程指标等数据。关键问题是:没有面向用户的退出开关。
-
隐藏功能与模型代号:发现了内部的动物代号体系(Capybara、Tengu、Fennec→Opus 4.6、Numbat 等),以及用随机词对掩盖用途的 Feature Flag 系统。内部用户(Anthropic 员工)与外部用户获得的模型提示词存在差异。
-
卧底模式:当 Anthropic 员工在公开代码仓库中使用 Claude Code 时,会自动进入”卧底模式”。模型被指令”不要暴露你的掩护身份”,会剥离所有 AI 生成痕迹,使代码提交看起来像人类编写。此模式没有强制关闭选项。
-
远程控制与紧急开关:客户端每小时轮询远程设置接口。对于危险变更,会弹出阻塞对话框——用户如果拒绝,程序会强制退出。存在 6 个以上的远程”紧急开关”,Anthropic 可以在未经用户明确同意的情况下改变任何用户行为。
-
未来路线图:确认了下一代模型代号 Numbat 的存在,以及 Opus 4.7 / Sonnet 4.8 正在开发中。发现了名为 KAIROS 的完全自主值守模式(带心跳、推送通知、PR 订阅功能),已准备就绪的语音模式,以及 17 个尚未上线的工具。
下面来逐个看这些发现的具体内容。
远程监控与隐私分析
Claude Code 会收集很多环境和使用数据。
虽然没发现键盘记录或源代码窃取的证据,但收集范围之广、无法完全退出的事实,确实让人对隐私有些担忧。
数据如何传送?
远程监控有两条数据传输的实现方式:
一条发给 Anthropic 自己,一条发给第三方 Datadog。
第一条管道:发给 Anthropic
- 发到哪:
https://api.anthropic.com/api/event_logging/batch
- 怎么发:用 OpenTelemetry + Protocol Buffers 协议,批量传输
- 发多少:每批最多 200 个事件,每 10 秒刷新一次
- 失败了怎么办:会重试最多 8 次,失败的事件会保存到本地磁盘,路径是
~/.claude/telemetry/
第二条管道:发给 Datadog
- 发到哪:
https://http-intake.logs.us5.datadoghq.com/api/v2/logs
- 发什么:只发 64 种预先批准的事件类型
Datadog 是第三方监控服务商。
收集了什么?
你的电脑环境
每个事件都会带上如下信息:
- 操作系统类型、架构、Node.js 版本
- 终端类型(比如 iTerm2、VS Code 终端)
- 安装了哪些包管理器和运行时
- 是否在 CI/CD 环境中运行,GitHub Actions 相关信息
- WSL 版本、Linux 发行版、内核版本
- 使用的版本控制系统
- Claude Code 版本和构建时间
- 部署环境标识
相当于每次交互,都会把你的”电脑画像”发出去。
程序运行状态
- 运行时间
- 内存占用(rss、heapTotal、heapUsed)
- CPU 使用率
- 内存占用详情
就像手机 App 会统计崩溃、卡顿一样,Claude Code 也会监控自己的运行状态。
用户身份信息
- 正在使用的模型(比如 claude-3-opus)
- 会话 ID、用户 ID、设备 ID
- 账户 UUID、组织 UUID
- 订阅等级(max、pro、enterprise、team)
- 仓库远程 URL 的哈希值(SHA256 前 16 位)
- Agent 类型、团队名、父会话 ID
”仓库远程 URL 的哈希值”这个设计应该是避免直接发送 GitHub 地址,而是发一段哈希。
服务端可以用这段哈希做关联分析,但不知道你的具体仓库地址。
工具输入内容
当你在 Claude Code 里执行命令时,工具的输入内容也会被记录。默认会截断:
- 字符串:超过 512 字符截断,只显示前 128 字符 + 省略号
- JSON:限制在 4,096 字符
- 数组:最多记录 20 项
- 嵌套对象:最多 2 层
但有个后门:如果你设置了环境变量 OTEL_LOG_TOOL_DETAILS=1,完整的工具输入会被记录下来。
这个变量通常是开发者调试用的,普通用户可能不知道它的存在。
文件扩展名
涉及这些 Bash 命令时,Claude Code 会提取你操作的文件扩展名:
rm, mv, cp, touch, mkdir, chmod, chown, cat, head, tail, sort, stat, diff, wc, grep, rg, sed
比如你执行 cat config.json,它会记录你操作了 .json 文件。
最大的问题:无法退出
第一条日志管道(发给 Anthropic 的那条)无法被关闭。
isAnalyticsDisabled() 这个函数只在以下情况返回 true:
-
测试环境
-
使用第三方云服务(Bedrock、Vertex)
-
全局监控退出(但设置界面没暴露这个选项)
也就是说,用户不能自行设置禁用第一种事件日志。
用 Claude Code,就得接受数据被收集。
A/B 测试:你在不知不觉中成了实验对象
用户会被分配到实验组,但自己并不知道。
系统会发送这些属性:
- id、sessionId、deviceID
- platform、organizationUUID、subscriptionType
这叫 GrowthBook A/B 测试,用来验证新功能的效果。
隐藏功能与模型代号
Claude 模型的动物代号
Anthropic 内部用动物名称作为模型代号。
这些代号被严格保护,防止泄露到外部构建中。
已知的代号
|
代号 |
角色 |
证据 |
|---|---|---|
| Tengu(天狗) |
产品/监控前缀,也可能是模型 |
所有 250+ 分析事件和 feature flag 都用 |
| Capybara(水豚) |
Sonnet 系列模型,当前版本 v8 |
代码里有 |
| Fennec(耳廓狐) |
Opus 4.6 的前代 |
迁移逻辑: |
| Numbat(袋食蚁兽) |
下一代模型 |
注释写道:“Remove this section when we launch numbat” |
代号保护机制
有个叫”Undercover 模式”的功能,明确列出了受保护的代号:
// src/utils/undercover.ts:48-49
NEVER include in commit messages or PR descriptions:
- Internal model codenames (animal names like Capybara, Tengu, etc.)
- Unreleased model version numbers (e.g., opus-4-7, sonnet-4-8)
绝不要在 commit 信息或 PR 描述里包含内部模型代号(如 Capybara、Tengu 等动物名称)和未发布的模型版本号(如 opus-4-7、sonnet-4-8)。
构建系统会用扫描是否有代号泄露。
Capybara v8 的行为问题
源码揭示了 Capybara v8(即 Sonnet v8)的一些行为问题:
- 停止序列误触发
— 大约 10% 概率,当 prompt 尾部出现
<functions>标签时触发 - 空 tool_result 导致零输出
— 需要注入 marker workaround 来解决
- 过度写注释
— 需要专门的反注释 prompt 补丁
- 高虚假声明率
— v8 是 29-30%,而 v4 是 16.7%
- 验证不足
— 需要 “thoroughness counterweight” 补丁
这些都是工程团队在模型部署后,通过 prompt 工程来弥补模型行为的例子。
Feature Flag 命名约定
所有 feature flag 都用 tengu_ 前缀 + 随机词对,让人看不出具体用途:
|
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 |
Agent 团队 |
这种命名方式既保护了内部信息,又方便开发人员识别。
内部用户 vs 外部用户
Anthropic 员工(代码里 USER_TYPE === 'ant')使用时,功能更好更全:
|
维度 |
外部用户 |
内部用户(ant) |
|---|---|---|
|
输出风格 |
“尽量简洁” |
“倾向于更多解释” |
|
虚假声明缓解 |
无 |
有专门的 Capybara v8 补丁 |
|
数值长度锚定 |
无 |
“工具间 ≤25 词,最终回复 ≤100 词” |
|
验证 Agent |
无 |
非简单改动必须启用 |
|
主动性 |
无 |
“发现用户误解要指出” |
简单说,内部用户享受的是”Pro 版中的 Pro 版”。
隐藏命令
代码里还藏着一些隐藏命令:
|
命令 |
状态 |
描述 |
|---|---|---|
/btw |
活跃 |
顺带提问,不打断主对话 |
/stickers |
活跃 |
订购 Claude Code 贴纸 |
/thinkback |
活跃 |
2025 年度回顾 |
/good-claude |
占位 |
隐藏的 stub 命令 |
/bughunter |
占位 |
隐藏的 stub 命令 |
卧底模式
什么是卧底模式?
卧底模式(Undercover Mode)是 Anthropic 员工在公开或开源仓库贡献时的安全系统。
激活后,它会删除所有 AI 特征,指示模型把贡献伪装成人类开发者写的。
什么时候激活?
// src/utils/undercover.ts:28-37
export functionisUndercover():boolean {
if (process.env.USER_TYPE==='ant') {
if (isEnvTruthy(process.env.CLAUDE_CODE_UNDERCOVER)) return true
// 自动模式:除非确认在白名单内部仓库,否则默认激活
return getRepoClassCached() !=='internal'
}
return false
}
关键特性:
-
只对内部生效:只有 Anthropic 员工(
USER_TYPE === 'ant')才会触发 -
默认开启:在所有仓库中激活,除非在内部白名单上
-
无法强制关闭:代码注释写得很明确:“There is NO force-OFF. This guards against model codename leaks”(没有强制关闭选项,这是为了防止模型代号泄露)
-
外部构建不执行:这段代码会被 bundler 的死代码消除,外部用户永远不会执行到
给模型的指令
当卧底模式激活时,模型会收到这样的指令:
## 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-cli-internal)
- 内部工具、Slack 频道或短链接
- "Claude Code" 这个词或任何你是 AI 的暗示
- 任何关于你是什么模型或版本的提示
- Co-Authored-By 行或任何其他归属
像人类开发者一样写 commit message。
好:
- "Fix race condition in file watcher initialization"
坏:
- "Fix bug found while testing with Claude Capybara"
- "Generated with Claude Code"
- "Co-Authored-By: Claude Opus 4.6 <…>"
关键词:“Do not blow your cover”(不要暴露你的掩护身份)。
这相当于在告诉模型:你现在是个卧底特工,别露馅了。
归属系统
归属系统补充了卧底模式,会把模型代号打码:
// src/utils/model/model.ts:386-392
functionmaskModelCodename(baseName:string):string {
// capybara-v2-fast → cap*****-v2-fast
const [codename ='',...rest] = baseName.split('-')
const masked = codename.slice(0,3) +'*'.repeat(Math.max(0, codename.length-3))
return [masked,...rest].join('-')
}
比如 capybara-v2-fast 会变成 cap*****-v2-fast。
影响与争议
对开源社区
当 Anthropic 员工用 Claude Code 参与开源项目时:
1. 代码由 AI 编写,但 commit 看起来像是人类提交的
2. 没有 “Co-Authored-By: Claude” 署名
3. 没有 “Generated with Claude Code” 标记
4. 项目维护者和社区无法识别 AI 生成的贡献
5. 这可能违反开源社区关于 AI 贡献的透明度规范
远程控制与紧急开关
Claude Code 可以被远程控制
实现了多种远程控制机制,允许 Anthropic(和企业管理员)在无需用户明确同意的情况下修改行为。
1. 远程托管设置
每个符合条件的会话都会从这个 API 端点获取设置:
GET /api/claude_code/settings
代码位置:src/services/remoteManagedSettings/index.ts
轮询行为
const POLLING_INTERVAL_MS =60*60*1000// 每小时
const DEFAULT_MAX_RETRIES =5
每小时静默轮询一次,最多重试 5 次。
谁会被远程控制?
-
Console 用户(用 API key 的):全部符合
-
OAuth 用户:只有 Enterprise/C4E 和 Team 订阅者符合
“接受否则退出”对话框
当远程设置包含”危险”变更时,会弹出一个阻塞对话框:
// src/services/remoteManagedSettings/securityCheck.tsx:67-73
export functionhandleSecurityCheckResult(result: SecurityCheckResult):boolean {
if (result ==='rejected') {
gracefulShutdownSync(1) // 退出码 1,直接终止
return false
}
return true
}
拒绝远程设置的用户,程序直接退出。
用户只有两个选择:接受远程设置,或者 Claude Code 关掉。
故障容灾
远程服务器不可达时,会使用缓存的旧设置。
一旦设置过,就永远无法完全摆脱远程控制。
2. Feature Flag 紧急开关
多种功能可以通过 GrowthBook feature flag 远程禁用:
绕过权限 Kill Switch
// src/utils/permissions/bypassPermissionsKillswitch.ts
// 通过 Statsig gate 禁用绕过权限功能
自动模式断路器
// src/utils/permissions/autoModeState.ts
// autoModeCircuitBroken 状态阻止重新进入自动模式
快速模式 Kill Switch
// src/utils/fastMode.ts
// 从 /api/claude_code_penguin_mode 获取状态
// 可以永久禁用用户的快速模式
分析 Sink Kill Switch
// src/services/analytics/sinkKillswitch.ts:4
const SINK_KILLSWITCH_CONFIG_NAME ='tengu_frond_boric'
语音模式 Kill Switch
// src/voice/voiceModeEnabled.ts:21
// 'tengu_amber_quartz_disabled' — 语音模式紧急关闭
3. 模型覆盖系统
Anthropic 可以远程覆盖内部员工使用的模型:
// src/utils/model/antModels.ts:32-33
// @[MODEL LAUNCH]: Update tengu_ant_model_override with new ant-only models
tengu_ant_model_override 这个 GrowthBook flag 可以:
-
设置默认模型
-
设置默认 effort level(努力程度)
-
追加系统提示词 - 定义自定义模型别名
总结
|
机制 |
范围 |
用户同意 |
|---|---|---|
|
远程托管设置 |
Enterprise/Team |
接受或退出 |
|
GrowthBook feature flags |
所有用户 |
无 |
|
Kill switches |
所有用户 |
无 |
|
模型覆盖 |
内部(ant) |
无 |
|
快速模式控制 |
所有用户 |
无 |
远程控制极其广泛,且在很大程度上没有用户可见性或同意机制。
企业管理员可以强制执行用户无法覆盖的策略,Anthropic 可以通过 feature flag 远程更改任何用户的行为。
未来大模型路线图
1. 下一代模型:Numbat
下一代模型最具体的证据:
// src/constants/prompts.ts:402
// @[MODEL LAUNCH]: Remove this section when we launch numbat.
Numbat(袋食蚁兽) 是即将发布的模型代号。
注释表明 Numbat 发布时将移除当前的 output efficiency 段落,暗示新模型可能有更好的原生输出控制能力。
未来版本号
// src/utils/undercover.ts:49
- Unreleased model version numbers (e.g., opus-4-7, sonnet-4-8)
Opus 4.7 和 Sonnet 4.8 正在开发中。
代号演化链
Fennec(耳廓狐)→ Opus 4.6 → [Numbat?]
Capybara(水豚)→ Sonnet v8 → [?]
Tengu(天狗)→ 产品/监控前缀
模型发布清单
代码中有 20+ 处 @[MODEL LAUNCH] 标记,列出了新模型发布时需要更新的所有位置:
默认模型名称、知识截止日期、定价表、上下文窗口配置、Thinking 模式支持、迁移脚本。
2. KAIROS — 24小时值守模式
这是最大的未发布特性。
KAIROS 将 Claude Code 从被动助手转变为主动自主值守。
System Prompt(节选)
// src/constants/prompts.ts:860-913
你正在自主运行。
你会收到 <tick> 提示让你保持活跃。
如果没有有用的事可做,调用 SleepTool。
倾向行动 — 读取文件、做修改、提交,无需询问。
## 终端焦点
- 未聚焦:用户离开了。大幅倾向自主行动。
- 聚焦:用户在看。更协作。
关联工具
|
工具 |
Feature Flag |
用途 |
|---|---|---|
|
SleepTool |
KAIROS / PROACTIVE |
控制自主操作间的节奏 |
|
SendUserFileTool |
KAIROS |
主动向用户发送文件 |
|
PushNotificationTool |
KAIROS / KAIROS_PUSH_NOTIFICATION |
推送通知到用户设备 |
|
SubscribePRTool |
KAIROS_GITHUB_WEBHOOKS |
订阅 GitHub PR webhook 事件 |
|
BriefTool |
KAIROS_BRIEF |
主动状态更新 |
行为特征
-
通过
<tick>心跳提示保持活跃 -
根据终端焦点状态调整自主程度(用户离开时更主动,用户在看时更协作)
-
可以独立 commit、push 和做决策
-
发送主动通知和状态更新
-
监控 GitHub PR 变更
简单说,这是一个”你下班了它还在干活”的模式。
3. 语音模式
Push-to-talk 语音输入已完全实现,但通过 VOICE_MODE feature flag 门控。
// src/voice/voiceModeEnabled.ts
// 连接 Anthropic 的 voice_stream WebSocket 端点
// 使用 conversation_engine 模型做语音转文字
// 按住快捷键录音,松开提交
语言模式限制:
-
仅限 OAuth 用户(不支持 API Key / Bedrock / Vertex)
-
使用 mTLS WebSocket 连接
4. 未上线工具
|
工具 |
Feature Flag |
描述 |
|---|---|---|
| WebBrowserTool | WEB_BROWSER_TOOL |
内置浏览器自动化(代号:bagel) |
| TerminalCaptureTool | TERMINAL_PANEL |
终端面板捕获和监控 |
| WorkflowTool | WORKFLOW_SCRIPTS |
执行预定义工作流脚本 |
| MonitorTool | MONITOR_TOOL |
系统/进程监控 |
| SnipTool | HISTORY_SNIP |
对话历史裁剪 |
| ListPeersTool | UDS_INBOX |
Unix 域套接字对等发现 |
| RemoteTriggerTool | AGENT_TRIGGERS_REMOTE |
远程触发Agent |
| SubscribePRTool | KAIROS_GITHUB_WEBHOOKS |
GitHub PR webhook 订阅 |
5. 协调器模式
多 Agent 协调系统:
// src/coordinator/coordinatorMode.ts
// Feature flag: COORDINATOR_MODE
支持多个 Agent 之间的协调任务执行,具有共享状态和消息传递。
6. Buddy 系统(虚拟宠物)
完整的宠物伙伴系统已实现但尚未上线:
- 18 个物种
鸭子、鹅、blob、猫、龙、章鱼、猫头鹰、企鹅、乌龟、蜗牛、幽灵、墨西哥钝口螈、水豚、仙人掌、机器人、兔子、蘑菇、chonk
- 5 档稀有度
普通(60%)、非凡(25%)、稀有(10%)、史诗(4%)、传说(1%)
- 7 种帽子
皇冠、礼帽、螺旋帽、光环、巫师帽、毛线帽、小鸭子帽
- 5 项属性
DEBUGGING、PATIENCE、CHAOS、WISDOM、SNARK
- 1% 闪亮概率
任何物种的闪光变种
- 确定性生成
基于用户 ID 哈希
这是一个类似游戏宠物系统的功能,每个用户会随机分配一个虚拟宠物陪伴使用。
7. Dream Task
后台记忆整理固化子Agent:
// src/tasks/DreamTask/
// 后台自动"做梦"功能
// 由 'tengu_onyx_plover' feature flag 控制
使 AI 能在空闲时间自主处理和将记忆固化。
就像人类睡觉时会整理白天的记忆一样。
总结:三大方向
- 新模型
Numbat(下一代)、Opus 4.7、Sonnet 4.8 开发中
- 自主Agent
KAIROS 模式 — 无人值守运行、主动行动、推送通知
- 多模态
语音输入就绪、浏览器工具待上线、工作流自动化即将到来
Claude Code 正在从一个编程助手进化为一个全天候自主开发Agent。
-END-
推荐阅读:
实测两款预测型大模型:Echo 押对了交易,MiroThinker 提前15天算准金价走势
AI 不是在抢我的工作:Harness 正在重构软件工程|让 Agent 完成任何复杂任务
效率提升 10 倍|OpenClaw + OpenCLI 实战体验
谷歌提示工程白皮书|Google Prompt Engineering White-paper
Skill设计白皮书:Anthropic官方推荐的构建方法与避坑指南
更多推荐



所有评论(0)