# 遥测与隐私分析

> 基于 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 被哈希后发送用于服务端关联
