昨天 Claude Code 出了个大乌龙——Anthropic 发 npm 包的时候,忘了在 .npmignore 里过滤 source map 文件。结果开发者装完包,直接在 node_modules 里翻出一个 57MB 的 cli.js.map,里面藏着完整的 TypeScript 源码映射。不需要反编译、不需要反混淆,sourcesContent 字段里存的就是一字不差的原始代码。
有多夸张呢?4756 个源文件,其中 1906 个是 Claude Code 自身的 TypeScript/TSX 源码,剩下 2850 个是 node_modules 依赖。1900 多个文件,终端 CLI 架构、40 多个工具、50 来个命令,全都一览无余。
GitHub 上很快就有人打包上传了,而且这个仓库的 fork 比 star 还多——27.2k stars、37.7k forks,fork:star 比 1.4:1,大家都在悄悄存副本怕被删。
说白了,这不是被黑客攻破,是 Anthropic 自己把源码送出来的。之前老版本就出过一次同样的问题,这次又重蹈覆辙,属实草台班子现场。后来 Anthropic 意识到了,移除了 source map,GitHub 上的仓库也被 DMCA 了,但早期的 npm 包已经被存档,源码早就在社区传开了。
不过对我们这些搞技术的来说,这波泄露确实是天上掉馅饼。我花了点时间扒了一遍代码,下面分享几个最有价值的发现。
一、Anthropic 怎么写 System Prompt
这是我觉得最值得学的部分。
很多人写 prompt 还停留在"尽量帮助用户,提供详细回答"这种笼统的描述。但 Anthropic 自己的写法完全是工程化的,非常具体:
- 工具约束:明确规定"读文件必须用 FileReadTool,不允许用 bash"
- 风险控制:删除数据前必须二次确认
- 输出规范:先给结论,再解释
说白了,就是把 AI 当一个需要详细 SOP 的员工来对待。这样写出来的 prompt,AI 的行为会更加可预测、可控。如果你在做任何 AI 产品,这套 prompt 工程的思路可以直接套用。
二、多 Agent 协作架构(Swarm)
源码里有一套完整的多 Agent 编排系统,这个是我最感兴趣的部分:
- Coordinator Mode:一个主 Agent 分配任务给多个 Worker,Worker 并行执行后汇报结果
- 权限队列(Mailbox) :Worker 需要执行危险操作时,通过 mailbox 向 leader 请求权限,leader 审批后才执行
- 原子认领机制:
createResolveOnce防止多个 Worker 同时处理同一个权限请求 - Team Memory:跨 Agent 共享记忆空间
这里面最精妙的是权限队列的设计。多 Agent 系统最大的难题就是:怎么在给 Agent 自主权的同时保持人类控制?Anthropic 的方案是让危险操作必须经过审批,而不是一刀切地禁止。如果你想做多 Agent 系统,这就是 Anthropic 自己的最佳实践。
三、上下文压缩策略(三层压缩)
这是 Claude Code 最精妙的工程之一,做长对话 AI 应用的同学一定要看。
它设计了三层压缩机制:
1. 微压缩(MicroCompact)
不触发 API 调用,直接在本地编辑缓存内容,移除旧的工具输出。两种策略——基于缓存的和基于时间的。这个最巧妙,不花钱就能释放上下文空间。
2. 自动压缩(AutoCompact)
接近上下文窗口上限时自动触发。预留 13,000 token 缓冲区,最多生成 20,000 token 的摘要。内置断路器——连续失败 3 次就停止重试,防止死循环。
3. 全量压缩(Full Compact)
把整段对话压缩成摘要,然后重新注入最近访问的文件(每文件 5,000 token 上限)、活跃的 plan、用过的 skill schema。压缩后预算控制在 50,000 token。
如果你在做任何长对话 AI 应用,这套三层压缩策略可以直接借鉴。特别是微压缩的思路,零成本释放上下文空间,是真的香。
四、AutoDream 记忆整理机制
这个最有意思。Claude Code 会在后台自动整理记忆,有点像人睡觉时大脑整理白天的记忆。
触发条件(四个全部满足才执行):
- 距上次整理 ≥ 24 小时
- 之后又有 ≥ 5 个新会话
- 没有其他整理进程在跑
- 距上次扫描 ≥ 10 分钟
整理流程(四个阶段):
- Orient — 读 MEMORY.md,扫描现有记忆文件
- Gather — 检查日志,找到已过时的记忆,grep 对话记录
- Consolidate — 合并、更新、修正矛盾、转换相对日期
- Prune — 保持 MEMORY.md ≤ 200 行 / 25KB
核心思想很简单:记忆需要定期整理,不能只增不减。任何需要长期记忆的 AI 应用都能借鉴这个模式。
五、细思极恐:默认收集了哪些数据
这个发现是最让人不舒服的。
源码里扒出来,Claude Code 默认会自动收集以下数据,无需用户明确同意:
- 持久设备标识(可跨会话追踪同一用户)
- 邮箱、账户/组织 UUID
- 完整的操作系统/硬件/软件环境信息
- 时区
- 消息内容指纹(从用户消息中提取字符)
- Git 仓库远程 URL 哈希
- 实时进程资源占用
说个现实的问题:换 IP、换 U 卡、换家宽、换浏览器,通通白搭。人家 Anthropic 精着呢,靠持久设备标识就能跨会话把你锁定。
这不是说 Claude Code 不能用,但你得知道自己在用的工具背后做了什么。特别是在公司项目里用的时候,Git 仓库 URL 哈希和消息内容指纹这两项,值得好好想想。
六、一些有趣的彩蛋
扒源码的时候还发现了几个有意思的东西:
虚拟宠物系统:Anthropic 居然在做虚拟宠物,从 userId 哈希确定性生成。不知道是准备发 NFT 还是愚人节彩蛋。
大量未公开的工具和命令:源码里列出了 41 个内置工具和 80 个斜杠命令,很多还没正式上线:
| 类型 | 未公开内容 |
|---|---|
| 工具 | WebBrowserTool(浏览器自动化)、MonitorTool(监控)、PushNotificationTool(推送)、SubscribePRTool(PR 订阅)、SnipTool(截图) |
| 命令 | /teleport(会话传送)、/thinkback(回放思维链)、/ultraplan(超级规划模式)、/passes(多轮执行)、/stickers(贴纸) |
这些都还藏在 feature flag 后面,但从这些 flag 基本能看出 Anthropic 的产品路线图:
CLI → 长驻服务 → 主动模式 → 多 Agent 协作 → 操作系统级 Agent
不仅仅是功能迭代,是产品范式的切换。
最后
这次泄露本质上是一个经典的安全疏忽:source map 是开发调试用的,包含从变量名到注释的所有信息,不应该出现在生产发布物中。
给所有发 npm 包的开发者提个醒:发布前检查你的 .map 文件。一行 sourcesContent 就能让你的所有代码公之于众。
不过话说回来,对于搞 AI 工具开发的人来说,这波源码里的架构设计、prompt 工程、上下文管理策略,确实是一手的学习材料。想自己搭个类似的 agentic coding CLI,这些代码能省掉大量试错时间。