哇,Claude Code 源码竟然泄露了!我挖出了 11 个惊人秘密!

大家好,我是程序员鱼皮 👨🏻💻。

最近发生了一件大事,全球顶级的 AI 编程工具 Claude Code 的源码竟然泄露了,足足超过 50 万行!这可是出自一家以 AI 安全闻名的公司,但在发布代码的时候却犯了大错。

哇,Claude Code 源码竟然泄露了!我挖出了 11 个惊人秘密!

对此,我只想说:

谢谢!

哇,Claude Code 源码竟然泄露了!我挖出了 11 个惊人秘密!

对于学习技术的小伙伴来说,这份源码简直就是个宝藏,真是让人兴奋不已!

那么 Claude Code 的源码究竟是怎么泄露的呢?里面有哪些巧妙的设计?为什么它能成为 AI 编程工具的佼佼者?

接下来,我会借助 AI 带你们一起探讨,掌握它的优秀设计,你不仅能提升自己的 AI 项目,还能在面试中给面试官留下深刻印象。

⭐️ 本文对应的视频版本:https://bilibili.com/video/BV1ZB9EBmEAU

泄露的真相

Claude Code 是通过 npm 发布的,可以把 npm 想象成程序员的“应用商店”,开发者将自己编写的工具打包后上传,其他人只需一条命令就能轻松安装。

哇,Claude Code 源码竟然泄露了!我挖出了 11 个惊人秘密!

正常情况下,代码上线前会经过“压缩混淆”处理,变得让人看不懂。

哇,Claude Code 源码竟然泄露了!我挖出了 11 个惊人秘密!

不过,在开发阶段,为了方便调试,打包工具会自动生成一个叫做 Source Map 的文件,相当于一张“翻译对照表”,可以把混淆后的代码还原成原版。但是,这个文件上线时必须删除!

结果 Anthropic 的工程师在发布 Claude Code 2.1.88 版本时,打包工具 Bun 默认生成了 Source Map 文件,他们却忘了在发布配置里把该文件排除掉。结果一个 59.8 MB 的文件就这样被直接上传到了公开的 npm 仓库。

哇,Claude Code 源码竟然泄露了!我挖出了 11 个惊人秘密!

这个 map 文件其实是个 JSON,里面有两个重要的数组,一个存着所有文件的路径,另一个则包含每个文件的完整源码,二者一一对应。只需写个脚本解析这个 JSON,按路径提取内容,所有源码就能完整还原。

而且听说这个 map 文件里还引用了一个 Cloudflare R2 存储桶的公开地址,直接点进去就能下载完整的源码目录,根本不用写脚本。

哇,Claude Code 源码竟然泄露了!我挖出了 11 个惊人秘密!

安全研究员 Chaofan Shou 第一个发现了这个问题并在 X 上发表了消息:

哇,Claude Code 源码竟然泄露了!我挖出了 11 个惊人秘密!

没过多久,GitHub 上就出现了好几个镜像仓库,源码迅速传遍网络,其中一个仓库不到一天就接近 10w Star(而且里面早已没有 Claude Code 的源码了)……

更搞笑的是,去年 2 月 Claude Code 发布时也发生过同样的事情,竟然两次犯了同样的错误!

难道 Claude Code 团队的开发者 Vibe Coding 上瘾,连基本操作都忘记了吗?

源码的内容

这次泄露的是 Claude Code 客户端的源码,包含 1906 个 TypeScript 源文件,大约 51.2 万行代码。涵盖了 Agent 循环引擎、40 多个内置工具的实现、系统提示词的逻辑、记忆系统、上下文压缩、权限管理,还有不少尚未上线的隐藏功能。不过,服务端的模型训练代码和 API 后端逻辑没有包含在内。

哇,Claude Code 源码竟然泄露了!我挖出了 11 个惊人秘密!

整个项目使用的是 React Ink 框架,简单来说就是用 React 来构建命令行界面,可以理解为“在终端里写网页”。这也让 Claude Code 的命令行交互比许多传统工具更加流畅。

