Claude Code 架构设计指南
2026 年 3 月,一个 source map 文件让 Claude Code 的完整源码离开了 Anthropic 的服务器。构建管线漏排了一个 *.map 文件,sourcesContent 字段里躺着压缩前的全部原始代码。这份备份给了我们一个难得的机会:完整阅读一个生产级、被数百万人日常使用的 Agent Harness 的源码。
这个系列按模块逐章拆解它。你会看到一个 while(true) 的 async generator 如何驱动全部核心逻辑,五十多个工具如何靠一份统一契约装进同一个调度器,权限系统的决策链如何在工作流中守住最后一道闸门,上下文如何在五层压缩下不失控,以及 Hook、MCP、终端里的 React 这些设计各自解决了什么问题。
如果你读过我写的 DeepSeek Harness 架构设计指南,可以把这个系列当作对照实验:一个是开源社区的全插件化方案,一个是闭源商业产品的工程实现,两家在几乎相同的问题空间里做出了哪些相同与不同的取舍。
面向对 Agent 架构有兴趣的工程师,不要求读过 Claude Code 的源码,但假定你写过 TypeScript 或类似语言。
全部章节(12 章)
- 01Harness 是什么,从泄露源码说起
Claude Code 的 npm 包里为何躺着完整源码,source map 泄露的来龙去脉与这份备份的价值。
- 02主循环,一个 while(true) 驱动整个 Agent
queryLoop 如何用一个 async generator 管住全部核心逻辑,以及不可变 State 的干净重置。
- 03消息的生命周期
内部十来种 Message 类型如何规整成 API 认识的样子,tool_result 为何挂在 user 轮下。
- 04工具的统一契约
五十多个工具装进同一个系统的关键:Tool 接口的描述、执行、权限、渲染四块契约。
- 05工具执行,流式与并发分区
runTools 与 StreamingToolExecutor 两条路,并发安全工具的分区与调度策略。
- 06权限系统,规则、模式与分类器
allow/deny/ask 三种裁决背后的有序决策链与模式转换。
- 07子代理,递归的主循环
子代理如何复用主循环的全部机制,上下文隔离与结果回传。
- 08上下文管理,五层压缩
从 tool_result 截断到 auto-compact,长会话上下文的五层压缩设计。
- 09Hook 系统,可编程的挂点
把生命周期事件开放给用户脚本的挂点设计,以及它撑起的自动化生态。
- 10MCP 集成,外部能力的统一收编
MCP 服务器如何被转译成内部工具契约,与原生工具同池调度。
- 11UI 层,终端里的 React
用 React 渲染终端界面的架构选择,流式更新与组件化输出。
- 12彩蛋与实验田
源码里那些有趣的小设计、实验性功能与值得玩味的工程取舍。