Claude Code 源码泄露全貌,51万行代码里,藏着Anthropic的技术底牌与意外彩蛋
2026年3月31日AI圈炸开了锅。Anthropic旗下的明星工具Claude Code完整源码意外泄露成为整个技术圈最热门的话题。作为一名深耕AI Agent领域的工程师同时也是Claude Code的重度用户我看到消息的第一时间就冲去下载了源码包花了整整一天时间逐行通读了这51万行TypeScript代码、1903个文件。网上很快就有了各种解读大多是复述目录结构、罗列技术栈没什么新意。我不想跟着凑热闹只想把自己读完源码后那些让我眼前一亮、忍不住感慨“原来这么设计”的细节分享出来。这些细节里既有Anthropic顶尖的工程思维也有程序员藏在严谨代码里的小浪漫更有一些让人啼笑皆非的泄露真相。先说说这次泄露的起因离谱到让人难以置信。有人在npm上的anthropic-ai/claude-code包中发现了一个残留的.map文件这个文件里藏着一个指向Anthropic R2存储桶的下载链接关键是这个链接没有任何鉴权措施任何人点进去都能直接下载完整源码。解压之后51万行代码毫无保留地摊在眼前涵盖了Claude Code的所有核心逻辑、工具模块甚至还有大量未公开的隐藏功能。截至目前Anthropic官方还没有对此事作出任何回应但源码已经在开发者社区广泛传播相当于被动完成了一次“开源”也让外界第一次得以窥见Claude Code的底层架构究竟有多强大。一、技术栈看似常规实则藏着对复杂场景的精准适配很多人读完源码的第一反应是Claude Code的技术栈并不算特别惊艳Bun TypeScript React Ink。这几个技术都是行业内比较常用的尤其是Ink早在2017年就已经出现像Gatsby CLI、Prisma CLI这些工具都用它来构建终端UITUI。但真正厉害的不是技术本身而是Anthropic对技术的适配能力把常规技术用在了极致复杂的场景里。用过Claude Code的人都知道它和普通的CLI工具完全不一样。普通CLI工具大多是单任务执行输入命令、返回结果就结束了但Claude Code要处理的场景复杂得多多个Agent并行工作、流式输出实时反馈、工具执行过程中用户可以随时中断、权限弹窗实时交互等等。这些场景带来的状态管理复杂度可不是简单手搓代码就能搞定的。而React的加入恰好解决了这个痛点。React的组件化和状态管理能力能完美应对多Agent并行、多交互场景下的状态同步问题让整个终端UI的渲染更流畅、更稳定。Bun则作为运行时提供了比Node.js更快的启动速度和更好的性能搭配TypeScript的类型校验既能保证开发效率又能减少代码错误。看似常规的技术组合实则是Anthropic对复杂场景的精准判断没有盲目追求小众技术而是选择最适合自己需求的工具这也是很多工程师值得学习的一点技术没有高低之分能解决问题的才是最好的。二、核心逻辑一个while(true)循环撑起整个Agent的“大脑”读完源码后我最意外的发现是Claude Code整个Agent的核心逻辑竟然是一个简单的while(true)循环。很多人可能觉得这么复杂的工具核心逻辑肯定高深莫测没想到Anthropic用最朴素的代码实现了最强大的功能。这个核心逻辑藏在src/query.ts文件里整个文件只有1729行却承担着Claude Code“大脑”的角色。很多人会误把QueryEngine.ts当成核心其实那个只是外层的会话管理真正负责决策、执行、反馈的就是这个query.ts里的queryLoop函数。这个函数的逻辑其实很简单就是一个无限循环直到满足退出条件才会停止。具体来说循环里主要做了五件事首先是预处理裁剪历史对话、压缩上下文、预取记忆和技能然后调用Claude API并且是流式调用保证实时反馈接着一边接收API返回的流一边检测是否有工具调用的指令如果有工具调用就检查用户权限执行工具再把执行结果塞回对话消息中重新进入循环如果没有工具调用就退出循环把结果返回给用户。看似简单的循环里面却藏着无数细节。比如预处理阶段的上下文压缩、工具调用的权限校验、流式反馈的节奏控制每一个细节都决定了Claude Code的使用体验。这也让我明白优秀的工程设计从来不是靠复杂的语法和高深的算法而是把简单的逻辑做到极致用细节堆起体验的护城河。Anthropic的工程师没有追求代码的“炫技”而是用最简洁的逻辑实现了最稳定、最高效的功能这一点值得所有开发者深思。三、上下文管理四把“手术刀”拒绝“一刀切”的粗糙用过Claude Code的人都有一个感受长对话到后面它会自动“压缩”上下文避免Token超标同时也能保证对话的连贯性。我之前一直以为它的压缩方式就是简单地把早期对话做个摘要读完源码才发现事情远比我想象的复杂Anthropic用了四种不同粒度的压缩机制就像四把精准的手术刀根据不同的信息类型采取不同的处理方式而不是“一刀切”的粗糙压缩。这四种压缩机制按优先级依次执行前面的机制能搞定的就不会触发后面的既保证了Token的高效利用又能最大程度保留有用信息。第一把手术刀是HISTORY_SNIP也是最精细的一种。它不会做任何摘要而是直接删除那些没用的消息。比如工具返回了500行搜索结果但模型只用了其中3行剩下的497行都是纯噪声留着只会浪费Token摘要它也是浪费时间所以直接删除是最划算的选择。这种方式看似粗暴却能最大程度减少无效信息的干扰提升模型的处理效率。第二把手术刀是Microcompact这种方式更巧妙它利用API层的cache_deleted_input_tokens能力在缓存层面做编辑。它不会修改消息的内容而是告诉API“这些Token你缓存里有但别用了”相当于在不改变对话内容的前提下悄悄降低Token数。这种方式的好处是既能节省Token又能保留对话的完整性用户看不到任何变化体验非常流畅。第三把手术刀是CONTEXT_COLLAPSE它会把旧的对话轮次“归档”成摘要并且维护一个类似git log的结构每次新查询时会重新“重放”这个结构。和后面要提到的Autocompact相比它最大的优势是保留了对话的结构哪一轮做了什么事、得出了什么结论都清晰可见而不是把所有内容糊在一起变成一段杂乱无章的摘要。这种方式适合那些需要保留对话逻辑的场景既能压缩Token又能保证对话的连贯性。第四把手术刀是Autocompact也是最后的兜底方案。如果前面三种方式都无法满足Token控制的需求就会调用一次模型把整个历史对话压缩成一段话。这种方式虽然简单直接但因为会丢失大量细节所以只有在万不得已的情况下才会触发。实际上在日常使用中前面三种方式已经能处理大部分场景Autocompact几乎很少会被用到。读完这段代码我最大的感触是做Agent的上下文管理不能只有一种策略。工具的中间输出可能几轮之后就没用了但用户描述的需求背景可能整个会话都需要保留。不同信息的“保质期”不一样处理方式也应该不一样。Anthropic的这种设计不仅体现了对细节的极致追求更体现了对用户需求的深刻理解用户需要的不是简单的Token压缩而是在不影响体验的前提下保证对话的连贯性和高效性。这一点也是很多AI Agent开发者容易忽略的地方。四、流式工具并行把等待时间“藏”起来提升体验的关键用过其他AI Agent工具的人可能都会有一个困扰模型需要先说完所有内容才能判断是否需要调用工具然后再执行工具中间会有一段明显的等待时间体验很不流畅。但Claude Code不一样它的工具执行响应速度非常快很多人以为是Anthropic的服务器性能好读完源码我才知道核心原因是它采用了“流式工具并行”的设计模型还在说话工具就已经开始干活了。这个设计的核心的是StreamingToolExecutor.ts文件里的StreamingToolExecutor类。这个类有两个核心方法addTool和getRemainingResults。addTool方法的作用是只要模型流式吐出一个工具调用的指令就立刻启动工具执行不用等模型把所有内容都输出完getRemainingResults方法则负责处理工具执行的结果保证并发安全的工具可以同时运行需要独占的工具比如写文件、执行bash命令则排队执行并且结果会按接收顺序排队不会出现乱序的情况。具体来说每个工具都有一个isConcurrencySafe标记用来判断这个工具是否可以并发执行。像读文件、grep这种只读操作不会影响其他操作就可以并行运行而写文件、bash这种需要独占资源的操作就只能排队执行避免出现冲突。这样一来工具执行的延迟就被藏在了模型推理的时间里用户几乎感知不到等待体验自然就提升了。举个例子当你让Claude Code分析一个大型项目的代码时模型在流式输出分析思路的同时就会启动grep工具搜索相关的代码片段等模型分析完思路工具的搜索结果也差不多出来了直接就能结合结果继续分析。这种设计不仅提升了响应速度也让整个交互过程更流畅、更自然这也是Claude Code能脱颖而出的重要原因之一。五、细节见真章那些藏在代码里的“小心思”除了核心逻辑和架构设计源码里还有很多细节让我看到了Anthropic工程师的严谨和可爱。这些细节虽然不起眼但却能反映出一个团队的工程文化也正是这些细节让Claude Code变得更优秀、更人性化。第一个细节是“撞到输出上限也不认输”。在代码里有一个常量MAX_OUTPUT_TOKENS_RECOVERY_LIMIT值为3。意思是如果模型输出撞到了max_output_tokens的上限不会直接报错而是“扣留”错误消息悄悄重试最多重试3次整个过程对用户完全无感。更有意思的是这段代码上面有一段注释模仿中世纪巫师的口吻写着“好好记住这些规则年轻的巫师。不然你就等着花一整天调试和薅头发吧。” 看到这段注释我忍不住笑了能看出维护这段代码的工程师肯定被这个问题坑过很多次才会写下这样一句调侃又无奈的注释。这也让我觉得再严谨的工程代码也藏着程序员的小情绪变得更有温度。第二个细节是工具系统的“零继承”设计。做过Agent框架开发的人大多习惯写一个BaseTool基类然后让所有工具都继承这个基类这样能减少重复代码。但Claude Code完全没有这么做它的40多个工具全是纯函数式的buildTool()工厂函数没有任何继承关系。每个工具都是完全自包含的schema校验、权限管理、执行逻辑、UI渲染、上下文压缩摘要所有相关代码都在一个文件里。而且没有全局注册表每个会话会动态组装工具池静态工具、MCP工具、Agent定义的工具都能混在一起使用灵活性非常高。其中最复杂的是BashTool单个文件就有1143行它做的远不止简单的exec(command)功能强大到让人惊叹。BashTool会自动解析命令把命令分类成搜索、读取、写入三种类型用于权限匹配在macOS上它会走sandbox-exec沙箱在Linux上则走seccomp保证命令执行的安全性如果命令执行时间超过15秒会自动转后台运行不影响用户操作如果输出内容太大会把内容存到磁盘只给模型一个文件路径引用节省Token甚至内置了sed命令解析器当检测到sed -i命令时终端UI会从“Bash”变成文件编辑样式更直观对于ls git push这种复合命令会拆开逐段判定安全性避免出现风险操作。可以说一个BashTool的复杂度就顶得上很多小型Agent框架的全部。这种“零继承”的设计虽然增加了一定的代码量但却提升了工具的灵活性和可维护性每个工具都可以独立开发、独立更新不会影响其他工具这也是Anthropic工程思维的体现。第三个细节是隐私保护的巧思。在源码里埋点数据的类型名非常长AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS。这个类型名本身就是一个提醒提醒开发者“你确认过这不是代码或文件路径了吗”避免不小心把敏感信息埋点上报。这种方式虽然简单但却非常有效不用额外写注释也不用做复杂的校验仅凭类型名就能起到提醒作用能看出Anthropic对用户隐私的重视。第四个细节是冷启动优化。Claude Code的–version路径做到了零import直接读取编译时内联的版本号一个模块都不加载就退出。其他子命令则走独立的import()路径只有最终进入主循环才会加载完整的React应用。要知道这个React应用有800KB通过这种按需加载的方式不用的功能就不加载极大地提升了启动速度这也是Claude Code启动比其他同类工具更快的原因之一。六、Feature Flag最干净的功能门控却栽在了一个小疏忽上在源码里我发现了Anthropic最干净的功能门控设计双层Feature Flag分为编译时和运行时既能保证功能的灵活切换又能兼顾安全性。但讽刺的是他们在二进制层面做了那么多防护最后却栽在了一个忘删的.map文件上让人唏嘘不已。首先是编译时的Feature Flag利用Bun的feature()编译时宏实现。比如代码里的voiceModule会通过feature(‘VOICE_MODE’)来判断是否加载语音模块如果为false就会直接返回null而且在构建时false的分支会被直接删除不是“运行时不执行”而是从二进制文件里物理消失连字符串字面量都不剩。为什么要这么做因为安全研究员会反编译二进制文件寻找隐藏功能。如果用运行时的Flag即使功能被关闭字符串还会留在二进制文件里很容易被发现。而编译时的DCE死代码消除能让不需要的功能彻底“消失”真正做到安全防护。我在源码里搜到了二十多个编译时Flag每一个都对应一个未发布的功能比如VOICE_MODE语音模式、BRIDGE_MODE桥接模式、DAEMON守护进程、KAIROS持久进程等等这些功能都还没公开却已经在源码里完成了大部分开发。然后是运行时的Feature Flag主要用于灰度发布和紧急kill switch采用GrowthBook A/B测试框架实现。代码里的checkStatsigFeatureGate_CACHED_MAY_BE_STALE函数会检查对应的功能开关是否开启所有开关的名称都以tengu_开头而tengu天狗就是Claude Code项目的内部代号。这种设计的好处是能快速灰度发布新功能一旦出现问题也能紧急关闭开关而且从磁盘缓存读取开关状态接受脏读不会阻塞启动保证了工具的稳定性。更让人意外的是Anthropic还把消融实验的方法论搬到了产品工程上。源码里有一个Flag叫ABLATION_BASELINE启用后会一次性关掉思考模式、上下文压缩、自动记忆、后台任务等多个功能。消融实验是ML研究中常用的方法逐个关掉组件看对最终效果的影响但把这种方法用到工业代码里我还是第一次见。这意味着Anthropic每上线一个新功能都不会凭感觉判断而是会通过对照实验量化功能的价值只有数据证明有用才会正式上线。这种“用科学方法做产品”的思路比任何单点技术都更值得行业学习。但最讽刺的是Anthropic在二进制层面做了这么多防护比如编译时DCE、物种名hex编码、excluded-strings黑名单等等却因为一个小小的疏忽忘删了npm包中的.map文件导致整个源码泄露。安全这件事从来都没有“差不多”100个环节做对99个漏一个就等于没做这也给所有发npm包的开发者敲响了警钟。七、隐藏功能未发布的黑科技与意外彩蛋除了核心功能和工程细节源码里还藏着很多未发布的隐藏功能以及一个让人意想不到的彩蛋这些内容让我在枯燥的读码过程中收获了很多惊喜。第一个隐藏功能是Voice Mode语音模式代号Amber Quartz。在src/voice/目录下有完整的语音模式代码从注释来看这个功能已经开发完成只是还没公开。它有一个特点只支持Claude.ai OAuth认证API key、Bedrock、Vertex都无法使用而且走专门的voice_stream端点还有紧急kill switchtengu_amber_quartz_disabled一旦出现问题能快速关闭语音模式。不难猜测Anthropic可能是在打磨语音交互的体验未来可能会正式推出让用户可以通过语音和Claude Code交互进一步提升使用便捷性。第二个隐藏功能是Bridge Mode桥接模式这个功能的设计非常有想象力。src/bridge/目录下有31个文件实现了一个完整的远程控制系统只要运行claude remote-control命令你的本地环境就会变成一个可以被claude.ai网页版远程操控的“桥接环境”。这个功能最多支持32个并发会话采用JWT认证加可信设备机制企业管理员可以通过策略禁用安全性有保障。它的核心作用应该是解决用户在网页版和本地终端之间来回切换的麻烦让claude.ai网页版能直接操作本地的开发环境不用再手动复制粘贴代码极大地提升开发效率。对于经常用Claude Code写代码、调试程序的开发者来说这个功能一旦上线绝对是“刚需”。第三个隐藏功能也是最让人意外的彩蛋Buddy终端里的电子宠物系统。我从来没想过在一个51万行的严肃工程项目里会藏着一套完整的抽卡养宠系统而且这个系统没有用Feature Flag门控已经悄悄内置在每个用户的二进制文件里只是大家一直没发现。这套宠物系统非常完整包含18种宠物比如鸭子、鹅、blob、猫、龙、章鱼、水豚等等还有5级稀有度普通60%、 uncommon25%、稀有10%、史诗4%、传说1%甚至还有1%概率的闪光变体。每个宠物还有RPG式的属性包括DEBUGGING调试、PATIENCE耐心、CHAOS混乱、WISDOM智慧、SNARK毒舌属性值通过Mulberry32伪随机数生成器从用户ID确定性计算每个用户绑定一只不能刷宠物相当于专属电子宠物。更有趣的是宠物还有帽子系统包括皇冠、礼帽、螺旋桨帽、光环、巫师帽、豆豆帽、头顶小鸭子等多种样式还有不同的眼睛样式可以说是细节拉满。很难想象Anthropic的工程师在开发严谨的AI工具之余还会花时间做这样一个可爱的宠物系统或许这就是程序员的浪漫吧在枯燥的代码世界里给自己和用户留一份小惊喜。八、宠物名字里的秘密藏着下一代旗舰模型的代号如果只是宠物系统或许只能算是一个有趣的彩蛋但我在源码里发现宠物的名字里还藏着一个巨大的秘密其中一个宠物名竟然是Anthropic未公开模型的内部代号。在源码里18个宠物的名字没有一个用的是明文全部用hex编码表示。比如鸭子duck用c(0x64,0x75,0x63,0x6b)表示鹅goose用c(0x67,0x6f,0x6f,0x73,0x65)表示水豚capybara用c(0x63,0x61,0x70,0x79,0x62,0x61,0x72,0x61)表示。代码注释里写着“One species name collides with a model-codename canary in excluded-strings.txt.”意思是“有一个物种名和excluded-strings.txt里的模型代号哨兵冲突了”。这就意味着其中一个宠物的名字恰好是Anthropic某个未公开模型的内部代号而构建系统会搜索二进制产物里有没有黑名单里的字符串所以工程师只能用hex编码绕过检测避免模型代号泄露。到底是哪一个宠物呢这就要结合三天前的另一次泄露来看了。3月28日也就是这次源码泄露的三天前Anthropic还发生了一次泄露事件CMS数据库权限没关被Fortune记者翻出了近3000份内部文件其中提到了一个从未公开的模型Claude Mythos内部代号Capybara水豚定位在Opus之上是全新的旗舰模型。而在Claude Code源码的prompts.ts文件里我找到了大量[MODEL LAUNCH]注释这些注释是给新模型发布准备的TODO清单里面反复出现Capybara这个名字。比如“Update comment writing for Capybara删除或软化注释直到模型默认不再过度注释”“False-claims mitigation for Capybara v8Capybara v8的虚假声明率是29-30%而v4是16.7%”。这些TODO清单还没完成说明Capybara还没公开发布但在main.tsx里已经有capybara-fast、capybara-v2-fast[1m]这些模型别名说明Anthropic的内部员工已经在日常使用这个模型了。把这些信息拼在一起答案就很明显了宠物系统里的水豚capybara就是下一代旗舰模型Claude Mythos的内部代号因为和模型代号冲突所以才用hex编码隐藏。除此之外源码里还出现了另一个模型代号Numbat袋食蚁兽在注释里有一句“Remove this section when we launch numbat.”意思是“当我们发布numbat时删除这部分内容”。目前还不清楚Numbat和Capybara的关系可能是同一系列的不同版本也可能是定位不同的模型但可以确定的是这也是Anthropic正在研发的未公开模型。顺带一提源码里还泄露了一个内部数据Capybara v8的虚假声明率是29-30%比上一版v4的16.7%翻了快一倍。但Anthropic并没有回退版本而是选择在prompt层加指令修补这个问题让内部员工先当小白鼠验证修补效果。这种“先内测、再优化、后发布”的思路也体现了Anthropic的严谨。九、Skill系统与多Agent协调简单设计却高效实用除了上面提到的内容源码里的Skill系统和多Agent协调设计也让我深受启发。这两个设计都不算复杂但却非常高效实用体现了Anthropic“约定优于配置”的工程理念。首先是Skill系统它的设计非常简单Skills就是Markdown文件。只要在.claude/skills/目录下放.md文件在文件的YAML frontmatter里写清楚技能的描述、触发条件、允许使用的工具、使用的模型Claude Code在读取文件时就会自动加载这些技能不用显式注册。这种“约定优于配置”的设计和Rails框架的理念很像不用写复杂的配置文件也不用做繁琐的注册操作只要遵循约定就能实现功能。对于开发者来说这种设计非常友好想要添加新的技能只要新建一个Markdown文件填写相关信息就可以了极大地降低了扩展成本。然后是多Agent协调器它的设计意外地简单但却能高效解决多Agent并行的问题。在Coordinator模式下主Agent只有三个工具生成worker、给worker发消息、停止worker。而worker只能执行任务拿不到生成worker和发送消息的权限这样就避免了“套娃”的情况保证了整个系统的稳定性。后端支持三种协调方式tmux pane、in-process、remote开发者可以根据自己的需求选择合适的方式。这种简单的设计没有追求复杂的协调算法却能精准解决多Agent协作的核心问题既保证了灵活性又降低了维护成本值得很多AI Agent框架学习。十、泄露原因复盘一个小疏忽毁掉所有防护读完所有源码最让人唏嘘的就是这次泄露的原因非常简单却又非常致命。Anthropic在发布npm包时忘删了里面的.map文件这个.map文件里包含了一个指向Anthropic R2存储桶的下载链接而这个链接没有任何鉴权措施任何人都能直接下载完整的源码包。就是这样一个小小的疏忽让Anthropic在二进制层面做的所有防护都付诸东流。他们花了大量时间做编译时DCE、物种名hex编码、excluded-strings黑名单就是为了防止源码和隐藏功能泄露但最后却因为一个忘删的.map文件让51万行源码毫无保留地暴露在公众面前。这件事也给所有发npm包的开发者提了四个非常重要的提醒第一package.json的files字段一定要用白名单制只包含自己想发布的东西避免多余的文件被打包发布第二在CI流程里一定要加一步检查确认发布产物里没有.map文件、源码文件等敏感内容第三源码归档的URL一定要有鉴权措施不要裸挂在CDN上避免被人随意下载第四构建产物和源码的访问控制应该独立管理不能混为一谈即使构建产物泄露也不会影响源码安全。安全从来都不是一个单点问题而是一个系统性的工程。无论你在核心环节做了多少防护只要有一个细节疏忽就可能导致整个系统的安全防线崩塌。这次Claude Code的源码泄露就是最好的例子也给所有科技公司敲响了警钟细节决定成败安全无小事。写在最后比技术更值得学习的是Anthropic的工程文化花了一天时间读完51万行代码我最大的感受不是某个具体的技术有多牛也不是某个隐藏功能有多惊艳而是Anthropic的工程文化他们在用做研究的方法做产品工程。消融实验基础设施、双层Feature Flag、四种粒度的上下文管理、流式工具并行每一个设计都不是拍脑袋决定的背后大概率都有数据在支撑。他们不会因为某个功能“感觉有用”就上线而是会通过对照实验量化功能的价值只有数据证明有用才会正式推出。这种“每个功能都有量化验证”的工程文化比任何单点技术都更值得行业学习。很多开发者包括我自己有时候会陷入“炫技”的误区总想着用最复杂的算法、最小众的技术来体现自己的能力却忽略了最本质的东西解决用户问题提升用户体验。而Anthropic的工程师用最朴素的逻辑、最常规的技术实现了最强大的功能把细节做到极致用数据说话这才是真正优秀的工程思维。当然还有那个可爱的宠物系统它让我看到了工程师们不为人知的一面在严谨、枯燥的代码世界里他们依然保持着对生活的热爱和对乐趣的追求这种浪漫也让冰冷的代码变得有温度。这次Claude Code的源码泄露对于Anthropic来说无疑是一次重大的损失可能会影响其估值和IPO预期也可能会让其技术壁垒短期被削弱。但对于整个AI Agent行业来说却是一次难得的学习机会无数开发者可以通过研读这份源码学习Anthropic的工程思维和设计理念加速整个行业的技术创新和发展。