RSS

第 3 章 / 共 10 章

产物一·技能(上):SKILL.md 的解剖

约 6 分钟 更新于

3.1 frontmatter:给模型看的说明书

SKILL.md 分两部分:两道 --- 之间的 YAML frontmatter,和下面的 Markdown 正文。它们面向的读者不同——frontmatter 是给模型做决策看的,正文是给模型执行时读的

frontmatter 常用字段就这么几个:

---
name: release-notes
description: 把改动整理成面向使用者的发布说明。当用户要写发布说明、release notes 或 changelog 时使用。
allowed-tools: Read, Bash(git log *), Bash(git diff *)
---
字段是否必填作用
name技能在列表里显示的名字,不写就用目录名
description强烈建议说明”做什么、什么时候用”,模型靠它决定是否自动加载
allowed-tools调用这个技能的那一轮里,可以免提示直接用的工具
disable-model-invocation设为 true 后,只有你能 /名字 调用,模型不会自作主张
context设为 fork 时在一个独立子上下文里跑这个技能

description 是全篇最该用心写的一行,第 4 章整章都在讲它。allowed-tools 有个容易误解的点:它不是限制技能只能用这些工具,而是把这些工具在当轮预先批准、免去逐次授权;其他工具依然可用,仍走你的常规权限设置。而且这个授权在你发出下一条消息后就失效。

3.2 正文:给模型下的指令

frontmatter 下面的正文,就是技能被调用后进入对话的那段指令。写正文有一条心法:它会作为一条消息留在上下文里,之后不会被重新读取。所以正文该写成”贯穿整个任务的规矩”,而不是”一次性的步骤清单”。

我们的 release-notes 正文,就是那套三分类规则。你可以把它写得比第 2 章更完整,因为现在它有独立文件,篇幅不再挤占别处:

把提供给你的改动整理成一份发布说明。$ARGUMENTS

## 分类规则
- 新增:使用者能用到的新能力
- 修复:修好的、会影响使用者的问题
- 破坏性变更:需要使用者改配置或改用法的变化

## 写作规则
- 每条一句话,主语是使用者能感知的东西,不是内部函数名
- 纯内部重构、依赖升级、格式调整一律不写
- 破坏性变更单独成段,每条附一句"你需要做什么"

3.3 两类内容:参考知识 vs 任务流程

技能装的东西大体分两类,分清它们能帮你决定要不要让模型自动调用。

参考知识型:一套领域规矩或风格,比如”我们的错误响应长什么样""发布说明怎么分类”。这类适合让模型自动加载——你写代码写到相关处,它自己把规矩挂上来。release-notes 偏这一类。

任务流程型:一串有副作用的动作,比如提交、部署、发消息。这类你通常不希望模型自作主张——你可不想让它觉得”代码看起来好了”就自己去部署。给这类技能加上 disable-model-invocation: true,把触发权攥在自己手里。

第3章:SKILL.md 的分层解剖
图 3.1:同一个文件,三层各有各的加载时机——frontmatter 的 description 常驻在技能清单里供模型选择,正文在被调用时进入上下文,附属文件(第 5 章讲)要等模型真的去读才付上下文的钱。看懂这三层,你就懂了技能省上下文的全部秘密。

3.4 放个人目录还是项目目录

同一个技能放在哪,决定了谁能用它:

位置路径适用范围
个人~/.claude/skills/<名字>/SKILL.md你的所有项目
项目.claude/skills/<名字>/SKILL.md只在这个项目
插件<插件>/skills/<名字>/SKILL.md装了该插件的地方

判据很直接:这套规矩是你个人的习惯,还是团队的共识? release-notes 如果是全队都要遵守的发布格式,就该放进项目的 .claude/skills/ 并提交到版本库,这样同事 clone 下来就自带这条规矩。我们从第 2 章的个人目录起步,是为了先跑通;等第 9 章打包时,它会正式落到团队能共享的地方。

同名冲突的规则也顺带记一下:跨层级时,企业级盖过个人级,个人级盖过项目级;同名的技能会盖过同名的命令文件。

广告位 · Multiplex 关联广告