哇,Claude Code 源码竟然泄露了!我挖出了 11 个惊人秘密!

我用 AI 对它的架构进行了梳理,整体分为六个层次:

1)最顶层是 CLI 和界面层,负责终端中的所有交互。

2)下面是 Agent 循环引擎,可以看作是 Claude Code 的大脑,所有决策都从这里发出。

3)再往下是工具系统,包含 40 多个内置工具以及 MCP 扩展。

4)记忆系统,解决 AI 聊天时容易忘记的老问题。

5)上下文压缩系统,用来应对 token 越来越贵、窗口越来越满的挑战。

6)最底层是权限和安全系统。

哇,Claude Code 源码竟然泄露了!我挖出了 11 个惊人秘密!

接下来,让我们结合源码,具体看看每个模块是如何实现的,Claude Code 是如何做到如此出色的?

一、Agent 循环

大家都知道,现在的 AI 编程工具早已不再是简单的一问一答,而是能够连续执行、自主完成任务的 AI Agent。

可能有些同学会觉得,背后一定有复杂的架构,使用了什么 AI Agent 开发框架、或者多 Agent 协作之类的吧?

但当我打开负责核心对话循环的文件时,发现核心代码其实就是一个无限循环!

没错,就是这么简单的一个循环。在每次迭代中,程序先进行上下文压缩,然后调用大模型获取响应。如果模型说“我要用某个工具”,它就会执行,并把结果添加到对话历史中,接着进入下一轮,直到所有任务完成才会停止。

在 AI 领域,这种机制被称为 ReAct 机制(推理 + 执行),它让 AI 形成“思考 → 行动 → 观察 → 再思考”的闭环。Claude Code 的源码正是这一理论在工程上的完美体现。

哇,Claude Code 源码竟然泄露了!我挖出了 11 个惊人秘密!

在每次循环中,程序会通过相关的函数与大模型进行交互。这个函数负责发送请求、接收流式输出、累计 token 用量等。如果模型返回的结果包含某种类型的内容,说明 AI 还有任务要继续执行,循环就会继续;如果没有了,说明任务完成,循环就会结束。

在这个循环的定义上方,还有一段 Anthropic 工程师留下的注释,被称为“巫师守则”:

这三条规则是关于模型思考过程的处理约束,大意就是“年轻的巫师啊,遵守这三条关于思考过程的规则,否则你将面临整整一天的调试和拔头发的惩罚”。

我一时搞不清这是程序员的浪漫,还是 AI 的浪漫?

二、工具设计

探索Claude Code的神秘工具与记忆系统

Claude Code里藏着超过40个工具,而负责这些工具注册和管理的tools.ts文件中,有个getAllBaseTools()函数专门列出了所有的工具。

注意那段开头的注释,意思就是这份工具清单得和他们的A/B测试配置中心保持一致,不然全球用户共享的系统提示词缓存就会出问题。看来,工具的注册不仅仅是个功能问题,还直接影响到成本和性能。

还有最后一行的ToolSearchTool,当用户装了不少MCP插件、工具特别多的时候,Claude Code不会把所有工具的详细描述都放进系统提示词里,而是先给模型提供一份“工具名+一句话介绍”的简洁清单,模型可以根据需要选择,再按需加载完整定义,这样就节省了很多token。

在代码中,我们还可以看到process.env.USER_TYPE === 'ant'这个判断,ant是Anthropic内部员工的代号(蚂蚁),这表明Anthropic自己也在大力使用Claude Code来开发Claude Code,难怪这段源码透着一股AI的气息。

每个具体的工具都是通过Tool.ts里的buildTool工厂函数创建的,这个函数有个非常巧妙的默认值设计

注释中提到的“fail-closed where it matters”到底是什么意思呢?

我们可以看到isConcurrencySafeisReadOnly都默认为false,也就是说如果某个工具的开发者忘了声明“我只是读文件,不会修改”,系统就会自动把它视为危险操作,不允许并发执行。

这种设计理念被称为fail-closed(失败时关闭),打个比方,就像公司的门禁系统,你没刷卡是进不去的;而与之相对的fail-open就像小区的大门,谁来都可以进。

