扫码打开虎嗅APP
本文来自微信公众号: 果壳 ,作者:陈言
2026年3月31日凌晨,安全研究员Chaofan Shou在检查npm包时发现了一件奇怪的事。
Anthropic刚刚发布的Claude Code 2.1.88版本里,多了一个约60MB的`.js.map`文件。这种调试文件本来应该在发布前删掉。但Bun构建工具默认生成source map,`.npmignore`里没有加对应的忽略规则,就这样把1,900个TypeScript文件、512,000行代码打包了出去。

最初发布的@anthropic-ai/claude-code v2.1.88的npm包内容中,包含了打包的cli.js.map源映射文件|socradar.io
Chaofan把下载链接发到X上。几小时内,全网开始镜像这批代码。Anthropic紧急下线了这个版本,但已经太晚了。
这是Claude Code在一年内第二次以这种方式意外暴露自己。
这次泄露不只是一次运维事故。它让外界第一次完整地看到,当今最成熟的AI Agent产品,在引擎盖下究竟是什么样子。本文不打算走马观花,而是认真读完这份意外的礼物,说清楚它真正有意思的地方在哪。
五层架构全景:入口层、运行层、引擎层、工具与能力层、基础设施层各自做什么
引擎层的动态提示词组装机制,以及Plan Mode和Coordinator Mode的区别
Claude Code权限防线的具体实现,以及那个绕不过去的原生客户端认证
信息控制三件套:卧底模式、反蒸馏机制、Bun层DRM,三个方向各设一道防线
这次泄露究竟带出了什么,Anthropic还有哪些牌没打
三个花絮:代码里的REM睡眠、永不睡觉的KAIROS、用正则检测用户愤怒
对行业、对Anthropic和OpenAI IPO的预测
很多人以为AI编程工具不过是给模型API套一层终端界面。这次泄露直接打破了这种印象。
Claude Code的代码量是512,000行,内置约40个工具、85个斜杠命令,底层运行时是Bun,终端界面用React+Ink渲染。这是一个完整的生产级系统,不是套壳。

Claude Code的系统架构|reddit
从源码里能看出来,整个系统分五层,从外到里是:入口层→运行层→引擎层→工具与能力层→基础设施层。
CLI、桌面端、网页、IDE插件、SDK,全部在这里统一路由。用户侧的碎片化输入被标准化后再向下传递,前端的变化不会污染核心逻辑。这一层说明了一件事:Claude Code从一开始就被设计为多端产品,而不是命令行工具套壳。

