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 生命周期的全部关键节点,支持外部脚本动态介入
相关推荐
hehelm2 小时前
vector模拟实现
前端·javascript·算法
|晴 天|2 小时前
[特殊字符]️ Vue 3项目架构设计:从2200行单文件到24个组件
前端·javascript·vue.js
清溪5492 小时前
Damn Vulnerable Web Application(中)
后端
清溪5492 小时前
Damn Vulnerable Web Application(上)
后端
掘金码甲哥2 小时前
AI编程智能体登味太浓了,必须治一治!
后端
FrontAI2 小时前
深入浅出 LangChain —— 第三章:模型抽象层
前端·人工智能·typescript·langchain·ai agent
givemeacar2 小时前
spring-boot-starter和spring-boot-starter-web的关联
前端
StackNoOverflow2 小时前
SpringCloud的声明式服务调用 Feign 全面解析
后端·spring·spring cloud
木心术12 小时前
RESTful API设计最佳实践:构建可扩展的后端服务
后端·restful