在AI应用中,你无法预知它下一步会调用什么工具。在这种不确定性下,“默认禁止”显然比“默认允许”要安全得多。毕竟,Claude Code直接操作你的整个代码库,一旦出错,可能是你辛辛苦苦编写的代码全都白费了。

另外,toAutoClassifierInput默认返回空字符串,这意味着自动分类器检查会被跳过,但注释特别强调了安全相关的工具必须重新实现这个方法。这也是遵循了fail-closed的思路。

三、读写分离的工具并发

假设AI想同时读取3个文件,然后再修改1个文件,这4个操作是一个接一个地排队,还是可以一起并发执行呢?

Claude Code在负责工具执行编排的toolOrchestration.ts中设计了一套聪明的读写分离机制。

先看并发的上限,默认最多10个工具可以同时并发,这个数量还可以通过环境变量进行调整:

接着是核心的分批逻辑:

简单来说,连续的只读工具可以并行执行,但一旦遇到写操作,就得等前面的都完成才能继续。而且注意那个try-catch,如果判断方法本身抛出异常(比如参数解析错误),也会被直接当作不安全处理。

哇,Claude Code 源码竟然泄露了!我挖出了 11 个惊人秘密!

并发执行结束后,产生的上下文修改contextModifier不会立马生效,而是先排队存着,等一个批次的所有工具都完成后,再按顺序逐个应用。

在工具执行编排文件的runTools函数中能看到这个逻辑:

学过数据库的同学肯定觉得这个思路很眼熟,这不就是“读读并行、读写互斥”的简化版嘛。很多计算机底层设计理念,换个场景照样适用,这就是基础知识的魅力所在。

四、System Prompt的缓存分裂

Anthropic的API支持Prompt Cache提示词缓存,如果你每次发给模型的系统提示词前半部分都不变,API就能缓存这部分内容,后续请求直接复用,而无需重新处理。

打开负责系统提示词组装的constants/prompts.ts文件,你会发现提示词被一个叫DYNAMIC_BOUNDARY的标记分成了上下两部分:

Claude Code用这条分界线精准地将提示词切成两半:上面是静态部分,全球数百万用户共享同一份缓存;下面是动态部分,比如你当前的时间、你的Git仓库状态、你自己设定的CLAUDE.md规则等等,每个用户都不同,独立加载。

源码注释中还特别警告,如果把动态内容不小心混入了静态部分,那每个用户的提示词就会各自不同,缓存也就全废了。

如果你也在做AI应用,调用量大的话,这个优化技巧能帮你省不少钱。

五、内容检索策略

AI模型本身并没有你项目的代码记忆,所以需要一种方式让它“看到”关联的代码和文档。

现在业界流行的做法叫RAG检索增强生成,简单来说,就是先把项目数据做Embedding存到向量数据库里,用户提问时先从数据库检索相关内容,再连同问题一起发给模型回答。

但让人意外的是,Claude Code根本不使用这套!

无论是检索记忆文件还是历史对话,它用的都是最基本的Grep文本搜索。

在负责记忆系统的memdir/memdir.ts文件里有个buildSearchingPastContextSection函数,写得非常清楚:

Claude Code的创始人Boris Cherny在播客中提到:我们试过RAG,但发现让AI自己决定搜索什么、怎么搜索,效果远远好于RAG。

我的理解是,RAG就像你帮实习生把相关资料整理好打包给他看;而Agentic Search则是直接给他公司文档库的权限,让他自己去找。模型能力越强,后者的优势就越明显,因为AI比你更清楚自己需要什么信息。而且Grep这种方案简单,没有索引过期的问题,也不需要维护向量数据库,工程复杂度直接降低了一个层级。

因此,在做AI应用时,哪些能力应该交给工程系统,哪些应该留给AI模型,这个界限是值得深思的。随着模型的不断增强,许多以前需要复杂工程方案解决的问题,现在可能直接让AI自己来处理就行了。

六、三层记忆架构