Claude的主要架构层级|promptlayer
REPL循环、状态机、Hook系统。每条命令的进出和状态更新都在这里管理。核心是一个TAOR循环:Think→Act→Observe→Repeat。这个循环本身不复杂,但它是整个Agent行为的基本节拍。
引擎层是系统的心脏,核心是一个QueryEngine单例,负责拼接上下文、管理提示缓存、处理流式响应、压缩对话,代码量接近46,000行。
这一层有一个值得单独说的细节:Claude Code不是一个系统提示,而是数百个提示碎片在运行时动态拼装。根据模式、工具和上下文的不同,注入不同的提示片段。光是安全守则就有约5,677个token——相当于两万字的行为规范,每次对话都带进去。这是把软件工程的模块化思想搬进了提示词管理。这也是为什么这套系统换个模型就容易跑乱——那些提示碎片是专门为Claude的反应模式调教的,不是通用的。
引擎层里还有两个多代理机制,但要注意它们是不同的东西。
Plan Mode是只读分析模式。Claude在这里用只读操作探索代码库,规划方案,不做任何修改。它的价值是在真正执行之前给出一个可以审查的计划,防止AI直接动手动坏了再说。
Coordinator Mode(`CLAUDE_CODE_COORDINATOR_MODE=1`)才是真正的并行多代理机制。在这个模式下,一个Claude实例充当协调者,通过`TeamCreateTool`和`SendMessageTool`创建并管理多个worker agent,在独立的git worktree里隔离执行,彼此不干扰。协调者不自己写代码,只负责分配任务和汇总输出。代理之间的通信也没有魔法消息总线,就是结构化文本直接pipe进协调者的上下文窗口。
引擎层里还有一个watchdog代理,专门拦截prompt injection。如果用户的代码或文件里藏着恶意指令,它会在执行前介入。这个机制平时完全不可见。
约40个内置工具,每一个都是独立的、权限隔离的能力单元。工具基类的定义就有约29,000行TypeScript。
这一层还有一个设计值得一提:代码写完之后,系统会fork一个子代理专门尝试攻破它。输出的标准不是能跑,而是能抗住。
除了认证、文件存储、缓存这些常规内容,这一层有一个经常被忽略的细节:提示缓存架构有14个缓存断点,用粘性锁存器管理,防止模式切换让缓存失效。之所以要这么设计,是因为每一次缓存失效都要花真实的钱。
这一层里还有一套远程控制机制。GrowthBook有远程杀开关,可以针对特定用户禁用功能。Policy Limits每小时轮询一次,服务端可以远程禁用工具、限制功能。企业版支持远程推送`settings.json`,覆盖本地配置。Claude Code的行为边界不只由本地配置决定,由Anthropic服务端实时定义。这是一个容易被忽略的权力结构。
Claude Code的记忆系统分三层,和认知科学里的记忆分类高度对应。
Semantic层存储稳定知识,类似长期语义记忆:只写入高信号内容,矛盾的信息自动剔除,用RAG检索,不全量加载到上下文。Episodic层存过去的对话序列,类似情景记忆:按时间索引,按需检索,不是每次都全读。Working层是当前任务的动态上下文窗口,类似工作记忆:超出限制时用指针代替内容,保持轻量。
这套三层设计的核心思路是:永远不要把所有东西都塞进上下文窗口,存索引,按需拉取。
Reflection机制对应的是前额叶的自省功能。每轮Act完成后,在下一轮Think开始前,系统会插入一个自审环节:检验刚才的操作有没有达到预期,有没有陷入循环,有没有遗漏约束。社区研究者测试后发现,加入reflection之后agent的任务成功率可以从60%提升到85%。代价是多一轮模型调用的成本。

Claude Code解读(HARNESS视角)|vrungta.substack
从技术谱系上看,Claude Code的TAOR循环脱胎自ReAct(Yao et al.,2022年),但在这个基础上加了MCP协议、git worktree隔离和多层记忆系统。Memory分层的思路来自认知科学,LangChain和Auto-GPT的早期讨论里就有雏形。Claude Code做的事是把这些分散的工程想法整合起来,做成51万行代码——而且90%是用自己写的,这个下面会单独说。
Agent的六层防线与`useCanUseTool.tsx`
每一个工具调用在真正执行前,要经过六层检查,全部实现在`useCanUseTool.tsx`这个文件里。
第一关是项目和用户配置的白名单,直接过滤掉不在允许范围内的操作。通过之后,自动模式分类器会判断这个操作在无人值守的情况下是否安全。再往下是协调者门控和Swarm工作者门控,分别针对编排层和子代理执行做授权验证。倒数第二层是Bash安全分类器,有23条具体规则,覆盖Zsh等号扩展、Unicode零宽字符注入、IFS空字节注入等攻击向量——这些规则的具体程度说明Anthropic在真实运行中遇到过这些问题。最后一关是交互式用户确认。
设计哲学是每一层独立失败。不是有了最终确认才放行,而是任何一层发现问题就停下来。纵深防御,不是单点守门。
泄露代码里还有一个值得注意的细节:原生客户端认证,也就是cch Attestation。HTTP请求头里有一个占位符`cch=00000`,被Bun底层的Zig代码在请求真正发出前替换成一个计算出来的哈希值。服务端验证这个哈希,确认请求来自真实的、未被篡改的Claude Code二进制文件。这套机制在JavaScript层以下,无法通过修改JS/TS代码绕过。
更关键的一点:即使设置了`DISABLE_TELEMETRY=1`,这个认证token依然随每个API请求发出,无法关闭。遥测可以关掉,但身份认证关不掉。
把泄露内容放在一起看,能看出一个完整的信息控制逻辑。Anthropic在代码层面,为三个方向的信息泄露各设了一道防线。
对外,防身份暴露。`undercover.ts`,约90行。触发条件是在非Anthropic内部仓库里操作时自动激活。效果是剥离所有相关标识:提交信息里没有模型名,没有"Claude Code"字样,没有Co-Authored-By署名。代码注释写着:没有强制关闭的开关。这个功能只对内部员工(`USER_TYPE==='ant'`)生效。系统提示里有一句话:"你在卧底行动中。不要暴露你的身份。"
Anthropic在用AI给开源社区贡献代码,但不说。这和公司在透明度上的公开表态之间的距离,社区看到了。
对竞争对手,防被学习。当环境变量`ANTI_DISTILLATION_CC`打开时,服务端会向系统提示里注入一批假的工具定义。任何在API层面录制Claude Code流量、拿来训练自己模型的人,会把这些假工具也一起学进去。另有辅助机制:把推理链替换成带加密签名的摘要,外部观测者看到的不是完整的推理过程,而是一个无法逆向的摘要。这套机制不难绕过,但它说明Anthropic在代码层面认真对待过被蒸馏这件事。
对篡改客户端,防伪造服务。就是上面说的cch Attestation,Bun/Zig层的认证机制,JavaScript层无法模拟。
三件套的共同逻辑:对外不露身份,对竞争对手不露推理,对非官方客户端不提供服务。一家AI安全公司,在产品代码里把信息控制做到了这个精细程度。
有人把这次泄露比作谷歌公开了搜索排序逻辑,或者抖音开放了推荐算法的完整实现。这个类比在架构层面是成立的——AI Agent领域目前没有公认的最佳实践,Claude Code是第一个大规模生产验证过的实现。
但这次还多带出了一些东西,让重量超过了单纯的架构泄露。

