Claude Code 架构拆解:它到底是怎么把大模型变成编程 Agent 的

在这里插入图片描述

别把 Claude Code 理解成“会敲命令的聊天机器人”

很多人第一次看 Claude Code,会把它理解成:

Claude + 终端 + 自动改代码

这个理解能入门,但不够准确。

如果只是“模型能在终端里回答问题”,那它和普通聊天框差别不大。Claude Code 真正厉害的地方,是它把大模型放进了一个工程运行时里:

  • 能读项目文件。
  • 能搜索代码。
  • 能编辑多个文件。
  • 能运行测试和脚本。
  • 能读取命令输出继续判断。
  • 能通过权限系统控制风险。
  • 能用 Hook 固定检查流程。
  • 能通过 Skill 加载领域知识。
  • 能用 Subagent 隔离大上下文探索。
  • 能用 MCP 接外部工具和数据源。
  • 能用 Worktree 隔离并行修改。

所以 Claude Code 的核心不是 Prompt,而是架构。

一句话概括:Claude Code 是围绕 Claude 模型构建的编程 Agent 运行时,模型负责推理,Harness 负责上下文、工具、权限、扩展、执行和验证。

下面我们按架构层次拆开。

一、最小心智模型:模型是大脑,Harness 是身体和工作台

Claude Code 官方文档里有一个很关键的说法:Claude Code serves as the agentic harness around Claude。

换成中文就是:Claude Code 是包在 Claude 模型外面的 Agent Harness。

你可以把它拆成两部分:

部分负责什么例子
Claude 模型理解意图、规划步骤、写代码、解释结果、根据反馈调整“应该先看 auth 模块,再改 middleware,再跑测试”
Claude Code Harness管理上下文、提供工具、执行命令、控制权限、记录会话、组织扩展Read、Edit、Bash、MCP、Hooks、Skills、Subagents

这和人类程序员很像。

人脑负责思考,但真正完成工作需要工作台:

  • IDE。
  • 终端。
  • Git。
  • 测试框架。
  • 文档。
  • 权限。
  • 代码规范。
  • CI。
  • Code Review。

Claude Code 做的事,就是给模型配了一套这样的工程工作台。

在这里插入图片描述

从架构上看,可以分成六层:

  1. Session 层:记录一次任务的对话、工具调用、文件变更和可恢复点。
  2. Context 层:决定模型每一轮能看到什么。
  3. Agent Loop 层:让模型循环收集上下文、行动、验证。
  4. Tool 层:把文件系统、Shell、Git、MCP 暴露成可调用工具。
  5. Permission 层:决定哪些动作允许、询问或阻断。
  6. Extension 层:用 Hooks、Skills、Subagents、Plugins、Worktrees 扩展工作流。

这六层合在一起,Claude Code 才能从“会回答”变成“能干活”。

二、Agent Loop:Claude Code 每轮到底在干什么

Claude Code 的执行循环可以压缩成三步:

  1. Gather Context:收集上下文。
  2. Take Action:执行动作。
  3. Verify Results:验证结果。

在这里插入图片描述

比如你让它修一个认证 bug,它可能会这样走:

读取 README 和 package.json
-> 搜索 auth 相关代码
-> 读取 middleware、controller、test
-> 判断 bug 来源
-> 修改代码
-> 运行测试
-> 根据失败信息继续改
-> 查看 git diff
-> 总结变更和验证结果

注意,这不是一次模型调用。

这是一个多轮循环。每一次工具结果都会重新进入模型上下文,影响下一步判断。

这也是 Claude Code 和普通代码问答最大的差别:

普通聊天:
用户问题 -> 模型答案 -> 用户自己执行

Claude Code:
用户目标 -> 模型判断 -> 工具执行 -> 环境反馈 -> 模型再判断 -> 验证完成

所以 Claude Code 的架构重点,不是“模型能不能写出代码”,而是“模型能不能在环境反馈里持续推进任务”。

三、Context 层:Claude Code 如何管理项目知识

编程 Agent 的第一瓶颈,通常不是模型不会写代码,而是上下文会变脏、变满、变乱。

Claude Code 的上下文窗口里会放很多东西:

  • 对话历史。
  • 用户当前任务。
  • 文件内容。
  • 命令输出。
  • CLAUDE.md
  • rules。
  • auto memory。
  • 已加载的 Skills。
  • MCP 工具名称和描述。
  • 系统指令。

这些东西都很有用,但也都会占 token。

所以 Claude Code 里有几类上下文机制。

1. CLAUDE.md:项目级长期说明

CLAUDE.md 是 Claude Code 每次会话都会读取的项目说明文件。

