Files
claude-code-source-code/docs/zh/01-遥测与隐私分析.md
2026-04-01 18:55:02 +08:00

3.2 KiB
Raw Permalink Blame History

遥测与隐私分析

基于网络公开资料与社区讨论整理的 Claude Code v2.1.88 分析报告。

概述

Claude Code 实现了双层分析管道,收集大量环境和使用元数据。虽然没有证据表明存在键盘记录或源代码窃取,但收集范围之广和无法完全退出的事实引发了合理的隐私担忧。

数据管道架构

第一方日志 (1P)

  • 端点: https://api.anthropic.com/api/event_logging/batch
  • 协议: OpenTelemetry + Protocol Buffers
  • 批量大小: 每批最多 200 个事件,每 10 秒刷新一次
  • 重试机制: 二次方退避,最多 8 次尝试,失败事件持久化到磁盘
  • 存储位置: ~/.claude/telemetry/

来源: src/services/analytics/firstPartyEventLoggingExporter.ts

第三方日志 (Datadog)

  • 端点: https://http-intake.logs.us5.datadoghq.com/api/v2/logs
  • 范围: 仅限 64 种预批准事件类型
  • Token: pubbbf48e6d78dae54bceaa4acf463299bf

来源: src/services/analytics/datadog.ts

收集了什么

环境指纹

每个事件都携带以下元数据 (src/services/analytics/metadata.ts:417-452)

- platform, platformRaw, arch, nodeVersion
- 终端类型
- 已安装的包管理器和运行时
- CI/CD 检测、GitHub Actions 元数据
- WSL 版本、Linux 发行版、内核版本
- 版本控制系统类型
- Claude Code 版本和构建时间
- 部署环境

进程指标 (metadata.ts:457-467)

- 运行时间、rss、heapTotal、heapUsed
- CPU 使用率和百分比
- 内存占用详情

用户追踪 (metadata.ts:472-496)

- 正在使用的模型
- 会话 ID、用户 ID、设备 ID
- 账户 UUID、组织 UUID
- 订阅等级 (max, pro, enterprise, team)
- 仓库远程 URL 哈希 (SHA256 前 16 位)
- 代理类型、团队名、父会话 ID

工具输入日志

默认截断工具输入:

- 字符串: 512 字符处截断,显示 128 + 省略号
- JSON: 限制 4,096 字符
- 数组: 最多 20 项
- 嵌套对象: 最多 2 层

然而,当设置 OTEL_LOG_TOOL_DETAILS=1 时,完整工具输入会被记录

文件扩展名追踪

涉及 rm, mv, cp, touch, mkdir, chmod, chown, cat, head, tail, sort, stat, diff, wc, grep, rg, sed 的 Bash 命令,其文件参数的扩展名会被提取并记录。

无法退出的问题

第一方日志管道无法被关闭(对于直接使用 Anthropic API 的用户)。

isAnalyticsDisabled() 仅在以下情况返回 true

  • 测试环境
  • 第三方云提供商 (Bedrock, Vertex)
  • 全局遥测退出(设置界面未暴露此选项)

没有面向用户的设置可以禁用第一方事件日志。

GrowthBook A/B 测试

用户在不知情的情况下被分配到实验组。系统发送的用户属性包括:

- id, sessionId, deviceID
- platform, organizationUUID, subscriptionType

关键结论

  1. 体量: 每个会话收集数百个事件
  2. 无法退出: 直接 API 用户无法禁用第一方日志
  3. 持久化: 失败事件保存到磁盘并积极重试
  4. 第三方共享: 数据发送到 Datadog
  5. 工具详情后门: OTEL_LOG_TOOL_DETAILS=1 启用完整输入记录
  6. 仓库指纹: 仓库 URL 被哈希后发送用于服务端关联