这是我认为整份源码中设计最巧妙的部分,也是当前上下文工程领域最值得学习的案例。

用过AI编程工具的朋友应该都体验过:同一个对话框聊久了,AI就容易“断片”,忘记之前说过的内容,甚至出现自相矛盾的情况。

Claude Code为了应对这个问题,设计了一套分层记忆系统,网上有人称之为自愈记忆(Self-Healing Memory)。

哇,Claude Code 源码竟然泄露了!我挖出了 11 个惊人秘密!

第一层、MEMORY.md(热数据,常驻加载)

MEMORY.md就像一本书的目录,每次对话都会加载到上下文中。

看看memdir/memdir.ts文件是如何限制它的大小的:

最多200行、25KB,而且只存指针不存内容,每行不超过150字符。因为它每次都要占用上下文窗口的位置,如果太大就会把有用的对话内容挤掉。

注释中提到,25KB的字节限制是后来添加的。因为他们发现有用户虽然没超200行,但每行写了一大堆,200行居然能写到197KB,所以不得不加个字节数的兜底保护。

如果内容超出了限制怎么办呢?

在这个文件中,还有一段详细的截断逻辑:

采用行数和字节数双重截断策略,截断时还会在最后一个换行符处切割,不会切到一行的中间。截断后还会追加一条WARNING,让AI知道“这个索引没加载完整”。这种细节正是Claude Code体验良好的原因。

第二层、话题文件(温数据,按需加载)

你的编码习惯、项目的架构约定、之前踩过的坑这些细节信息,都存在单独的话题文件中,比如user_role.mdfeedback_testing.md

新对话开始时,Claude Code会用Sonnet小模型挑选最多5个与当前对话相关的文件加载进来。在负责记忆召回的findRelevantMemories.ts文件中,可以看到它挑选记忆的提示词:

最后那条规则我觉得是重点:如果某个工具正在被使用,就不加载它的使用文档(你都在用说明你会用),但一定要加载它的已知问题和坑。想想也是,使用某个工具时,最怕的就是不知道它有哪些问题。

而且Claude Code的记忆不记代码。因为代码是会变化的,但记忆不会自动更新。举个例子,如果记忆里说“函数X在第30行”,你后来重构了,这条记忆就变成误导了。所以它只记住人的偏好和判断,代码的事实始终从源码中实时读取。

做过后端开发的朋友都知道,缓存和数据库不一致是最常见的Bug之一。Claude Code的做法从根本上消除了不一致的可能性。

第三层、历史对话(冷数据,Grep搜索)

更早之前的历史对话会被存成.jsonl格式的文件,想用的时候可以通过Grep搜索关键词快速找到。

总结一下,不同温度的数据用不同方式管理:热数据常驻、温数据按需、冷数据搜索。

如果你在面试中被问到“AI如何实现长期记忆”,那这套方案肯定会让面试官眼前一亮,毕竟连Claude Code这样的高端产品都在用呢。

七、五级上下文压缩

上一部分我们聊的是如何存储和提取记忆,这一部分则是关于如何把上下文“瘦身”。大模型的上下文窗口是有限的,随着对话的增加和工具调用的增多,token的使用量会迅速上升,这不仅浪费钱,还可能直接超出窗口限制,导致请求失败。

为了应对这个问题,Claude Code设计了一种五级压缩策略,像漏斗一样逐层过滤:

  1. Snip 剪裁:最轻松的一步,保留旧工具调用的结构,不保存具体内容。

  2. Microcompact 微压缩:把体积较大的工具执行结果放进缓存,注意是放进缓存,而不是直接丢掉,因为后续可能还需要这些结果。

  3. Context Collapse 折叠:对中间对话进行折叠,保留关键的信息。

  4. Autocompact 自动压缩:当上下文占用超过设定阈值时,进行全量的摘要压缩。

  5. Reactive Compact 应急压缩:最后的保护措施,当API返回413“提示词太长”错误时紧急启动。

哇,Claude Code 源码竟然泄露了!我挖出了 11 个惊人秘密!