它适合放:

  • 项目启动命令。
  • 测试命令。
  • 特殊代码规范。
  • 团队约定。
  • 非显而易见的架构规则。
  • 常见坑。

它不适合放:

  • 所有接口文档。
  • 所有业务背景。
  • 冗长教程。
  • 每个文件的解释。
  • 模型自己读代码就能知道的内容。

原因很直接:CLAUDE.md 会进入上下文,太长会挤占当前任务空间,也会降低关键规则的遵循度。

2. Memory:跨会话记忆

Claude Code 的 memory 更适合记录长期偏好和反复出现的经验。

比如:

  • “这个项目默认用 pnpm,不用 npm。”
  • “API 测试前要启动本地 Redis。”
  • “不要改 legacy-payment 目录,除非用户明确要求。”

Memory 的风险是过期。

所以它不能变成不可审计的黑箱。好的 memory 应该能被查看、编辑、删除。

3. Skills:按需加载领域能力

Skill 可以理解成一个能力包,通常包含:

  • SKILL.md 指令。
  • references。
  • scripts。
  • templates。
  • assets。

它和 CLAUDE.md 的区别是:CLAUDE.md 是每次都加载,Skill 是相关时再加载。

比如你不应该把“如何发布 npm 包”“如何写安全审计报告”“如何生成 PPTX”全塞进 CLAUDE.md。这些更适合做成 Skill。

4. Compaction:长会话压缩

长任务里上下文会逐渐接近上限,Claude Code 会通过 compaction 把历史压成摘要。

这解决了“继续做下去”的问题,但也带来风险:

  • 临时口头约束可能被压丢。
  • 嵌套目录里的局部规则可能需要重新触发。
  • 大量工具输出会被摘要化。
  • 早期决策如果没有落盘,后面可能变模糊。

所以工程实践里要把关键状态写进文件,而不是只留在聊天记录里。

比如:

docs/current-plan.md
docs/decision-log.md
docs/test-result.md

5. Subagent:上下文隔离

Subagent 最大的价值不是“多一个角色”,而是独立上下文。

主会话要实现功能时,可以让一个子代理去读几十个文件,最后只把结构化总结带回来。这样主上下文不会被大段原始文件污染。

典型用法:

  • 研究陌生模块。
  • 独立审查实现。
  • 并行分析多个候选方案。
  • 大量日志和文档读取。
  • 写完后用 fresh context 做验证。

这就是 Claude Code 处理上下文压力的重要手段。

四、Tool 层:工具让模型能行动,但工具必须像 API 一样设计

没有工具,Claude 只能输出文字。

有了工具,Claude Code 才能:

  • Read:读取文件。
  • Edit / Write:修改文件。
  • Bash:执行命令。
  • Grep / Glob:搜索代码。
  • WebFetch / WebSearch:查资料。
  • MCP tools:访问外部系统。
  • Agent tool:分派子代理。

这就是模型从“回答者”变成“执行者”的关键。

但工具不是越多越好。

工具越多,模型越容易选错。工具描述越模糊,模型越容易传错参数。工具返回越冗长,上下文越容易爆。

所以工具层要按 API 的标准设计。

一个好工具应该满足:

维度要求
名称具体、可区分,不要叫 doTask
参数字段名明确,避免 datapayload 这种泛名
schema尽量结构化,减少模型猜格式
返回只返回支持下一步判断的信息
风险标明只读、写入、外部网络、破坏性操作
错误错误信息要能指导下一步,而不是只返回失败

Anthropic 在工具工程文章里把工具称为 deterministic systems 和 non-deterministic agents 之间的 contract。

这个说法很准确。

普通函数是人调用的;Agent 工具是模型调用的。模型会犯错,所以工具要更清楚、更可审计、更难误用。

五、MCP 层:它解决连接问题,不解决全部架构问题

MCP 是 Claude Code 很重要的扩展方式。

它让 Claude Code 可以连接:

  • GitHub。
  • Figma。
  • 数据库。
  • 浏览器。
  • Google Drive。
  • 内部系统。
  • 搜索工具。
  • 工作流服务。

官方文档把 MCP 类比成 AI 应用的 USB-C 接口。这个类比很形象:它把外部数据源、工具和 workflow 接成标准接口。

但这里要小心一个误区:

MCP 是连接层,不是完整 Agent 架构。

接入 MCP 之后,仍然要解决:

  • 哪些 MCP 工具能用?
  • 哪些工具需要审批?
  • 工具返回多大?
  • 是否会把敏感数据带入上下文?
  • 工具描述是否清楚?
  • 结果如何验证?
  • 调用失败怎么恢复?