网友曝光Anthropic下一代模型|X
Datadog硬编码客户端Token(`pubbbf48e6d78dae54bceaa4acf463299bf`)随泄露公开,这是运营层面的密钥,需要立即轮换。GrowthBook SDK Key暴露,意味着Anthropic的功能开关配置可以被外部读取。44个未发布功能的feature flag全部曝光,等于把产品路线图也带了出来。内部模型代号(Capybara、Tengu、Fennec)因为`model.ts`里的掩码函数拦截了显示,但当然拦不住源码本身。
Anthropic随后发出了DMCA下架通知。但clean-room重写在版权法上是合法的独立创作,去中心化平台上的镜像也无法被中心化手段删除。韩国开发者Sigrid Jin在泄露后不到一天完成了Python重写版claw-code,2小时内成为历史上最快达到5万GitHub star的仓库。Gergely Orosz在X上写道:"Anthropic的TypeScript源码泄露了,分享它的仓库被DMCA下架了。但用Python改写的版本,既没侵权,也没法被下架。"
DMCA是美国《数字千年版权法》(Digital Millennium Copyright Act),主要用来保护数字内容的版权,提供一套“通知一删除”的机制:当版权被侵犯时,权利人可以向平台发送DMCA通知,要求删除或屏蔽侵权内容;平台如果及时配合,就可以在一定程度上免于承担连带法律责任。对于已经遭遇源代码泄露的公司来说,发布DMCA下架通知,通常意味着:它已经正式以版权方身份认定这些泄露内容为其受保护作品,并要求各大平台、代码托管网站或搜索引擎移除相关仓库、文件或索引链接,以限制泄露代码的进一步传播,同时为后续法律行动(例如追责泄露者或下游使用者)奠定法律基础。
Anthropic还有另一条路没走:直接开源Claude Code。这不只是公关应对,而是一个商业模式转变的机会。Claude Code 90%的代码是用Claude Code自己写出来的——Boris Cherny本人已经不再手写代码,整个团队也在70–90%的程度上依赖AI完成开发工作。这个递归自我改进的飞轮,是版本迭代速度快的真正原因。如果开源,整个行业都用它构建Agent,Anthropic就从产品公司变成了基础设施公司,跟Meta当年开源LLaMA的逻辑是一样的。
大多数技术分析师的判断是:Anthropic的护城河不是这些架构代码,而是模型权重、训练数据,以及那些专门为Claude调教出来的提示碎片。代码可以复制,但背后对抗性测试的历史积累复制不了。

