出大事了!!

安全研究员 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/                  # 原生模块源码存根

整体架构:

五个关键主题:

  1. 远程监控与隐私:存在双层分析管道(发给 Anthropic + 发给 Datadog),收集环境指纹、进程指标等数据。关键问题是:没有面向用户的退出开关

  2. 隐藏功能与模型代号:发现了内部的动物代号体系(Capybara、Tengu、Fennec→Opus 4.6、Numbat 等),以及用随机词对掩盖用途的 Feature Flag 系统。内部用户(Anthropic 员工)与外部用户获得的模型提示词存在差异。

  3. 卧底模式:当 Anthropic 员工在公开代码仓库中使用 Claude Code 时,会自动进入”卧底模式”。模型被指令”不要暴露你的掩护身份”,会剥离所有 AI 生成痕迹,使代码提交看起来像人类编写。此模式没有强制关闭选项

  4. 远程控制与紧急开关:客户端每小时轮询远程设置接口。对于危险变更,会弹出阻塞对话框——用户如果拒绝,程序会强制退出。存在 6 个以上的远程”紧急开关”,Anthropic 可以在未经用户明确同意的情况下改变任何用户行为。

  5. 未来路线图:确认了下一代模型代号 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 都用 tengu_* 前缀

Capybara(水豚)

Sonnet 系列模型,当前版本 v8

代码里有 capybara-v2-fast[1m],还有针对 v8 行为问题的补丁

Fennec(耳廓狐)

Opus 4.6 的前代

迁移逻辑:fennec-latest → opus

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)的一些行为问题:

  1. 停止序列误触发

     — 大约 10% 概率,当 prompt 尾部出现 <functions> 标签时触发

  2. 空 tool_result 导致零输出

     — 需要注入 marker workaround 来解决

  3. 过度写注释

     — 需要专门的反注释 prompt 补丁

  4. 高虚假声明率

     — v8 是 29-30%,而 v4 是 16.7%

  5. 验证不足

     — 需要 “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 能在空闲时间自主处理和将记忆固化。

就像人类睡觉时会整理白天的记忆一样。

总结:三大方向

  1. 新模型

    Numbat(下一代)、Opus 4.7、Sonnet 4.8 开发中

  2. 自主Agent

    KAIROS 模式 — 无人值守运行、主动行动、推送通知

  3. 多模态

    语音输入就绪、浏览器工具待上线、工作流自动化即将到来

Claude Code 正在从一个编程助手进化为一个全天候自主开发Agent

-END-


推荐阅读:

实测两款预测型大模型:Echo 押对了交易,MiroThinker 提前15天算准金价走势

AI 不是在抢我的工作:Harness 正在重构软件工程|让 Agent 完成任何复杂任务

效率提升 10 倍|OpenClaw + OpenCLI 实战体验

谷歌提示工程白皮书|Google Prompt Engineering White-paper

Skill设计白皮书:Anthropic官方推荐的构建方法与避坑指南

让你的OpenClaw替你打工:从0到1跑通小红书运营全流程(实战教程)

给 OpenClaw 接入10000+工具和数据,为你盯盘,给出独家策略

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