很多人第一次听说“我装了个 skill”,反应是:装了个 App?装了个插件?——然后就卡住了:它不编译、不上服务,凭什么打一行命令就能让 AI 换一种性格?
你不是不会,是缺一层“地基”。今天不拆任何东西,先把最底下的那块砖讲透——什么是 AI skill。
01
PART
先破个误区:skill 不是 App
NOT AN APP
很多人第一次听到“我装了个 skill”,脑子里自动映射成:装了个 App、装了个插件。
不是的。两点掰开说:App 是程序,它是一堆编译好的代码,有自己的进程、界面和运行逻辑,你点一下它在后台干活;skill 是文本,它就是一份 Markdown 文件,里面写的是“给大模型看的说明书”,没有编译、没有进程、没有服务,客户端把它塞进对话上下文,模型读完后照着演。
一句话区分:App 告诉计算机怎么做;skill 告诉模型怎么做。
这就是为什么 skill 看起来“神出鬼没”——它压根不是个程序,它是一段被临时加载进对话的“指令”。
02
PART
那 skill 到底是什么
A SPEC SHEET
拆开看,一个最小可用的 skill 长这样(下面以 grill-me 这个公开 skill 为例,去掉了无关内容):
✦ 回看上一篇
我们上一篇就拆了 grill-me——想看它被一层层扒开、真正的火力藏在哪,回看《你的 AI 为什么总给你“情绪价值”而不是真挑刺?我拆了个专治这毛病的 skill》
---
name: grill-me
description: 一个专挑毛病的拷问式访谈
---
调用 Skill 工具,加载名为 grilling 的技能。
就这么多。拆开看,这个文件(SKILL.md)的格式是两段式——记住这两段就够:
· 第一段·文件头(写在 --- 之间的几行,是一段 YAML 配置):只放两个字段。
— name:skill 的名字,也是你叫它的“指令名”。比如 grill-me,你打 /grill-me 就是在点它。
— description:用一句话写清“干嘛的、什么时候该用”。它不只是说明,更是模型的“触发开关”——模型靠它判断“现在该不该想起这个 skill”。
· 第二段·正文:普通的 Markdown 指令,写给模型“照着做”的步骤。
一个 skill 不是一个文件,而是一个文件夹——客户端只认 SKILL.md 这一个文件,其余都是给它的“补给”,指令要用到时才加载:
my-skill/
├── SKILL.md # 必需:name + description + 给模型的指令
├── scripts/ # 可选:skill 要跑的脚本
├── references/ # 可选:模板、资料、示例
└── assets/ # 可选:图片等资源
说到底,你本来就习惯“用文本去描述一个系统该怎么做事”——写配置、写文档、写注释都是这个思路。skill 只是把这套思路,从驱动计算机,搬到了驱动模型身上。
所以“懂代码”在这里不是负担,是捷径:你早就熟悉了“用一段文字去指挥一个系统”这件事,现在只是换了一个会读这些文字的“员工”。
03
PART
skill 怎么生效:从文件到行为
LOAD, THEN ACT
skill 没有“运行”这个动作,只有“加载”。agent 不是执行代码,而是把 Markdown 文本塞进对话上下文,让模型按新指令改变行为。
那 agent 到底怎么用一份 SKILL.md?三步走:
1. 扫描注册:agent 启动时扫一遍 SKILL.md,只把 name + description 读进“可用技能清单”(正文先不读,省 token)。
2. 匹配触发:你说话时,模型拿请求去挨个比对清单里的 description,觉得“这句描述对上了”,就决定加载它。
3. 注入执行:agent 把正文那几行指令塞进对话,模型读完照做——于是它换了一种性格 / 行为。
一句话总结:文件头决定“何时被想起来”,正文决定“被想起来后怎么做”。所以 description 写得好不好,直接决定这个 skill 会不会在该出现时出现。

