《Claude Code 源码学习:如何设计一个强大的 AI Agent》
写作理念
本书不是代码导读,而是架构与设计思想的拆解。以 Claude Code 为案例,回答一个核心问题:一个能在终端里自主编写代码、执行命令、管理项目的 AI Agent,各个部分是如何架构的? 每一章聚焦一个设计问题,讲清"为什么这样设计"以及"能学到什么"。Mermaid 图表嵌入正文合适位置,辅助理解数据流和架构关系。
第一部分:全景视角(第 1–4 章)
第 1 章:一次请求的完整旅程
从一个用户按下回车键开始,追踪一条消息如何流经整个系统:输入处理 → 上下文组装 → API 调用 → 流式响应 → 工具调用 → 结果回传 → UI 渲染。通过这一条主线,建立对整个系统的直觉。
关键 Mermaid:端到端请求流转图
第 2 章:架构分层与模块划分
Claude Code 的四层架构:终端 UI 层(React/Ink)→ Agent 引擎层(查询循环、工具调度)→ 服务层(API、MCP、Git)→ 基础设施层(状态、权限、沙箱)。讲解为什么选择这样的分层,各层的职责边界如何划定。
关键 Mermaid:四层架构图
第 3 章:核心设计原则
Claude Code 体现的七条架构原则:流式优先、默认隔离、权限最小化、渐进增强、用户始终可控、优雅降级、可观测性。每条原则配以源码中的具体体现,讲解这些原则如何指导每一个设计决策。
关键 Mermaid:设计原则与决策的关系图
第 4 章:技术选型与权衡
为什么选 TypeScript + React + Ink 而不是 Go + BubbleTea?为什么选 Bun 而不是 Node?为什么用 Zustand 管理状态?每一项选型背后的权衡考量,以及这些选择如何影响了整体架构。
第二部分:Agent 引擎——核心循环(第 5–9 章)
第 5 章:Agentic Loop——Agent 的心脏
这是全书最重要的章节。剖析 Claude Code 的 Agent 循环:接收用户消息 → 构建上下文 → 调用 LLM → 解析响应 → 执行工具 → 将工具结果注入上下文 → 再次调用 LLM → 直到模型认为完成。讲解循环的终止条件、最大轮次限制、中断机制。
关键 Mermaid:Agent 循环状态机
第 6 章:流式响应架构
为什么 Agent 必须是流式的?讲解 Claude Code 的流式处理管线:SSE 流解析 → 增量 token 处理 → 工具调用检测 → UI 实时更新。重点讲解流式场景下的背压(backpressure)处理和错误恢复。
关键 Mermaid:流式数据管线
第 7 章:工具调度与并发执行
Agent 如何决定何时调用工具?多个工具调用如何并发执行?讲解 StreamingToolExecutor 的设计:工具的安全并发判定、结果保序、错误隔离。为什么不在所有场景都并发?
关键 Mermaid:工具调度与执行流程
第 8 章:Plan Mode——思考与行动的分离
Plan Mode 是 Claude Code 的一个精妙设计:进入计划模式后,Agent 只能读不能写,专注于探索和分析;退出计划模式后,才能执行修改操作。讲解这种"思考-行动分离"模式的设计哲学、实现方式,以及为什么这对 Agent 的可靠性至关重要。
关键 Mermaid:Plan Mode 状态转换
第 9 章:QueryEngine——查询编排器
QueryEngine 是 Agent 循环之上的编排层。讲解它如何管理一个完整查询的生命周期:从用户输入到最终结果,包括多轮工具调用的编排、上下文预算分配、成本追踪。它与 query.ts 中核心循环的分工关系。
关键 Mermaid:QueryEngine 生命周期
第三部分:上下文管理——Agent 的记忆(第 10–13 章)
第 10 章:上下文窗口——Agent 最稀缺的资源
LLM 的上下文窗口是有限的,而 Agent 需要在其中塞入系统提示、工具定义、对话历史、工具结果。讲解 Claude Code 的上下文预算分配策略:多少给系统提示、多少给历史、多少留给工具结果,以及这些比例如何动态调整。
关键 Mermaid:上下文窗口预算分配
第 11 章:上下文组装——给 Agent 看什么
每次 Agent 调用 LLM 时,都需要组装一份完整的上下文。讲解 Claude Code 的上下文构建管线:系统提示(工具说明、安全规则、项目信息)+ 对话历史 + 工具结果。重点讲解 systemPromptSections 的模块化设计,以及如何根据场景动态组装不同的提示词。
关键 Mermaid:上下文组装流水线
第 12 章:上下文压缩与摘要(Compact)
当对话变长,上下文逼近窗口上限时怎么办?讲解 Claude Code 的自动压缩机制:何时触发(~85% 阈值)、压缩策略(保留最近消息 + 生成摘要)、压缩失败时的降级方案。这是长对话 Agent 必须解决的核心问题。
关键 Mermaid:压缩触发与执行流程
第 13 章:跨会话记忆(SessionMemory)
Agent 如何在会话之间保持记忆?讲解 SessionMemory 的设计:记住什么(用户偏好、项目上下文、重要决策)、遗忘什么(临时对话细节)、存储在哪里(CLAUDE.md 文件、会话存储)。记忆系统的分层设计:工作记忆 vs 长期记忆。
关键 Mermaid:记忆分层架构
第四部分:工具系统——Agent 的双手(第 14–19 章)
第 14 章:工具架构——统一接口与注册表
讲解 Claude Code 工具系统的核心抽象:统一的工具接口(名称、描述、参数 Schema、执行函数)、工具注册表、工具池的动态组装。为什么所有工具都遵循同一接口?这带来了什么好处(权限控制、并发管理、MCP 扩展)?
关键 Mermaid:工具注册与发现机制
第 15 章:文件操作工具的设计哲学
Agent 读写文件是最基础也是最容易出错的能力。讲解文件工具的设计考量:为什么 FileEditTool 选择"精确字符串替换"而不是"行号编辑"?FileReadTool 如何处理大文件截断?文件操作与沙箱的交互。
关键 Mermaid:文件操作安全边界
第 16 章:Shell 执行——Agent 最危险的工具
让 Agent 执行 Shell 命令是最强大也最危险的能力。讲解 BashTool 的设计:命令注入防护、超时控制、后台执行、进程管理。以及 PowerShellTool 跨平台支持的设计。安全性与灵活性之间的平衡。
关键 Mermaid:Shell 命令执行安全链
第 17 章:搜索工具——让 Agent 找到信息
GrepTool(内容搜索)、GlobTool(文件搜索)是 Agent 理解代码库的眼睛。讲解搜索工具的设计:如何将 ripgrep 的能力封装为 LLM 友好的接口?搜索结果的截断策略、缓存机制,以及为什么搜索对 Agent 至关重要。
第 18 章:子 Agent 调度——AgentTool 与任务委派
讲解 Agent 如何创建子 Agent 来处理子任务。AgentTool 的设计:子 Agent 的类型(通用、探索、计划)、输入输出的传递、子 Agent 的生命周期管理。何时应该委派给子 Agent 而不是自己做?
关键 Mermaid:父子 Agent 委派模式
第 19 章:MCP——开放的工具协议
Model Context Protocol 让 Agent 能调用外部工具服务器。讲解 MCP 的架构设计:传输层抽象(stdio、SSE、WebSocket)、连接管理、服务器审批流程、MCP 工具如何无缝融入内置工具体系。MCP 对 Agent 生态的意义。
关键 Mermaid:MCP 集成架构
第五部分:权限与安全——Agent 的缰绳(第 20–23 章)
第 20 章:权限模型——信任与控制
一个自主 Agent 必须有明确的权限边界。讲解 Claude Code 的四级权限模型:Allow(自动允许)、Ask(询问用户)、Deny(拒绝)、Yolo(全部允许)。每种模式适用什么场景?权限规则如何定义(路径模式、工具类型)?
关键 Mermaid:权限评估决策树
第 21 章:权限的运行时执行
权限不只是配置,更需要在运行时逐次执行。讲解权限的运行时流程:工具发起权限请求 → 规则匹配 → 用户交互(若需要)→ 执行或拒绝。权限缓存机制、动态权限评估,以及如何避免过度打扰用户。
关键 Mermaid:权限运行时执行时序
第 22 章:沙箱——Agent 的活动围栏
讲解 Claude Code 的沙箱设计:文件系统沙箱(限制 Agent 只能访问项目目录)、网络策略、进程隔离。沙箱与权限系统的关系:权限决定"能不能做",沙箱决定"做了之后的范围"。不同操作系统的沙箱实现差异。
关键 Mermaid:沙箱多层防护
第 23 章:安全设计总结——纵深防御
汇总 Claude Code 的安全架构:输入验证 → 权限检查 → 沙箱隔离 → 操作审计。讲解纵深防御(Defense in Depth)思想在 Agent 系统中的应用:为什么需要多层安全机制,每一层解决什么问题。
关键 Mermaid:纵深防御层次图
第六部分:多 Agent 协作(第 24–27 章)
第 24 章:Swarm——多 Agent 协调架构
讲解 Claude Code 的 Swarm 模式:多个 Agent 如何协作完成复杂任务?协调者模式 vs 对等模式,任务分解策略,Agent 间的消息传递。Swarm 与单 Agent 的适用场景对比。
关键 Mermaid:Swarm 协作拓扑
第 25 章:Worktree——并行工作流
讲解 Worktree 模式的设计:如何让多个 Agent 在同一项目的不同分支上并行工作?Git worktree 的利用,隔离与合并策略。这是"Agent 并行化"的经典方案。
关键 Mermaid:Worktree 并行工作流
第 26 章:Teleport——远程协作
讲解 Teleport 机制:Agent 如何在远程环境中工作?远程会话的建立、状态同步、结果回传。Teleport 解决了什么问题(CI/CD、云端开发环境)。
关键 Mermaid:Teleport 远程会话架构
第 27 章:后台任务与异步执行
讲解后台任务系统:Agent 可以启动长时间运行的任务,而不阻塞主对话。任务的生命周期(创建 → 运行 → 完成/失败)、输出持久化、取消机制、Cron 调度。这是 Agent 从"对话式"走向"自动化"的关键。
关键 Mermaid:后台任务生命周期
第七部分:状态管理(第 28–30 章)
第 28 章:全局状态设计
讲解 Claude Code 的全局状态管理:为什么选择集中式状态(单一大 Store)?状态的结构设计(对话历史、工具状态、权限状态、UI 状态)。集中式状态 vs 分布式状态的权衡。
关键 Mermaid:状态结构关系图
第 29 章:状态变更与响应式更新
讲解状态变更如何驱动 UI 更新:选择器模式(Selector Pattern)避免不必要的重渲染,变更监听(onChangeAppState)实现副作用。这种"单向数据流"在终端应用中的优势。
关键 Mermaid:状态 → UI 响应式管线
第 30 章:对话历史的持久化与恢复
讲解对话历史的存储和恢复机制:会话如何持久化到磁盘?如何从断点恢复对话?历史记录的压缩与索引。为什么这对 Agent 的用户体验至关重要。
关键 Mermaid:会话持久化与恢复流程
第八部分:终端 UI 架构(第 31–34 章)
第 31 章:React 在终端——Ink 框架的设计
为什么选择 React 来构建终端 UI?讲解 Ink 框架的核心思想:用 React 的组件模型来描述终端界面,用 Virtual DOM diff 来最小化终端重绘。这种"声明式终端 UI"的优势和挑战。
关键 Mermaid:Ink 渲染管线
第 32 章:消息渲染——从 AI 输出到终端显示
讲解 AI 回复如何渲染到终端:Markdown 渲染、语法高亮、工具调用状态的实时展示。流式渲染的挑战:如何在 token 逐个到达时保持正确的 Markdown 格式?这是 Agent 用户体验的核心。
关键 Mermaid:消息渲染管线
第 33 章:输入系统——用户如何与 Agent 交互
讲解终端输入系统的设计:文本输入、多行编辑、Vim 模式、自动补全、斜杠命令。输入系统如何与 Agent 循环配合——用户随时可以中断 Agent、发送新消息、或在 Agent 思考时排队消息。
关键 Mermaid:用户输入处理管线
第 34 章:虚拟滚动与渲染性能
讲解为什么终端 UI 也需要虚拟滚动:长对话场景下,渲染几千条消息会卡顿。虚拟滚动算法、离屏冻结(OffscreenFreeze)优化。性能优化的一般原则:只在需要时渲染。
关键 Mermaid:虚拟滚动原理
第九部分:可扩展性架构(第 35–38 章)
第 35 章:命令系统——可插拔的命令架构
讲解 Claude Code 的命令系统设计:三种命令类型(Prompt 命令、本地命令、UI 命令)、命令的动态注册与发现、命令的懒加载。为什么命令系统必须是可插拔的?
关键 Mermaid:命令注册与路由
第 36 章:插件系统——第三方扩展机制
讲解插件架构:插件的加载与沙箱隔离、插件能做什么(注册工具、注册命令、注册 Hook)、热重载机制。插件系统的安全边界:如何让第三方扩展不影响系统稳定性。
关键 Mermaid:插件生命周期
第 37 章:技能系统(Skills)
技能(Skills)是 Claude Code 的"可复用提示词"机制。讲解技能的设计:如何定义一个技能(提示词模板 + 工具约束)、技能的加载与发现、技能与插件的异同。技能系统如何让 Agent 的能力可以被社区共享。
关键 Mermaid:技能加载与执行
第 38 章:Feature Flag 与渐进式发布
讲解 Claude Code 的 Feature Flag 机制:如何通过编译时和运行时的 Feature Flag 控制功能发布?条件编译(bun:bundle)与运行时检测的结合。这对大型 Agent 系统的迭代管理有什么意义?
第十部分:系统韧性(第 39–42 章)
第 39 章:错误处理与重试策略
讲解 Claude Code 的分层错误处理:工具级错误(隔离不影响其他工具)→ 查询级错误(流式降级为同步)→ 系统级错误(熔断器防止级联故障)。不同层级的重试策略:何时指数退避、何时快速失败。
关键 Mermaid:错误处理层级
第 40 章:成本控制与速率限制
讲解 Agent 的成本管理:Token 用量追踪、API 速率限制处理、用户预算控制。Agent 的经济性问题:如何在保证能力的前提下控制成本?渐进式阈值警告的设计。
关键 Mermaid:成本控制管线
第 41 章:OAuth 与认证架构
讲解 Claude Code 的认证设计:OAuth 流程、API Key 管理、Token 刷新机制。Agent 的认证特殊性:不仅要认证用户,还要让用户授权 Agent 的每个敏感操作。
关键 Mermaid:认证流程
第 42 章:可观测性——日志、遥测与诊断
讲解 Agent 系统的可观测性设计:内部日志系统、遥测事件(Analytics)、诊断命令(doctor、debug-tool-call)。为什么可观测性对 Agent 系统尤其重要——Agent 的行为是"黑箱",需要充分的窗口来理解和调试。
关键 Mermaid:可观测性架构
第十一部分:启动与生命周期(第 43–44 章)
第 43 章:启动流程——从命令行到 Agent 就绪
讲解 Claude Code 的启动优化:快速路径(版本检查、帮助信息直接返回)、延迟初始化(插件、MCP 连接异步加载)、启动性能分析。CLI 工具的启动体验为什么重要——用户期望"秒开"。
关键 Mermaid:启动时序
第 44 章:应用状态机——从引导到就绪
讲解 Claude Code 的 Bootstrap 状态机:首次使用引导(Onboarding)→ 认证 → 配置加载 → Agent 就绪。不同状态之间的转换条件和转换动作。状态机模式在复杂启动流程中的应用。
关键 Mermaid:Bootstrap 状态机
第十二部分:总结(第 45 章)
第 45 章:架构模式总结与启示
汇总全书涉及的核心设计模式:Agent 循环模式、工具注册表模式、权限中间件模式、上下文预算模式、多 Agent 委派模式、流式处理模式、渐进降级模式。对"如何设计一个 AI Agent 系统"给出实践建议。以及当前架构的局限性和未来可能的方向。
关键 Mermaid:设计模式全景图
执行计划
阶段一:确认大纲(当前)
- 用户审阅并确认
阶段二:章节撰写
- 共 45 章,使用 subagent 并行撰写
- 每章保存为
chNN.md(如ch01.md) - 每章聚焦一个设计问题,Mermaid 图表嵌入正文合适位置
- 不堆砌代码细节,专注架构思想
阶段三:整合
- 生成
SUMMARY.md总目录 - 统一术语和交叉引用