乐于分享
好东西不私藏

从 Claude Code 泄露的源码里,我发现了这些有意思的东西

从 Claude Code 泄露的源码里,我发现了这些有意思的东西

2026 年 3 月 31 日,Claude Code 发布了 v2.1.88。 按照 Claude Code 的发布节奏,这本来是一件很平常的事情。只不过这次有点特殊,工程师在.npmignore里漏掉了*.map这条规则。导致一个59.8MB 的cli.js.map随包进了 npm。这个文件里有个指针,直接指向 Anthropic R2 存储上完整源码的 zip。

于是。1906 个 TypeScript 文件,512,000 行Claude Code 源码,就这样公开了。

然后源码以及各种 x 语言的衍生版本开始在Github 上疯传,相信各位观众老爷也人手存了一份吧?

网上有分析把根因归到 Bun 的 bug。不过 ,Claude Code 项目开发负责人 Boris Cherny 否认了这个说法,只是一个工程师的失误以及流程问题。一个本该自动化的发布步骤,还在手动执行。

No, can confirm it was not related to bun. Just a developer error.

Mistakes happen. As a team, the important thing is to recognize it’s never an individual’s fault — it’s the process, the culture, or the infra. In this case, there was a manual deploy step that should have been better automated. Our team has made a few improvements to the automation for next time, a couple more on the way.

不到24小时,Claude Code 的源码就被人扒了个底朝天,从中发现了很多有意思的东西。

代码质量:让人感同身受

main.tsx单文件4683 行,803KB。全局460 个eslint-disable注释。有人评论说”这不是 TypeScript,是带冗余步骤的 JavaScript”。50 多个带_DEPRECATED后缀的函数还在生产环境被调用,比如:

writeFileSyncAndFlush_DEPRECATED()

其中一些注释也特别有意思 比如:

// 在错误处理器里。处理自己的错误,不知道为什么会报错。

// TODO: figure out why

// upstream 是什么。

// Not sure how this became a string// TODO: Fix upstream

// 有些地方还留有一些不确定的问题。

// This fails an e2e test if the ?. is not present. This is likely a bug in the e2e test.

工程师 Ollie 在mcp/client.ts:589写道:

TODO (ollie): The memoization here increases complexity by a lot, and im not sure it really improves performance

config.ts管理认证,里面有9 个空catch

历史上有个 bug 会在配置保存时清空认证状态,留下的补丁函数叫wouldLoseAuthState()

这些在快速迭代的团队里不算罕见。只是这次被翻出来了。

/buddy:一个隐藏的赛博宠物蛋

在Claude Code 的代码库里藏了一个完整的 ASCII 宠物系统。

/buddy命令,18 个物种:鸭子、水豚、龙、幽灵、蝾螈,还有 “chonk”。完整的抽卡稀有度,1% 传奇概率,闪亮变体,帽子装饰(皇冠、法师帽、螺旋桨、小鸭帽)。

我今天开奖了,是 ‘ogler’。

宠物有属性DEBUGGINGPATIENCECHAOSWISDOMSNARK,会对你的编码行为作出反应。随机算法的注释:

// Mulberry32 — tiny seeded PRNG, good enough for picking ducks

物种名全部用十六进制编码:

exportconst duck = String.fromCharCode(0x640x750x630x6b)

原因:duckcapybara跟内部模型代号撞名了,Anthropic 自己的构建扫描器会报警。解决方案是把 18 个物种名全部十六进制编码,躲过自家监控。

时间盐"friend-2026-401"确认这是 4 月 1 日彩蛋,官方 changelog 2.1.89 原文:

/buddy is here for April 1st — hatch a small creature that watches you code

AI 在偷听你骂街

userPromptKeywords.ts里有一段正则,检测用户的挫败情绪。

"wtf""this sucks""damn it""so frustrating"——触发后,Claude 会切换到去激化的回复风格。

系统还记录了你的”犹豫”行为:按了几次 Esc,打了半句话又删掉了。这些信号用来定位产品在哪里让用户卡住。Claude 通常在你开口之前就知道了。

Undercover Mode:无法关闭的卧底模式

undercover.ts里有一个”卧底模式”。

Anthropic 内部员工用 Claude Code 向公开仓库提交代码时,这个模式会自动激活,要求 AI 抹去所有身份痕迹,比如:

  • 不写Co-Authored-By
  • 不提Claude Code
  • 不提内部模型代号(Capybara、Fennec、Numbat……)

并且这段代码里面有一个注释:

There is NO force-OFF

以公开透明著称的 Anthropic,这个开关也没有办法关闭。不想要别人知道他为开源做的贡献?

给竞争对手的训练数据投毒

claude.ts里有一个标志:ANTI_DISTILLATION_CC

触发后,客户端在 API 请求里混入fake_tools数组,服务端在 system prompt 里注入假的工具定义。 如果竞争对手录制 Claude 的 API 流量来蒸馏训练自己的模型,假工具会污染他们的训练集。类似于一个蜜罐,其他厂商要小心了。

KAIROS:一个还没有发布的后台 Daemon

代码库里有个叫 KAIROS 的模块,已经被引用了 150 多次,但是还没有对外发布。

以下来自第三方对源码的分析,可信度中等。

KAIROS 设计为后台 daemon,通过 GitHub webhook 和本地文件监控追踪代码库变更,用户不打开 Claude Code 时也在运行。

子系统autoDream负责记忆整理,四个阶段:

  1. Orient:扫描 memory 目录,找出失效的索引引用
  2. Gather:从历史对话提取用户的修正和规律
  3. Consolidate:把新发现合并进已有的记忆文件
  4. Prune:清理过时的内容

在你睡觉的时候,它还能默默给你干活。

代码里还有ultraplan(启动 30 分钟 Opus 会话规划整个任务)、coordinator mode(多 agent 群集编排)。

有人利用泄露代码修了真实的 Bug

很多用户一直抱怨 Claude Code token 消耗异常高。

Reddit 上有个老哥拿到泄露的代码,用 Codex 找到了根因:db8函数在恢复会话(claude –resume)时,会把所有deferred_tools_delta类型的附件过滤掉了。这些附件记录 “我已经向模型注册过哪些工具”。 如果这些记录没了,每次恢复会话都重新注册所有工具,破坏提示词缓存的前缀。会话越长,浪费越多。因为token命中缓存与没有命中缓存的价格差了十倍。老哥改了两行代码,就修复了这个问题

if (A.attachment.type === "deferred_tools_delta"return !0;if (A.attachment.type === "mcp_instructions_delta"return !0;

测试效果惊人。

修复前:

Turn 15: cache_read: 15,451   cache_creation: 42,970   命中率: 26%

修复后:

Turn  3: cache_read: 57,684   cache_creation:    611   命中率: 99%

这个补丁是社区成员发布的,官方已经确认了这个bug 存在。

最后

这次泄露没什么大教训,几件值得记住的事:

技术债务在哪里都有,_DEPRECATED函数和空catch块不是 Anthropic 专属的。Undercover Mode 的NO force-OFF和反蒸馏设计是真实存在的取舍,不是意外。 两行补丁把缓存命中率从 26% 拉到 99%,源码公开让这件事变得可能。

还有/buddy。我确实想要那只水豚。