▲ skill 怎么生效:只读清单里的「描述」做匹配 → 命中后从该 skill 卡片里抽出「正文」注入对话
举个具体例子走一遍
假设你做了一个「周报生成器」,description 写的是“当用户要写周报、周总结、本周进展时触发”:
— 你某天在 agent 里随口说“帮我整理下本周周报”;
— agent 启动时,已经把 weekly-report 的 name + description 记在“技能清单”里了(正文还躺着没读,不占 token);
— 模型拿你的话去比对清单,发现 weekly-report 的 description 命中 → 决定加载它;
— 于是正文(三段式输出要求)被注入对话,模型照着吐出“本周做了什么 / 下周计划 / 风险与阻塞”。
整个过程你只说了一句话,没敲任何命令——这就是 skill 的“魔法”:你描述需求,模型自己判断该请哪份“说明书”出场。
这也解释了为什么好的 skill 设计会把“入口”和“逻辑”拆成两层:薄薄的一层入口(SKILL.md 那几行)负责被触发,真正的复杂逻辑放在另一个文件里。入口可以很轻,火力可以很重。
04
PART
为什么你反而容易上手
WHERE THE BAR IS
先把一个可能让你意外的结论摆这:
动手写一个 skill 的门槛,不在写代码,在把需求翻译成模型听得懂的指令
听起来像劝退?别急——对写代码的人,这反而是最该松口气的一章。因为把需求翻成指令这件事,你天天都在干,只是从来没往模型身上想过。
下面这几组对照,你现在的工作经验和 skill 是一一对应的:
看懂了吗?你不是在学一门新手艺,是在把老手艺换了个对象用。写函数时你教计算机做事,写 skill 时你教模型做事——底层能力一模一样,只是听话的对象从编译器变成了大模型。
所以真正拦住大多数人的,从来不是技术,而是AI 心智那一层:知道模型怎么读指令、什么时机该被谁触发。把这一层补上,你就能从“会用”走到“会做”,而不是停在“只会用”。
而“怎么把需求翻成模型真听得懂的指令”,恰恰是后面几篇要慢慢补的硬功夫。今天你先拿住一件事就够:skill 的本质你已经懂了,剩下的是熟练度,不是天堑。
05
PART
skill 怎么装进你手边的 agent
INSTALL ANYWHERE
讲完是什么、怎么跑,你大概率会想:那我怎么把它装到我自己用的 agent 里?先把一个关键结论放这——skill 不是某一家私有的格式,而是一套开放智能体技能标准:一份 SKILL.md 走天下。我们上一篇拆的 grill-me 用的就是这套标准,所以 Codex 能直接读它的说明、不用改写。下面就用 Codex 演示这套标准具体怎么装:
最标准的样板间:Codex 怎么装
一句话:Codex 把“一个 Markdown 文件夹”当成了 agent 的能力插件——这正是 skill 可移植的底气。
装上之后怎么用?两种叫法:

补充一句:Claude Code 用 /skill-name 前缀,Codex 用 $skill-name,前缀不同但机制一样——这正是同一份 SKILL.md 两边都能跑的原因。一个接地气的判断标准:同一件事你跟 AI 解释过三遍以上,就值得做成 skill。比如每周都按「Jest 格式、覆盖主要分支、中文注释」写测试,写成 skill 后,$unit-test 一句话就搞定。
会写一份 SKILL.md,你就有了走到哪都能装的本领
06
PART
自己动手做一个最小 skill
BUILD ONE
看到这,你已经具备做第一个 skill 的全部前提:会写文本、会描述需求。下面给一个“今天就能跑”的最小流程,以做一个「周报生成器」为例。
SKILL.md 长这样:
---
name: weekly-report
description: 当用户要写周报、周总结、本周进展时,按三段式生成
---
收到“写周报”时,按以下结构输出:
1. 本周做了什么(按项目列,含结果)
2. 下周计划(具体动作)
3. 风险与阻塞(需要谁帮忙)
不要编造没发生的事。
就这三步、这几行,你就拥有了一个“专属周报助手”。它当然很薄——但“薄”正是 skill 的起点:先让一个典型任务跑通,再慢慢加脚本、加资料。
真正的火候在后面:怎么把需求写成模型真听得懂的指令、怎么动手写你的第一个完整 agent,后面会专门讲。这一篇先把“它长什么样、怎么装、怎么起步”讲到你敢动手,就够了。
///
LAST
写在最后
WRAP-UP
如果这篇帮你把 skill 想明白了,回复关键词「拆解模板」,领我把任意 skill 拆成可抄结构的模板(含评判尺 + 反事实推演框架)。下一篇我们接着讲 agent 到底怎么跑起来。
夜雨聆风