2026 年 3 月 31 日,开发者社区发生了前所未有的一幕。Anthropic 因为 npm 打包失误,把自家最赚钱的产品 Claude Code 的完整源码传到了 npm 上。一个 59.8MB 的 source map 文件泄漏出去,让 512,000 行 TypeScript 代码暴露在全球开发者面前。
消息传开几小时内,GitHub 上出现了 8,100 多个镜像仓库。Anthropic 通过 DMCA 删掉了大部分,但已经来不及了。这相当于一款年营收达 2.5 万亿韩元(ARR 25 亿美元)产品的设计图被公之于众。
这是什么?
Claude Code 是 Anthropic 的 AI 编程智能体,能在终端里直接读代码、改代码、运行代码。过去大多数人以为它就是一个「包装了 Claude API 的 CLI 工具」。可这次泄漏的源码显示,事情远不止如此。
这是一套 512,000 行、1,900 个文件的精密软件系统。基于 React 的终端渲染器、60 多个权限管理工具、多智能体编排、后台记忆整合引擎,应有尽有。
泄漏是怎么发生的?
Anthropic 把 Claude Code 2.1.88 版本发布到 npm 时,内部调试用的 source map 文件(.map)被打包进去了。估计是 .npmignore 配置遗漏,或者 package.json 中的 files 字段配置错误。Claude Code 负责人 Boris 确认:「这是开发者的失误,不是 Bun 的 bug,也不是黑客攻击。」
有意思的是时间点。事件发生在愚人节前一天,很多人一开始还以为是愚人节玩笑。而且同一天还发生了另一起安全事件 —— axios 的 npm 包被朝鲜关联黑客组织入侵。
有什么不同?
关键在于「只是 API 包装器」这一刻板印象,和真实架构之间的差距。泄漏的代码证明:AI 编程智能体真正的竞争力不在模型,而在「外壳(harness)」。
| 维度 | 一般 AI CLI 工具 | Claude Code 实际实现 |
|---|---|---|
| 核心循环 | while + await model.chat() | 七分支点的 async generator 状态机 |
| 记忆 | 保存全部对话或简单截断 | 三层:索引(MEMORY.md)+ 主题文件 + 原文检索 |
| 上下文管理 | 删除旧消息 | 五种压缩策略(Snip、Microcompact、Autocompact 等) |
| 工具加载 | 每次都传送所有工具 schema | 通过 ToolSearch 按需动态加载 |
| 权限管理 | 全放行或全拦截 | 默认拒绝 + 拒绝追踪 + 优雅降级 |
| UI 渲染 | 基于 console.log | React + Ink + Yoga 布局(终端版 React) |
| 成本优化 | 没有专门策略 | 追踪 14 种提示词缓存状态,稳定 schema |
下面逐条拆解。
1. 智能体循环:七阶段状态机
核心逻辑位于 query.ts,整整 1,729 行。一个叫 queryLoop 的 async generator 函数包裹着 while(true) 循环。
大多数智能体框架的流程是「发送提示词 → 收到响应 → 执行工具 → 重复」,简单直接。而 Claude Code 的 generator 模式会在七个显式的分支点(continue site)交出控制权并保持状态。这种结构让会话暂停、恢复、序列化、错误恢复全都成为可能。
2. 自愈记忆:「会怀疑的记忆」
VentureBeat 把这叫做「context entropy(上下文熵)的解决方案」。
- MEMORY.md —— 始终加载进上下文的轻量索引,每行只存约 150 字的指针
- 主题文件 —— 真正承载项目知识的文件,需要时才读取
- 原文探查 —— 不重读对话记录,只用 grep 搜索特定标识符
最让人印象深刻的是「严格写入纪律(Strict Write Discipline)」。智能体只有在文件真正写入成功后,才会更新索引。这是为了防止失败的尝试污染记忆。而且智能体被明确要求把自己的记忆当成「线索」来对待,行动前必须回到实际代码库中验证。
3. 五种上下文压缩策略
长时间会话里,上下文窗口塞满了怎么办?Claude Code 会根据情况组合使用五种策略:
Snip —— 快速裁剪旧消息。速度优先。
Microcompact —— 专门针对工具输出。把 5,000 行的文件读取结果存到硬盘,只留摘要。
Context Collapse —— 渐进式压缩较旧的对话段。(目前还藏在特性开关后面)
Autocompact —— 到达设定的 token 阈值时,用全对话摘要替换原内容。
Reactive Compact —— API 返回 413(payload 超限)时触发的紧急刹车。
4. 权限系统的「46 行哲学」
每个工具都必须声明 isReadOnly 和 isDestructive。默认值都是 false —— 也就是默认拒绝(default-deny)。
最有意思的是一个叫 denialTracking.ts 的文件,只有 46 行:
如果用户连续点「不」,系统就会关闭自动模式,改成每一步都征求许可。大多数智能体要么继续重试,要么直接停住。而 Claude Code 用 46 行代码实现了「用户越不舒服,就越小心」这一原则。
5. 隐藏的功能
泄漏代码中还发现了一批未公开的功能,也引发了热议:
- KAIROS(自主守护进程模式) —— 名字来自希腊语,意为「合适的时机」。用户离开时,一个叫
autoDream的进程会整理记忆、消除逻辑矛盾、把模糊的观察转化为确定的事实。 - /buddy(拓麻歌子宠物) —— 住在终端里的 ASCII 宠物。18 种角色、抽卡概率(Legendary 1%)、RPG 属性值(DEBUGGING、PATIENCE、CHAOS、WISDOM、SNARK)。原本是愚人节惊喜,结果提前一天被曝光。
- Undercover Mode —— Anthropic 向公开开源仓库进行隐形贡献时使用的功能,能抹掉 commit 中的 AI 痕迹。
- Proactive Mode —— 无需提示词、AI 自主运作的模式。
- 挫败/愤怒检测 —— 通过关键词模式识别用户的负面情绪,反馈到内部分析中。
6. 防止竞品抄袭:反蒸馏与 DRM
公开的代码里不只是功能被发现。Anthropic 甚至在代码中实现了技术手段来阻止竞品模仿。
- 反蒸馏(Anti-Distillation) —— 在 API 请求中注入假的工具定义,这样如果竞品录制 Claude Code 的流量来训练自己的模型,就会被污染数据喂坏。工具调用之间的推理过程也只以加密签名的摘要形式传输。
- DRM 级别的客户端认证 —— 在 JavaScript 层之下,Bun 的 Zig 原生 HTTP 栈里,每次 API 请求都会注入哈希。这是为了用密码学方式证明请求确实来自真正的 Claude Code 二进制文件。有意把这个逻辑放到更底层,就是为了让人没法通过给 JS 打补丁来绕过。
7. claw-code:AI 复制 AI
泄漏之后最轰动的项目是 claw-code。韩国开发者 Sigrid Jin 用 OpenAI Codex 把 Claude Code 的架构用 Python 做了一次「洁净室」重实现。他没有直接复制原始代码,而是只参考了结构和模式重新编写。
这里有个法律上很有意思的点。AI 参考已有代码用另一种语言重实现,成果算不算侵犯版权?传统的「洁净室重实现」过去要两支团队花几个月、花很多钱才能完成。现在 AI 一夜之间就搞定了,而相关的司法判例还没出现。Gergely Orosz(The Pragmatic Engineer)就指出:「就算 Anthropic 起诉,在针对 AI 改写作品的 IP 官司中能不能赢,都还不好说。」
上手指南:从中能学到什么
下面整理一下创业者、开发者、产品经理能从这次泄漏中带走的教训。
- AI 产品的护城河不是模型,而是外壳(harness)
Claude Code 证明的就是这一点。哪怕大家用同一款 Claude 模型,智能体循环、记忆、权限、成本优化怎么设计,才决定产品的质量。如果你在做 AI 产品,应该把投入从「选哪个模型」转向「怎么设计包裹模型的系统」。 - 不要低估上下文管理
就连 Anthropic 也搞出五种策略,其中两种还在实验阶段。在长时间智能体会话里,上下文管理仍是未解决的难题。特别是工具输出(如读文件)吃掉一半上下文窗口这种问题 —— 参考 Microcompact 模式。 - 工具超过 20 个?延迟加载(deferred loading)必不可少
Claude Code、OpenAI Agents SDK、CrewAI 各自独立摸索出同一种模式:每次都发送全部工具 schema 就是在浪费 token。用类似 ToolSearch 这样的元工具,按需动态注入。 - 权限系统要设计「优雅退化」
「用户越不舒服,就越小心」的 46 行原则很有启发。AI 产品里,信任(trust)比功能更重要。追踪反复拒绝的行为,设计从自动到手动的平滑切换 UX。 - 也要想想为什么这次泄漏并不致命
Star History 说得好:「代码快照是照片,不是摄影师。」 真正的护城河是打造它的团队和持续发布的速度。源码公开后,Anthropic 的估值和用户数都没有明显波动,这就是证据。




