Claude Code 源码深度解析 - 前言

Claude Code 源码深度解析 - 前言

基于 Claude Code 真实源码的 Agent 工程拆解。所有内容均来自对源码的直接分析。


文章定位

本文章面向两类读者:

  • 入门者:从未开发过 Agent 系统,希望通过一个工业级真实案例理解 Agent 的完整工作原理
  • 进阶者:已有 Agent 开发经验,希望深入理解 Claude Code 在 prompt cache、任务隔离、上下文压缩等方面的精妙设计

Agent 工作流全景

Claude Code 启动后,一次完整的用户交互按照如下顺序流转:

css 复制代码
用户输入
  │
  ▼
[全局 Context Prompt 构建]  ← CLAUDE.md / 记忆文件 / 环境信息
  │
  ▼
[Agent Loop 主循环]          ← query.ts
  │
  ├─→ [Claude API 流式调用]
  │
  ├─→ [工具执行]              ← Tool System(含动态披露)
  │      ├─ TodoWrite(任务追踪)
  │      ├─ Skill(按需加载技能)
  │      ├─ Agent(Subagent / Fork / Team)
  │      └─ Bash / FileRead / FileEdit ...
  │
  ├─→ [Token Budget 检查]    ← 是否继续还是停止?
  │
  ├─→ [Auto Compaction 检查] ← 上下文是否过长?
  │
  └─→ [Hook 执行]            ← 用户自定义扩展点
        ├─ PreToolUse / PostToolUse
        ├─ Stop / SubagentStart
        └─ PreCompact / PostCompact

文章目录

章节 核心主题
第 0 章 文章总览与 Agent 工作流全景
第 1 章 Agent Loop:主查询循环的核心引擎
第 2 章 全局 Context Prompt:系统提示的构建与优先级
第 3 章 Tool System:工具调用、权限与动态披露
第 4 章 TodoWrite 与任务系统:任务追踪与后台任务
第 5 章 Subagent 与 Agent Teams:多代理编排协议
第 6 章 Skills 技能系统:Deferred 加载与按需搜索
第 7 章 Context Compaction:自动压缩与记忆恢复
第 8 章 Token Budget:令牌预算与递减收益检测
第 9 章 Hook 机制:18 种事件钩子与扩展协议
第 10 章 Worktree 隔离:Git Worktree 与任务沙箱
第 11 章 架构总图:时序图、流程图与模块关系

关键源码文件索引

bash 复制代码
src/
├── query.ts                         # Agent Loop 主循环入口
├── query/
│   ├── tokenBudget.ts               # Token Budget 逻辑
│   ├── config.ts                    # 查询配置快照
│   └── stopHooks.ts                 # 停止钩子处理
├── utils/
│   ├── systemPrompt.ts              # buildEffectiveSystemPrompt()
│   ├── attachments.ts               # 动态附件(代理列表、延迟工具)
│   ├── tokenBudget.ts               # 令牌预算解析(用户输入 +500k)
│   └── hooks.ts                     # Hook 执行入口
├── services/
│   ├── api/claude.ts                # Claude API 流式调用
│   ├── compact/
│   │   ├── compact.ts               # 主压缩引擎
│   │   ├── autoCompact.ts           # 自动压缩触发
│   │   └── microCompact.ts          # 微压缩
│   └── tools/
│       ├── toolOrchestration.ts     # 工具执行编排
│       └── StreamingToolExecutor.ts # 流式工具执行器
├── tools/
│   ├── AgentTool/
│   │   ├── runAgent.ts              # 子代理启动
│   │   ├── forkSubagent.ts          # Fork 子代理
│   │   └── loadAgentsDir.ts         # 代理定义加载
│   ├── TodoWriteTool/TodoWriteTool.ts
│   ├── SkillTool/SkillTool.ts
│   └── ToolSearchTool/ToolSearchTool.ts
├── skills/
│   └── loadSkillsDir.ts             # 技能目录扫描与加载
├── tasks/
│   ├── LocalAgentTask/              # 本地代理任务
│   ├── LocalMainSessionTask.ts      # 主会话后台化
│   └── InProcessTeammateTask/       # in-process 队友任务
├── types/
│   └── hooks.ts                     # Hook 类型与 Schema 定义
└── utils/
    ├── worktree.ts                  # Git Worktree 管理
    └── swarm/
        └── inProcessRunner.ts       # in-process 子代理运行器

核心设计哲学

Claude Code 的架构体现了几个值得深思的设计决策:

  1. Prompt Cache 优先:Fork Subagent 的消息构建确保字节级相同前缀,最大化 prompt cache 命中率
  2. 收益递减检测:Token Budget 不只检查百分比阈值,还检测最近连续轮次的 token 增长量,防止无效循环
  3. 分层上下文压缩:压缩后分别为文件(5个上限)、技能(25K token 预算)、MCP 指示恢复 context
  4. AsyncLocalStorage 隔离:子代理通过 Node.js AsyncLocalStorage 实现运行时上下文隔离,无需跨进程
  5. Feature Gate 编译时消除feature('PROACTIVE') 等条件在 Bun bundle 时静态分析,未开启的分支被完全消除
  6. Hook 即扩展点:18 种 Hook 事件覆盖 Agent 生命周期的全部关键节点,支持外部脚本动态介入
相关推荐
葫芦和十三8 小时前
图解 MongoDB 04|索引模型:每建一个索引,就是在 B+-tree 森林里多栽一棵
后端·mongodb·agent
anOnion9 小时前
构建无障碍组件之Menu Button pattern
前端·html·交互设计
用户47949283569159 小时前
claude Fable用不了?把Gpt 5.5pro接到你的claude code里
前端·后端
JieE2129 小时前
LeetCode 101. 对称二叉树|JS 递归 + 迭代双解法,彻底搞懂镜像判断
javascript·算法
GetcharZp11 小时前
告别 Nginx 复杂配置!这款带 Web 面板的万能代理神器,让端口转发变得如此简单
后端
冬奇Lab11 小时前
AI Workflow 定义的四次演进:从 Markdown 到 JS 脚本,再到分布式多 Agent
javascript·人工智能·agent
zhangxingchao11 小时前
Kotlin常用的Flow 操作符整理
前端
IT_陈寒13 小时前
React的useState居然还有这种坑?我差点删库跑路
前端·人工智能·后端
Pedantic14 小时前
SwiftUI 手势笔记
前端·后端