教程Claude Code系列第 7 / 11 篇

CLAUDE.md、skill、hook、子代理、MCP、插件:Claude Code 的六种扩展各管什么,先用哪个

Claude Code 的扩展方式有六七种,名字相近,容易用错地方。按官方的选型说明整理:每一种解决什么问题、什么信号出现时该加哪一种、相近的几种怎么区分、各占多少上下文。占用的数字用的是本站这个系列实测到的。

发布 · 约 9 分钟读完 · 经人工审核()· 本站的内容怎么来的

本文根据公开分享整理,本站尚未实测。操作前请对照文末的原始来源。

本页目录(9 节)
  1. 一句话版本
  2. 不用一开始就配齐:等信号出现再加
  3. 最容易混的几对
  4. 同一样东西配在几个地方,听谁的
  5. 各占多少上下文
  6. 组合起来用
  7. 插件:最后才需要的一层
  8. 一个可以照着走的顺序
  9. 这篇没有覆盖到的

这篇教程解决一个问题:想让 Claude Code 记住一件事、学会一件事或者接上一个系统,到底该写在哪。

Claude Code 的扩展方式不少:CLAUDE.md、规则文件、skill、hook、子代理、MCP、插件。它们名字相近,功能看着也有重叠,新手最常见的做法是把所有东西都塞进 CLAUDE.md。结果是文件越来越长,真正要紧的规矩反而被忽略。

这一篇不讲每一种怎么写(那些各有专门的文章,文中都给了链接),只讲怎么选。

这篇按官方文档整理,没有单独做实测。文中“占多少上下文”一节的数字,来自本系列前几篇在同一个示例仓库上的实测(Claude Code 2.1.296)。

一句话版本

你想要的 用什么 详细的教程
它每次都该知道的事 CLAUDE.md CLAUDE.md 怎么写
只对一部分文件适用的规矩 .claude/rules/ 下的规则文件 同上
一套可以反复用的步骤或知识 skill skills 怎么写
每一次都必须发生的动作 hook Hooks 实战
接上一个外部的系统 MCP MCP 实战
把一件活隔离出去做 子代理 子代理实战
把上面这些打包给别的项目或别人用 插件 —

官方文档用一句话概括了分工:CLAUDE.md 管一直都在的上下文,skill 管按需取用的知识和流程,MCP 管对外的连接,子代理管隔离,hook 管自动化。

不用一开始就配齐:等信号出现再加

这是官方文档里最实用的一张表。每一种扩展都有一个明显的信号,多数团队是按下面的顺序一样样加上的:

你发现自己…… 就加
看到它把同一个约定或命令搞错了第二次 写进 CLAUDE.md
总在对话开头打同一段话来启动一件事 存成一个 skill
第三次把同一份操作步骤粘贴进对话 写成一个 skill
总在从一个它看不到的页面里复制数据给它 把那个系统接成 MCP 服务器
看到一件附带的任务把对话塞满了你不会再看的输出 交给子代理
想让某件事每次都发生,不用你开口 写成 hook
第二个仓库也需要同样的一套 打包成插件

文档还补了一句:同样的信号也告诉你什么时候该改已有的东西。同一个错误再犯、同一条审查意见再出现,应该去改 CLAUDE.md,而不是在对话里再纠正一次。

新手从哪开始,文档的建议很明确:先写 CLAUDE.md,别的等信号出现了再说。

最容易混的几对

CLAUDE.md 还是 skill

两者都是写给它看的说明,区别在什么时候加载。

CLAUDE.md skill
什么时候加载 每个会话,自动 用到时
能不能当命令触发 不能 能,用 /名字
适合放 “总是这样做”的规则 参考资料、可以触发的流程

判断办法:它是不是每次都该知道。编码约定、构建命令、项目结构、“绝不要做某事”,放 CLAUDE.md。有时才用得上的参考资料(接口文档、风格指南),或者一套要你触发的流程(部署、发版),放 skill。

文档给的经验值:CLAUDE.md 控制在 200 行以内。超了,就把参考性的内容挪到 skill,或者拆到规则文件里。

