Claude Code Wiki
首页 深入解析 开发实践

Telemetry:数据采集体系与源码泄露事件(2026-03-31)

高级 开发实践

背景:源代码泄露事件(2026-03-31)

Anthropic 在发布 @anthropic-ai/claude-code v2.1.88 npm 包时,因打包失误(Bun 构建工具默认生成 source map,且未被 .npmignorepackage.jsonfiles 字段排除),意外将 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.tssentry.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
appVersionClaude 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)
  • userIdemailsessionId
  • platform、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/configuser.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-31v2.1.88 发布,.map 文件意外包含在包内
2026-03-31社区发现泄露,代码被下载并镜像到 GitHub
2026-04-01Anthropic 确认泄露(Boris Cherny 发推承认打包失误)
2026-04-01DMCA 下架通知发送,但代码已广泛传播
2026-04-02+代码存档至 IPFS,出现去 telemetry 修改版,fork 数超 8 万

关键结论

  • 此次泄露是工程失误,不是有意为之
  • Telemetry 本身的存在不算意外,但 细节之细(情绪监控 + 深度指纹)引发了开发者社区的隐私讨论
  • 代码已在全网永久存档,各种”去 telemetry” fork 层出不穷

Sources: 泄露源码分析(firstPartyEventLoggingExporter.tssentry.tsservices/analytics/