Skip to content

08.5 四种扩展机制怎么选

CLAUDE.md、Rules、Skill、Subagent、MCP —— 五种机制,一张决策矩阵讲清。

读完你能做什么:面对任何"我想让 Claude 具备某种能力/遵守某种规范"的需求,立刻选对机制。


一、五种机制一览

机制提供什么加载时机
CLAUDE.md常驻的事实与规则每次会话全量
.claude/rules/可按路径生效的规则每次会话 / 匹配文件时
Skill按需的流程与参考资料调用时
Subagent隔离上下文的执行者委派时
MCP新的工具能力常驻(工具定义)

二、核心判断:知识 / 流程 / 能力 / 隔离

先问自己:我要加的是什么?

text
我要加的是……

├─ 一条"始终要遵守的规则/事实"
│   ├─ 对整个项目都成立 → CLAUDE.md
│   └─ 只对某些文件成立 → .claude/rules/(带 paths)

├─ 一套"多步的流程/工作法"
│   → Skill

├─ 一个"新的工具能力"(连数据库、调 API)
│   → MCP

└─ 一个"需要隔离上下文的执行者"
    → Subagent

三、逐对辨析

3.1 CLAUDE.md vs Skill

CLAUDE.mdSkill
加载每次全量调用时
长内容成本每次都付平时零
适合短小、每次都用长、偶尔用
例子"金额用 BigDecimal""上线前 8 步检查流程"

判据:短且高频 → CLAUDE.md;长或低频 → Skill。

一条长流程写进 CLAUDE.md 会拖累每次会话;做成 Skill 只在需要时加载。

3.2 Rules vs CLAUDE.md

CLAUDE.md.claude/rules/
生效范围整个会话可按 paths 匹配文件
适合全局规则分模块/分文件类型的规则

判据:规则只对某些文件成立(如"API 文件必须有输入校验") → 用带 paths 的 rule,它只在处理匹配文件时加载,平时不占上下文。

3.3 Skill vs Subagent

SkillSubagent
上下文注入当前上下文独立上下文
返回全程在主会话只回传结论
适合需要主会话看到全过程会产生大量噪音,要隔离

判据:流程会读大量文件/产生大量中间输出 → Subagent(隔离噪音);流程需要主会话保留细节 → Skill。

(注:Skill 也可以用 context: fork + agent 在隔离上下文跑,此时它兼具两者特性。)

3.4 Skill vs MCP

SkillMCP
提供新流程/知识(怎么用已有能力)新能力(新工具函数)
要写代码吗不用(Markdown)要(server 实现)
例子"上线检查清单"的执行流程"查询公司数据库"的工具

判据:你缺的是"怎么做"(有工具但要规范流程)→ Skill;你缺的是"能做"(根本没有对应工具)→ MCP。

3.5 MCP vs Subagent

这两个常被混淆,但完全不同:

text
MCP       = 给 Claude 新的"手"(工具)
Subagent  = 给 Claude 一个"分身"(执行者)

一个 subagent 可以使用 MCP 工具;MCP 不是执行者,是能力。


四、决策矩阵(打印版)

你的需求选择
"每次都用 2 空格缩进"CLAUDE.md
"src/api 下的文件必须做输入校验"rules(paths: src/api/**)
"金额一律 BigDecimal"CLAUDE.md(+ hook 强制)
"上线前跑这 8 步检查"Skill
"按我们的规范设计 API"(规范很长)Skill(+ reference 文件)
"让它能查我们的生产数据库"MCP
"让它能在 Jira 建 issue"MCP
"在 500 个文件里找出所有 X"Subagent(隔离噪音)
"独立验证这个结论"Subagent(隔离上下文)
"提交前必须跑测试"(要 100% 保证)Hook(不是上面任何一个)
"禁止读 .env"权限 deny 规则

注意最后两行 —— 需要确定性保证的,用 hook / 权限,不用上面五种(它们都是概率性影响)。这条界线见 04.2 元技巧 2


五、组合使用

真实场景常常需要多个机制配合。

5.1 一个"安全的数据库操作"能力

text
MCP server(只读账号)        →  提供查询能力
+ 权限 deny 写操作            →  确定性护栏
+ Skill「数据分析流程」       →  规范怎么用(先看 schema 再查,结果如何呈现)
+ CLAUDE.md「生产数据只读」    →  常驻提醒

四个机制各司其职:MCP 给能力,权限给边界,Skill 给流程,CLAUDE.md 给提醒。

5.2 一个"团队代码规范"体系

text
CLAUDE.md               →  全局规则(构建命令、绝对约束)
+ rules/frontend.md     →  前端文件的规范(paths: src/web/**)
+ rules/backend.md      →  后端文件的规范(paths: src/api/**)
+ Skill「code-review」   →  评审流程
+ Hook(PostToolUse)    →  自动格式化(确定性)
+ Hook(PreToolUse)     →  提交前跑测试(确定性)

六、一个反面案例

需求:"我想让 Claude 每次改完代码自动跑测试并格式化。"

新手选择:写进 CLAUDE.md「改完代码后请跑测试和格式化」。

问题:CLAUDE.md 是概率性的。它可能忘、可能跳过。而且这是"每次都要发生的确定动作",不该靠自觉。

正确选择:Hook(PostToolUse 匹配 Edit|Write)。确定性地在每次编辑后执行。

教训:先问"这需要 100% 保证吗?" 是 → hook/权限;否 → 才在五种机制里选。


七、选择流程图(完整版)

text
开始

├─ 需要 100% 确定性保证吗?
│   ├─ 是 → Hook(动作)或 权限规则(边界)→ 结束
│   └─ 否 → 继续

├─ 我缺的是"新工具能力"吗?(连外部系统)
│   ├─ 是 → MCP → 结束
│   └─ 否 → 继续

├─ 我要加的是"规则/事实"还是"流程"?
│   ├─ 规则/事实
│   │   ├─ 全局 → CLAUDE.md
│   │   └─ 按文件 → rules(paths)
│   └─ 流程
│       ├─ 会产生大量噪音,要隔离 → Subagent
│       └─ 需要主会话看到全过程 → Skill

└─ 结束

延伸阅读

基于 VitePress 构建 · 内容采用原作者授权