Claude Code 给你一堆”教它做事”的方式:skill、CLAUDE.md、斜杠命令、subagent、hook、MCP。它们解决的是不同的问题,选错那个,就是平白给自己加复杂度

前面三篇(什么是 skill / 怎么加载匹配 / 进阶技巧)一直在讲 skill。这一篇把它放回全家福里,告诉你什么时候该用别的

先上主表。区分它们只看三件事:谁触发它、在哪运行、什么时候在场。

选项怎么触发在哪运行最适合
CLAUDE.md自动,永远当前对话永远成立的项目规范
skillAI 语义匹配,自动当前对话偶尔才需要的任务专长
斜杠命令手动/xxx当前对话你想主动触发的固定动作
subagent你委派独立隔离的上下文隔离的委派任务、需要不同工具权限
hook事件触发(存文件/工具调用)事件发生时每次保存跑 linter、调用前校验
MCP server提供外部工具外部集成接外部系统、数据源

下面几组两两对比,讲清边界。


CLAUDE.md vs skill:永远在场 vs 按需加载

这是最容易混的一对,核心区别就一句:CLAUDE.md 每次对话都加载,skill 匹配上才加载。

  • CLAUDE.md 放:
    • 永远适用的项目规范(比如”本项目用 TypeScript 严格模式”)
    • 硬约束(比如”绝不改数据库 schema”)
    • 框架偏好和代码风格
  • skill 放:
    • 任务专长(只在做某类活时才需要)
    • 只是偶尔相关的知识
    • 写进每次对话会嫌啰嗦的详细流程

判断口诀:永远要 → CLAUDE.md;偶尔要 → skill。 你写新代码时,根本不需要 PR review 清单挂在 context 里——那是 skill 的活。


skill vs subagent:加知识 vs 派活

  • skill 是把知识加进你当前这个对话。skill 一激活,它的指令就并入现有上下文,和你继续聊同一摊事。
  • subagent 是在另一个隔离的上下文里干活。你给它一个任务,它独立做完,把结果交回来——它和你的主对话是隔开的,还可以有和主对话不同的工具权限

什么时候用 subagent:你想把一块活委派出去、需要不同的工具访问、或者想让这块委派工作和主上下文互不污染

什么时候用 skill:你想增强当前任务的能力,而且这份专长贯穿整个对话。

一个会让人栽跟头的细节:subagent 默认看不到你的 skill。 委派给 subagent 时,它从一个干净的新上下文起步——内置 agent(Explorer / Plan / Verify)根本用不了 skill;自定义 agent 能用,但你得在它的 frontmatter 里显式写一个 skills: 字段列出要加载哪些(而且是 agent 启动时就加载,不像主对话那样按需匹配)。所以”我主对话里好好的 skill,到 subagent 里怎么不灵了”——答案通常就是:你没把它列进去。


skill vs hook:你问它才动 vs 事件一到就动

  • hook事件驱动的。它在某个事件发生时自动跑——比如每次 Claude 保存文件就跑一遍 linter,或在某些工具调用前先校验输入。它不管你”问了什么”。
  • skill请求驱动的(上面讲过的语义匹配),它根据你在问什么来激活。

hook 处理:每次存文件都该跑的操作、特定工具调用前的校验、Claude 动作的自动化副作用。

skill 处理:影响 Claude 怎么思考、怎么处理请求的知识和准则。


skill vs 斜杠命令:自动 vs 手动

两者都在当前对话里生效,区别在谁按下触发键:

  • 斜杠命令:你得记得它、主动敲 /xxx 才触发。
  • skill:你不用敲,AI 认出场景自动用上。

所以如果一件事你希望”我明确要的时候才做”,做成斜杠命令;如果你希望”只要话题对了它就该自动套用”,做成 skill。


MCP:根本不是一类

MCP server 提供的是外部工具和集成——把 Claude 接到外部系统、数据源、第三方服务上。它和上面几个不是一个维度的东西:前面那些是”怎么教 Claude 做事”,MCP 是”给 Claude 接上外部的手脚”。


组合起来用,别硬塞进一个

它们不是单选题。一套典型配置长这样:

放什么
CLAUDE.md永远在场的项目规范
skill按需加载的任务专长
hook事件触发的自动化操作
subagent隔离上下文里的委派任务
MCP外部工具和集成

每个功能管自己那摊专长。 别因为先学会了 skill,就把什么都往 skill 里塞——该用 hook 的(每次保存自动跑)硬写成 skill,它根本不会在”保存”这个事件上触发;该进 CLAUDE.md 的(永远成立的规则)塞进 skill,它就可能在你需要时没匹配上。


给 vibe-coder 的话

回去翻翻你自己的 CLAUDE.md:里面有没有哪条其实”只在某些时候才用得上”? 如果有,它就是个被错放的 skill——挪出去,你每次对话的 context 都会清爽一点。

选对工具的心法很简单,对着主表问自己三个问题:

  1. 这件事永远要做,还是偶尔才要?(永远 → CLAUDE.md;偶尔 → skill)
  2. 它该我主动触发,还是AI 自动判断?(主动 → 斜杠命令;自动 → skill/hook)
  3. 它是当前对话里的知识,还是派出去的独立任务?(知识 → skill;派活 → subagent)

把这三问走一遍,你基本不会再选错。

真用起来 skill 时难免会碰到”它怎么不工作”。最后一篇是张急救卡: 跑挂,分别怎么修