一句话定义:文件夹 + SKILL.md
Claude Code 官方文档的写法是:创建一个 SKILL.md,里面写说明,Claude
在相关时使用它,你也可以用 /skill-name 直接调。它不是一段提示词,
是一个目录——目录里除 SKILL.md 之外还可以放参考文档、示例和脚本。
官方给的结构长这样:
my-skill/
├── SKILL.md (必需:概览与导航)
├── reference.md (详细参考资料,需要时才读)
├── examples.md (用例,需要时才读)
└── scripts/
└── helper.py (工具脚本,执行,不读入上下文)
三个部分各有分工:frontmatter 决定它什么时候被看见,正文
是 Claude 照着做的说明,附带文件是正文指向的深层资料。官方建议把
SKILL.md 控制在 500 行以内,细节挪到单独文件里——原因在下面「渐进式加载」。
它放在哪,决定谁能用
官方文档里列了七八种位置,实际会碰到的就三个:个人目录
~/.claude/skills/<skill-name>/SKILL.md(这台机器上所有项目都能用)、
项目目录 .claude/skills/<skill-name>/SKILL.md(只在这个仓库里生效,
提交进版本控制团队就都有了)、以及插件里的
<plugin>/skills/<skill-name>/SKILL.md(用的时候带插件前缀,
形式是 /plugin-name:skill-name)。此外还有企业托管设置目录、
--add-dir 附加目录、和从 claude.ai 账户同步下来的一类。
位置不只是「放哪」,它还决定优先级:同名时企业覆盖个人、个人覆盖项目; 你写的 skill 会覆盖同名的自带命令,但不会覆盖它的别名。装之前先想清楚这是 「我这台机器上要用」还是「这个仓库的人都要用」,答案不一样,放的地方也不一样。
frontmatter:名字、描述,和几个可选的开关
文件第一行的 --- 之间是 YAML。所有字段都是可选的,官方唯一建议写的是
description——Claude 就靠它判断「这个请求该不该用这个 skill」。
name 决定你在 / 菜单里输入的命令名,不写就用目录名。
另外几个常见开关(都来自官方字段表):
-
disable-model-invocation: true:只允许你手动调,Claude 不能自己决定用。 有副作用的事(部署、发消息、提交)该这么写。 -
allowed-tools:调用这个 skill 的那一轮,列出的工具免确认; 你发下一条消息时授权就清掉。 -
context: fork:把 skill 丢进子代理的隔离上下文里跑, 主对话只收结果。 -
paths:只在处理匹配这些 glob 的文件时才自动加载。
一个容易误解的点:disable-model-invocation: true 打开后,
描述也不进上下文了。好处是不占日常开销,代价是 Claude 自己发现不了它,
你必须记得输入 /name。
Agent Skills 是什么?就是这套东西的标准名
Claude Code 的 skills 遵循 agentskills.io 上的 Agent Skills
开放标准,这套标准适用于多个 AI 工具。Claude Code 在自己这边加了几项扩展:
控制谁可以调用(disable-model-invocation、user-invocable)、
在子代理里执行(context: fork)、动态上下文注入(正文里的命令会在渲染时先跑)。
这意味着两件事:只写标准内字段的 skill,换个客户端也能用;反过来说,
用了 Claude Code 扩展字段的 skill 拿到别处就只是普通说明,那个字段不会生效。
官方打 claude.ai 上传包时校验很严——带了标准不允许的字段,会直接报错而不是忽略。
渐进式加载:为什么不占上下文
这是 skill 和「把规则全塞进 CLAUDE.md」最大的区别。官方文档把加载分成三段:
- 平时:每个回合只有 skill 的名字和描述在上下文里,正文不在。 代价是描述有预算——按模型上下文窗口的 1% 缩放,超了就先裁掉你最少用的那些。
- 调用时:渲染后的
SKILL.md作为一条消息进入对话, 并在后续轮次保留。注意它不会重读文件,所以你写的应该是「整个任务期间都成立的指令」, 不是一次性的步骤。 - 需要时:
reference.md这类大文件 Claude 按需去读,scripts/里的脚本是执行而不是读入——所以塞一份 300 行的 API 文档不心疼, 但把同一份文档摊进正文就很不划算。
官方还提了一句很准的判断标准:当你不断把同样的说明、检查清单或多步骤流程粘进对话,
或者 CLAUDE.md 的某一段已经从「事实」演变成了「流程」,就该拆成 skill。
三层来源,装之前先分清楚
中文语境里「Claude Skills」这个词把三种东西混在了一起,这是大部分困惑的来源。
Anthropic 官方 skills
仓库 anthropics/skills,2026-10-19 取数 182,075 stars,
skills/ 目录下 19 个 skill,包括 docx、pdf、
pptx、xlsx、skill-creator、
mcp-builder、frontend-design、webapp-testing。
登录 claude.ai 账户的会话会同步其中一部分,pdf、xlsx
这类是总会同步的。
Claude Code 自带 + 官方插件带的
自带的那批叫捆绑 skills:/doctor、/code-review、
/debug、/batch、/loop、
/claude-api、/run、/verify。
它们是「基于提示」的,靠指令协调 Claude 用工具,可以用
disableBundledSkills 整体关掉。官方市场
claude-plugins-official 里的 skill-creator、
mcp-server-dev 则要自己装。
社区 skills
主流装法是跨 agent 安装器 npx skills add <owner/repo>
(仓库 vercel-labs/skills,2026-10-19 取数 35,548 stars、MIT;
npm 上的 skills 包最新 1.7.2,官方列了 40+ 个 agent)。
另一层是 awesome 目录,比如 ComposioHQ/awesome-claude-skills
53.4k stars——收藏多不等于能用,这点在
值得装的那份清单里再展开。
分清这三层,能省掉两类白折腾:一是以为装了官方 skill 就懂了你的项目约定——
官方那批是通用能力,项目约定得你自己写进项目 skill 或 CLAUDE.md;
二是拿社区目录当质量排名——它衡量的是有人收藏过,不是装完有没有用。
四者边界表:skill / plugin / MCP / subagent
这四个词经常被当成同一层的选项,其实不是。skill 是文件,plugin 是装的单元, MCP 是连接协议,subagent 是另一种上下文。下表前三列是官方文档里的机制; 最后一列「典型误用」是我按机制推出来的,不是文档原文。
| 是什么 | 怎么被加载 | 什么时候用 | 典型误用 | |
|---|---|---|---|---|
| skill | 一个目录,含 SKILL.md、可选的参考文件和脚本 | 启动时只把名字和描述放进上下文;调用时读入正文,并在后续轮次保留;附带文件按需读、脚本执行 | 反复粘贴同一套步骤;项目约定和检查清单;想把流程跨 agent 复用(Agent Skills 标准) | 当 hook 用,指望它「必须执行」;把大段参考资料摊进正文,每轮都付 token |
| plugin | 一个目录,通常带 .claude-plugin/plugin.json 清单,可包含 skills、agents、hooks、MCP 服务器 | 从市场安装、按用户/项目/本地作用域启用;启用后每个会话都加载它的组件,命令带插件前缀 | 一次装一整套别人做好的东西;团队或组织统一分发、统一更新 | 为了一个 skill 装整包插件,结果每回合背着全部组件的描述;以为项目作用域装了同事就有了 |
| MCP server | 按 Model Context Protocol 提供工具、数据源的服务器进程或远程端点 | 在 MCP 配置里注册(本地/项目/用户作用域,项目级写进 .mcp.json);启动时连接,工具列表进上下文,默认还用工具搜索把定义延迟 | 要读写外部系统:issue、监控、数据库、设计稿;或者你正在把别处的数据复制进聊天 | 写个 server 只为塞一段规则(那是 skill 的事);连不信任的 server,把提示注入风险请进门 |
| subagent | 一份带 frontmatter 的 markdown 定义,跑在自己的上下文窗口里,有独立系统提示和工具限制 | 放 .claude/agents/ 或 ~/.claude/agents/;Claude 按 description 决定何时委托;结束只把结果带回主对话 | 输出量大又只用一次(测试日志、代码库探索);要限制工具(只读审查);把脏活挡在主对话之外 | 让它做依赖对话历史的任务(非 fork 子代理看不到历史);把可复用流程写成 subagent,而不是 skill |
skill 教「怎么做」,MCP 给「能操作什么」,subagent 换「在哪做」,plugin 管「怎么一起装上」。 四个都能单独用,官方文档原话是:skills、子代理、hooks、MCP 服务器都能独立工作,不需要插件; 插件存在的意义是打包成一个单元。
判断清单:什么时候上 MCP
把「该写 skill 还是该连 MCP」拆成五个问题,按顺序问,第一个命中的就是答案。
- 你要的是「做法」还是「数据或操作」? 做法(步骤、检查项、代码风格、评审口径)→ skill。 数据或操作(要读数据库、要建 PR、要看监控)→ MCP server。
- 你是不是正在把另一个工具里的内容复制进聊天? 是 → 该连 MCP server。官方文档就是这么划线的:当你要从问题跟踪器或监控面板里复制数据时,去连一个服务器。
- 这条规则必须每次发生、不允许模型忘掉? 是 → hook,不是 skill。官方的处理建议很直接:必须每次都成立的规则挪进 hook, 因为 hook 在事件发生时每次都运行,而 skill 靠模型遵守。
- 输出很脏很长、你不想让它在主对话里? 是 → subagent。非 fork 子代理从干净上下文开始,只回一份摘要。
- 你要装的是「一整套」还是「一条说明」? 一整套(含 hooks、agents、MCP)→ plugin。只有一条说明 → 直接写 skill,别包一层。
| 你的处境 | 该用什么 | 为什么 |
|---|---|---|
| 每次 review 都手打同一份检查清单 | skill | 同一套指令反复出现,正文按需加载,不占平时上下文 |
| 想让 Claude 直接读 Jira、Sentry、Postgres | MCP server | 这是工具和数据通道,skill 拿不到实时数据 |
| 提交前必须跑一遍某个脚本 | hook | 需要「每次都执行」的强制力,skill 只能靠模型自觉 |
| 跑测试套件,只想知道哪几个失败 | subagent | 输出会淹掉主对话,子代理在自己的窗口里处理 |
| 团队新人入职要一套完整配置 | plugin | 多组件一个单元安装、统一更新 |
再强调一次:skill 和 MCP 不是二选一。MCP 提供工具,skill 提供用工具的做法——
一个 skill 里可以明确要求先查 issue、再改代码、最后建 PR,工具从 MCP 来,流程从 skill 来。
官方那条 mcp-server-dev 就是典型:它本身是个插件,里面装的是教 Claude 搭 MCP 服务器的 skill。
官方已有中文文档,这页不重复它
实话先说:code.claude.com/docs/zh-CN/skills 是 Anthropic 官方的简体中文文档,
frontmatter 每个字段、七种加载位置、排错步骤都写到了,质量不差。这页正文里的机制描述,
我逐条对照的就是它——2026-10-19 核对。
所以这页刻意不做三件事:
- 不抄字段表。需要逐字段查的时候,看官方那张表,别看我转述。
- 不写安装步骤。那是安装那页的活,塞进这页只会把搜索意图搅混。
- 不给没有实测过的数字。这页没有「装完省了多少 token」这类数,因为我没跑过对照。
那这页的价值在哪?官方文档是按「功能」组织的:这里是 skills,那里是 plugins,再那边是 MCP, 每一页都假设你已经知道自己要找什么。而这页是按「选择」组织的——三层来源怎么分、 四者边界在哪、什么情况下别用。文档告诉你有什么,这页告诉你该挑哪个。
什么情况下别用 skill
- 规则必须每次执行。用 hook。skill 的内容在压缩后还可能被丢掉, 靠它做「绝对不允许」的守门是不靠谱的。
- 要实时数据或要写回外部系统。用 MCP server。skill 只是文件, 它没法替你连数据库。
- 输出量大且只用一次。用 subagent。你要的是一次性的隔离, 不是一个可以复用的流程。
- 就三句话能说清、只给一个人用。写进
CLAUDE.md更省事。 skill 的收益来自「重复使用 + 按需加载」,两样都不占,就不值得建目录。 - 你只是想要一个 star 数高的东西撑场面。那别装。skill 的上下文成本 按每个 skill 的描述算,装十个用不上的是纯亏。
四个具体的坑
这四个都是机制层面的,不是「运气不好」,官方文档里都有对应条目。
- skill 一多,描述被裁,触发不了。描述列表按模型上下文窗口的 1% 缩放,
超预算时从你最少用的 skill 开始删描述,关键词就在被删的那部分里。
用
/doctor估列表成本,用/skill-doctor看每个 skill 被用了几次、值不值得留。 - frontmatter 写错,skill 还能调,但自动触发废了。YAML 解析失败时
Claude Code 仍加载正文,只是所有字段为空——
/skill-name照常能用, Claude 却匹配不到你的 description。用--debug看解析错误, 或者对目录跑claude plugin validate找坏文件。 - 长对话压缩后,早调用的 skill 内容会消失。压缩时每个被调用的 skill
只保留最近一次调用的前 5,000 个 token,总预算 25,000,从最近调用开始填。
所以关键指令写进
SKILL.md开头,别指望中间段落活到最后。 - 把它藏在
disable-model-invocation后面,然后抱怨它从不触发。 这个字段会让描述不进上下文,Claude 根本不知道它存在。手动工作流可以这么设, 想让它自动生效就别设。
接着看
-
Skills 还是 Plugins?一张表说清怎么选
六个维度逐项对比,加三种组合方案和「选错的代价」。
-
Claude Code Skills 安装:三种方法 + 常见报错
装到哪个目录、项目级还是全局、装完为什么要重开会话。
-
值得装的 Claude Code Skills:按场景选,不按 star 排
只收装过、跑过、还能继续用的,每条写清不适合谁。
这一页的依据
- code.claude.com/docs/zh-CN/skills ——文件结构、frontmatter 字段、加载位置与优先级、描述预算、内容生命周期、排错条目。
- code.claude.com/docs/zh-CN/plugins/overview ——插件是什么、包含什么、独立组件与插件的分工、启用后的上下文成本。
- code.claude.com/docs/zh-CN/mcp ——MCP 用途、安装作用域、工具搜索与延迟加载、提示注入提醒。
- code.claude.com/docs/zh-CN/sub-agents ——子代理的独立上下文、定义位置、工具限制,以及「要复用流程请改用 skills」。
- github.com/anthropics/skills
——官方 skills 仓库:2026-10-19 取数 182,075 stars,
skills/下 19 个目录。 - github.com/vercel-labs/skills ——跨 agent 安装器:2026-10-19 取数 35,548 stars、MIT、建库 2026-01-14。
本页没有做安装与运行实测,因此不给耗时、token 差值这类数字。星数、目录数与字段名均取自 2026-10-19 的官方文档与 GitHub API,过期后请以文档为准。