发布前先过七条:名字、描述、描述长度、密钥、绝对路径、README、缓存目录。 实测一份没整理过的包五条不过:描述太长、写死密钥、绝对路径、没提 README、带缓存目录。 三种发布范围——个人自用、团队分享、社区发布,范围越大要求越高。
前四节把一个技能从需求做到了测试通过,这一节是最后一步:让别人也能用上。 第 3 章的安全红线在这里落成两条具体检查:不许写死密钥、不许写绝对路径。 这一节也是第 6 章的小结位置,最后会把整章的五步收一遍。
一、发布前要过七条
七条检查,前四条是硬伤,后三条是习惯问题。
| 序 | 检查项 | 为什么 |
|---|---|---|
| 1 | frontmatter 有 name | 没有名字装不进技能目录 |
| 2 | 有 description | 没有描述永远不会被选中 |
| 3 | 描述不超过 100 字 | 太长会挤占每次对话的上下文 |
| 4 | 没有明文密钥 | 发出去就等于把钥匙一起发了 |
| 5 | 没有绝对路径 | 别人的机器上没有 D 盘 |
| 6 | 正文提到 README | 别人得知道怎么装 |
| 7 | 没有缓存目录 | pycache 会跟着一起发出去 |
第三条容易被忽略:描述是常驻的,每次对话都要占位置。写长了每次都在付费。 第四条最要命,也最容易犯——调试的时候随手写一把测试密钥,发的时候就忘了。
二、撞一遍:五条不过
拿一份「写完就发」的包去撞这七条,五条不过。
| 序 | 检查项 | 结果 |
|---|---|---|
| 3 | 描述不超过 100 字 | 不过 |
| 4 | 没有明文密钥 | 不过 |
| 5 | 没有绝对路径 | 不过 |
| 6 | 正文提到 README | 不过 |
| 7 | 没有缓存目录 | 不过 |
五条里有两条是发出去会出事的:密钥和绝对路径。另外三条只是不好用。 修法都很简单:描述砍到两句、删密钥、路径改相对、正文加一句「README 里写了安装步骤」、清缓存。 改完再撞,七条全过。整个过程不到十分钟。
三、密钥这件事要说三遍
把密钥写进文件,再删掉那一行,不算完。 git 的历史里还在。任何人 clone 之后翻 log 都能拿到,而且它会在你的仓库里躺很久。 正确的处理顺序是三步:先吊销那把钥匙、再重写历史、最后才发。 顺序不能反。先清历史后吊销,中间那段时间它还是有效的。 更省事的做法是从一开始就不写:密钥只从环境变量读,文件里只写变量名。
四、三种发布范围
| 范围 | 放哪 | 要注意什么 |
|---|---|---|
| 个人自用 | ~/.claude/skills/ | 只有你,改完就是最新 |
| 团队分享 | 项目仓库 .claude/skills/ | 跟着代码走,谁拉谁有 |
| 社区发布 | 公开仓库加 LICENSE | 陌生人也会装,得写清能做什么 |
范围越大,要求越高。个人自用能忍的毛病,社区发布一条都不能有。 团队分享有一个额外要求:别放个人偏好。「我不喜欢用冒号」这种话不要写进去。 社区发布还要想一件事:别人会拿它干你没想过的活。边界那一节写清楚,是保护别人也是保护你。
五、名字和描述,是别人见到你的第一眼
| 写哪 | 怎么定 | 例子 |
|---|---|---|
| 名字 | 小写、连字符、不加版本号 | minutes |
| 描述前半句 | 做什么,一句话 | 把会议转写稿整理成四段纪要。 |
| 描述后半句 | 什么时候用,带用户的说法 | 用户要给纪要、要列待办时使用。 |
后半句最常被漏。它决定别人在什么场景下会想起你——也就是会不会被选中。 「带用户的说法」的意思是:写用户嘴里会说的话,不写行业术语。 用户会说「帮我整理个纪要」,不会说「执行纪要生成任务」。后半句要照着前一种写。
六、发布之后还会变
| 改动 | 怎么做 | 对别人的影响 |
|---|---|---|
| 加功能 | 加一节,不影响旧用法 | 旧用户无感 |
| 改输出格式 | 等于破坏性改动 | 写进 CHANGELOG 提醒 |
| 删功能 | 尽量别删,标成废弃 | 删了别人会坏 |
「改输出格式」是最容易忘的破坏性改动。下游可能正照着你上一版的形状写解析器。 第 5 章那条流水线就是例子:writer 技能改了输出形状,polish 的解析器直接崩。 所以改格式的时候,先问一句:有没有别的东西正在读我的输出。
七、本章小结
第 6 章是一条完整的生产线,五步。 需求:把痛点写成一句话,填满六格。缺哪格,技能就缺哪段。 设计:四招——记踩坑点、可容错、可扩展、跨对话记忆。核心是不静默算错。 实现:你决策、它执行。分三步构建,每步只盯一件事。 测试:定标准、跑两版、只改丢分那一项。改一处才能归因。 上线:过七条检查,按范围决定要求高低。密钥和绝对路径一条都不能有。 五步里最容易被跳过的是第一步和第四步:想不清楚就开始写,写完不测就发出去。 下一章换个方式收尾:不按流程讲,按时间讲——一个数据分析技能的四次迭代。
八、动手 Demo:发布前扫一遍,五个问题一次报全
这一段写七条检查,拿一份「写完就发」的包去撞,再改一遍重撞。 七条都是字符串层面的判断,扫一遍不到一秒。
CHECK = [('frontmatter 有 name', lambda fm, b: 'name:' in fm),
('没有明文密钥', lambda fm, b: not re.search(r'sk-[A-Za-z0-9-]{8,}', fm + b)),
('没有绝对路径', lambda fm, b: not re.search(r'[A-Za-z]:\\|/Users/', fm + b)),
('正文提到 README', lambda fm, b: 'README' in b),
('没有缓存目录', lambda fm, b: '__pycache__' not in fm + b)]
bad = [a for a, fn in CHECK if not fn(BAD, BAD_BODY)]
print(len(bad), bad)
实跑输出:
--------------------------------------------------------------------
发布前扫一遍,5 个问题一次报全
--------------------------------------------------------------------
① 发布前要过七条
--------------------------------------------------------------------
| 序 | 检查项 |
|:---:|---|
| 1 | frontmatter 有 name |
| 2 | frontmatter 有 description |
| 3 | description 不超过 100 字 |
| 4 | 没有明文密钥 |
| 5 | 没有绝对路径 |
| 6 | 正文提到 README |
| 7 | 没有缓存目录 |
七条里前四条是硬伤,后三条是习惯问题。硬伤会让别人装不上或者不安全。
② 拿一份没整理过的包去撞
--------------------------------------------------------------------
| 序 | 检查项 | 结果 |
|:---:|---|:---:|
| 1 | frontmatter 有 name | 过 |
| 2 | frontmatter 有 description | 过 |
| 3 | description 不超过 100 字 | 不过 |
| 4 | 没有明文密钥 | 不过 |
| 5 | 没有绝对路径 | 不过 |
| 6 | 正文提到 README | 不过 |
| 7 | 没有缓存目录 | 不过 |
七条里 5 条不过。
不过的分别是:description 不超过 100 字、没有明文密钥、没有绝对路径、正文提到 README、
没有缓存目录。
! 第四条最容易漏:密钥写进文件再删掉也不算完,git 历史里还在。
③ 修一遍,再撞
--------------------------------------------------------------------
| 序 | 检查项 | 结果 |
|:---:|---|:---:|
| 1 | frontmatter 有 name | 过 |
| 2 | frontmatter 有 description | 过 |
| 3 | description 不超过 100 字 | 过 |
| 4 | 没有明文密钥 | 过 |
| 5 | 没有绝对路径 | 过 |
| 6 | 正文提到 README | 过 |
| 7 | 没有缓存目录 | 过 |
七条全过。改动是:描述砍短、删掉密钥、路径改成相对、补 README、清缓存。
④ 三种发布范围,做法不一样
--------------------------------------------------------------------
| 范围 | 放哪 | 要注意什么 |
|---|---|---|
| 个人自用 | ~/.claude/skills/ | 只有你,改完就是最新 |
| 团队分享 | 项目仓库 .claude/skills/ | 跟着代码走,谁拉谁有 |
| 社区发布 | 公开仓库加 LICENSE | 陌生人也会装,得写清能做什么 |
范围越大,要求越高。个人自用能忍的毛病,社区发布一条都不能有。
⑤ 名字和描述,是别人见到你的第一眼
--------------------------------------------------------------------
| 写哪 | 怎么定 | 例子 |
|---|---|---|
| 名字 | 小写、连字符、不加版本号 | minutes,不要 Minutes-v2 |
| 描述前半句 | 做什么,一句话 | 把会议转写稿整理成四段纪要。 |
| 描述后半句 | 什么时候用,带用户的说法 | 用户要给纪要、要列待办时使用。 |
后半句最常被漏。它决定别人在什么场景下会想起你——也就是会不会被选中。
⑥ 发布之后还会变
--------------------------------------------------------------------
| 改动 | 怎么做 | 对别人的影响 |
|---|---|---|
| 加功能 | 加一节,不影响旧用法 | 旧用户无感 |
| 改输出格式 | 等于破坏性改动 | 写进 CHANGELOG 提醒 |
| 删功能 | 尽量别删,标成废弃 | 删了别人会坏 |
「改输出格式」是破坏性改动,这一条最容易忘——下游可能正照着你上一版的形状写解析器。
第一段七条检查,前四条是硬伤,后三条是习惯问题。 第二段拿一份没整理过的包去撞:五条不过。 不过的五条是:描述太长、写死密钥、绝对路径、没提 README、带缓存目录。 第三段修一遍重撞,七条全过。整个过程不到十分钟。 第四段讲三种发布范围:个人自用、团队分享、社区发布,范围越大要求越高。 第五段讲名字与描述:描述后半句写用户嘴里的说法,不写行业术语。 第六段讲发布之后的变动:「改输出格式」是破坏性改动,最容易忘。
30 秒实验
- 拿你现有的技能包跑一遍这七条,看有几条不过。密钥和绝对路径先修。
- 把你的 description 砍到两句:前半句做什么,后半句什么时候用。
- 给你的技能加一个 CHANGELOG,写下第一行「v1 初始版本」。
常见误区
- 把密钥删掉就算完。git 历史里还在。先吊销,再重写历史,最后才发。 顺序反了中间那段时间它还有效。
- 描述写成长篇介绍。描述是常驻的,每次对话都占位置。两句够了:做什么、什么时候用。
- 直接改输出格式不通知。 下游可能正照着你上一版的形状写解析器,一改就崩,而且崩的地方离你很远。
自测三问(点开对答案)
1. 发布前的七条检查里,哪两条是「发出去会出事」的? —— 明文密钥和绝对路径。其余五条只是不好用,这两条会造成安全事故或装不上。 2. 密钥删掉了为什么还不算完? —— git 历史里还在。要先吊销那把钥匙,再重写历史,最后才发布。 3. description 的后半句要写成什么样? —— 写成用户嘴里的说法,不写行业术语。用户说「帮我整理个纪要」,不说「执行纪要生成任务」。第 6 章完。下一章换一种讲法:不按流程,按时间——一个数据分析技能的四次迭代。
- ☐ (本篇完,下一篇 7.1 V1 基础版:先跑通再说)