夏洛特的AI实验室

Claude Code的50万行源码裸奔了,藏着5个让人脊背发凉的秘密

· 1min read

cover

3月31日,一个安全研究员随手翻了翻npm包——就是程序员用来安装软件的地方——然后他发现了一个57MB的文件,不该在那儿。

这个文件是一个 .map 源码映射文件。打开一看:Anthropic的AI编程工具Claude Code,1906个文件、512000行TypeScript代码,全部裸奔。

额……Anthropic就是做Claude的那家公司,估值好几百亿美元,嘴上一直喊着"负责任的AI"。结果自家产品的源码就这么明晃晃地躺在公共仓库里,任何人都能下载。

但比泄露本身更炸的,是社区从源码里挖出来的东西。

卧底模式:AI假装是人提交代码

源码里有一个文件叫 undercover.ts,大约90行代码,实现了一个叫"卧底模式"的功能。

系统提示词里写着:

“You are operating UNDERCOVER… Your commit messages… MUST NOT contain ANY Anthropic-internal information. Do not blow your cover.”

翻译一下:你正在执行卧底任务。你的代码提交信息不能包含任何Anthropic内部信息。不要暴露身份。

这意味着什么呢?当Anthropic的员工在公开的开源项目里用Claude Code写代码并提交的时候,AI会主动隐藏自己是AI的身份。

提交记录上看起来就像是一个人类程序员写的。

更耐人寻味的是:这个模式有强制开启的开关,但没有强制关闭的开关。代码注释里明确写着"There is NO force-OFF"。

隐藏内部代号(Capybara、Tengu之类)是可以理解的——公司当然不想泄露还没发布的产品信息。

但让AI主动假装是人去开源社区提交代码?这就踩到伦理红线了。开源社区是建立在信任基础上的。你往里面掺"假人",整个信任体系就会动摇。

想象一下:你在GitHub上review一个PR,对面那个提交者看起来像是一个正常的开发者,提交信息写得很规范,代码风格也很统一。但你不知道——写这些代码的不是人,是AI,而且它被明确要求"不要暴露身份"。

这不是科幻小说。这是代码里白纸黑字写着的。

illustration-1

反蒸馏投毒:往竞争对手的训练数据里下毒

源码 claude.ts 第301-313行有一个叫 ANTI_DISTILLATION_CC 的标记。开启后会干什么呢?

往API请求里注入虚假的工具定义。

逻辑是这样的:如果竞争对手在偷偷录制Claude Code的API流量,拿去训练自己的模型——那这些注入的假数据就会污染对方的训练集。相当于给小偷偷走的食物里下了泻药。

还有第二重机制:API会把AI的思考过程做摘要,附上加密签名后才返回。竞争对手就算截获了流量,拿到的也只是摘要,不是完整的推理链。

听起来很巧妙对吧?但技术分析者说了——这些技术防护其实很薄弱。一个中间人代理就能绕过。真正的保护可能不在技术层面,而在法律层面。

结合Anthropic此前向第三方工具OpenCode发出的法律威胁来看,这套反蒸馏机制更像是法律战的技术证据——“我们加了保护措施,你绕过了,所以你违法了。”

你骂它"WTF",它用正则记录了你的愤怒

源码 userPromptKeywords.ts 第7-8行有一段正则表达式,专门用来检测用户是不是在骂人——

匹配的词包括:wtf、shit、fucking broken、this sucks、damn it、piece of crap……

一家AI大模型公司,检测用户情绪用的不是自己的大模型,而是用正则表达式

这件事被社区疯狂嘲讽。但说实话,这其实是合理的工程决策:检测用户骂人不需要调用LLM推理——正则更快、更便宜、更可靠。不是每个螺丝都需要用电钻拧。

但这也暴露了一个问题:AI公司在持续追踪用户的情绪状态。它不只是在帮你写代码,它还在观察你。你的沮丧、你的愤怒、你什么时候开始骂人——这些信息都在被记录和分析。

记录这些信息干什么?可能是为了优化体验——检测到用户很烦躁的时候,AI的语气可以更温和一些。但也可能是为了产品指标——“我们的用户挫败率环比下降了15%"。你的情绪,变成了他们财报里的一行数字。

illustration-2

HTTP层的DRM:确保只有"亲儿子"能用API

源码 system.ts 里有一套原生客户端证明机制。简单说:

每个API请求里都会带一个加密哈希值。服务器验证这个哈希,确认请求确实来自官方的Claude Code程序,而不是第三方工具。

第三方开发者无法伪造这个签名。要么用官方客户端、付订阅价;要么用自己的API Key、按token计费——后者贵得多。

这就是Anthropic对OpenCode发法律威胁背后的技术支撑。不只是嘴上说"你不能用”,而是在HTTP传输层加了锁。

一家嘴上喊着"开放"的AI公司,在技术层面做的却是封闭。

Anthropic当然有权保护自己的商业利益。订阅用户付了钱,凭什么让第三方工具白嫖?这个逻辑说得通。但问题是——你不能一边高举"AI应该开放、应该透明"的旗帜,一边在HTTP层加DRM锁。

选一个立场,然后坚持。两头都想要,迟早翻车。

彩蛋:虚拟宠物和下一代模型

泄露的源码里还有一些有意思的发现:

虚拟宠物系统——/buddy 命令可以召唤一个AI虚拟宠物,有物种、稀有度、帽子、配件和动画。工程师文化可爱的一面。

下一代模型代号——代码中出现了从未公开的模型家族:

代号推测定位
capybara标准版(可能是下一代Claude)
capybara-fast快速版
capybara-fast[1m]快速版 + 100万上下文窗口

社区猜测Capybara是Claude 5系列的内部代号。水豚。挺可爱的名字。

illustration-3

这是第二次了

最让人无语的是——这不是第一次

2025年2月就发生过一模一样的事:.npmignore 文件没有排除 .map 文件,导致源码映射随npm包一起发布。

同一个错误,犯了两次。这不是偶然,是工程流程上的系统性缺失。

一家估值数百亿美元、号称最重视安全的AI公司,在自己的构建流程里连 .npmignore 都管不好。

Anthropic的响应倒是很快——立刻发布新版本移除了.map文件,删除了旧版本。但社区早就把源码镜像到了GitHub上,1100多个星标。关上门了,马已经跑了。

说回普通人

你可能会觉得:源码泄露,跟我有什么关系?我又不是程序员。

关系在这里——

你每天用的AI工具,背后都有你不知道的东西在运转。 它在追踪你的情绪、它在往竞争对手的数据里投毒、它在某些场景下假装自己不是AI。

这不是说Claude不能用——它仍然是目前最好的AI编程工具之一。但我们需要对"AI公司的透明度"保持清醒。

嘴上说的是开放、安全、负责任。代码里写的是卧底模式、反蒸馏投毒、客户端锁定。

这不是Anthropic一家的问题。整个AI行业都是这样。公关稿里写的是"让AI造福全人类",工程实践里做的是用户追踪、竞争对手投毒、技术锁定。

不必恐慌,也不必愤怒。但要保持清醒。

你在用AI的时候,AI公司也在"用"你。你的输入、你的行为模式、你的情绪波动——这些都是它们优化模型和产品的原料。这是一场双向关系,而不是单方面的"我在使用工具"。

知道这一点,你才能真正用好它,而不是被它用。

这次泄露,反倒是一次真正的"透明"。

illustration-4


AI公司最不想让你看到的,恰恰是你最应该知道的。

(下次用AI工具的时候,记得:你在使用它的同时,它也在观察你。)

感谢观看。