AgentHarness 课程
Claude Code 源码/课程概述

第一章:课程导论

研究动机、方法论、项目全局认知

学习时间: 2 小时 | 难度: ⭐⭐ | 前置: TypeScript 基础、LLM API 了解


学习目标

完成本章后,学员将能够:

  • 理解为什么要研究 Claude Code 源码
  • 掌握「文档×源码逐条验证」的研究方法论
  • 了解 Claude Code 项目的关键数字和技术栈
  • 明确课程的整体结构和学习路径

1. 为什么要研究 Claude Code

1.1 Claude Code 是什么

Claude Code 是 Anthropic 官方发布的终端 AI Agent。它不是一个简单的 CLI 工具,而是一个完整的、生产级的 ReAct Agent 系统。其核心是一个多轮对话循环:

用户输入 → 构建上下文 → API 流式调用 → 解析响应 → 工具调用 → 结果注入 → 循环

这个循环看起来简单,但在生产环境中实现它需要解决大量工程问题:

  • 54 个内置工具的统一抽象和调度
  • 4 层权限管道的安全保障
  • 流式执行器的并发控制
  • 900 行 System Prompt 的动态构建
  • 8 种传输协议的 MCP 外部工具集成
  • 7 种状态转换的查询循环状态机

1.2 研究价值

维度价值
架构参考Anthropic 工程团队的最佳实践,经过大规模用户验证
设计模式24 种可复用的 Agent 架构模式
工程细节从启动优化到错误恢复的完整工程链路
对比基准评估自己 Agent 系统的成熟度标尺

1.3 研究局限

⚠️ 重要声明:本研究基于反编译还原版源码(claude-js v1.0.2),存在以下局限:

  1. Feature Flag 全部禁用feature() 函数被 polyfill 为始终返回 false,意味着 Anthropic 内部功能(COORDINATOR_MODE、KAIROS、PROACTIVE 等)的代码被完全消除
  2. 部分模块被 Stub — Computer Use、Voice Mode、Magic Docs 等模块被替换为空实现
  3. tsc 错误约 1341 个 — 反编译产生的类型错误,不影响 Bun 运行时执行
  4. 无法获取完整实现 — 只能分析公开的反编译版本,部分逻辑可能被优化掉

2. 研究方法论

2.1 三层验证法

本课程采用「文档×源码逐条验证」的研究方法:

第一层: 文档收集 (45 篇深度分析文档)
    ↓
第二层: 源码验证 (逐条对照 50+ 核心源文件)
    ↓
第三层: 自主分析 (发现文档未覆盖的模式和设计)

2.2 验证流程

对于每一个关键声明,我们执行以下验证流程:

// 伪代码:验证流程
async function verifyClaim(claim: Claim): Promise<VerificationResult> {
  // 1. 定位源文件
  const sourceFile = locateFile(claim.filePath)
  
  // 2. 读取源码并对比
  const actualValue = readSource(sourceFile, claim.lineRange)
  
  // 3. 分类结果
  if (actualValue === claim.expected) return '✅ 精确匹配'
  if (withinTolerance(actualValue, claim.expected, 0.05)) return '⚠️ 小误差'
  if (fundamentallyDifferent(actualValue, claim.expected)) return '❌ 严重错误'
  
  // 4. 记录发现
  return { status, actualValue, claim.expected, difference }
}

2.3 验证结果统计

验证类别数量说明
✅ 精确匹配~150源码与文档完全一致
⚠️ 小误差~305% 以内的数值差异
❌ 严重错误9完全错误或虚构的内容
⚠️ 部分错误15+概念对但细节错
📝 补充发现~20文档未提及的重要内容

3. 项目全局认知

3.1 关键数字

所有数字均经过源码验证:

指标文档声称源码实际结论
源文件数784 / 500+2799⚠️ 严重低估(3.5-5.5倍差距)
内置工具数5554 (getAllBaseTools)✅ 基本准确
斜杠命令数102+~113 (73基础+12条件+28内部)✅ 准确
MCP 传输协议8 种8 种✅ 精确
快速路径13 条13 条✅ 精确
启动阶段9 阶段9 阶段✅ 精确
Ink 框架文件未提及104 个 (内部 fork)📝 补充
System Prompt 行数~900~900✅ 准确
总代码量10万+ 行📝 补充