CLAUDE.md、规则文件还是 skill

三种都放说明,加载的时机不同:

CLAUDE.md .claude/rules/ skill
加载 每个会话 每个会话,或者碰到匹配的文件时 被调用或者相关时
范围 整个项目 可以限定到某些路径 某一类任务
适合放 核心约定和构建命令 某种语言、某个目录特有的规矩 参考资料、可重复的流程

带路径限定的规则文件,只在 Claude 处理匹配的文件时才加载。我们在CLAUDE.md 那篇里实测过:给测试文件写了一条规则,它一读测试文件,屏幕上就出现 Loaded .claude/rules/tests.md。

CLAUDE.md 还是 hook

这一对的区别不在内容,在有没有保证。

CLAUDE.md 是给模型的上下文,它会尽量照做,但不保证。hook 是 Claude Code 在固定时机直接执行的命令,不经过模型。

判断办法:它偶尔不做,你能不能接受。能,写 CLAUDE.md;一次都不能漏,写 hook。

我们的实测里有一个例子正好说明这一点。在Hooks 那篇里,一个 hook 在每次改完文件后自动整理格式。我们让 Claude 故意写一个格式不对的文件,它写完之后报告说:这一步是外层执行的,“我拦不住”。

skill 还是子代理

skill 子代理
是什么 可以反复用的说明、知识或流程 一个有自己上下文的独立工作者
好处 同一份内容到处能用 隔离:活在别处干,只把总结拿回来
对主对话的上下文 加进主对话 用另一个上下文
适合 参考资料、可触发的流程 要读很多文件的任务、并行的工作、专门的角色

两者可以组合:子代理可以预先加载指定的 skill;skill 也可以设成在隔离的上下文里运行。

MCP 还是 skill

MCP skill
提供的是 工具和数据的访问 知识、流程、参考资料
例子 查数据库、发 Slack 消息、控制浏览器 代码审查清单、部署流程、接口风格指南

它们解决的是两件事,而且常常一起用:MCP 让它能访问一个系统,skill 教它怎么用好这个系统。文档举的例子是:MCP 接上你的数据库,再用一个 skill 写明表结构和常用的查询方式。

子代理还是动态工作流

两者都把活放到主对话之外去做。区别是谁来决定下一步:用子代理时,Claude 一轮一轮地决定派谁、做什么;动态工作流是 Claude 先写一段脚本,由脚本来调度很多个子代理。

要一个快速、专注的帮手,用子代理。任务大到几个子代理应付不了,或者你希望结果先互相核对过再交给你,用动态工作流,见动态工作流怎么用。

同一样东西配在几个地方,听谁的

这些扩展大多可以配在不止一层:个人、项目、插件、组织。同名的时候怎么算,各有各的规矩。按官方文档:

扩展 多处都有时
CLAUDE.md 叠加。各层的内容同时进上下文;有冲突时由 Claude 自己权衡
skill 同名的只留一个:组织优先于个人,个人优先于项目
子代理 同名的只留一个:组织、启动参数、项目、个人、插件,依次优先
MCP 服务器 同名的只留一个:local 优先于 project,project 优先于 user
hook 合并。所有登记的 hook 都会在匹配的事件上触发,不管来自哪里

CLAUDE.md 是叠加的,所以个人的偏好和项目的规矩可以同时生效,但也意味着写矛盾了没有哪一方会“赢”。

各占多少上下文

每加一样扩展,都要占一点上下文。占多了有两个后果:一是窗口被挤满;二是噪音变多,文档说这会让 skill 不能正确触发,或者让 Claude 记不住你的约定。

官方文档列了每一种的加载方式:

扩展 什么时候加载 加载什么 代价
CLAUDE.md 会话开始 全部内容 每次请求都带着
skill 会话开始,加上用到时 开始时只有说明,用到时才是全文 低
MCP 服务器 会话开始 工具的名字;完整的定义按需加载 用到之前低
子代理 被派出时 一个全新的上下文 和主会话隔离
hook 触发时 什么都不加载,它在外面跑 零,除非 hook 返回了附加的上下文

