Claude Code 源码泄露深度分析:51 万行代码背后的 AI Agent 架构设计
约 12 分钟阅读3,483 字53 次阅读博主


本文基于 2025 年 3 月 31 日 Claude Code npm 包 source map 意外泄露事件,对其源码进行深度技术分析。
2026 年 3 月 31 日,Anthropic 旗下的 AI 编程工具 Claude Code 发生了一起意外的源码泄露事件。区块链基础设施公司 Solayer 的实习生 Chaofan Shou 在检查 Claude Code 的 npm 包时发现,包内一个体积高达 57MB 的 cli.js.map 文件指向了 Cloudflare R2 存储桶链接,其中包含 约 1900 个 TypeScript 文件、共计 51.2 万行未经混淆的完整源代码。
泄露原因相当基础:source map 文件本应在生产构建时被排除,但由于 .npmignore 配置疏漏或构建工具设置不当,导致这些包含完整原始代码的文件被一同发布到了 npm registry。Anthropic 随后紧急推送更新移除了 source map 文件,但为时已晚——GitHub 上的归档已获得超过 2 万颗星。
本文将从技术角度深入分析这 51 万行代码所揭示的 Claude Code 核心架构设计。
与业界普遍采用的多智能体复杂系统不同,Claude Code 的架构设计展现了 Anthropic 对「AI 工程师」的深刻理解:回归简单。
Claude Code 的核心机制内部代号为 "nO",本质上是一个简单的 while 循环:
while (任务未完成) {
思考 → 调用工具 → 观察结果 → 决策
}
这种设计看似简单,实则蕴含深意:
核心文件 QueryEngine.ts(约 46,000 行)正是这一引擎的实现,负责处理流式响应、工具调用循环、思考模式、重试逻辑和 token 计数等核心功能。
系统维持单一、扁平的消息历史记录,主动避免复杂的对话分支或多代理冲突。这种设计选择带来的好处是:
用户可以在 Claude Code 执行过程中随时插入新指令或调整方向,这通过名为 "h2A" 的异步双缓冲队列实现:
这一设计让 Claude Code 具备了类似「人机协作」的交互体验,而非传统的「提交-等待」模式。
与传统工具的静态索引方式不同,Claude Code 像人一样通过 grep、ls 等命令动态探索代码库,逐步建立对项目的理解。
这种动态探索的优势:
| 静态索引 | 动态探索 |
|---|---|
| 需要预先构建索引 | 无需预处理 |
| 索引可能过时 | 始终是最新状态 |
| 依赖文件系统监控 | 无需后台进程 |
| 内存占用固定 | 按需加载 |
核心文件 Tool.ts(约 29,000 行)定义了所有工具的基本类型和接口,包括:
文件操作类:
命令执行类:
外部集成类:
虽然主循环是单线程,但通过 Subagents 机制实现了有限并行:
TeamCreateTool 支持团队级并行工作,AgentTool 负责子代理生成和协调。
通过 TodoWrite 工具将复杂任务拆解为结构化列表:
// 伪代码示例
TodoWrite([
{ task: "分析项目结构", status: "completed" },
{ task: "实现用户认证", status: "in_progress" },
{ task: "编写测试用例", status: "pending" }
]);
系统会适时「提醒」自己当前进度,确保长任务不跑偏。
当对话长度达到限制(如 92%)时,自动触发 Compressor 机制:
这种设计的精妙之处:用结构化文本替代复杂的向量数据库方案,实现简单高效的记忆持久化。
对所有操作实施「请求-授权」机制:
| 操作类型 | 默认权限 |
|---|---|
| 读取文件 | 自动允许 |
| 编辑文件 | 需要确认 |
| 执行命令 | 需要确认 |
| 敏感命令 | 需要确认 + 白名单检查 |
用户可以设置命令白名单(如 npm run test)实现自动化执行。
沙箱执行:所有命令在隔离环境中运行
危险操作过滤:
curl | bash 等管道攻击推崇「先计划,后执行」模式:
main.tsx 作为 CLI 入口,实现了多项启动优化:
并行预取:在繁重模块加载前,并行预取:
懒加载:大型模块延迟加载:
commands.ts(约 25,000 行)管理所有斜杠命令的注册和执行:
/teleport、/dream 等)技能系统:可重用工作流组件
SkillTool 执行插件架构:
源码泄露揭示了大量未发布的功能标志,展现了 Claude Code 的野心:
这是 Claude Code 的「终极形态」:
Claude Code 能主动:
一个名为 autoDream 的后台进程负责「做梦」:
将复杂规划任务交给远程云容器:
__ULTRAPLAN_TELEPORT_LOCAL__ 标记传送回本地一个令人惊喜的彩蛋功能:
随机数种子盐值 friend-2026-401 暗示这可能是一场精心策划的愚人节彩蛋。
专门用于防止 Anthropic 员工意外泄露内部信息:
USER_TYPE === 'ant' 的员工身份这揭示了 Anthropic 内部使用动物命名项目的传统——「Tengu」(天狗)作为前缀在代码中出现数百次,几乎可以确定是 Claude Code 的内部代号。
Claude Code 的成功证明:复杂问题不一定需要复杂的解决方案。
从权限系统到沙箱执行,从危险命令过滤到卧底模式——安全考虑贯穿整个设计。
核心简单,外围丰富:
Plan Mode、实时操控、权限确认——所有设计都强调人始终在环中。
这次意外的源码泄露,为 AI Agent 开发者提供了一份珍贵的学习资料。51 万行代码展现的不仅是 Anthropic 的工程能力,更是对「AI 工程师」这一角色的深刻理解:
好的 Agent 不是让 AI 变得更聪明,而是让 AI 变得更可控、更可靠、更可预测。
Claude Code 的架构设计,或许会成为未来 AI Agent 开发的教科书范式。而那些未发布的实验性功能——KAIROS、PROACTIVE、autoDream——则暗示着 AI 助手正在从「被动响应」向「主动协作」演进。
| 文件 | 代码行数 | 主要职责 |
|---|---|---|
QueryEngine.ts | ~46,000 | LLM API 调用核心引擎 |
Tool.ts | ~29,000 | 工具类型定义与接口 |
commands.ts | ~25,000 | 斜杠命令注册与执行 |
main.tsx | - | CLI 入口与启动优化 |
本文仅供技术学习参考。源码版权归 Anthropic 所有,请勿用于商业用途或二次分发。
Conversation
0 条