51.2 万行代码,1906 个文件,59.8 MB 的 source map。3 月 31 日凌晨,Solayer Labs 的 Chaofan Shou 发现 Anthropic 的旗舰产品 Claude Code 把完整源码暴露在了公共 npm 仓库里。几小时内,代码被镜像到 GitHub,fork 数突破 4.1 万。
这不是 Anthropic 第一次犯这个错。2025 年 2 月 Claude Code 首次发布时,同样的 source map 泄漏就发生过一次。这次的版本号是 v2.1.88,泄漏原因相同,Bun 构建工具默认生成 source map,而 .npmignore 里漏掉了这个文件。
大部分报道在盘点泄漏里的彩蛋,比如有虚拟宠物系统,有「卧底模式」让 Claude 匿名给开源项目提交代码。但真正值得拆的问题是,为什么同一个 Claude 模型,在网页版和在 Claude Code 里表现差那么多?51.2 万行代码到底在做什么?
模型只是冰山一角
答案藏在代码结构里。据 GitHub 社区对泄漏源码的逆向分析,51.2 万行 TypeScript 中,直接负责调用 AI 模型的接口代码只有约 8000 行,占总量的 1.6%。
剩下的 98.4% 在做什么?最大的两个模块是查询引擎(4.6 万行)和工具系统(2.9 万行)。查询引擎处理 LLM API 调用、流式输出、缓存编排和多轮对话管理。工具系统定义了约 40 个内置工具和 50 个斜杠命令,形成了一套类插件架构,每个工具有独立的权限控制。
此外还有 2.5 万行的终端 UI 渲染代码(其中一个叫 print.ts 的文件长达 5594 行,单个函数跨越 3167 行),2 万行的安全与权限控制(包含 23 项编号 Bash 安全检查和 18 个被屏蔽的 Zsh 内建命令),以及 1.8 万行的多代理编排系统。
机器学习研究者 Sebastian Raschka 在分析了泄漏代码后指出,Claude Code 之所以比同模型的网页版强,核心不在模型本身,而在于围绕模型构建的软件脚手架,包括仓库上下文加载、专用工具调度、缓存策略和子代理协作。他甚至认为,如果把同样的工程架构套到 DeepSeek 或 Kimi 等其他模型上,也能获得接近的编程性能提升。
一个直观的对比可以帮助理解这种差距。你在 ChatGPT 或 Claude 网页版输入一个问题,模型处理完就返回答案,对话结束时什么都不留下。但 Claude Code 的做法完全不同,它启动时先读你的项目文件,理解你的代码库结构,记住你上次说过「不要在测试里 mock 数据库」这样的偏好。它能直接在你的终端里执行命令、编辑文件、运行测试,遇到复杂任务时还会拆成多个子任务分配给不同的子代理并行处理。换句话说,网页版 AI 是一个问答窗口,Claude Code 是一个住在你电脑里的协作者。
有人把这套架构比作操作系统:42 个内置工具相当于系统调用,权限系统相当于用户管理,MCP 协议相当于设备驱动,子代理编排相当于进程调度。每个工具出厂时默认被标记为"不安全、可写入",除非开发者主动声明它是安全的。编辑文件的工具会强制检查你是否先读过这个文件,没读过就不让改。这不是一个聊天机器人外挂了几个工具,而是一个以 LLM 为内核、带完整安全机制的运行环境。
这意味着一件事:AI 产品的竞争壁垒,可能不在模型层,而在工程层。
每次缓存击穿,成本翻 10 倍
泄漏代码中有一个叫 promptCacheBreakDetection.ts 的文件,它追踪 14 种可能导致 prompt cache 失效的向量。为什么 Anthropic 的工程师要花这么多精力防止缓存击穿?
看一下 Anthropic 官方定价就明白了。以 Claude Opus 4.6 为例,标准输入价格是每百万 token 5 美元,但如果命中缓存,读取价格只要 0.5 美元,便宜 90%。反过来说,每一次缓存击穿,推理成本就要翻 10 倍。
这解释了泄漏代码中大量看似「过度设计」的架构决策。Claude Code 启动时会加载当前 git 分支、最近的 commit 记录和 CLAUDE.md 文件作为上下文,这些静态内容被全局缓存,用边界标记分隔动态内容,确保每次对话不会重复处理已有上下文。代码中还有一种叫 sticky latches 的机制,防止模式切换破坏已建立的缓存。子代理被设计为复用父进程的缓存,而不是重新建立自己的上下文窗口。
这里有一个值得展开的细节。用过 AI 编程工具的人都知道,对话越长,AI 回复越慢,因为每一轮对话都要把前面的历史重新发送给模型。常规做法是删掉旧消息来释放空间,但问题是,删除任何一条消息都会打破缓存的连续性,导致整个对话历史需要重新处理,延迟和费用同时飙升。
泄漏代码中存在一个叫 cache_edits 的机制,做法是不真的删除消息,而是在 API 层给旧消息打上"跳过"标记。模型看不到这些消息了,但缓存的连续性没有被破坏。这意味着一段持续几小时的长对话,清理掉几百条旧消息之后,下一轮的响应速度和第一轮几乎一样快。对普通用户而言,这就是"为什么 Claude Code 能支持无限长对话而不变慢"的底层答案。
据泄漏的内部监控数据(来自 autoCompact.ts 的代码注释,标注日期 2026 年 3 月 10 日),在引入自动压缩失败上限之前,Claude Code 每天浪费约 25 万次 API 调用。有 1279 个用户 session 出现了 50 次以上的连续压缩失败,最严重的一个 session 连续失败了 3272 次。修复方式只是加了一行限制:MAX_CONSECUTIVE_AUTOCOMPACT_FAILURES = 3。
所以,对于 AI 产品而言,模型推理成本可能不是最贵的那一层,缓存管理失败才是。
44 个开关,指向同一个方向
泄漏代码中藏着 44 个 feature flags——已经编译好的功能开关,只是没有对外发布。据社区分析,这些 flags 按功能域分为五类,其中最密集的是「自主代理」类(12 个),指向一个名为 KAIROS 的系统。
KAIROS 在源码中被引用超过 150 次,它是一个常驻后台守护进程模式。Claude Code 不再只是你主动调用时才响应的工具,而是一个始终在后台运行的代理,持续观察、记录、并在合适的时机主动行动。前提是不打断用户,任何可能阻塞用户超过 15 秒的操作都会被延迟执行。
KAIROS 还内置了终端焦点感知。代码中有一个 terminalFocus 字段,实时检测用户是否正在看终端窗口。当你切到浏览器或其他应用,代理判定你"不在",会切换为自主模式,主动执行任务、直接提交代码、不等你确认。当你切回终端,代理立刻回到协作模式:先汇报刚才做了什么,再征求你的意见。自主程度不是固定的,而是跟着你的注意力实时浮动。这解决了一个 AI 工具长期以来的尴尬问题:完全自主的 AI 让人不放心,完全被动的 AI 效率又太低。KAIROS 的选择是让 AI 的主动性随用户注意力动态调节,你盯着它就老实,你走开了它就自己干活。
KAIROS 的另一个子系统叫 autoDream,每累积 5 个会话或间隔 24 小时,代理会在后台启动一个"反思"流程,分四步走。先扫描已有记忆,了解自己目前掌握什么。再从对话日志里提取新知识。然后把新旧知识做合并,修正矛盾、去除重复。最后精简索引,删掉过时的条目。这个设计借鉴了认知科学中的记忆巩固理论。人在睡眠时整理白天的记忆,KAIROS 在用户离开时整理项目上下文。对普通用户来说,这意味着你用 Claude Code 越久,它对你项目的理解就越精确,而不只是"记住你说过什么"。
第二大类是「反蒸馏与安全」(8 个 flags)。其中最值得注意的是 fake_tools 机制,当 4 个条件同时满足时(编译时 flag 开启、CLI 入口激活、使用第一方 API、GrowthBook 远程开关为 true),Claude Code 会在 API 请求中注入假的工具定义,目的是污染可能在录制 API 流量、用于训练竞品模型的数据集。这是 AI 军备竞赛中一种全新的防御形态,不是阻止你抄,是让你抄到错误的东西。
此外,代码中还出现了 Capybara 模型代号(分为标准版、fast 版和百万上下文窗口版三个层级),被社区广泛猜测为 Claude 5 系列的内部代号。
彩蛋:51.2 万行代码里藏着一只电子宠物
在所有严肃的工程架构和安全机制之间,Anthropic 的工程师还悄悄造了一套完整的虚拟宠物系统,内部代号 BUDDY。
据泄漏代码和社区分析,BUDDY 是一个拟物化的终端宠物,会以 ASCII 气泡框的形式出现在用户输入框旁边。它有 18 个物种(包括水豚、蝾螈、蘑菇、幽灵、龙,以及一系列原创生物如 Pebblecrab、Dustbunny、Mossfrog),按稀有度分为五个等级:普通(60%)、罕见(25%)、稀有(10%)、史诗(4%)和传奇(1%)。每个物种还有「闪光变体」,最稀有的 Shiny Legendary Nebulynx 出现概率只有万分之一。
每只 BUDDY 有五项属性:DEBUGGING(调试)、PATIENCE(耐心)、CHAOS(混乱)、WISDOM(智慧)和 SNARK(毒舌)。它们还能戴帽子,选项包括皇冠、礼帽、螺旋桨帽、光环、巫师帽,甚至还有一只迷你鸭子。用户 ID 的哈希值决定你会孵化出哪只宠物,Claude 会为它生成名字和性格。
据泄漏的上线计划,BUDDY 原定 4 月 1 日到 7 日开始内测,5 月正式上线,先从 Anthropic 内部员工开始。
51.2 万行代码,98.4% 在做硬核工程,但最后有人花时间做了一只会戴螺旋桨帽的电子蝾螈。这或许才是泄漏里最人性化的那一行代码。