Claude Code深度技术解析:Anthropic开源AI编程代理的架构与实现原理

从Agentic Loop到多Agent协作:深入剖析Anthropic开源AI编程工具的架构与实现

Posted by 爱折腾的工程师 on Thursday, March 26, 2026

一、引言

在AI编程工具百花齐放的今天,Anthropic推出的Claude Code以其独特的「终端原生+代理式」架构,迅速成为开发者社区的焦点。截至2026年3月,其GitHub仓库已获得82.6k+ Stars,成为最受欢迎的AI编程工具之一。

与传统的代码补全工具(如GitHub Copilot)不同,Claude Code不是一个被动的「建议者」,而是一个主动的「执行者」——它能理解自然语言指令,自主规划任务步骤,直接在终端中读写文件、执行命令、运行测试,形成完整的「感知-决策-执行-验证」闭环。

🔗 仓库地址:https://github.com/anthropics/claude-code

📜 语言构成:Shell 47.0% | Python 29.3% | TypeScript 17.7%

本文将从架构设计、核心机制、工具系统、多Agent协作等维度,对Claude Code进行全面的技术剖析。


二、整体架构概览

2.1 架构分层

Claude Code采用清晰的分层架构,自顶向下可分为四个层次:

Claude Code 整体架构图

┌─────────────────────────────────────────────────────┐
│                   用户接口层 (Surfaces)               │
│  Terminal CLI │ VS Code │ Desktop App │ JetBrains │ Web  │
├─────────────────────────────────────────────────────┤
│                   Agentic Loop 核心层                │
│        Gather Context → Take Action → Verify Results │
├─────────────────────────────────────────────────────┤
│                     工具系统层                        │
│  File Ops │ Search │ Execution │ Web │ Code Intelligence │
├─────────────────────────────────────────────────────┤
│                   上下文管理层                        │
│  CLAUDE.md │ Auto Memory │ Context Compression │ Sub-agents │
└─────────────────────────────────────────────────────┘

核心设计哲学可以概括为一句话:

模型即Agent,工程即Harness。

Claude Code的核心智能来自Claude大模型本身(Agent),而工程团队构建的是一个Harness(套件)——为模型提供工具、知识、观察、动作接口和权限治理的运行环境。

Harness = Tools + Knowledge + Observation + Action Interfaces + Permissions

2.2 仓库结构

anthropics/claude-code/
├── .claude-plugin          # 插件配置
├── .claude/commands/       # 自定义命令目录
├── .devcontainer/          # 开发容器配置
├── Script/                 # 脚本目录
├── examples/               # 使用示例
├── plugins/                # 插件扩展
├── scripts/                # 工具脚本
├── README.md               # 主文档
├── CHANGELOG.md            # 版本变更
└── SECURITY.md             # 安全策略

2.3 多Surface统一体验

Claude Code的一大亮点是跨Surface一致性:无论用户通过终端CLI、VS Code扩展、桌面应用还是Web界面使用,底层引擎、指令配置、MCP服务器设置均保持共享和同步。

Surface 特点
Terminal CLI 终端原生,直接访问完整开发工具链
VS Code Extension 内联diff、计划审查、历史记录
Desktop App 可视化diff审查、会话管理
Web 无需本地环境,浏览器即可使用
JetBrains IDE 完整的JetBrains套件集成

三、核心机制:Agentic Loop

3.1 循环原理

Agentic Loop是Claude Code的心脏。与简单的「输入-输出」对话不同,它是一个持续自适应的循环,包含三个交织的阶段:

Claude Code Agentic Loop 流程图

  1. Gather Context(收集上下文):搜索文件、读取代码、探索项目结构
  2. Take Action(采取行动):编辑文件、执行Shell命令、运行代码
  3. Verify Results(验证结果):运行测试、检查输出、审查变更

3.2 循环的核心代码模式

用伪代码表示,整个Agentic Loop的骨架极其精简:

