最近我在 Cursor 里干了一件很“现代”的事:把能接的东西都接上了。
GitHub、浏览器、数据库、跑脚本……工具列表越拉越长,第一次看还挺爽。但爽感很快被现实打断:模型确实“会得更多”了,只是更容易走神。
有时候你明明想让它做一件非常具体的事,它却开始给你讲概念;你想让它调用 A 工具,它偏偏选 B;你把工具描述写得更详细,它就更像在“看说明书考试”,而不是在“干活”。
这其实不是模型变笨了,而是我们把它塞进了一个注意力地狱:上下文越大,越难聚焦;工具越多,越难选对。
Skill 之所以让我觉得“值得写一篇”,就是因为它没有继续在“工具数量”上加码,而是换了一个更现实的方向:把可复用的工作流写成 SOP,并且按需加载。
先说清楚我这里的定义:Skill 不是“又一套工具协议”,而是一份可复用的 SOP(必要时带脚本),用来教模型把事做完。
第一次听到 Skill,很多人会下意识把它当成:
这些都像,但不完全对。
我更愿意用一个程序员能秒懂的类比:
MCP 更像 USB-C 接口;Skill 更像你买回来的“扩展坞套装”,里面不仅有转接头,还有一张写得很清楚的使用说明,甚至附带了驱动和脚本。
也就是说,Skill 的核心不是“再定义一套工具协议”,而是:
你不需要在每次对话都把 SOP 贴一遍,也不需要把几十个工具定义全塞进系统提示词里。它更像你电脑里那个“用得上再打开”的文件夹。
从形态上看,它就是一个文件夹;从作用上看,它更像一份“可执行的说明书”。
不同产品/生态的目录约定不完全一样,但我认为一个“靠谱的 Skill 包”至少要有三样东西:
SKILL.md:最关键,写清楚目标、触发条件、步骤、注意事项、边界。reference/(可选):更长的参考资料,比如某个系统的约束、API 文档摘录、格式规范。scripts/(可选):真正干活的脚本(调用 API、执行命令、读写文件等)。注意这里的顺序:先有手册,再有脚本。很多“用着不稳”的 Skill,问题不在脚本,而在手册写得含糊:目标不清、步骤太粗、异常没兜底、权限没边界。
我现在写 Skill 的一个硬性要求是:SKILL.md 里必须出现“不要做什么”,而不仅是“怎么做”。
这一节只讲一件事:Skill 解决的重点不是“能力”,而是上下文成本——信息该什么时候进上下文、进多少。
如果你之前看过我写的 MCP(比如《Model Context Protocol (MCP) 快速开始》),你会很自然地想到一个问题:
既然 MCP 能列出所有 tools,那 Skill 到底解决了什么新问题?
我自己的答案是:Skill 主要解决的是“把什么信息放进上下文”。
渐进式披露的思路非常像查资料:
用一张最粗的流程图表达就是:

