note-md

Claude Code 深度解析总览

本章是全书中 Claude Code 架构的唯一深度解析入口。其他章节在涉及 Claude Code 时仅做简短引用并指向本章。

1. 设计哲学

Claude Code 的成功来自一个反直觉的洞察:

LLM 本身已经足够难以调试——额外的复杂性(多 Agent、复杂交接、精心设计的 RAG)会让调试指数级变难。

核心原则:做能工作的最简单方案

具体体现:

2. TAOR 主循环

Think-Act-Observe-Repeat (TAOR) 是 Claude Code 的核心架构,扩展了 ReAct 范式(详见第4章 Agent 设计模式中的模式对比):

┌─────────────────────────────────────────────────┐
│                  TAOR Loop                       │
│                                                 │
│  1. Pre-check & Compaction                      │
│     - 消耗注入的消息                              │
│     - 检查内存压力,必要时压缩                     │
│                                                 │
│  2. Thinking (可选)                              │
│     - 链式思维推理                                │
│     - 深度可配置                                  │
│                                                 │
│  3. Self-Critique (可选)                         │
│     - 推理过程自我验证                            │
│                                                 │
│  4. Action                                      │
│     - LLM 调用,携带完整工具 Schema               │
│     - 输出工具调用或最终回复                       │
│                                                 │
│  5. Tool Execution                              │
│     - 通过 ToolRegistry 分发                     │
│     - 安全检查 + 权限验证                         │
│                                                 │
│  6. Post-processing                             │
│     - 决定继续迭代或终止                          │
│     - 结果注入下一轮上下文                        │
│                                                 │
│  ←────── 循环 ──────→                            │
└─────────────────────────────────────────────────┘

关键设计:模型控制循环。代码不决定何时调用工具、何时停止——模型自己决定。运行时只负责执行模型的指令并返回结果。

3. 工具系统

3.1 能力原语 > 专用集成

Claude Code 没有 100 个专用工具,而是提供 4 个能力原语:

原语 代表工具 覆盖范围
Read Read, Glob, Grep 信息获取
Write Write, Edit 内容创建与修改
Execute Bash 系统操作(万能适配器)
Connect Agent, WebFetch 子任务分发与外部交互

Bash 作为万能适配器:任何无法通过原语直接完成的操作,都可以通过 Bash 执行。这使得工具集极简但覆盖面极广。

工具系统的通用设计原则(Registry-Based Dispatch、延迟发现等),详见第3章 Harness 工程

3.2 ToolRegistry

中央注册表将工具名映射到类型化处理器:

用户请求 → LLM 输出工具调用 → ToolRegistry 查找 → Handler 执行 → 结果返回

设计要点:

3.3 模糊匹配编辑

Edit 工具使用 9-pass 匹配链,从严格到宽松逐步尝试:

Pass 1: 精确字符串匹配
Pass 2: 空白字符归一化
Pass 3: 缩进偏移补偿
...
Pass 9: 最宽松的模糊匹配

这解决了 LLM 输出代码时常见的微小格式差异问题。

4. Sub-Agent 架构

4.1 内置子 Agent 类型

Agent 类型 工具权限 用途
Explore 只读(Glob, Grep, Read) 快速代码库探索
Plan 只读 架构设计与实现规划
General-purpose 全部工具 复杂多步骤任务

4.2 上下文隔离

每个子 Agent 运行独立的 TAOR 循环,拥有独立的上下文窗口:

主 Agent (1M tokens context)
  │
  ├── spawn Explore Agent ──→ [独立上下文] ──→ 返回 1-2K token 摘要
  │
  ├── spawn Plan Agent ──→ [独立上下文] ──→ 返回结构化计划
  │
  └── spawn General Agent ──→ [独立上下文] ──→ 返回任务结果

关键收益:

Sub-Agent 隔离作为通用设计模式的分析,详见第4章 Agent 设计模式

5. 上下文管理

5.1 四大子系统

  1. System Reminders:在对话流中的决策点注入针对性指导
  2. Prompt Composer:启动时模块化组装系统提示
  3. Memory:6 层记忆体系实现跨会话连续性
  4. Compaction:约 50% 使用率时自动压缩历史

上下文管理的通用原则(Just-In-Time、信噪比优化等),详见第2章 上下文工程

5.2 6 层记忆体系

Layer 1: Organization (组织级)
Layer 2: Project (项目级 - CLAUDE.md)
Layer 3: User (用户级 - 偏好、反馈)
Layer 4: Auto-Learned Patterns (自动学习)
Layer 5: Session (会话级 - 当前对话)
Layer 6: Task (任务级 - 当前任务进度)

从持久到临时,从宽范围到窄范围,构成完整的记忆层级。

关键设计:

记忆系统的学术分类和生产级框架对比,详见第5章 Agent 记忆与自进化

5.3 语义工具搜索

不是一次性将所有工具 Schema 注入上下文,而是:

  1. 维护工具描述的向量索引
  2. 根据当前任务语义搜索相关工具
  3. 只注入匹配的工具 Schema

这在工具数量多时显著节省上下文空间。

6. Scaffolding 与 Harness

Claude Code 清晰体现了 Scaffolding/Harness 的分工:

阶段 Claude Code 中的体现
Scaffolding(启动前) Prompt Composer 组装系统提示、ToolRegistry 注册内置工具、初始化子 Agent 类型
Harness(运行时) TAOR 循环运行、工具调度与执行、上下文压缩、安全检查与审批

Scaffolding vs Harness 的通用概念辨析,详见第3章 Harness 工程

7. 安全模型

安全纵深防御的完整体系,详见第9章 评测、可观测性与安全

8. 为什么 Claude Code 成为标杆

Claude Code 在 2025 年末成为主导编程 Agent 的关键因素:

  1. 1M Token 上下文:Opus 4.6 的百万 token 上下文窗口意味着可以一次性理解整个中大型代码库
  2. Agent Teams:真正的多 Agent 协作,并行处理不同方面的任务
  3. 架构简洁性:单线程 TAOR 循环,约 50 行核心逻辑,极易理解和调试
  4. 能力原语:4 个基础工具覆盖所有场景,Bash 作为万能适配器
  5. 企业定价策略:积极的价格策略推动企业采用

核心启示:简洁架构 + 强模型 > 复杂架构 + 弱模型。当模型足够强时,减少工程复杂性反而能获得更好的效果。

参考