Skill 是提示词与 MCP 之间那块缺失的拼图
很多人用 Claude Code 时会重复同一件事:每个新会话都要重新贴一遍品牌规范、部署流程、代码审查清单。提示词会随会话消失,MCP 负责接外部工具,而 Skill 解决的是第三类问题——把可复用的流程知识写下来,让模型在需要的时候自己取用。
技术形态上,一个 Skill 就是一个包含 SKILL.md 的文件夹。frontmatter 里写 name 和 description,正文写流程步骤。它可以直接用自然语言触发,也可以当成斜杠命令调用,还能在 Cursor、Copilot 等工具里用同名关键词唤起。命令(.claude/commands/*.md)是它的旧格式,两者创建出的斜杠命令完全等价,但新格式支持附带脚本、模板和参考文档。
渐进式披露:之所以省上下文的关键
Skill 的加载分两段。阶段一只加载元数据,每个技能大约一百个 token,模型看得到名称与描述,知道"有什么可以用",但不会把指令正文塞进上下文。阶段二在模型判断任务匹配后,才把完整的 SKILL.md 载入,通常在五千 token 以内,文件夹里的参考文档再按需读取。
这意味着你可以同时挂几十个技能而不会挤爆工作记忆。也意味着描述字段承担了意图分类器的工作——激活是描述驱动的,不是名字驱动的。像"帮助处理文档"这样的描述几乎永远不会触发,而"审查暂存或已修改的代码是否存在安全缺陷,在用户说'帮我 review 一下'时触发"就会稳定命中。
写 Skill 的第一步不是写步骤,而是写描述。描述要包含用户真正会打的那些短语、适用的文件类型和任务类型,不要写营销话术。描述写得越具体,技能被正确触发的概率越高。
三处存放位置与优先级
放哪里决定了谁能用。个人级放在 ~/.claude/skills/,对该用户所有项目生效;项目级放在 .claude/skills/ 并随仓库提交,只对这个仓库生效;插件级随插件安装,使用命名空间避免冲突;企业级由托管配置下发,覆盖整个组织。优先级从高到低是企业、个人、项目。
另外两个容易被忽略的点:子代理不会自动继承技能,必须在代理文件的 frontmatter 里用 skills 字段显式声明,而且是在代理启动时一次性全部加载,不是按需加载——所以只列每次任务都需要的技能。内置的探索、规划类代理则完全没有技能访问权限。
Skill 与 CLAUDE.md 怎么分工
最简单的一条判据:如果模型不管你提没提这个话题都要知道,写进 CLAUDE.md;如果只有你提出某个具体请求时才需要,写成 Skill。技术栈、目录结构、命名约定、提交前必须跑 lint 属于前者;代码审查清单、部署手册、故障响应步骤属于后者。两者内容重复时 CLAUDE.md 优先,因为它先被加载。
安全上还有一条:把下载来的 Skill 当作可执行代码对待。看它的指令、脚本、依赖和工具授权范围,再决定要不要调用。