← 所有文章

Claude Code 源码泄露揭示了什么

From the guide: Claude Code Comprehensive Guide

2026年3月,一个Bun构建缺陷将源码映射文件随 Claude Code npm包一同发布。.map文件包含了完整可读的 TypeScript 源码——每个模块、每条注释、每个内部代号,一览无遗。1 Anthropic 迅速下架了该包,但社区已经提取并分析了全部内部实现。

这不是一篇”看看泄露了什么”的猎奇文章。我维护着互联网上最全面的 Claude Code 指南,每天在其之上运行84个钩子、43个技能和19个智能体。2 这次源码泄露回答了我此前数月通过行为观察逆向工程的诸多问题。以下是一份实践者的分析:源码揭示了 Claude Code 的真实运作方式,以及这对在其之上构建系统的人意味着什么。

摘要: 源码证实,自动模式在每次工具调用时运行一个独立的 Sonnet 4.6 分类器(yoloClassifier.ts);Bash安全机制包含23项编号检查,暗示背后有真实的漏洞利用事件(bashSecurity.ts);提示缓存追踪14个中断向量并采用”粘性锁存”机制;多智能体协调完全通过系统提示指令实现;挫折检测使用正则表达式而非 LLM 推理。指南的底层揭秘章节涵盖了对工具链构建者的启示,本文则完整剖析其架构全貌。

核心要点

  • 工具链构建者: 自动模式每次工具调用消耗一次分类器推理。在自主工作流的成本模型中务必将此纳入考量。您的 PreToolUse 钩子是对内置23项Bash验证的补充,而非替代。
  • 高级用户: 提示缓存极为脆弱——14个向量均可导致缓存失效。在会话期间保持CLAUDE.md稳定。如果遭遇压缩循环,系统会在3次失败后停止(在引入断路器之前,每天浪费约25万次 API 调用)。
  • 安全研究者: Bash安全模块的深度(2,592行代码、Zsh专属防御)表明背后有真实的攻击尝试。每项编号检查都有其来历。

1. 自动模式分类器

内部命名为yoloClassifier.ts的文件长达1,495行。3 它实现了”自动模式”权限系统——即判断每次工具调用应允许、阻止还是询问用户的分类器。

核心发现:自动模式并非提示指令,而是一次独立的模型调用。每次工具调用都由一个 Sonnet 4.6 分类器进行评估,判断该操作是否符合用户声明的意图,而非仅仅判断命令本身是否”安全”。这意味着自动模式每次工具调用都会增加一次分类器推理——实实在在的延迟和成本。

Claude Code 内部暴露了五种权限模式:1