def agent_loop(messages):
    while True:
        # 1. 调用 LLM 获取下一步决策
        response = client.messages.create(
            model=MODEL,
            system=SYSTEM_PROMPT,
            messages=messages,
            tools=TOOLS,
        )
        messages.append({"role": "assistant", "content": response.content})

        # 2. 检查是否需要使用工具
        if response.stop_reason != "tool_use":
            return  # 无需工具调用,返回文本结果

        # 3. 执行工具并收集结果
        results = []
        for block in response.content:
            if block.type == "tool_use":
                output = TOOL_HANDLERS[block.name](**block.input)
                results.append({
                    "type": "tool_result",
                    "tool_use_id": block.id,
                    "content": output,
                })

        # 4. 将工具结果作为新消息追加,继续循环
        messages.append({"role": "user", "content": results})

关键洞察

  • 整个循环的控制权在模型手中——模型决定是否使用工具、使用哪个工具、以什么参数调用
  • Harness代码只负责执行模型的决策,然后将结果反馈回去
  • 循环会一直持续,直到模型认为任务完成(stop_reason != "tool_use"

3.3 实际执行示例

当用户输入「修复失败的测试」时,Claude Code的典型执行路径:

用户: "修复失败的测试"
  │
  ▼
[Gather] 运行测试套件,识别失败用例
  │
  ▼
[Gather] 读取错误输出,分析失败原因
  │
  ▼
[Gather] 搜索相关源文件
  │
  ▼
[Gather] 读取这些文件内容
  │
  ▼
[Action] 编辑文件修复问题
  │
  ▼
[Verify] 重新运行测试验证修复
  │
  ├─ 通过 → 输出结果给用户
  │
  └─ 失败 → 回到 [Gather] 继续分析

每一步的工具调用结果都会反馈回模型,模型根据最新信息动态调整下一步策略。这种自适应能力是Claude Code与传统脚本化工具的根本区别。


四、工具系统

4.1 工具设计原则

工具是将Claude从「文本生成器」转变为「代理系统」的关键。Claude Code的工具设计遵循三大原则:

Claude Code 工具系统

原则 说明
原子性 每个工具只做一件事,职责单一
可组合性 工具可以自由组合,形成复杂工作流
描述清晰 每个工具有详尽的文档,模型能准确理解其能力边界

4.2 内置工具清单

Claude Code包含18个内置工具,覆盖开发全流程:

文件操作类

工具 功能
Read / ReadFile 读取文件内容
Write 创建或覆盖文件
Edit 精确的字符串替换编辑
MultiEdit 批量编辑多个文件

搜索类

工具 功能
Glob 按模式搜索文件路径
Grep 基于正则表达式搜索文件内容
CodebaseSearch 语义化代码搜索

执行类

工具 功能
Bash 执行Shell命令(构建、测试、Git等)

Web类

工具 功能
WebSearch 互联网搜索
WebFetch 获取网页内容

任务管理类

工具 功能
TodoWrite 创建和管理任务列表(2,161 tokens描述)
EnterPlanMode 进入计划模式

Agent协作类

工具 功能
SendMessageTool Agent间消息传递
TeammateTool 管理团队和子Agent

4.3 工具注册与分发机制

工具通过一个注册表(Registry)进行管理,循环中通过名称分发到具体的处理函数:

TOOL_HANDLERS = {
    "bash":           execute_bash,
    "read_file":      read_file,
    "write_file":     write_file,
    "edit":           edit_file,
    "glob":           glob_search,
    "grep":           grep_search,
    "codebase_search": semantic_search,
    "web_search":     web_search,
    "web_fetch":      web_fetch,
    "todo_write":     todo_write,
    # ...
}

模型在每次API响应中返回工具调用请求(tool_use block),Harness提取工具名称和参数,从注册表中查找对应处理函数并执行,最后将结果以tool_result格式追加到消息历史中。

4.4 MCP扩展工具

除了内置工具,Claude Code还支持通过Model Context Protocol (MCP) 接入外部工具和数据源。MCP是Anthropic提出的一个开放标准,允许连接:

  • 数据库(PostgreSQL、MySQL等)
  • 项目管理工具(Jira、Linear)
  • 通信平台(Slack、Discord)
  • 文档系统(Google Drive、Notion)

这使得Claude Code的工具能力具备了无限扩展性


五、上下文管理

5.1 上下文窗口

Claude Code的上下文窗口承载了所有必要的信息:

内容类型 说明
对话历史 用户与Agent的完整交互记录
文件内容 读取的源代码、配置文件
命令输出 Shell命令执行结果
CLAUDE.md 项目级别的持久化指令
Auto Memory 自动学习的项目模式和偏好
系统指令 内置的系统提示词

5.2 CLAUDE.md:项目记忆

CLAUDE.md是Claude Code的核心配置机制。它是一个放在项目根目录的Markdown文件,每次会话开始时自动加载,为模型提供项目特定的上下文:

# CLAUDE.md

## 项目架构
- 前端:React + TypeScript
- 后端:Go + gRPC
- 数据库:PostgreSQL

## 编码规范
- 使用 ESLint + Prettier
- 提交信息遵循 Conventional Commits
- 测试覆盖率要求 > 80%

## 常用命令
- `make build` - 构建项目
- `make test` - 运行测试
- `make lint` - 代码检查

5.3 上下文压缩(Compaction)

长会话会导致上下文窗口逐渐填满。Claude Code采用三层压缩策略

  1. 清理旧工具输出:移除早期的工具调用结果(通常是最占空间的内容)
  2. 对话摘要:将历史对话压缩为核心要点的摘要
  3. 持久化关键信息:将重要规则和模式写入CLAUDE.md,而非依赖对话记忆

用户也可以通过/compact命令手动触发压缩。

5.4 子Agent隔离

为了避免复杂任务污染主对话上下文,Claude Code可以生成子Agent

主 Agent(协调者)
├── 子 Agent A(独立上下文)→ 返回摘要
├── 子 Agent B(独立上下文)→ 返回摘要  
└── 子 Agent C(独立上下文)→ 返回摘要

每个子Agent拥有独立的消息列表,完成任务后仅向主Agent返回结果摘要。这一机制有效控制了上下文膨胀。


六、多Agent协作架构

6.1 协作模式

Claude Code支持高级的多Agent协作模式,这是其区别于大多数AI编程工具的重要特性:

Claude Code 多Agent协作架构

6.2 Task系统

Task系统是多Agent协作的基础,提供基于文件系统的任务CRUD和依赖图管理:

任务看板
├── task-001: 实现用户认证模块     [completed]
├── task-002: 编写认证API测试      [in_progress] → 依赖 task-001
├── task-003: 集成前端登录页面      [pending]     → 依赖 task-001
└── task-004: 部署到测试环境       [pending]     → 依赖 task-002, task-003

6.3 异步邮箱通信

Agent之间通过JSONL格式的异步邮箱进行通信,支持以下消息类型:

消息类型 说明
message 发送给特定队友的直接消息
broadcast 广播给所有队友
shutdown_request 请求队友关闭
shutdown_response 响应关闭请求
plan_approval_response 审批计划

6.4 Worktree隔离

为避免多个Agent在同一目录下产生文件冲突,每个Agent可在独立的Git Worktree中工作:

项目仓库
├── worktree-agent-A/    # Agent A 的独立工作目录
├── worktree-agent-B/    # Agent B 的独立工作目录
└── worktree-agent-C/    # Agent C 的独立工作目录

任务ID与Worktree绑定,确保每个Agent的文件操作互不干扰。

6.5 自主认领机制

在高级模式下,Agent无需中央调度,可自主扫描任务看板并认领未分配的任务。这大幅提升了并行效率,减少了协调开销。


七、系统提示词架构

7.1 模块化提示词

Claude Code并不使用单一的系统提示词,而是采用模块化、条件组装的策略。根据对v2.1.81版本的分析,其系统提示词由110+个字符串组成,包括:

类别 数量 典型Token数
Agent提示词(子Agent、工具类) ~15 384 - 5,667 tks
内置工具描述 18 129 - 2,161 tks
数据引用(SDK/API文档) ~12 2,837 - 5,106 tks
系统提醒 40+ 30 - 1,297 tks
Skills ~5 2,625 - 5,379 tks

7.2 条件注入

不同的提示词片段根据以下条件动态注入:

  • 运行环境:Terminal / VS Code / Desktop等
  • 当前模式:Normal / Plan / Auto
  • 功能状态:是否启用了团队协作、学习模式等
  • 用户配置:Hooks、MCP服务器、自定义命令等

这种设计在控制Token消耗的同时,确保了模型获得最相关的指令上下文。


八、安全与权限治理

8.1 权限模式

Claude Code提供四种权限模式,平衡自主性与安全性:

模式 文件编辑 Shell命令 适用场景
Default 需确认 需确认 日常开发
Auto-accept edits 自动 需确认 信任编辑操作
Plan mode 只读 只读 仅生成计划
Auto mode 自动 自动+后台安全检查 高度自动化

8.2 检查点机制

在编辑文件之前,Claude Code会自动创建快照(Checkpoint)。用户可随时通过按两次Esc回退到修改前的状态。

⚠️ 注意:检查点机制仅覆盖文件变更,不涵盖外部副作用(如数据库写入)。

8.3 安全边界

  • 沙箱:限制文件访问范围,默认只能访问当前项目目录
  • 审批工作流:破坏性操作(删除文件、Git force push等)需人工批准
  • 信任边界:在Agent和外部系统之间执行严格的边界控制
  • 安全审查:内置/security-review命令(2,607 tokens的专用提示词),可对代码进行安全审计

九、扩展机制

9.1 自定义命令

用户可在.claude/commands/目录下创建自定义斜杠命令:

<!-- .claude/commands/review-pr.md -->
请审查当前PR的所有变更:
1. 检查代码风格
2. 识别潜在bug
3. 评估测试覆盖率
4. 生成审查报告

使用时直接输入/review-pr即可调用。

9.2 Hooks

Hooks允许在特定事件前后触发Shell命令:

{
  "hooks": {
    "before_commit": "npm run lint && npm test",
    "after_edit": "prettier --write ${file}"
  }
}

9.3 Skills

Skills是更高级的扩展机制——包含指令、脚本和资源的文件夹,Claude根据需要动态加载:

skills/
├── frontend-dev/
│   ├── SKILL.md          # 技能描述和指令
│   ├── templates/        # 模板文件
│   └── scripts/          # 辅助脚本
└── api-design/
    ├── SKILL.md
    └── examples/

Skill不通过系统提示词预加载,而是在工具执行结果中按需注入,有效节省Token。

9.4 Agent SDK

对于需要深度定制的场景,Claude Code提供Agent SDK,允许开发者构建完全自定义的Agent,精细控制:

  • 编排逻辑(Orchestration)
  • 工具访问权限
  • 权限边界
  • 上下文管理策略

十、与其他AI编程工具对比

特性 Claude Code Cursor GitHub Copilot
运行环境 终端原生 编辑器内 编辑器插件
工作模式 代理式(Agentic) 半代理式 补全式
文件操作 直接读写 编辑器内 编辑器内
Shell执行 ✅ 原生支持 部分支持
Git集成 ✅ 深度集成 部分支持 基础支持
多Agent协作
自定义工具 MCP + Hooks + Skills 有限 有限
上下文管理 自动压缩+子Agent 编辑器上下文 文件级上下文

十一、总结

Claude Code的技术架构体现了一个深刻的设计哲学:让模型做决策,让工程做执行。其核心创新可以概括为:

  1. 极简的Agentic Loop:一个循环+工具分发,就是整个Agent系统的骨架
  2. 丰富的工具生态:18个内置工具 + MCP无限扩展,覆盖开发全链路
  3. 精巧的上下文管理:CLAUDE.md持久化 + 自动压缩 + 子Agent隔离
  4. 完整的多Agent协作:任务图 + 异步邮箱 + Worktree隔离 + 自主认领
  5. 分层的安全治理:四种权限模式 + 检查点 + 沙箱 + 审批工作流

Claude Code证明了一个重要观点:构建一个强大的AI编程Agent,关键不在于复杂的框架或提示词链,而在于为一个已经足够聪明的模型提供合适的工具和环境。正如learn-claude-code项目所总结的:

“Bash is all you need” —— 一个循环和Bash,就足以构建令人惊叹的Agent系统。


参考资料

  1. Claude Code GitHub仓库
  2. Claude Code官方文档 - How Claude Code Works
  3. Claude Code官方文档 - Overview
  4. learn-claude-code: Bash is all you need
  5. Claude Code System Prompts
  6. Claude Code: Deep Dive into the Agentic CLI Workflow - SitePoint

「真诚赞赏,手留余香」

爱折腾的工程师

真诚赞赏,手留余香

使用微信扫描二维码完成支付