这个系列的实测里,在会话里运行 /context 看到的实际数字是这样的:

项目 占用 说明
系统提示词 2.6k token Claude Code 自带
内置工具的定义 约 21k token Claude Code 自带
一份 57 行的 CLAUDE.md 2.4k token CLAUDE.md 那篇
内置的 13 个 skill 的说明 约 2k token 同上
一个带 3 个工具的 MCP 服务器 2.1k token,另加服务器说明 319 token MCP 那篇
一个自定义子代理的说明 73 token 子代理那篇

几点可以从中读出来:

  • 什么都不配,开一个会话也要先占掉两万多 token。 大头是 Claude Code 自己的工具定义。
  • 一份不长的 CLAUDE.md 和一个小的 MCP 服务器,各占两千多。 单看不多,但它们每一轮请求都要带上。
  • 子代理的说明最便宜,因为它的正文只在被派出时才加载,而且加载在另一个上下文里。

这些数字只是一个仓库、一个版本上的读数,用来建立量级的概念,不要当成规格。

想省上下文,文档给的几个办法:

  • CLAUDE.md 保持在 200 行以内,参考性的内容挪到 skill。
  • 不想让某个 skill 的说明占着上下文,在它的头部加 disable-model-invocation: true,这样只有你手动调用时它才加载。
  • 不用的 MCP 服务器删掉。

组合起来用

真实的配置是几种一起用的。文档举的几个组合:

组合 怎么配合 例子
skill 加 MCP MCP 提供连接,skill 教它怎么用好 MCP 接数据库,skill 写明表结构和查询的套路
skill 加子代理 一个 skill 派出几个子代理并行干活 一个审计用的 skill,同时派出查安全、查性能、查风格的三个子代理
CLAUDE.md 加 skill 前者放一直生效的规则,后者放按需加载的资料 CLAUDE.md 里写“遵守我们的接口约定”,完整的约定放在 skill 里
hook 加 MCP hook 通过 MCP 触发外部的动作 改了关键文件之后,hook 发一条 Slack 通知

插件:最后才需要的一层

插件不是另一种扩展,是打包的方式。一个插件把 skill、hook、子代理和 MCP 服务器捆成一个可以安装的单元。插件里的 skill 带命名空间(比如 /my-plugin:review),所以多个插件可以共存。

什么时候需要:同一套配置要用在好几个仓库里,或者要分发给别人。只在一个项目里用,直接放在项目的 .claude/ 目录下提交就够了。

Claude Code 的另一种扩展 mod,是改界面和行为的,见Claude Code Mods 是什么。

一个可以照着走的顺序

把上面的内容压成一条路线:

  1. 第一天:运行 /init 生成 CLAUDE.md,删掉读代码就能知道的内容,加上你自己的规矩。
  2. 第一周:看到它重复犯错,就往 CLAUDE.md 里加一条。文件变长了,把只和某类文件有关的规矩拆到 .claude/rules/。
  3. 有了反复做的事:写成 skill。
  4. 有了“一次都不能漏”的事:写成 hook。格式化、不许改的文件,是最常见的两个。
  5. 总在给它粘贴别处的数据:接 MCP。
  6. 主对话总被调查类的任务塞满,或者想让另一个角色来检查:写子代理。
  7. 第二个仓库也要这一套:打包成插件。

每一步都等信号出现再走。配得多不等于配得好,每一样都占上下文,也都要维护。

这篇没有覆盖到的

  • 没有单独实测。 选型的说法来自官方文档;上下文占用的数字来自本系列别的文章的实测。
  • 官方文档里列的另外几种没有展开:输出风格、代码智能插件、跨会话消息、Artifact。
  • 插件怎么做这个系列还没有写。
  • 多层配置的优先顺序没有逐条验证。

来源

通过 API 中转站使用这些模型?到 Veridrop 免费检测中转站给你的是不是它声称的模型,或者看看中转站排行榜前 100 名。

相关文章