Claude Code 的强大不止在模型本身,更在它精心设计的扩展层。
本文将深入拆解 CLAUDE.md、Skills、Subagents、Agent Teams、Hooks、MCP 与 Plugins 六大核心能力,帮你彻底搞清楚:在什么场景、该用哪一种。
你为什么需要搞懂这些功能?
用 Claude Code 时,你是否遇到过这些尴尬瞬间:
- 项目约定反复强调,AI 还是记不住?
- 想接外部服务,却分不清该用哪套集成?
- 要并行处理任务,不确定选 Subagent 还是 Agent Team?
- 想打包分享自己的配置,却不知如何下手?
症结在于:没用对扩展层。每个功能都解决特定问题,用对效率翻倍;用错只会增添复杂度。接下来这份系统讲解,带你从概念到实操,全盘掌握。
全局认知:六大功能 + 打包机制
- CLAUDE.md:持久上下文,写入“必须遵守”的项目规则。
- Skills:可重用的知识与工作流,按需调用或自动加载。
- Subagents:隔离执行上下文的“专员”,只回传摘要结果。
- Agent Teams:多会话协作的“团队”,队友间可互相通信。
- MCP:连接外部服务的通道,访问数据、执行操作。
- Hooks:事件驱动的确定性脚本,无需 AI 推理。
- Plugins:把以上能力打包分发,实现跨项目复用与分享。
1. CLAUDE.md:项目级“宪法”
它是什么
CLAUDE.md 是每个会话都会自动加载的持久上下文文件。可把它当作项目“宪法”——写明 Claude 必须一直遵守的规则。
核心特性
- 加载时机:每个会话开始自动加载。
- 内容范围:文件完整内容进入上下文。
- 上下文成本:每次请求都会占用(成本高)。
建议写入
- 编码约定(命名规范、目录结构)。
- 构建与测试命令。
- “永远不要做 X”类规则。
- 项目术语与缩写。
- 技术栈选择(例如必须用 TypeScript)。
不建议写入
- 冗长的 API 文档。
- 偶尔用到的参考资料。
- 可按需触发的工作流。
示例
# CLAUDE.md
## 项目约定
- 所有新开发使用 TypeScript
- 组件位于 `src/components/`
- 测试文件位于 `__tests__/`
- 提交前务必运行 `pnpm test`
## 禁止事项
- 不要直接改动 `node_modules/`
- 不要在提交中包含 `.env`
- 不要使用 `any` 类型(特殊情况需注释说明)
## 构建与测试
- 开发:`pnpm dev`
- 测试:`pnpm test`
- 生产构建:`pnpm build`
## 项目结构
src/
├── components/ # React 组件
├── utils/ # 工具函数
├── api/ # API 调用
└── types/ # TypeScript 类型定义
## 术语
- "BE" 指后端团队
- "FE" 指前端团队
- "DS" 指设计系统
经验法则:尽量控制在 500 行以内。超过就把参考材料移到 Skills,仅保留“必须遵守”的核心规则在 CLAUDE.md。
继承与优先
CLAUDE.md 是累加加载:工作目录及以上的文件在会话开始加载;进入某子目录后,该目录下的 CLAUDE.md 也会叠加。若出现冲突,Claude 会做协调判断,通常“更具体的说明优先”。
2. Skills:可复用的知识与工作流
它是什么
Skill 是一份包含知识、工作流或说明的 Markdown 文件。Claude 可通过斜杠命令(如 /deploy)调用,也会在相关时自动引用。
核心特性
- 加载时机:会话开始只加载描述;使用时加载完整内容。
- 内容范围:描述常驻,正文按需加载。
- 上下文成本:低(描述)→ 高(使用时)。
两种常见类型
参考型 Skill:提供会话中要用到的知识。
---
description: API 风格指南与端点参考
---
# API 风格指南
## 端点命名
- 使用 kebab-case:`/user-profile` 而非 `/userProfile`
- 集合使用复数:`/users` 而非 `/user`
- 版本控制:`/v1/users`
## 认证
Header: Authorization: Bearer {token}
## 常用端点
### 用户
- GET `/v1/users` - 获取用户列表
- GET `/v1/users/:id` - 获取单个用户
- POST `/v1/users` - 创建用户
操作型 Skill:指导 Claude 执行某个工作流。
---
description: 部署到生产环境
---
# 部署工作流
## 前置检查
1. 确保测试通过:`pnpm test`
2. 检查版本号是否更新
3. 更新 CHANGELOG.md
## 步骤
1. 构建:pnpm build
2. 部署:pnpm deploy:prod
3. 验证:curl https://api.example.com/health
## 回滚
pnpm rollback:prod
Skill vs CLAUDE.md 如何取舍
- 需要“永远遵守”的规则 → 放 CLAUDE.md。
- 参考材料或可触发的工作流 → 写成 Skill(可通过 / 调用)。
降低上下文成本
默认 skill 的描述会在会话开始加载。若想完全按需加载,可在 frontmatter 中设定:
---
description: 大型参考文档
disable-model-invocation: true
---
# 此 skill 仅在你手动使用 /skill-name 时加载
这样该 skill 对模型隐藏,不占上下文,直到手动调用。
3. Subagents:隔离上下文的“专员”
它是什么
Subagent 是在独立、隔离的上下文中工作的代理,拥有自己的窗口,只向主对话返回压缩后的关键结论。
适用与不适用
- 适用:需要上下文隔离、并行处理、读取大量文件但只需摘要、专门化工作(如代码审查)。
- 不适用:需要看到中间过程、简单单任务、需与主对话频繁互动的场景。
与 Skill 的本质差异
- Skills 是“写给主对话看的说明书”。
- Subagents 是“派出去干活的专员”,在隔离环境完成任务后回传结论。
配置示例
# .claude/subagents/researcher.yml
name: researcher
description: 深度研究专员
skills:
- research-methods
- data-analysis
systemPrompt: |
你是专业的研究助手。
深入分析问题,只返回关键发现。
不要包含中间过程,仅给出最终结论。
代码审查专员:
# .claude/subagents/code-reviewer.yml
name: code-reviewer
description: 代码审查专家
skills:
- security-checklist
- performance-guide
systemPrompt: |
你是严格的代码审查专家。
检查:
1. 安全漏洞
2. 性能问题
3. 代码风格违反
4. 潜在 bug
仅返回问题列表,并按严重程度排序。
使用方式示例:请派 code-reviewer 检查 src/api/auth.ts。
4. Agent Teams:可互通的“多会话团队”
它是什么
Agent Teams 是多个相互通信的 Claude Code 会话,拥有共享任务列表与点对点消息能力。每个成员都是独立实例。
与 Subagent 的对比
- Subagent:只向主代理汇报结果,适合快速、专注任务,成本较低。
- Agent Team:队友间可直接通信,共享任务并自我协调,适合需要讨论的复杂工作,成本更高。
决策指南
- 是否需要并行?是 → 队友是否需要互通?需要 → 用 Agent Team;不需要 → 用 Subagent。
- 不需要并行 → 主对话处理即可。
适用与不适用
- 适用:竞争性研究(验证不同假设)、并行代码审查(安全/性能/风格)、新功能协同开发、需要团队讨论与协调的任务。
- 不适用:简单并行任务、预算受限(每个队友独立计费)、只需摘要结果的任务。
团队示例
# .claude/teams/code-review-team.yml
name: code-review-team
description: 多角度代码审查团队
members:
- name: security-expert
agentType: everything-claude-code:security-reviewer
assignments:
- 检查安全漏洞
- 验证权限控制
- name: performance-expert
agentType: everything-claude-code:performance-analyzer
assignments:
- 分析性能瓶颈
- 提供优化建议
- name: test-expert
agentType: everything-claude-code:test-coverage-analyst
assignments:
- 检查测试覆盖率
- 生成测试用例
何时“升级”为团队
- 并行 Subagents 已受上下文限制。
- Subagents 之间需要互通信息。
- 任务复杂到需要明确分工与协调。
5. MCP:连接外部世界的协议
它是什么
MCP(Model Context Protocol)把 Claude 与外部服务打通,使其能访问数据并执行操作。
核心特性
- 加载时机:会话开始。
- 内容范围:所有工具定义与对应 JSON Schema。
- 上下文成本:每个请求占用(启用工具搜索可降至约 10%)。
典型用例
- 查数据库(PostgreSQL、MongoDB、Redis)。
- 发消息(Slack、Discord、Telegram)。
- 控浏览器(自动化 Web 操作)。
- 访问外部 API(GitHub、Jira、AWS)。
- 文件系统操作(云存储、FTP)。
与 Skills 的差异与协作
- MCP 提供“能力”(能做什么)。
- Skill 提供“方法”(怎么做)。
实战:数据库连接 + 使用指南
# MCP Server:连接 Postgres
mcpServers:
postgres:
command: npx
args: ["-y", "@modelcontextprotocol/server-postgres", "postgresql://..."]
---
description: 数据库查询指南
---
# 数据库使用
## users 表
- id: UUID, 主键
- email: VARCHAR(255), 唯一索引
- created_at: TIMESTAMP
## 常见查询
### 获取活跃用户
SELECT *
FROM users
WHERE last_active > NOW() - INTERVAL '7 days'
ORDER BY last_active DESC
LIMIT 100;
### 避免
❌ 选择 SELECT *
❌ 在 WHERE 使用函数(会失去索引)
✅ 使用 LIMIT 控制结果
工具搜索与可靠性提示
- 启用 MCP 工具搜索:仅把约 10% 工具定义加载进上下文,剩余按需取用。
- 会话中途可能发生“静默断开”:工具会悄然消失。若发现无法使用之前可用的 MCP 工具,请执行 /mcp 检查连接状态。
6. Hooks:事件驱动的自动化
它是什么
Hook 是在特定生命周期事件触发的确定性脚本,完全运行在 LLM 循环之外。
核心特性
- 加载时机:事件触发时执行。
- 内容范围:默认不占模型上下文。
- 上下文成本:为零(除非向模型回传额外上下文)。
何时使用
- 适用:可预测的自动化(例如保存后自动格式化)、不需要 AI 推理的任务、需要快速响应的操作。
- 不适用:复杂决策或需要模型推理的场景。
常见事件
- tool_result_persist:工具结果持久化后执行(如格式化代码)。
- before_tool_use:工具使用前做安全校验。
- prompt_submit:提示提交前附加上下文。
- permissions_request:自定义权限检查流程。
- compression_start:压缩开始前保留关键上下文。
与其他能力的对照
- Hook:无需 AI 判断的事件自动化。
- Skill:按需加载的知识与工作流。
- MCP:接入外部服务的协议层。
示例
// package.json
{
"hooks": {
"tool_result_persist": [
{
"name": "format-on-save",
"command": "prettier --write ${file}"
}
]
}
}
Hook + MCP 联动:
{
"hooks": {
"tool_result_persist": [
{
"name": "notify-on-critical-edit",
"command": "mcp://slack/send-message",
"args": {
"channel": "#dev-updates",
"message": "Critical file ${file} was modified"
},
"condition": "${file}.match(/src\\/auth\\/.*/)"
}
]
}
}
7. Plugins:一键打包与分发
它是什么
Plugin 是打包层,把 skills、hooks、subagents 与 MCP servers 集成为一个可安装单元,实现跨项目复用与分享。
价值与适用
- 适用:多仓库共用同一套配置、分享给团队、上架市场。
- 不必:仅在单项目使用或配置极其简单。
结构示例
my-plugin/
├── package.json
├── skills/
│ ├── review.md
│ └── deploy.md
├── hooks.json
├── subagents/
│ └── researcher.yml
└── mcp-servers.json
命名冲突的避免
Plugin 的 skill 建议使用命名空间:
- 未命名空间:/review
- 命名空间:/my-plugin:review
这样不同插件的同名 skill 可并存不冲突。
常见功能组合:1+1>2
- Skill + MCP:MCP 负责“能连”、Skill 负责“会用”。例如:连接数据库 + 写查询规范与示例。
- Skill + Subagent:用 Skill 启动多个隔离的 subagents 并行工作,如安全/性能/风格分别审查。
- CLAUDE.md + Skills:前者放“始终遵守”,后者存完整参考材料。比如 CLAUDE.md 要求遵循 API 约定,Skill 提供详细的风格指南。
- Hook + MCP:事件触发后通过 MCP 执行外部操作,如关键文件编辑后自动发 Slack 通知。
上下文成本全解析
- CLAUDE.md:会话开始加载完整内容;每个请求都占用(高)。
- Skills:会话开始加载描述;使用时加载全文;成本由低到高。
- MCP servers:会话开始加载工具定义;每次请求占用(启用工具搜索可优化)。
- Subagents:生成时在隔离上下文中运行;不影响主会话窗口。
- Hooks:事件触发执行;默认不占模型上下文(零)。
加载时机一图流(文字版)
会话开始:加载 CLAUDE.md(全文)、MCP 工具定义、Skills(描述)。
请求过程中:CLAUDE.md 与 MCP 持续占用;Skills 在被调用时加载全文;Subagents 在隔离上下文内独立运行。
成本优化技巧
- 为大型参考 Skill 设置
disable-model-invocation: true,彻底按需加载。 - 启用 MCP 工具搜索,仅把约 10% 工具放入上下文,其余按需。
- 把“大任务”交给 Subagents,减少对主对话窗口的挤占。
- 保持 CLAUDE.md 精简,把长参考迁移到 Skills。
分层与优先级规则
- CLAUDE.md:策略为累加;优先级通常“更具体者优先”。
- Skills:托管 > 用户 > 项目。
- Plugin Skills:使用命名空间避免冲突。
- MCP Servers:本地 > 项目 > 用户。
- Subagents:托管 > CLI 标志 > 项目 > 用户 > 插件。
- Hooks:策略为合并,所有注册的 hooks 都会触发。
实战决策树(常见疑问)
Q1:CLAUDE.md 太长怎么办?
A:把参考材料移到 Skills,仅保留核心编码约定、“永远不要做 X”规则、关键构建与测试命令。
Q2:Skill 和 Subagent 都能做这件事,怎么选?
- 需要传递知识 → 选 Skill。
- 需要上下文隔离或并行大量文件 → 选 Subagent。
Q3:MCP 连接忽然失效?
A:用 /mcp 检查连接状态。MCP 可能出现静默断开,工具会无提示消失。
Q4:Agent Teams 成本高,有替代吗?
A:先用并行 Subagents;若遇上下文瓶颈或需求队友互通,再升级为 Agent Teams。
Q5:如何系统性降低上下文成本?
- 大型参考 Skill 用
disable-model-invocation: true。 - 开启 MCP 工具搜索。
- 把重负载任务交给 Subagents。
- 精简 CLAUDE.md。
构建高效的 Claude Code 工作流
- CLAUDE.md → 项目“宪法”。
- Skills → 可复用的知识库与工作流。
- Subagents → 隔离并行的专员。
- Agent Teams → 可互通协作的团队。
- MCP → 连接外部世界的桥梁。
- Hooks → 事件驱动的自动化。
- Plugins → 打包分享与复用的容器。
实践中的四条铁律
- 从简开始:先上 CLAUDE.md 与 Skills。
- 按需扩展:具体问题再引入更复杂功能。
- 控制成本:时刻关注上下文占用并优化。
- 组合拳:功能搭配往往比单点更强。
真正的熟练来自实践。在你的项目里试着组合这些能力,找到最顺手的工作流。
你在用 Claude Code 时最常靠的是哪一项?
是否曾纠结“到底用哪个功能”?
欢迎在评论区分享你的经验!