所以 MCP 应该放在 Tool 层和 Permission 层之间看,而不是当成 Agent 的全部。

六、Permission 层:Claude Code 为什么必须有权限系统

Claude Code 能读写文件、运行命令、调用外部系统,所以权限系统不是可选项。

否则一个误解的指令,就可能变成真实破坏。

Claude Code 的权限机制可以分四块理解。

1. Permission Mode

常见模式包括:

模式含义适合场景
default修改文件和有副作用命令前询问日常稳妥使用
acceptEdits自动接受文件编辑明确范围内的快速编码
plan只读探索和计划,不执行修改代码评审、方案确认
auto用分类器自动判断部分权限长任务减少点击疲劳
bypassPermissions跳过权限提示只适合强隔离沙箱

真正的工程判断不是“哪个模式最爽”,而是“当前任务的风险边界是什么”。

2. Allow / Deny / Ask 规则

权限不能只靠临时点击。

团队应该把固定规则写进配置:

  • 哪些命令默认允许。
  • 哪些路径禁止读取。
  • 哪些目录禁止修改。
  • 哪些 MCP 工具必须询问。
  • 哪些动作永远阻断。

例如:

{
  "permissions": {
    "deny": [
      "Read(./.env)",
      "Read(./secrets/**)",
      "Bash(rm -rf *)"
    ]
  }
}

这类规则比“请不要乱删文件”可靠得多。

3. Hooks

Hook 是 Claude Code 里非常关键的一层。

它可以在固定生命周期事件上执行脚本或逻辑。

比如:

  • PreToolUse:工具调用前检查风险。
  • PostToolUse:工具调用后做审计或格式化。
  • Stop:模型想结束时先跑测试。
  • SubagentStop:子代理完成后记录结果。
  • PermissionDenied:权限被拒绝时触发处理。

Hook 的重点是确定性。

不是提醒模型“记得测试”,而是直接跑测试;不是提醒模型“不要改生产配置”,而是在工具调用前拦截生产路径。

4. Auto Mode

Auto mode 是 Claude Code 为减少 approval fatigue 做的一种权限模式。

它大致思路是:低风险动作自动放行,高风险动作由分类器阻断或要求人类确认。

Anthropic 的工程文章里提到,auto mode 有两层防线:

  • 输入层:工具结果进入上下文前,检查 prompt injection 风险。
  • 输出层:工具调用执行前,用分类器判断动作是否越界。

这说明 Claude Code 的权限系统已经不只是“弹窗问用户”,而是在做风险分层治理。

但它也不是高风险场景的万能替代品。

涉及生产数据库、云资源、强破坏命令、敏感数据时,仍然需要更强的人工审查和环境隔离。

七、Extension 层:Skills、Hooks、Subagents、Plugins、Worktrees 分别干什么

Claude Code 的扩展能力很多,容易混。

可以按职责记。

扩展点主要职责一句话解释
CLAUDE.md项目长期规则每次会话都要知道的项目约定
Skills可复用领域能力相关时加载的一套说明、脚本和资源
Hooks确定性自动化在生命周期事件上执行检查、阻断、审计
MCP外部工具连接把数据库、浏览器、Figma、GitHub 等接进来
Subagents上下文隔离和并行让独立任务在自己的上下文窗口里完成
Plugins能力打包分发把命令、agents、MCP、hooks、skills 打包给团队
Worktrees文件变更隔离并行开发时避免互相覆盖
Agent teams多会话协作多个 Claude Code 实例共享任务和消息

这几类不要混用。

比如:

  • 项目规范写 CLAUDE.md
  • 发布流程写 Skill。
  • 修改后必须跑测试写 Hook。
  • 访问 GitHub 写 MCP。
  • 大量代码调查用 Subagent。
  • 并行改不同模块用 Worktree。
  • 团队统一分发用 Plugin。

这样 Claude Code 的结构就清楚了。

八、长任务架构:为什么 Claude Code 不只是一次会话

Claude Code 这类工具真正难的不是改一个小函数,而是长任务。

长任务会遇到几个问题:

  • 上下文越来越满。
  • 早期目标被稀释。
  • 日志和工具输出污染主会话。
  • 模型过早收尾。
  • 改了很多文件后难以回退。
  • 人类中途离开后难以恢复。
  • 子任务之间需要交接。

Anthropic 在 Managed Agents 和 long-running harness 文章里反复强调几个设计点:

  • session:记录发生过的一切。
  • harness:调用模型并路由工具调用。
  • sandbox:给 Agent 一个执行代码和改文件的环境。
  • structured artifacts:用结构化产物交接上下文。
  • evaluator:用独立检查发现实现问题。

