从 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’。
宠物有属性DEBUGGING、PATIENCE、CHAOS、WISDOM、SNARK,会对你的编码行为作出反应。随机算法的注释:
// Mulberry32 — tiny seeded PRNG, good enough for picking ducks
物种名全部用十六进制编码:
exportconst duck = String.fromCharCode(0x64, 0x75, 0x63, 0x6b)
原因:duck和capybara跟内部模型代号撞名了,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负责记忆整理,四个阶段:
-
Orient:扫描 memory 目录,找出失效的索引引用 -
Gather:从历史对话提取用户的修正和规律 -
Consolidate:把新发现合并进已有的记忆文件 -
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。我确实想要那只水豚。
夜雨聆风