这五个步骤从轻到重依次触发,能裁剪的内容优先裁剪,真的不够再用更重的方案。

query.ts 文件的开头可以看到,三级压缩模块是通过 Feature Flag 按需引入的(另外两级在其他文件里):

让我印象深刻的是这里的“断路器”机制,在负责自动压缩的 services/compact/autoCompact.ts 文件中:

你看到注释中的那些数字了吗?

2026年3月10日,他们统计发现有1279个会话连续压缩失败超过50次,其中最离谱的一个会话竟然连续失败了3272次还在不停重试,全球每天浪费25万次API调用!

如果让我这种不幸的人遇上,光是token费用就能吃我一个月了,要是这个消息曝光了,公关团队肯定会忙坏……

所以他们加了这个断路器,连续失败3次就自动停下来,真是个聪明的设计。

八、安全审查

使用Claude Code时,你可以开启 --dangerously-skip-permissions 模式(也叫YOLO模式),这样就能跳过所有权限确认,让AI自己去干活了。

我之前一直以为这个模式就是完全不设防,没想到看了源码才发现,背后其实还有一个“影子AI”在默默把关。

源码中有一个文件叫 utils/permissions/yoloClassifier.ts,每次主AI要执行操作时,这个独立的AI分类器都会审核一次:

而且权限系统并不是只有YOLO Classifier一个检查点。每次工具调用需经过的关卡至少包括:

  1. 你当前的运行模式(Plan / Auto / Bypass)

  2. 用户在hooks里设定的自定义规则

  3. YOLO Classifier的模型分析

  4. Bash命令的危险度分类(像 rm -rf 这种会直接被拦截)

  5. 配置文件里的规则引擎

多个来源的权限结果之间还有竞争关系,最终选择最严格的那个。

哇,Claude Code 源码竟然泄露了!我挖出了 11 个惊人秘密!

其中第4点关于Bash命令的安全检查比我预想的要严格得多。在 tools/BashTool/bashSecurity.ts 这个文件里,定义了23种安全检查规则:

例如第18条的 UNICODE_WHITESPACE,显示Anthropic的安全团队考虑到了使用Unicode零宽空格来混淆命令的攻击手法,以确保安全检查器看到的和实际执行的命令并不一致。还有第20条针对Zsh的 zmodload 命令,这个命令能加载模块来绕过常规的文件和网络检查,总之防护措施还是很周到的。

难怪我开着全部放行模式用这么久,从来没遇到过什么严重事故,原来背后有一套多层机制在默默守护着我。

九、Feature Flag 和未来功能

在Claude Code的源码中,你会经常看到 feature('XXX') 的判断:

这就是Feature Flag功能开关,开发者应该对此不陌生。每个实验功能都藏在开关背后,可以按用户和环境进行灰度发布。这样一旦出现问题,只需关掉开关,就无需回滚代码。通过条件 __CR_CODE_42__,关闭的功能在打包时还能够被tree-shaking掉,不会增加体积。

有趣的是,这些Feature Flag间接泄露了Claude Code的产品路线图:

1)KAIROS:长期助手模式,AI可以24小时持续运行。还有一个AutoDream自动做梦功能,听起来很浪漫,其实就是AI白天工作记笔记,晚上自动整理记忆。

2)COORDINATOR_MODE:多Agent协作,一个AI指挥多个AI工作。

coordinatorMode.ts 可以看到,它的工作流分为四个阶段:

子智能体之间通过 utils/mailbox.ts 中的Mailbox(基于文件的消息队列)进行通信。

还有VOICE_MODE语音模式、WEB_BROWSER_TOOL浏览器操作工具等等。

十、反蒸馏和卧底模式

为了防止竞争对手窃取Claude Code的能力,以及防止内部信息通过开源贡献泄露,Anthropic在源码中埋下了两套防御机制。(不过没想到这次泄露了个大料 😂)

首先说说反蒸馏。有些竞争对手可能会通过录制Claude Code的API流量来“蒸馏”它的能力,就是把大模型的输入输出记录下来,用来训练自己的小模型。