这也是你用 Claude Code 做大任务时应该学到的东西:

不要把所有关键状态留在聊天里。

更稳的做法是让 Claude Code 维护一些任务产物:

docs/plan.md
docs/implementation-notes.md
docs/test-report.md
docs/open-risks.md

然后每轮围绕这些文件推进,而不是靠模型记住所有历史。

九、用 Claude Code 的 6 个工程建议

在这里插入图片描述

1. 先让它读项目,不要直接让它改

比如:

先阅读这个仓库的 README、package.json、测试目录和 auth 相关代码。
总结项目结构、认证链路、可能影响范围。不要修改文件。

这能降低它一上来乱改的概率。

2. 大任务先进入 plan 模式

让它先输出计划、影响文件、风险和验证命令。

计划确认后再进入实现。

3. 把项目规则写进 CLAUDE.md,但保持短

只写真正会影响行为的规则。

不要把文档库搬进去。

4. 把反复流程做成 Skill

比如:

  • 发布检查。
  • 接口审计。
  • 安全 review。
  • 数据库迁移 review。
  • PR 描述生成。

这些流程不应该每次靠你重新解释。

5. 用 Hook 固定必须发生的检查

例如:

  • 编辑后格式化。
  • 结束前跑测试。
  • 禁止改生产配置。
  • 禁止读取 .env
  • 记录 MCP 高风险调用。

6. 用 fresh subagent 做审查

主会话写代码以后,让一个没参与实现的子代理审查。

它不会被前面的讨论带偏,更容易发现边界条件和安全问题。

十、最容易讲错的 5 个点

在这里插入图片描述

1. “Claude Code = 自动写代码”

不准确。

它是一个围绕代码工作流设计的 Agent Harness。写代码只是工具链里的一部分。

2. “CLAUDE.md 越详细越好”

不对。

太长会占上下文,也会让重点规则被稀释。真正需要时才加载的材料,应该做成 Skill 或文档引用。

3. “MCP 接上就等于完成架构”

不对。

MCP 只解决连接。权限、上下文、工具契约、审计、验证还要另外设计。

4. “Subagent 越多越专业”

不对。

Subagent 适合上下文隔离、并行探索和独立审查。小任务、强依赖任务、同文件修改不适合强拆。

5. “跳过权限才能发挥 Agent 能力”

很危险。

更稳的方式是 sandbox、allow / deny、auto mode、Hook、Worktree 和人工关键点审查。

总结:Claude Code 的本质是一套可执行的 Agent Harness

如果只记一个结论:

Claude Code 的架构核心,是把大模型放进一个受控工程环境里,让它围绕真实项目循环收集上下文、执行工具、验证结果,并通过权限、Hooks、Skills、Subagents 和 MCP 管理风险与扩展能力。

所以讲 Claude Code,不应该只讲“它能帮我写代码”。

更应该讲清楚:

  • 它怎么拿上下文。
  • 它怎么调用工具。
  • 它怎么执行动作。
  • 它怎么控制权限。
  • 它怎么处理长任务。
  • 它怎么隔离子任务。
  • 它怎么验证结果。

这套结构才是 Claude Code 最值得学习的地方。

参考资料

  • Claude Code Docs: How Claude Code works: https://code.claude.com/docs/en/how-claude-code-works
  • Claude Code Docs: Explore the context window: https://code.claude.com/docs/en/context-window
  • Claude Code Docs: How Claude remembers your project: https://code.claude.com/docs/en/memory
  • Claude Code Docs: Choose a permission mode: https://code.claude.com/docs/en/permission-modes
  • Claude Code Docs: Configure permissions: https://code.claude.com/docs/en/agent-sdk/permissions
  • Claude Code Docs: Best practices for Claude Code: https://code.claude.com/docs/en/best-practices
  • Claude Blog: How and when to use subagents in Claude Code: https://claude.com/blog/subagents-in-claude-code
  • Anthropic Engineering: How we built Claude Code auto mode: https://www.anthropic.com/engineering/claude-code-auto-mode
  • Anthropic Engineering: Harness design for long-running application development: https://www.anthropic.com/engineering/harness-design-long-running-apps
  • Anthropic Engineering: Effective context engineering for AI agents: https://www.anthropic.com/engineering/effective-context-engineering-for-ai-agents
  • Anthropic Engineering: Writing effective tools for agents: https://www.anthropic.com/engineering/writing-tools-for-agents
  • Model Context Protocol: What is MCP?: https://modelcontextprotocol.io/docs/getting-started/intro

更多推荐