当你把工具越接越多时,通常会发生两件事:
很多人把第二点理解成“模型不够聪明”。我更倾向于把它理解为:你让它在一个嘈杂的房间里听你说话,它当然容易听错。
Skill 的做法不是让房间更大,而是先把不相关的人请出去。
先给结论:它俩更像“分工”,不是“替代”。MCP 负责连接,Skill 负责流程。
Skill 生态很容易被营销成“更好的 MCP”。这种说法我不太认同。
更准确的关系是:
| 维度 | Skill | MCP |
|---|---|---|
| 核心定位 | SOP + 资源打包 | 工具/资源访问协议 |
| 关键价值 | 渐进式披露、复用工作流 | 标准化连接、权限/隔离、可扩展 |
| 信息进入上下文 | 可按需加载(漏斗式) | 往往需要把工具定义提前暴露 |
| 适合场景 | 重复性工作、步骤明确 | 稳定连接外部系统/数据源 |
| 风险点 | 提示注入、脚本乱跑 | 工具滥用、权限配置不当 |
我现在基本按这几条做决策:
一句话总结:
MCP 负责把手伸出去,Skill 负责教你怎么用手把事情做完。
Skill 很好用,但它不是万能胶;这一节我想把边界一次说明白:哪些问题适合 Skill,哪些问题应该交给 RAG / Workflow / 工程规范。
我见过不少团队把 Skill 当成万能胶:知识检索也 Skill、复杂决策也 Skill、多轮状态机也 Skill。
结果就是:SKILL.md 越写越长,最后又回到了“上下文爆炸”。
我不打算把这一节写成“安装说明”,更想用一个我自己真实会用的例子,把 Skill 的工作方式讲清楚。
我最常用 Skill 的场景其实很朴素:重复性写作与重构。
比如写博文这件事,本质上也是一套 SOP:
Skill 适合把这套流程固化下来,让模型每次都按同一套节奏输出,而不是每次都“凭感觉发挥”。
你会发现:当步骤明确后,模型的发挥反而更稳定。
不稳定的往往不是语言能力,而是你给它的任务形态。
我最近还用它做了一件更“具体”的事:把一篇草稿从“能看”改到“能发”。
以前我会在对话框里反复补充要求:
但你会发现,这种“补丁式交互”有个副作用:你越改越像在写一份新的 prompt,而不是在改文章。
后来我把它整理成一个 Skill,结构非常简单:
这套流程一旦固化下来,后面每次改稿基本就是一句话触发:“按我的写作 Skill 走一遍,先给我结构问题,再给精修版。”
如果你要一个更“工具感”的例子:让它生成 Excalidraw 架构图也类似。Skill 做的不是“会画图”,而是把“需求澄清 → 结构拆解 → 绘图指令 → 导出校验”写成固定流程,模型照着走即可。
写 Skill 这事,最容易踩的坑不是“写不出来”,而是写得太虚:目标不清、步骤太粗、边界缺失,最后变成一个会瞎跑的脚本入口。
我写 Skill 时会用一个 checklist 自检(很像我在工程里写 Spec 的习惯):
一个最小目录结构大概是这样:
我建议:脚本越强,手册越要啰嗦。
因为脚本的破坏力通常比你想象的大。
SKILL.md 骨架如果你要我给一个“最像工程”的写法,我会建议把 SKILL.md 拆成四块:
这几块写清楚,Skill 的稳定性通常就不会太差。
这一节我会说得更直白一点:Skill 一旦具备执行能力,就必须按“线上脚本”的标准来约束,否则迟早出事。
Skill 一旦和脚本结合,就很容易出现一个危险组合:
提示注入(让模型做不该做的事) + 可执行能力(脚本/系统命令)
这不是“模型不够乖”,而是攻击面真的存在。
.env、浏览器 Cookie、云端 token。这套方法不完美,但能让你少踩很多“当场爆炸”的坑。
下面这些场景,我基本不会把执行权直接交给 Skill(至少不会在没审计/没回滚的情况下交出去):
一句话:Skill 可以很强,但强到一定程度,就得像对待线上脚本一样对待它。
我现在越来越倾向于一个判断:
在 Agent 时代,真正稀缺的不是“工具”,而是“可复用的正确流程”。
Skill 的价值就在这里:它把流程沉淀为可按需加载的 SOP,让模型少走弯路,也让你少当一次次的“人肉提示词编辑器”。
下一篇我想写得更具体一点:把一个“写作/改稿 Skill”真的做成一个可复用包(包含边界、验收标准和安全护栏),看它能不能在真实场景里稳定跑起来。
最近我在 Cursor 里干了一件很“现代”的事:把能接的东西都接上了。
GitHub、浏览器、数据库、跑脚本……工具列表越拉越长,第一次看还挺爽。但爽感很快被现实打断:模型确实“会得更多”了,只是更容易走神。
有时候你明明想让它做一件非常具体的事,它却开始给你讲概念;你想让它调用 A 工具,它偏偏选 B;你把工具描述写得更详细,它就更像在“看说明书考试”,而不是在“干活”。
这其实不是模型变笨了,而是我们把它塞进了一个注意力地狱:上下文越大,越难聚焦;工具越多,越难选对。
Skill 之所以让我觉得“值得写一篇”,就是因为它没有继续在“工具数量”上加码,而是换了一个更现实的方向:把可复用的工作流写成 SOP,并且按需加载。
先说清楚我这里的定义:Skill 不是“又一套工具协议”,而是一份可复用的 SOP(必要时带脚本),用来教模型把事做完。
第一次听到 Skill,很多人会下意识把它当成:
这些都像,但不完全对。
我更愿意用一个程序员能秒懂的类比:
MCP 更像 USB-C 接口;Skill 更像你买回来的“扩展坞套装”,里面不仅有转接头,还有一张写得很清楚的使用说明,甚至附带了驱动和脚本。
也就是说,Skill 的核心不是“再定义一套工具协议”,而是:
你不需要在每次对话都把 SOP 贴一遍,也不需要把几十个工具定义全塞进系统提示词里。它更像你电脑里那个“用得上再打开”的文件夹。
从形态上看,它就是一个文件夹;从作用上看,它更像一份“可执行的说明书”。
不同产品/生态的目录约定不完全一样,但我认为一个“靠谱的 Skill 包”至少要有三样东西:
SKILL.md:最关键,写清楚目标、触发条件、步骤、注意事项、边界。reference/(可选):更长的参考资料,比如某个系统的约束、API 文档摘录、格式规范。scripts/(可选):真正干活的脚本(调用 API、执行命令、读写文件等)。注意这里的顺序:先有手册,再有脚本。很多“用着不稳”的 Skill,问题不在脚本,而在手册写得含糊:目标不清、步骤太粗、异常没兜底、权限没边界。
我现在写 Skill 的一个硬性要求是:SKILL.md 里必须出现“不要做什么”,而不仅是“怎么做”。
这一节只讲一件事:Skill 解决的重点不是“能力”,而是上下文成本——信息该什么时候进上下文、进多少。
如果你之前看过我写的 MCP(比如《Model Context Protocol (MCP) 快速开始》),你会很自然地想到一个问题:
既然 MCP 能列出所有 tools,那 Skill 到底解决了什么新问题?
我自己的答案是:Skill 主要解决的是“把什么信息放进上下文”。
渐进式披露的思路非常像查资料:
用一张最粗的流程图表达就是:

当你把工具越接越多时,通常会发生两件事:
很多人把第二点理解成“模型不够聪明”。我更倾向于把它理解为:你让它在一个嘈杂的房间里听你说话,它当然容易听错。
Skill 的做法不是让房间更大,而是先把不相关的人请出去。
先给结论:它俩更像“分工”,不是“替代”。MCP 负责连接,Skill 负责流程。
Skill 生态很容易被营销成“更好的 MCP”。这种说法我不太认同。
更准确的关系是:
| 维度 | Skill | MCP |
|---|---|---|
| 核心定位 | SOP + 资源打包 | 工具/资源访问协议 |
| 关键价值 | 渐进式披露、复用工作流 | 标准化连接、权限/隔离、可扩展 |
| 信息进入上下文 | 可按需加载(漏斗式) | 往往需要把工具定义提前暴露 |
| 适合场景 | 重复性工作、步骤明确 | 稳定连接外部系统/数据源 |
| 风险点 | 提示注入、脚本乱跑 | 工具滥用、权限配置不当 |
我现在基本按这几条做决策:
一句话总结:
MCP 负责把手伸出去,Skill 负责教你怎么用手把事情做完。
Skill 很好用,但它不是万能胶;这一节我想把边界一次说明白:哪些问题适合 Skill,哪些问题应该交给 RAG / Workflow / 工程规范。
我见过不少团队把 Skill 当成万能胶:知识检索也 Skill、复杂决策也 Skill、多轮状态机也 Skill。
结果就是:SKILL.md 越写越长,最后又回到了“上下文爆炸”。
我不打算把这一节写成“安装说明”,更想用一个我自己真实会用的例子,把 Skill 的工作方式讲清楚。
我最常用 Skill 的场景其实很朴素:重复性写作与重构。
比如写博文这件事,本质上也是一套 SOP:
Skill 适合把这套流程固化下来,让模型每次都按同一套节奏输出,而不是每次都“凭感觉发挥”。
你会发现:当步骤明确后,模型的发挥反而更稳定。
不稳定的往往不是语言能力,而是你给它的任务形态。
我最近还用它做了一件更“具体”的事:把一篇草稿从“能看”改到“能发”。
以前我会在对话框里反复补充要求:
但你会发现,这种“补丁式交互”有个副作用:你越改越像在写一份新的 prompt,而不是在改文章。
后来我把它整理成一个 Skill,结构非常简单:
这套流程一旦固化下来,后面每次改稿基本就是一句话触发:“按我的写作 Skill 走一遍,先给我结构问题,再给精修版。”
如果你要一个更“工具感”的例子:让它生成 Excalidraw 架构图也类似。Skill 做的不是“会画图”,而是把“需求澄清 → 结构拆解 → 绘图指令 → 导出校验”写成固定流程,模型照着走即可。
写 Skill 这事,最容易踩的坑不是“写不出来”,而是写得太虚:目标不清、步骤太粗、边界缺失,最后变成一个会瞎跑的脚本入口。
我写 Skill 时会用一个 checklist 自检(很像我在工程里写 Spec 的习惯):
一个最小目录结构大概是这样:
我建议:脚本越强,手册越要啰嗦。
因为脚本的破坏力通常比你想象的大。
SKILL.md 骨架如果你要我给一个“最像工程”的写法,我会建议把 SKILL.md 拆成四块:
这几块写清楚,Skill 的稳定性通常就不会太差。
这一节我会说得更直白一点:Skill 一旦具备执行能力,就必须按“线上脚本”的标准来约束,否则迟早出事。
Skill 一旦和脚本结合,就很容易出现一个危险组合:
提示注入(让模型做不该做的事) + 可执行能力(脚本/系统命令)
这不是“模型不够乖”,而是攻击面真的存在。
.env、浏览器 Cookie、云端 token。这套方法不完美,但能让你少踩很多“当场爆炸”的坑。
下面这些场景,我基本不会把执行权直接交给 Skill(至少不会在没审计/没回滚的情况下交出去):
一句话:Skill 可以很强,但强到一定程度,就得像对待线上脚本一样对待它。
我现在越来越倾向于一个判断:
在 Agent 时代,真正稀缺的不是“工具”,而是“可复用的正确流程”。
Skill 的价值就在这里:它把流程沉淀为可按需加载的 SOP,让模型少走弯路,也让你少当一次次的“人肉提示词编辑器”。
下一篇我想写得更具体一点:把一个“写作/改稿 Skill”真的做成一个可复用包(包含边界、验收标准和安全护栏),看它能不能在真实场景里稳定跑起来。