3.2 技术栈

技术验证状态
运行时Bun (非 Node.js)✅ cli.tsx #!/usr/bin/env bun
语言TypeScript + TSX
UIReact + Ink (内部 fork, 104 文件)
CLI@commander-js/extra-typings
API@anthropic-ai/sdk (流式)
SchemaZod v4
构建bun build 单文件 (~25MB)
模块系统ESM ("type": "module")

3.3 项目结构概览

claude-code-release/
├── src/
│   ├── entrypoints/
│   │   ├── cli.tsx          (320行)  — 真正入口 + polyfill
│   │   └── init.ts          — 一次性初始化
│   ├── main.tsx             (4683行) — Commander.js CLI 定义
│   ├── query.ts             (1732行) — 核心查询循环 ⭐最重要
│   ├── QueryEngine.ts       (1320行) — 会话编排器
│   ├── Tool.ts              (792行)  — Tool 接口定义
│   ├── tools.ts             (389行)  — 工具注册表
│   ├── commands.ts          (754行)  — 命令注册表
│   ├── context.ts                    — 上下文收集
│   ├── screens/
│   │   └── REPL.tsx         (5009行) — 主 REPL 屏幕
│   ├── services/
│   │   ├── api/claude.ts    (3420行) — API 客户端
│   │   ├── mcp/client.ts    (3351行) — MCP 客户端
│   │   ├── compact/         (~1700行) — 上下文压缩
│   │   └── tools/
│   │       └── StreamingToolExecutor.ts (530行)
│   ├── tools/                        — 54 个内置工具
│   │   ├── BashTool/
│   │   ├── FileEditTool/
│   │   ├── AgentTool/       (1397行)
│   │   └── ...
│   ├── utils/
│   │   ├── permissions/     (~1500行) — 权限系统
│   │   ├── claudemd.ts               — CLAUDE.md 加载
│   │   └── hooks/           (~5121行) — Hook 系统
│   ├── bootstrap/
│   │   └── state.ts         (1758行) — 全局单例状态
│   ├── ink/                 (104文件) — Ink 框架 fork
│   └── constants/
│       └── prompts.ts       (~900行) — System prompt
├── packages/                        — 内部包 (stub)
└── dist/cli.js              (~25MB) — 构建产物

4. 课程结构说明

本课程共 12 个章节,按照从宏观到微观、从理论到实践的顺序组织:

阶段章节聚焦点
认知层01-导论、02-架构全局理解
机制层03-工具、04-权限、05-上下文、06-MCP、07-状态五大核心系统
模式层08-设计模式24 种可复用模式
应用层09-启示、10-实操对比分析和动手练习

每个章节遵循统一模板:

  1. 学习目标 — 明确本章要掌握什么
  2. 核心内容 — 系统化讲解(含表格、代码片段、架构图)
  3. 源码验证 — 标注验证状态
  4. 关键代码 — 精选源码片段
  5. 设计模式 — 本章涉及的模式
  6. 思考题 — 检验理解深度

设计模式

本章涉及的模式:

模式定义本章应用
Verification-Driven Analysis文档×源码逐条验证研究方法论的核心
Incremental Disclosure从概要到细节的渐进式呈现课程结构设计

思考题

  1. 为什么 Claude Code 的源文件数(2799)远超文档声称的(784/500+)? 这对文档驱动开发有什么启示?

  2. Claude Code 选择 Bun 而非 Node.js 作为运行时,这对启动性能有什么影响? 快速路径设计如何利用了 Bun 的特性?

  3. 反编译源码的 1341 个 tsc 错误不影响运行时执行,这说明了 TypeScript 的什么特性? 在自己的项目中应该如何看待类型错误?

  4. 如果要对一个 AI Agent 系统进行类似的源码研究,你会采用什么验证方法论?


参考资料


下一章: 02-架构全景