乐于分享
好东西不私藏

Claude Code 源码泄露,我们看到了什么?

Claude Code 源码泄露,我们看到了什么?

3 月 31 日,愚人节前一天。
Anthropic 在 npm 上发布的 Claude Code 2.1.88 版本,意外携带了一个 59.8MB 的 source map 文件。几小时内,51.2 万行 TypeScript 源码被开发者下载、分析、讨论。
GitHub 上的镜像仓库两小时冲上 5 万星,成为史上涨星最快的项目。
这不是一个普通的”吃瓜”事件。
对于 AI 编程工具赛道的从业者来说,这更像一次被迫的行业公开课——Anthropic 最核心的产品,被完整地摊在了桌面上。
我们终于能看到:一个真正能跑进生产环境的 AI 编程工具,到底长什么样。
一、”壳子”并不简单
很多人第一反应是:没有模型权重,泄露的只是个”壳子”,有什么价值?
这个判断对了一半。
Claude Code 确实是个壳子——一个包裹在 Claude API 之外的命令行工具。但这个壳子的精密程度,超出了大多数人的想象。
工具系统就有 2.9 万行代码。
每种能力——文件读写、Shell 执行、网页抓取、LSP 集成——都是独立的模块,有完整的权限管控、错误处理、并发控制。
更重要的是,每个工具的描述不是简单的一句话,而是详细告诉模型:什么时候用、怎么用、用完期望什么结果、出错了怎么办。
这些描述本身就是精心调优的 prompt engineering。
这不是”给模型一个函数签名,让它自己猜怎么用”——这是在教模型”如何做一个好的程序员”。
二、Prompt Cache 的工程学
这是整份源码中最硬核的部分,也是拉开 Claude Code 与普通套壳应用差距的核心壁垒。
大多数 AI 工具在处理长上下文时,还在简单粗暴地拼接 system prompt 和历史对话。
而 Claude Code 把这件事做到了字节级的精打细算。
Anthropic 的 Prompt Cache 采用前缀匹配。为了最大化缓存命中率,Claude Code 设计了严密的分段架构:
静态段:模型身份、安全规则、代码风格——整个会话不变
动态分界线:硬编码标记,隔开可变部分
动态段:当前目录、Git 状态、用户配置——每次可能变化
为了防止微小变化导致缓存穿透,系统做了大量看似繁琐的兜底:
工具描述按字母表排序,保证确定性
配置路径使用内容哈希,而非随机 UUID
Agent 列表从工具描述剥离,移到消息附件中
据源码注释,仅最后一项改动就减少了约 10.2% 的 Cache Creation Tokens 消耗
好的 AI 应用层开发,本质上就是在贪婪且精细地压榨 API 缓存系统的价值。
三、解决”上下文污染”的 Fork 机制
这是单体 Agent 的致命缺陷。
执行复杂任务时,模型可能反复读取错误的文件、尝试错误的命令。这些试错过程会产生大量垃圾上下文,迅速污染主对话,导致后续推理”精神分裂”。
Claude Code 用 Fork 子代理 机制优雅地解决了这个问题。
当需要大范围探索代码时,主协调器会派生一个 Explore Agent:
子 Agent 继承父对话的缓存(共享 Prompt Cache 以节约成本)
探索动作在隔离的上下文中进行
试错产生的垃圾不会污染主对话
探索结束,子 Agent 只把提炼好的结论传回
用完即毁,只留结论。
这是目前业界处理复杂多 Agent 长文本协同的最佳实践之一。
四、不是更信模型,而是更不信模型
这一点最值得警醒。
很多 AI 产品做着做着就犯了一个典型错误:太相信模型。
相信 prompt 多写几句,模型就会守规矩。相信给够工具,模型就知道什么时候该用。相信窗口够大,模型就不会失忆。
Claude Code 的气质完全不同。
它更像一个做过脏活的老工程师:先别讨论你多聪明,先讨论你胡来时,谁能把你按住。
权限控制不是写在 prompt 里的”请谨慎”,而是正式的 permission modes、allow/deny rules、runtime callback。
更巧妙的是 Auto Mode Classifier
当用户开启自动模式,系统没有用死板的正则表达式评估命令危险性,而是用了一个”侧查询”机制——后台静默调用一个更小、更便宜的 LLM,让这个小模型输出 Allow 或 Deny。
用小 AI 监管大 AI。
这种动态权限系统比传统静态拦截规则灵活得多。
五、记忆系统的”复古”选择
在 RAG 大行其道的今天,Claude Code 的记忆系统出人意料地”复古”——完全基于本地文件系统
核心是一个被限制在 200 行以内的 MEMORY.md 作为高层索引,配合多个基于 Frontmatter 格式的主题文件。
没有向量数据库,没有语义检索。
为什么?
因为对于编程场景,确定性比召回率更重要
程序员需要的不是”可能相关”的代码片段,而是精确的函数签名、准确的依赖关系、确定的项目结构。
更有意思的是源码中的 KAIROS 助手模式——一个尚未正式发布的 Daemon 模式。
在闲置时,后台会唤醒一个名为 “Dream” 的离线任务 Agent,对白天的操作日志进行总结、蒸馏,固化到长期主题文件中。
这种从短期日志到长期记忆的异步整合,代表了端侧 AI 助理向”永远在线、持续学习”演进的方向。
六、彩蛋:宠物系统与”卧底模式”
源码中有一个代号为 BUDDY 的完整宠物系统。
18 种物种,5 种稀有度,完整的抽卡系统,还能给宠物换眼睛样式、戴帽子。
为了绕过内部代码扫描器,物种名称全部用十六进制编码——据说因为某个物种名和内部模型代号撞了。
工程师用 Mulberry32 伪随机数生成器,代码注释写着:
tiny seeded PRNG, good enough for picking ducks
翻译:这个随机数生成器虽然简陋,但用来选鸭子够用了。
还有一个更有争议的功能:Undercover Mode(卧底模式)
针对员工在开源仓库工作的场景,系统默认开启且无法关闭。Prompt 明确要求:
Do not blow your cover. 不要暴露身份。
从公关角度这或许缺乏透明度,但也侧面印证了厂商对模型角色扮演和输出干预的绝对控制力。
七、泄露之后,AI 编程工具的竞争才真正开始
看完这 51 万行代码,一个残酷的事实摆在眼前:
今天很多 AI 产品,根本不是产品——它们只是模型能力的裸奔。
有个更强的模型,就多做几个 demo;上下文大一点,就宣称”会记忆”;能调几个工具,就号称”Agent ready”。
可只要真进开发环境,这些东西很快就露馅。
因为软件工程现场最不缺的,就是脏活:
工具选错怎么办?
调用失败怎么办?
高风险动作谁来拦?
任务中断后怎么续?
长上下文越跑越脏怎么办?
这些问题,再会写 prompt 也解决不了。
Claude Code 真正让程序员服气的地方,不是它”更会写代码”,而是它更早承认了一件难听但真实的事:
模型不可靠。
不可靠不是缺点。不把”不可靠”做进系统,才是缺点。
八、对中国 AI 公司意味着什么
这次泄露最大的意义,可能不在于技术细节,而在于撕掉了一层神秘感
原来 Anthropic 最核心的 AI 编程工具,底层也不过是精心设计的 prompt 编排,加上工程化的工具调度。
没有黑魔法,只有大量的细节打磨。
这恰恰是好消息——意味着差距可以弥合。
前提是,你得有耐心去打磨那些细节,而不是想着直接把别人的代码拿过来改个名字。
架构思路可以学,工具编排模式可以学,记忆分层策略可以学。
但实现必须是自己的。
而且要意识到:你今天 fork 的代码,下个月就是旧版本。44 个 feature flag 意味着至少十几个重大功能在排队上线。
追着抄,永远追不上。
理解了原理,才能跑出自己的路线。
结语
Claude Code 源码泄露,表面上看是 Anthropic 的事故。
往深一层看,它更像 AI 行业一次被迫的体检。
它照出来的,不只是一个产品的”后厨”——更照出了一整代 AI 产品最该补、也最难补的那层基本功:
怎么让模型不乱来
怎么让工具别失控
怎么让上下文别发霉
怎么让长任务不断线
怎么把”能跑”做成”能长期跑”
真正值钱的,从来不是模型会不会写代码。
真正值钱的,是谁能把模型写代码这件事,做成一套能稳定运行、出错率极低的系统。
这次泄露,恰好把这套完整能力露出来了。
对于从业者来说,这是春天——不是因为又多了一个瓜,而是因为行业终于被迫承认:护城河不在嘴上,在底盘。