Coding Agent 的基本架构
在架构上,大多数 Coding Agent 都遵循类似的模式:
Coding Agent 的能力,很大程度上来自于它的扩展组件。Coding Agent 的能力不仅取决于模型本身,很大程度上也来自于 扩展组件层 —— 即如何为 Agent 提供上下文信息、可复用能力模块以及外部工具连接。 在不同工具中,这些组件的名称和实现方式可能有所不同,但整体结构高度相似。为了更清晰地说明这一层级,下文将以 Claude Code 的 Agentic 生态为参考,介绍 Coding Agent 常见的几类扩展组件。
Claude Code 的扩展组件
Claude Code 的扩展组件可以嵌入到 Agentic Loop 的不同阶段,从而增强系统能力。主要扩展组件包括:
CLAUDE.md
CLAUDE.md
为 Coding Agent 提供每次会话都会加载的持久化上下文
Skills
Skills
提供可复用的知识、指令和工作流程
MCP(Model Context Protocol)
MCP(Model Context Protocol)
用于连接外部服务与工具系统
Subagents
Subagents
在独立上下文中运行子 Agent,并返回执行结果摘要
Agent Teams
Agent Teams
协调多个独立会话进行并行协作
Hooks
Hooks
在 Agent 循环之外执行确定性的自动化脚本
Plugins
Plugins
与 Marketplace 用于打包并分发上述扩展能力
/deploy 的命令直接调用某个 Skill;在某些情况下,Coding Agent 也会在任务相关时自动加载对应 Skill。
根据需求选择组件
Claude Code 提供的扩展能力覆盖多种使用场景:从每次会话都会加载的上下文信息,到按需调用的能力模块,再到在特定事件触发的自动化流程。不同扩展组件的定位及适用场景如下表所示。
| 组件类型 | 作用 | 适用场景 | 示例 |
|---|---|---|---|
CLAUDE.md | 定义项目规则与背景信息,Coding Agent 每次开始工作时都会读取 | 项目规范、全局规则 | “使用 pnpm 而不是 npm;提交前运行测试。” |
Skills | 把常用任务或知识整理成可复用的“能力模块” | 参考文档、标准任务流程 | /deploy 执行部署流程 |
Subagent | 独立运行的子 Agent,用来处理复杂或耗时任务 | 上下文隔离、并行任务 | 分析大量文件并返回关键结论 |
Agent Teams | 多个 Agent 协同工作,分工完成复杂任务 | 并行研究或复杂开发任务 | 同时启动多个 reviewer 检查安全、性能与测试 |
MCP | 让 Coding Agent 可以访问外部系统或工具 | 访问外部数据或执行外部操作 | 查询数据库、发送 Slack 消息 |
Hook | 在特定事件发生时自动执行脚本 | 确定性自动化流程 | 每次修改文件后运行 ESLint |
Plugins
Plugin(插件) 是 Claude Code 的能力打包机制。一个插件可以同时包含 Skills、Hooks、Subagents 和 MCP Servers。
Plugins 中的 Skills 会使用 命名空间(例如 /my-plugin:review),从而避免不同插件之间的命令冲突。
当你希望在多个仓库复用同一套配置并将能力分发给其他开发者时,可以通过 Plugin 与 Marketplace 来实现。
如何区分这些组件
部分扩展组件在功能上看起来相似,但它们解决的问题不同。下面对几种常见组合进行说明。
- Skills vs Subagent
- CLAUDE.md vs Skills
- CLAUDE.md vs Rules vs Skills
- MCP vs Skill
定位不同:
Skills 可以分为两类:
- Skills:可复用的知识或流程
- Subagent:在独立上下文中执行任务的子 Agent
| 维度 | Skills | Subagent |
|---|---|---|
| 本质 | 可复用知识或流程 | 独立执行单元 |
| 核心价值 | 在不同任务间复用内容 | 上下文隔离 |
| 适合场景 | 参考资料、标准流程 | 大规模代码分析或并行任务 |
- Reference Skills 提供参考知识,例如 API 规范或开发指南。
- Action Skills 触发具体任务,例如
/deploy。
扩展组件的层级关系
扩展组件可以在多个层级定义,例如:
- CLAUDE.md
- Skills 与 Subagents
- MCP Servers
- Hooks
采用 叠加(additive) 模式:所有层级的 CLAUDE.md 文件都会被加载,并合并到对话的上下文中。当规则发生冲突时,通常是 更具体的规则优先生效。
组合使用扩展组件
在实际项目中,通常会组合使用多个扩展组件。例如:
| 组合方式 | 工作方式 | 示例 |
|---|---|---|
| Skills + MCP | MCP 提供连接,Skills 定义使用方式 | Skills 描述数据库 schema |
| Skills + Subagent | Skills 启动多个Subagent | /audit 同时运行安全与性能检查 |
| CLAUDE.md + Skills | 全局规则 + 按需知识 | CLAUDE.md 定义 API 规范 |
| Hook + MCP | Hook 调用外部系统 | 修改关键文件后发送 Slack 通知 |
上下文成本
每一种扩展能力都会占用 模型的上下文窗口。
如果加载过多内容,可能导致:
- 模型忽略关键信息
- Skills 触发不准确
- Coding Agent 无法正确遵循项目规则
不同扩展组件的上下文成本
| 组件名称 | 加载时机 | 加载内容 | 上下文成本 |
|---|---|---|---|
| CLAUDE.md | 会话开始 | 全部内容 | 每次请求 |
| Skills | 会话开始 + 调用时 | 描述 + 完整内容 | 较低 |
| MCP servers | 会话开始 | 工具定义 | 每次请求 |
| Subagents | 创建时 | 独立上下文 | 与主会话隔离 |
| Hooks | 触发时 | 默认无 | 0 |
frontmatter 中设置:disable-model-invocation: true,这样 Coding Agent 在会话中不会看到该 Skill,只有在显式调用时才会加载,从而将上下文成本降为零。