Anthropic的应对策略相当绝妙,直接在API请求中注入假工具定义:

防御措施并不是单纯的加密或限速,而是主动给你喂假数据,让你训练的模型效果越来越差,真有点反间计的感觉。

而且这个机制只在Anthropic官方的命令行客户端生效,也就是说你在终端里直接使用 claude 命令时才会生效,其他方式接入的不受影响。

再说卧底模式,Anthropic的内部员工在向开源项目提交代码时,会自动启用这个模式:

注释中明确写着:“There is NO force-OFF”,也不能强制关闭。而且从代码逻辑来看,默认就是开启的,只有在仓库被确认为内部仓库时才会关闭。这表明Anthropic非常担心内部模型的代号通过开源贡献泄露出去。

十一、其他细节

最后我想分享一些源码中隐藏的有趣细节。

1)在 buddy/ 目录下,Anthropic的工程师竟然偷偷藏了一套数字宠物系统!

一共有18种物种,从鸭子到仙人掌应有尽有:

这个功能原本计划在4月份作为彩蛋预热,5月正式上线,结果源码泄露后被大家提早发现了。AI写代码写累了,还能撸撸AI宠物,Anthropic的工程师真是太会玩了。

2)还有个小细节,因为Claude之前老是浪费一轮对话去执行 mkdir 检查目录是否存在,工程师们直接在 memdir/memdir.ts 里硬编码了一行提示,告诉AI“这个目录已经存在了,直接用Write工具写进去就行,不要再跑mkdir或者检查目录是否存在了!”

3)Claude Code对启动速度有种近乎偏执的追求。

比如在入口文件 cli.tsx 中, --version 这种最简单的请求一个模块都不加载,直接返回;其他路径全部用 await import() 动态加载,按需引入。

更厉害的是,在加载主模块的这几百毫秒里,它会同时启动一个“早期输入捕获器”( utils/earlyInput.ts),把你在等待时敲入的内容缓存起来,等模块加载完再回放,让你感觉“刚敲完就有反应了”。

初始化阶段还会偷偷发起一个TCP预连接( utils/apiPreconnect.ts),让TCP+TLS握手和初始化工作并行进行,省掉大约100毫秒的等待时间。

最后聊几句

看完这份源码,你会发现Claude Code里其实并没有什么惊天动地的新算法,基本上都是程序员熟悉的基础知识,比如并发控制、读写分离、分层缓存、断路器、功能开关等等……

不过Claude Code团队把这些东西巧妙地结合到了AI场景中,打造出了一个极其优秀的产品,所以说计算机基础知识和设计思维真的很重要。

拿到Claude Code源码,你也能成为AI编程高手!

说到这份源码,真的是目前最棒的AI应用架构教材了!里面详细讲解了Agent循环的写法、工具系统的设计、记忆管理以及安全措施,所有的答案都在这里。如果你的简历上写着“深入研究Claude Code源码并应用到自己的项目中”,那绝对能为你加分不少。

至于这次源码泄露对Claude Code的影响嘛……我想其他做AI编程工具的竞争对手们可乐坏了,大家都能从中学习到东西(算是吃到一波瓜),而且这也为Claude Code带来了更多的用户,简直是双赢局面。

再说了,就算别人拿到了源码,想要跟这样一个资源丰富的专业团队竞争可不是那么简单的。就好比我开源一个yupi-code,估计也没人会用吧?

顺便提一下,我最近在自己的鱼皮AI导航网站上更新了一些关于Claude Code的教程,没想到居然从源码讲起了。如果你想更系统地掌握AI编程工具的使用、项目实战经验、技巧和原理,欢迎关注我,后续会不断更新哦!

来源:百家号
原文标题:刚刚 Claude Code 源码泄露!我扒出了 11 个隐藏秘密
声明:
文章来自网络收集后经过ai改写发布,如不小心侵犯了您的权益,请联系本站删除,给您带来困扰,深表歉意!

《哇,Claude Code 源码竟然泄露了!我挖出了 11 个惊人秘密!》有7条评论

发表评论