模式 行为
default 写入、Bash、MCP 操作前询问用户
acceptEdits 自动批准文件编辑,Bash操作仍需询问
dontAsk 无需确认,批准所有操作
bypassPermissions 跳过所有检查(--dangerously-skip-permissions
auto 基于分类器的逐操作决策

自动模式的断路器与 Anthropic 公开文档中描述的一致:连续3次或累计20次阻止后切换为手动模式。4 源码证实这是硬性限制,而非柔性建议。

2. Bash安全机制:23项检查,真实事件

Bash验证模块(bashSecurity.ts)共2,592行,包含23项编号安全检查。1 这种深度令人瞩目——每一项检查背后都暗示着一次真实的安全事件。

# 攻击向量 防御措施
1-3 Zsh =cmd 扩展 阻止 =curl=wget=bash 模式
4-6 zmodload 入口 阻止18个可加载内核模块的Zsh内置命令
7-9 Heredoc注入 逐行内容匹配,检测注入载荷
10-12 ANSI-C引号($'\x41' 检测混淆命令的模式匹配
13-15 进程替换(<()>() 在不受信上下文中阻止
16-18 Unicode零宽空格 检测不可见字符注入
19-21 ztcp 数据外泄 阻止Zsh网络原语
22-23 组合攻击 跨多个向量的交叉验证

Zsh专属防御尤为值得关注。大多数安全工具以Bash为目标,而 Claude Code 在macOS上运行于Zsh(自Catalina起的默认Shell)。源码显示 Anthropic 发现了Zsh扩展语义所特有的攻击向量。例如=cmd扩展——这是Zsh的一个特性,会将=curl替换为curl的完整路径,从而绕过朴素的命令黑名单。

对于钩子构建者:您的PreToolUse钩子在这23项检查之后运行。您添加的是第二道防线,而非唯一的防线。内置检查处理的是应用层钩子难以捕获的Shell级攻击。

3. 反蒸馏防御

源码揭示了针对训练数据提取的主动防御机制:1

虚假工具注入。ANTI_DISTILLATION_CC标志启用时,Claude Code 会向对话中注入诱饵工具定义。这些虚假工具会污染从会话中采集的任何训练数据——在此数据上训练的模型将学到错误的工具模式。

连接文本摘要。 第二道防线缓存工具调用之间的助手文本,返回加密摘要而非原始文本。这使得对话记录对蒸馏毫无用处,同时不影响用户体验。

两种防御都有已知的绕过方式。中间人代理、环境变量覆盖或第三方 API 提供商均可规避。1 这些防御是减速带,而非铜墙铁壁——它们提高了蒸馏成本,但无法从根本上阻止。

4. 隐身模式

undercover.ts约90行,有一个值得注意的特性:没有强制关闭开关。1

该模块隐藏内部代号——“Capybara”、”Tengu”——以及Slack频道、内部代码仓库和其他 Anthropic 基础设施引用。当模型生成的文本包含代号时,隐身模块会在用户看到之前将其改写。

“无法强制关闭”的设计意味着它在所有上下文中运行,包括 Anthropic 员工使用 Claude Code 时。源码还揭示,Anthropic 员工的AI辅助提交在其开源贡献中不显示AI署名——隐身模块会剥除这些标记。

5. 挫折检测

userPromptKeywords.ts通过正则表达式模式匹配脏话来检测用户挫折感。1 这比 LLM 推理调用更快、更省——正则匹配在微秒级完成,而模型调用需要数秒。

触发后,Claude 会调整行为:更谨慎、更明确、更谦逊。如果您曾注意到在表达不满后 Claude 突然变得更加小心翼翼,这就是背后的机制。这种行为转变并非模型的涌现特性,而是工程化地写入了工具链。

6. 提示缓存架构

promptCacheBreakDetection.ts追踪14个不同的缓存中断向量,并采用”粘性锁存”机制。3 粘性锁存意味着,一旦发生缓存中断操作,系统不会尝试恢复缓存——在剩余会话期间缓存将持续失效。

对日常用户的实际影响:

  • 重新排列CLAUDE.md中的章节会导致缓存失效
  • 会话中途切换扩展思维模式会导致缓存失效
  • 更改 MCP 服务器配置会导致缓存失效
  • 添加或删除规则文件会导致缓存失效

这14个向量解释了许多高级用户注意到的现象:会话起初运行流畅,随后逐渐变慢。每次配置更改都会累积缓存中断。”粘性锁存”设计意味着即使撤回更改也无法恢复——该会话的缓存已不可逆地失效。

最佳实践: 在开始会话前设定好CLAUDE.md、规则文件和 MCP 配置,会话期间不要修改。

7. 自动压缩断路器

源码注释记录了此前问题的规模:1

“1,279个会话出现了50次以上的连续自动压缩失败(单个会话最高达3,272次),每天浪费约25万次 API 调用。”

修复方案:MAX_CONSECUTIVE_AUTOCOMPACT_FAILURES = 3。连续3次压缩失败后,系统停止自动压缩并抛出错误,而非继续默默消耗Token。

在此断路器引入之前,陷入压缩循环的会话会无限重试——每次重试都消耗压缩提示和响应的Token。在规模化运行下,每天25万次无效 API 调用意味着巨大的基础设施成本。修复仅需三行代码,却每天节省数百万Token。

如果您遇到反复出现的”压缩失败”错误,原因就在于此。系统在保护您免于陷入无限循环,而非出现了故障。

8. 协调器模式:以提示为架构

多智能体协调(coordinatorMode.ts)完全通过系统提示指令实现,而非代码级编排。3 编排器模型接收一个描述如何委派、聚合和综合的提示。下级智能体并非特殊进程——它们是配有不同系统提示的 Claude 实例。

这验证了实践者们独立构建的”以提示为架构”模式。我在《解剖一只利爪》中描述的钩子系统采用了相同方法:调度器、技能和智能体通过提示指令编排,而非代码级控制流。

协调器提示中有一条指令尤为突出:

“永远不要写’根据你的调查结果’——这类措辞将理解工作推卸给了工作者,而非亲自完成。”

这是编码在编排提示中的质量关卡。协调器必须综合提炼,而非简单转发。同样的原则适用于任何多智能体系统:如果编排器只是在专家之间传递消息,那它就没有创造价值。

9. KAIROS:未发布的自主智能体

源码包含对一个名为KAIROS的未发布功能的引用——一个具备持久记忆的自主智能体。1

关键组件: - 用于夜间记忆蒸馏的/dream技能 - 每日追加写入的日志 - GitHub Webhook用于仓库感知上下文 - 带有5分钟定时刷新的后台守护进程 - 阻止激活的功能开关

KAIROS似乎是 Anthropic 对持久化、始终在线智能体助手的解答。/dream技能尤为引人注目——它暗示模型会在空闲时处理和整合记忆,类似于人类在睡眠中进行记忆巩固的过程。

该功能已设置开关且尚未发布。但它在源码中的存在预示了发展方向:Claude Code 正从基于会话的工具向持久化、后台感知的智能体演进。

10. 伙伴宠物系统

最出人意料的发现之一:Claude Code 包含一个伙伴宠物系统。1

宠物是确定性生成的——基于用户ID的哈希值,使用Mulberry32算法,源码中描述为”用来挑鸭子足够了”。每只宠物有5项属性(调试力、耐心值、混沌度、智慧值、毒舌度)和一个稀有度等级:

稀有度 概率
普通 60%
非凡 25%
稀有 10%
史诗 4%
传说 1%

宠物以5×12的ASCII精灵图呈现,带有3帧动画。物种代号在源码中以十六进制编码,因为其中一个与未发布的模型名称冲突。

这不是一个玩笑功能,而是一个留存机制。确定性分配意味着您的宠物始终不变,由此产生情感依附。稀有度系统创造了社交货币。ASCII渲染意味着零性能开销。这是一个精心设计的参与系统,隐藏在开发者工具之中。

11. Fork炸弹

一个社区事件揭示了钩子系统的风险。5 一位开发者创建了一个SessionStart钩子,该钩子会生成2个 Claude Code 实例。每个生成的实例又触发同一个钩子,形成指数级增长:1 → 2 → 4 → 8 → 16 → 2^N。

到第二天早上,数百个 Claude Code 实例同时运行。系统免于天价 API 账单,靠的是一个颇为讽刺的机制:每个实例的内存消耗(Bun → React → TUI)导致机器在账单失控之前就已锁死。

钩子构建者须引以为戒:SessionStart钩子必须具备幂等性。如果您的钩子会生成进程,这些进程不能再次触发同一个钩子。一个守卫变量、PID文件或环境标志即可防止递归。


这意味着什么

源码泄露证实了实践者们从行为中推断出的结论:Claude Code 并非 API 调用之上的一层薄封装。它是一个成熟的工程系统,包含安全层、性能优化、行为调节,以及预示产品路线图的未发布功能。

对工具链构建者而言,关键启示已在指南的底层揭秘章节中涵盖。对其他人而言,这次源码泄露提供了罕见的窗口,得以窥见一个生产级AI工具的真实运作方式——不是市场宣传中的描述,而是代码中的实现。

最重要的发现同时也是最朴素的:这个系统远比表面看起来复杂,而这种复杂性的存在事出有因。23项Bash安全检查的存在,是因为发现了23个攻击向量。自动压缩断路器的存在,是因为每天浪费了25万次 API 调用。隐身模块的存在,是因为代号会泄露。每一行防御代码背后都有一个故事。


参考来源

常见问题

Claude Code 源码还能获取吗?

不能。Anthropic 在源码映射被发现后迅速下架了受影响的npm包版本。本文分析基于社区在源码被移除前留存的文档。

源码泄露是否影响 Claude Code 的安全性?

与安全相关的发现(Bash验证、权限系统)描述的是防御机制,而非漏洞。了解Bash安全检查的工作原理并不会使其更容易被绕过——这些检查是确定性的,不依赖于信息不对称。

我是否需要根据这些发现调整 Claude Code 的使用方式?

最具实操价值的发现是提示缓存的脆弱性。如果在会话期间修改CLAUDE.md、规则文件或 MCP 配置,就会导致提示缓存失效。建议在开始会话前完成所有配置。

KAIROS是什么?

在源码中发现的一个未发布的自主智能体功能。它包含持久记忆、夜间蒸馏和后台处理。目前受功能开关控制,尚未对用户开放。


  1. Claude Code Source Analysis: Bun Source Map Leak. March 2026. Full readable source exposed via .map files in the npm package due to a known Bun build bug. 

  2. Anatomy of a Claw: 84 Hooks as an Orchestration Layer. Blake Crosley, February 2026. 

  3. Claude Code Source Deep Dive: Architecture Internals. March 2026. Technical analysis of coordinator mode, prompt cache detection, and anti-distillation defenses. 

  4. Claude Code Auto Mode Documentation. Auto Mode architecture: classifier-based permission system, circuit breaker thresholds. 

  5. Claude Code Fork Bomb Incident. March 2026. SessionStart hook exponential spawning, saved by memory exhaustion. 

相关文章

The CLI Thesis

Three top HN Claude Code threads converge on one conclusion: CLI-first architecture is cheaper, faster, and more composa…

15 分钟阅读

The Fork Bomb Saved Us

The LiteLLM attacker made one implementation mistake. That mistake was the only reason 47,000 installs got caught in 46 …

6 分钟阅读

The Ralph Loop: How I Run Autonomous AI Agents Overnight

I built an autonomous agent system with stop hooks, spawn budgets, and filesystem memory. Here are the failures and what…

8 分钟阅读