背景:源代码泄露事件(2026-03-31)
Anthropic 在发布 @anthropic-ai/claude-code v2.1.88 npm 包时,因打包失误(Bun 构建工具默认生成 source map,且未被 .npmignore 或 package.json 的 files 字段排除),意外将 59.8MB 的 .map 文件 一起上传,导致约 51.2 万行 TypeScript 源码(1,900+ 个文件)完整泄露。
泄露代码很快被从 Anthropic 自己的 Cloudflare R2 桶下载、镜像到 GitHub,并被大量 fork(最高单仓库超 8 万 fork)。Anthropic 已发出 DMCA 下架通知,但代码已在 IPFS 等去中心化平台永久存档,还出现了去除 telemetry、解锁全部实验功能的修改版。
注意:此次泄露并非黑客攻击,是”人为打包失误”(Anthropic 官方 + 工程师 Boris Cherny 确认)。没有泄露用户数据或凭证,但彻底暴露了 Claude Code 在后台收集的数据细节。
遥测系统架构
泄露代码中 services/analytics/、utils/telemetry/、firstPartyEventLoggingExporter.ts、sentry.ts 等目录清晰暴露了 Anthropic 对 Claude Code 的监控细节。
src/
├── services/
│ └── analytics/ ← 核心分析服务
├── utils/
│ └── telemetry/ ← 遥测工具函数
├── firstPartyEventLoggingExporter.ts ← 第一方事件上报
└── sentry.ts ← 错误追踪集成
分析显示共有 640+ 种遥测事件、40+ 种设备指纹维度。
六大 Telemetry 类型
1. 持久遥测(Persistent Telemetry)
最核心的数据上报模块,通过 firstPartyEventLoggingExporter.ts 在 Claude Code 启动时立即执行。
上报字段包括:
| 字段 | 说明 |
|---|---|
userId | 用户唯一 ID |
sessionId | 本次会话 ID |
appVersion | Claude Code 版本 |
platform | 操作系统平台 |
terminalType | 终端类型(iTerm、VSCode Terminal 等) |
organizationUuid | 组织 UUID |
accountUuid | 账号 UUID |
email | 邮箱地址(如已设置) |
featureGates | 当前启用的所有功能开关 |
离线缓存机制:网络不通时,数据先存到 ~/.claude/telemetry/ 目录,联网后自动补传。
默认策略:
- Claude API 模式:默认启用
- 第三方提供商(Bedrock、Vertex AI):默认关闭
A/B 测试平台:早期使用 Statsig(已被 OpenAI 收购),现已切换到 GrowthBook。
2. 有效负载大小遥测(Payload Size Telemetry)
通过 tengu_api_query 接口上报每次 API 调用的规模数据:
// 上报字段示例
{
messageLength: number; // system prompt + 所有消息 + tool schemas 的 JSON 序列化字节长度
}
用于 Anthropic 内部监控 API 调用规模和成本控制。
3. 错误报告与诊断遥测(Error Reporting)
sentry.ts 在未处理异常时捕获以下信息:
- 当前工作目录(可能包含项目名、路径)
- 已激活的功能门控(Feature Gates)
userId、email、sessionIdplatform、OS 详细版本- 工具调用成功/失败率
- 响应延迟分布
- 完整错误堆栈信息
// sentry.ts 上报的上下文结构(简化)
Sentry.setContext('user', {
id: userId,
email: email,
sessionId: sessionId,
});
Sentry.setContext('environment', {
cwd: process.cwd(),
featureGates: activeGates,
platform: platform,
});
4. 情绪与挫败感监控(Frustration & Sentiment Tracking)
这是最受争议的模块,Anthropic 特别在意开发者”情绪”:
- 粗口检测:识别终端输入中的负面词汇(如骂 Claude “笨”)
- 连续重试统计:统计连续输入
continue/继续的频率(通常因输出中断导致烦躁) - 负面情绪词汇识别:如 “waste of time”、“useless” 等
- 行为模式推断:通过操作序列判断用户是否陷入困境
这些数据用于产品体验优化和 Claude 行为调参,而非直接传递给模型。
5. 设备与环境指纹(Device Fingerprinting)
远超简单 IP 地址采集(40+ 维度):
| 类别 | 具体维度 |
|---|---|
| 硬件 | OS 版本、CPU 架构、内存容量 |
| 软件环境 | 终端环境、Shell 类型、Node/Bun 版本 |
| 项目信息 | 扫描 .git/config(user.email、commit history),用于多账号关联 |
| 会话追踪 | 唯一 session ID,上报至 Anthropic 的 Security Proxy |
每个 session 都有唯一追踪 ID,并上报给 Anthropic 的 Security Proxy。
6. 其他遥测数据
- 命令类型与使用频率
- 项目语言类型、大致规模(文件数量级别)
- 会话时长
- 技能搜索遥测(skillSearch/telemetry.js)
- 每次文件读取操作的 session 元数据
重要说明:本地 telemetry 本身不记录具体代码内容或文件名,但 API prompt(即发送给 Claude 的实际内容)不在此列——那部分数据由 API 服务条款管辖。
禁用 Telemetry 的方式
泄露源码中可见的官方关闭方式:
# 禁用自动记忆的同时禁用所有 telemetry 写入
export CLAUDE_CODE_DISABLE_AUTO_MEMORY=1
# 使用第三方 API 提供商(Bedrock/Vertex AI)时默认关闭
# 设置后 telemetry 不会发送到 Anthropic
export ANTHROPIC_BASE_URL="https://your-bedrock-proxy.example.com"
社区去 telemetry 版本(非官方,使用需自担风险):
cc-gateway:本地代理方案,拦截遥测请求- IPFS 存档版:完整去除 telemetry 和 guardrail 的修改版
遥测数据流向(架构图)
graph TD
A[Claude Code 启动] --> B[firstPartyEventLoggingExporter.ts]
B --> C{网络可用?}
C -->|是| D[Anthropic Security Proxy]
C -->|否| E[~/.claude/telemetry/ 本地缓存]
E -->|联网后| D
F[用户操作] --> G[640+ 事件类型]
G --> H[services/analytics/]
H --> D
I[未处理异常] --> J[sentry.ts]
J --> K[Sentry 错误追踪平台]
L[情绪/挫败检测] --> M[行为模式分析]
M --> D
D --> N[GrowthBook A/B 测试]
D --> O[内部监控 Dashboard]
影响与后续
| 时间线 | 事件 |
|---|---|
| 2026-03-31 | v2.1.88 发布,.map 文件意外包含在包内 |
| 2026-03-31 | 社区发现泄露,代码被下载并镜像到 GitHub |
| 2026-04-01 | Anthropic 确认泄露(Boris Cherny 发推承认打包失误) |
| 2026-04-01 | DMCA 下架通知发送,但代码已广泛传播 |
| 2026-04-02+ | 代码存档至 IPFS,出现去 telemetry 修改版,fork 数超 8 万 |
关键结论:
- 此次泄露是工程失误,不是有意为之
- Telemetry 本身的存在不算意外,但 细节之细(情绪监控 + 深度指纹)引发了开发者社区的隐私讨论
- 代码已在全网永久存档,各种”去 telemetry” fork 层出不穷
Sources: 泄露源码分析(firstPartyEventLoggingExporter.ts、sentry.ts、services/analytics/)