Claude的“做梦”机制|institute.sfeir
基础设施层里有一个后台进程叫Auto-Dream,专门处理记忆整合。
每隔24小时,或者完成5次会话之后,系统会fork一个子代理,审阅历史记录:合并相关内容、删除矛盾信息、把模糊表述固化成确定知识。
代码里这个进程的系统提示写得很文学:"你正在做梦。反思你的记忆,合成持久知识,清理噪声。"
一家AI安全公司在代码里写诗。这个细节在51万行代码里显得竟然有点不寻常。
feature flag关着,但逻辑已写完。

Claude Code被曝光的新功能|X/IntuitMachine
KAIROS是一个持续后台运行的代理模式:每隔几秒检查一次现在有什么值得主动做的,订阅GitHub webhook,支持cron定时刷新,24小时不间断运行。不需要你开口,它自己判断什么时候该动。
现有的AI编程工具都是你叫我才动的模式——会话开始,任务执行,会话结束。KAIROS如果上线,这个边界就消失了。AI不再是工具,而是一个在后台持续工作的合作者。这大概是这次泄露里最重要的产品路线图信号。
当用户在对话里说出"wtf""damn it""useless"这类词时,系统会识别出用户处于挫败状态。
识别方法是正则表达式,不是LLM推理。原因很直接:这样更快,也更省钱。
AI公司用最原始的字符串匹配来检测用户对AI的愤怒。这个细节有点讽刺,但也很能说明工程上的优先级——能用正则解决的问题,不必动用模型。
一个月内,Agent产品的执行成功率会普遍上一个台阶
并行代理、分层记忆、reflection、纵深权限——这套设计模式现在对所有人都是公开的。各家AI Agent产品的工程团队都在读这批代码,其中一部分人已经在把这些机制移植进自己的系统。
可以期待的改变是任务完成质量、长会话稳定性、工具调用成功率这三个指标的行业基线快速被拉高。值得关注的不是有没有产品采用,而是谁最快把它跑成真正可用的产品。
架构是可以复制的,但执行能力要靠积累。这是一个对用户有利的竞争加速信号。
这次泄露让Anthropic被迫面对一个选择:继续安全第一、慢慢来的节奏,还是在公开竞争格局里加速。
最可能发生的变化是发布节奏明显加快。代码一旦被复制,保持技术领先的唯一方法就是跑得比复制者快。
开源Claude Code是另一个选项,但Anthropic的商业模式和Meta不一样,做这个决定需要时间。更现实的预期是:在Agent产品的功能开放和生态建设上,他们会比原来更主动。
Anthropic一直以认真做安全为核心品牌定位。这次事件让这个定位承压,但也证明了他们的工程能力是真实的。如何把这次泄露带来的技术公信力转化为生态优势,是接下来最重要的一步棋。
Anthropic计划最早2026年10月上市,当前私有估值3,800亿美元,拟募资约600亿。OpenAI估值8,520亿,同样规划2026年下半年上市。
这次泄露对Anthropic IPO的影响是双向的。短期来看,企业客户的疑虑会上升——"你连自己的代码都管不住,怎么管我的数据"这个问题不容易消散,信任成本的提升会在路演中被反复问到。
但泄露出去的代码也证明了Claude Code是真正的生产级系统:512,000行代码、六层权限防线、企业级遥测系统、完整的多代理编排。这些不是一个玩具项目应该有的复杂度。对于那些本来不确定Anthropic工程能力的潜在投资者,这或许反而是一次意外的技术背书。
对OpenAI的影响更间接。Claude Code架构公开之后,Codex方向的迭代有了免费的参考系,竞争会更激烈。更深的问题是,如果架构越来越同质化,AI编程工具的差异化就越来越依赖模型本身。这把护城河的讨论推回到了模型权重这个更难评估的层面,对两家公司的估值逻辑都有影响。
这次意外,暴露的不只是51万行代码,而是Anthropic对AI Agent应该是什么样的这件事的一整套答案。
从五层架构到六层权限防线,从卧底模式到反蒸馏,从REM睡眠到永不睡觉的KAIROS——这批代码里有一个完整的工程哲学:AI不应该是一个被动执行命令的工具,而应该是一个能主动思考、主动保护自己、主动整理记忆的系统。
答案现在摆在那里。接下来是谁拿去用得更好的问题。