Agent Skills · 建库方法论

从四十个技能
到一个技能库

写了四十多个技能之后,问题不再是「怎么写」,而是「为什么它们不生效」。 这份报告对比了 Anthropic、Google、OpenAI、MiniMax、Vercel 五家的官方技能仓库, 提炼出唯一跨生态的硬契约,并用一套可复跑的检查器审计了一个真实的 45 个技能库。

2026 年 11 月 证据基础:5 个官方仓库源码 + 45 个技能实测 全部结论附可复跑命令

00摘要:九条论断

下面每一条都可以被证伪,也可以被一条命令复核。如果只读这一页,你应该记住第 1 条和第 2 条—— 它们解释了为什么大多数技能库建完之后毫无动静。

论断 01

真正跨生态的硬契约只有一层:SKILL.md 的 name 与 description。清单和索引都是包装层。

证据:五个仓库的清单格式各不相同,但 SKILL.md 结构完全一致
论断 02

技能库的主要失败模式不是「写得太少」,而是「写了不触发」。description 是唯一常驻上下文的字段。

证据:Anthropic 官方自述模型存在「触发不足」倾向
论断 03

技能数量不线性带来帮助,但线性带来上下文税。每个技能约 100 tokens 常驻,无论是否触发。

证据:渐进披露规范的 metadata 预算;占用率为建模估算
论断 04

存量技能的问题高度集中:描述缺触发信号、许可证缺失。这两类占了实测问题的七成。

证据:45 个技能实测,64 错误 / 48 警告
论断 05

命名与目录约定不是审美问题,是可移植性问题。违反即任何生态都不认。

证据:规范硬约束 + Anthropic 因保留词改名的提交记录
论断 06

索引必须是构建产物,不能是手写文件。手写索引的必然结局是漂移。

证据:Google 在 index.json 首字段写明「禁止手改」
论断 07

技能库能扩展的唯一原因是分层披露。所以 500 行是硬预算,不是建议。

证据:三级加载模型,正文超预算即与任务争抢上下文
论断 08

护城河是评测集,不是技能数量。没有对照实验,无法判断技能是改进还是干扰。

证据:官方 skill-creator 的核心循环是「带技能 / 不带技能」双跑
论断 09

公开分发前必须过脱敏闸门。个人技能天然含绝对路径、内部主机名、合规红线词。

证据:45 个技能中 6 个含硬编码家目录路径

01判定:什么才该做成技能

技能库最常见的浪费不是写错了,是写了一批本来不该写成技能的东西。 一个技能封装的是「这件事该怎么做才对」的判断;如果它是固定操作、是一次性任务、 或者需要实时数据,做成技能只是让简单的事情多绕一圈。

四类产物的分野

「让模型做某事」有四种载体,它们的适用边界比多数人以为的窄。选错载体的代价不是效率降低, 而是后续维护成本被永久抬高——因为技能会进入每一次会话的上下文,脚本不会。

载体适合封装什么失效场景上下文成本典型误用
技能
SKILL.md
需要判断的做法:选型、审查、成稿规范、领域惯例 结论依赖实时数据;做法每次都要改 常驻约 100 tokens 把一段命令行操作写成技能
脚本
scripts/
确定性步骤:转换、提取、批量重命名、格式校验 需要理解意图才能决定分支 零(执行时不进上下文) 把脚本逻辑写进正文让模型照着做
MCP / CLI
外部服务
实时数据、需要鉴权的系统、有状态的远端操作 数据是静态的、可以随仓库附带 工具定义常驻 把查询接口写成技能,指望它能取数
什么都不做
—
模型已经会的东西,或只做一次的事 确实存在反复出现的偏差 — 把产品手册复述一遍当作技能
技能适用性判别流程 三个依次判断的问题:是否需要实时外部数据、是否会重复发生、做法是稳定判断还是固定步骤。 Q1 需要实时外部数据吗? 是 用 MCP 或 CLI,不做技能 否 Q2 这类任务会做第二次吗? 否 写完就扔,不要沉淀 是 Q3 答案是稳定判断,还是固定步骤? 固定步骤 写成脚本,正文只调用 稳定判断 做成技能,值得一次沉淀
图 1 技能适用性判别。三个问题依次排除:实时数据交给外部服务,一次性任务不必沉淀,固定步骤应该固化成脚本而不是散文。只有「会重复出现的稳定判断」才配得上一个技能。

判别式

如果一个技能文档删掉之后,模型的表现完全不变,那它从写下第一天起就是负资产——它占用上下文,却没改变任何输出。

02三层契约:哪一层才是承重墙

五个官方仓库看起来完全不同:目录层级不同、清单格式不同、索引结构不同。 但把它们拆成「技能 / 分发包 / 展示索引」三层之后,会发现只有一个层被全部五家共享, 而另外两层各自只在自家生态内有效。

技能元数据的三层契约与采用度 第一层 SKILL.md frontmatter 被五个仓库全部采用;第二层分发包清单三家采用;第三层展示索引两家采用。右侧五个方块代表五个仓库。 L1 硬契约 SKILL.md frontmatter name ≤64 · description ≤1024 · 目录名必须等于 name 这一层不合规,技能在任何生态里都不存在 L2 分发包 .claude-plugin / marketplace.json plugins[].skills[] 决定「装哪个主题包」 只影响 Claude Code 系的安装路径,不影响技能本身 L3 展示索引 index.json / skills.sh.json 分组、摘要、入口 URL,供站点搜索与展示 必须由脚本生成——Google 在文件首字段写明禁止手改 五个仓库采用度
图 2 三层契约。每层右侧五个方块对应 anthropics / google / openai / MiniMax / vercel 五家。只有 L1 是满格的——因此只有 L1 值得在规范上较真。

为什么 L1 是承重墙

因为 name 和 description 同时承担两个职责:发现(机器解析出这是什么) 和 触发(模型判断此刻该不该用)。这两个职责被压进同一段文本, 于是格式约束与写作质量必须同时满足——这是技能格式最不寻常的地方。

对比之下,一张 REST API 的 servers 字段只影响路由,不影响语义。 技能没有这种奢侈:它的元数据既是索引键,又是提示词。

字段谁在读什么时候读写错的后果
name发现器、安装器、调用方每次启动,全量技能装不上、扫不到、与目录不匹配直接判废
description模型本身每次启动,全量技能永不触发——技能存在但等于不存在
license使用者、合规审查安装前、分发时公开后无人可合法复用
metadata.internal发现器扫描时半成品被搜到、被装走

推论

不要让 L2 或 L3 的要求反向污染 L1。技能是可移植的,打包是不可移植的——把这两件事混在一份文件里,是这个生态里最常见的架构错误。

03五仓库对照:差异都发生在包装层

把五家官方仓库摊开对比,会发现它们真正的分歧只有一个:用什么维度把技能分组。 主题、品类、信任等级、品牌、展示标签——五种不同的分组哲学,但每个 SKILL.md 的内部结构一模一样。

仓库技能落位清单 / 索引多端适配核心取舍
anthropics
Claude
skills/<name>/ marketplace.json Claude 系 用主题包聚合:一个 document-skills 打包 docx + pdf + pptx + xlsx 四个技能
google
Gemini
skills/<品类>/<name>/ marketplace.json
+ index.json
.agents/ 用产品品类分层:cloud/ 下就有 60 多个技能,索引交给脚本生成
openai
Codex
skills/.curated/
.system/ .experimental/
无清单
靠 installer
.codex 用目录名表达信任等级:.system 随客户端自动安装,.experimental 需显式指定路径
MiniMax
多端
skills/<name>/ 单个 plugin
全量打包
三端各一份
INSTALL.md
用品牌整体分发:一个 plugin 装全部,多端适配写成文档而不是结构
vercel-labs
75+ 智能体
skills/<name>/ skills.sh.json 交给 CLI 清单只管展示分组(groupings 数组),安装路径完全交给 CLI 自己探测

五种分组哲学没有优劣,因为它们的约束不同:Anthropic 要解决「一次装一组相关能力」, Google 要解决「几百个技能怎么浏览」,OpenAI 要解决「哪些能自动装、哪些必须用户确认」。 你的约束决定你的分组维度,而分组维度只影响 L2。

发现机制有两条路

vercel 的文档把发现规则写得很直白,值得抄:CLI 会在约 60 个「容器目录」 (skills/、.claude/skills/、.codebuddy/skills/ 等)里找 SKILL.md, 往下最多走三层;更浅的位置会遮蔽更深的位置。

但还有第二条路:如果根目录存在 .claude-plugin/marketplace.json, 清单里声明的技能路径会被直接采用,不受三层限制。 两条路殊途同归——所以清单里写的必须是真实路径,否则等于给所有人埋了一个安装失败。

技能发现的两条路径 路径 A 是目录扫描,最多下探三层;路径 B 是清单声明,直接指向 SKILL.md 且不受深度限制。 路径 A 目录扫描 · 最多三层 skills/ 一级目录 二级目录(可选) 三级(上限) SKILL.md 路径 B 清单声明 · 不受深度限制 marketplace.json plugins[].skills[] 直接指向 SKILL.md,路径必须真实 两条路殊途同归:更浅位置的 SKILL.md 会遮蔽更深位置的同名技能;清单里的路径写错,等于给所有人埋一个安装失败。
图 3 发现的两条路径。左侧靠遍历目录,右侧靠清单声明;前者约束结构,后者约束路径准确性。多数仓库两条都配,互为保险。

04六步法:从意图到可安装

这套流程不是五个仓库里任何一家的原文,而是从它们的共同约束反推出来的最小完备集。 每一步都有可检验的完成判据——没有判据的步骤,等于没有这一步。

步骤动作产出物完成判据
S1判定该不该做成技能一个决定,可能是否定能说出「删掉它,模型会丢掉哪一条判断」
S2先写 description,再写正文frontmatter含触发词、含反例、长度落在 150–600 字符
S3分层:正文 / 引用 / 脚本 / 素材目录结构正文 ≤500 行,且每段都是「怎么做」而非「是什么」
S4双跑验证:带技能 vs 不带evals/evals.json带技能的输出明显更好;相同则说明是装饰
S5按主题分组打包marketplace.json5–8 个 plugin,每个含 2 个以上技能
S6版本、许可、废弃、脱敏metadata + LICENSE能说出每一个技能的存活理由

S3 分层披露:技能库能扩展的唯一原因

规范把加载拆成三级:元数据(约 100 tokens,全量技能常驻)、 正文(建议 <5000 tokens,触发时才载入)、资源(按需读取,可无限)。 这不是性能优化,而是技能库规模的物理上限——如果所有内容都必须常驻, 你的库就不可能超过十几个技能。

因此「500 行」不是风格建议,是预算。正文里最该被移出去的是这三类:

引用必须带「何时读」

一个只写「详见 references/spec.md」的指针,等于没有指针——模型不知道该不该打开它, 于是要么全读要么不读。正确写法是把触发条件写在前头:

- [字段规范](references/spec.md) — 需要核对长度、字符集、
  保留词时读;正常写作流程不需要

S4 评测:没有对照,就无法判断技能是帮忙还是添乱

官方 skill-creator 的核心循环只有一句话:在测试提示上跑「带技能」和「不带技能」两个版本, 然后对比。这不是学术洁癖——技能最典型的失败不是「不生效」,而是生效了但把结果带偏, 而后者只有在对照下才看得见。

测试集要写成真实用户会说的话,不是需求文档的措辞。这是我自己那份的写法:

{
  "skill_name": "skill-authoring",
  "evals": [
    {
      "id": 1,
      "prompt": "我写了个技能,但装了之后基本不触发,怎么改?",
      "expected_output": "先诊断 description:长度是否在 150-600、
                        是否有 Use when 子句、是否只讲了 what 没讲 when。
                        给出改写版本。不要一上来就改正文。"
    },
    {
      "id": 3,
      "prompt": "这个 SKILL.md 有 900 行,要不要拆",
      "expected_output": "建议拆分:正文超 500 行会与任务争抢上下文。
                        提出 references/ 分解方案,每个文件带「何时读」,
                        命令式步骤留在正文。"
    }
  ]
}

expected_output 写的是「应该发生什么」,不是「应该输出什么文本」—— 前者能容纳不同的合理表达,后者会把评测变成字符串比对。

必须测的技能

输出可客观判定:文件转换、数据提取、代码生成、固定流程。这类技能如果没有提升,就是纯负债。

可以跳过评测的技能

输出主观:写作口吻、视觉风格、艺术生成。此时「更好」本身没有共识,评测容易变成自我确认。

一个高信号

如果每次运行都独立写出了同一个辅助脚本,那个脚本就该进 scripts/。评测的副产品往往比结论本身更值钱。

05描述工程:唯一常驻的那个字段

如果只能改一个地方来提高技能库的命中率,改 description。 它既是索引键又是提示词,在每次会话开始时就进入上下文——技能是否被想起,全看这几十个字。

为什么「做什么」不够

模型在选择技能时做的不是「能力匹配」,而是「场景匹配」。 一个写着「简历评估与岗位匹配技能」的描述,只回答了「这个工具能干什么」, 却没有回答「我现在这个处境该不该用它」。前者是产品说明书,后者才是触发器。

Anthropic 在官方的技能创作指南里直接承认了这件事:模型存在触发不足的倾向, 所以描述应当写得比你觉得自然的样子更主动一点。Google 则用另一种方式解决同一个问题—— 在描述末尾固定加一句 Don't use for …,用排除法划定边界。

三段式

① 做什么

一句动宾短语,说清产物。
「从 PDF 提取文本与表格,填写表单,合并多个 PDF。」

② 何时用

列出用户真的会说出口的词。
「用户提到 PDF、表单、文档提取时使用。」

③ 何时不用

与兄弟技能划界,防止错配。
「不用于编辑 PDF 版式,那属于排版任务。」

长度区间与后果

长度实际内容后果
< 45 字符一个名词短语,等于标签几乎无法触发;只能靠用户恰好说出那一个词
45–150 字符讲清了做什么,没讲何时用最常见的失败区间——技能写得不错,但从不被想起
150–600 字符三要素齐全,含同义词与反例推荐区间,触发与边界都清楚
600–1024 字符接近上限,信息密度下降可用,但开始出现冗余从句
> 1024 字符超限直接失效——上传校验器会拒绝,不是警告

四个真实改法

下面四组都来自实测审计,左列是原文,右列是同一技能的改写。 注意改写没有增加任何新能力,只是把「何时用」补回去。

原文(弱)改写(强)
45 字符
「生成 PPTX 文件。」
「用 python-pptx 从大纲、数据表或参考文档生成可编辑的 PPTX。用户提到做 PPT、生成演示文稿、把报告转成幻灯片,或给出大纲要求成稿时使用。不用于单页图像海报。」
57 字符
「把 PPT 做出来。」
「基于 Markdown 大纲生成结构化演示文稿,支持主题、图表与备注。用户说做汇报、做路演材料、把文档改成 PPT 时使用;也用于改写已有 PPT 的版式。」
61 字符
「高考志愿推荐。」
「按省份与位次为考生推荐院校专业,输出冲稳保三档清单与录取概率估计。用户提到高考志愿、报考、位次、分数线、平行志愿时使用。不用于留学申请。」
1596 字符
(超限,被校验器拒绝)
压到 400 字符以内:只保留核心动作 + 触发词 + 一句反例,把设计原则移到正文与引用文件。描述不是设计文档。

中文作者特有的坑

官方示例清一色英文,直接照抄会漏掉一件事:触发是按字面匹配的。 如果描述只有英文 Use when the user mentions dashboards, 而用户用中文说「做个看板」,这个技能就不会被想起。

解法是把中英两套说法都塞进描述,且中文要写用户真的会打的字,不是术语: 「看板 / 仪表盘 / 数据大屏」三个词都要出现,因为用户会用其中任意一个。 这一条无法从任何官方文档里学到——它只在中文语境下暴露。

自检一句话

把你的 description 单独拿出来给一个不了解你的人看,他能不能说出「我在什么情况下会用它」?说不出,就还没写完。

06上下文税:技能库真正的成本

每个技能的元数据都会进入每一次会话,无论它是否被触发。这是一笔固定支出, 而多数人建库时只算「我多了什么能力」,不算「我每天为此付出什么」。

技能数量与常驻上下文占用 按每技能约 100 tokens 估算:20 个技能占 32k 窗口 6%,45 个占 14%,100 个占 31%,200 个占 61%。 占 32k 上下文窗口的比例(建模估算) 0 20% 40% 60% 6% 14% 31% 61% 20 个 45 个 100 个 200 个 窗口过半被占用
图 4 技能数量与常驻占用的关系。按规范给的单技能约 100 tokens 估算,45 个技能约 4500 tokens,200 个则超过 32k 窗口的六成。这是建模估算,不是实测,实际值随描述长度浮动。

三层预算,三种付费方

层预算谁在付费超支的表现
元数据 约 100 tokens / 技能 每一次会话,无条件 技能越多,留给任务的空间越少;描述越长,模型越难比较
正文 建议 <5000 tokens 仅在该技能触发时 一次触发吃掉大半窗口,模型开始跳读、漏步骤
资源 无上限 仅在模型主动读取时 写得太碎会读不完;写得太粗会读不到

这个结构的副产品是一个反直觉的结论:技能库的质量由「删掉了多少」决定,而不是「收进了多少」。 一个有 20 个精准触发技能的库,比一个有 200 个模糊技能的库更能帮上忙—— 不仅因为噪声少,还因为前者给任务留了 94% 的上下文。

修剪判据

每隔一段时间对着技能库问三个问题,答案是否定就删:

反 Goodhart

不要用「技能数量」当进度指标。一旦数量成为目标,它就不再是能力的度量——你会开始写那些删掉也不影响任何输出的技能。

07审计实测:四十五个技能的真实病灶

方法论讲完之后,需要一次真实的体检。下面是拿一套 18 条规则的检查器, 对一个真实技能库(45 个技能)跑出的结果——每条结论都可以用一条命令复现。

45
被扫描的技能
64
错误(阻断)
48
警告(改进项)
14
命中任一问题的技能数
技能库审计问题分布 按规则统计命中次数:license 缺失 37 次最多,其次 version 缺失 33 次、描述无触发信号 14 次、描述过短 13 次。 错误 · 阻断分发或触发 警告 · 影响长期可维护性 规则 含义 E009 license 缺失 37 W023 version 缺失 33 E012 描述无触发信号 14 W020 描述短于 150 13 E013 硬编码家目录路径 6 E011 嵌套超过三层 3 W021 正文超过 500 行 2 E003 name 字段缺失 1 E007 description 缺失 1 E008 描述超过 1024 1 E010 引用文件不存在 1 横轴为命中技能的个数;一个技能可同时命中多条规则,故总数大于技能数。
图 5 45 个技能的问题分布。两条长条(37 与 33)都关于「元数据完整性」,两条次长条(14 与 13)都关于「描述质量」——这正是论断 04 说的问题集中。

三个读得出来的结论

一、公开分发的门槛被低估了

37 个技能没有 license 字段。这是最容易补、也最容易被忽略的一项: 缺了它,别人即使拿到代码也无法合法复用。对个人库无所谓,对公开仓库是硬伤—— 而且它是一次性决定,补一次永久有效,性价比在所有规则里最高。

二、真正影响生效的是描述,不是正文

14 个描述完全不含触发信号,13 个短于 150 字符,合计 27 次命中——覆盖了近六成技能。 这些技能的正文可能写得很好,但它们从不在正确的时刻被想起。 这也解释了为什么「加了很多技能但感觉没变化」:不是技能没用,是它们没被调用。

三、手工清点必然漏

最初我用一级目录遍历数出 44 个技能。换成递归扫描后发现是 45 个—— 多出来的三个藏在三层嵌套里(playwright-cli 及其两个兄弟技能)。 它们不报错、不显眼、也从未被算进任何统计。 这就是为什么审计必须是工具而不是人工:漏掉的从来不是最显眼的那个。

复跑方式

python3 tools/lint.py --path ~/.workbuddy/skills --json

08工具链:把规范变成闸门

规范写在网页上,就只是建议;写进检查器,才成为约束。这一章给出四个零依赖工具的设计与规则集, 它们的作用不是替代判断,而是让「低级的、机械的、必然反复犯的」错误不再需要判断。

lint.py 合规校验

18 条规则,分阻断与警告两级。支持 --path 指向任意技能库,因此既能校验待发布的仓库,也能体检本地存量。

build_index.py 索引生成

从 skills/ 树生成 index.json。--check 模式下索引过期即返回非零退出码,可直接当 CI 闸门。

为什么坚持零依赖

三个理由,按重要性排:CI 上能跑(GitHub runner 只有裸 python3,装 PyYAML 要多一步且可能失败); 别人的机器上能跑(你的技能库要被别人 clone,不该先要求他配环境); 十年后还能跑(依赖会腐烂,标准库不会)。

代价是要自己写一个 YAML frontmatter 解析器。好在技能格式的 frontmatter 只用到极小的 YAML 子集: 顶层标量、块标量(| 与 >)、一层嵌套(metadata)。 约 60 行代码就够,而且永远不会因为上游库改 API 而失效。

规则集

编号检查内容级别依据
E001SKILL.md 是否存在阻断规范:目录的最小要求
E002文件是否有可解析的 frontmatter阻断规范:必须 YAML 头 + Markdown 体
E003name 缺失阻断规范:必填
E004name 格式:1–64 字符、仅 [a-z0-9-]、无首尾连字符、无连续连字符阻断规范硬约束
E005name 与目录名不一致阻断规范:必须等于父目录名
E006name 含保留词 claude / anthropic阻断Anthropic 曾因保留词重命名技能
E007description 缺失阻断规范:必填
E008description 超过 1024 字符阻断规范:上传校验会拒绝
E009license 缺失阻断公开分发前提,可用开关关闭
E010正文引用的 references/ scripts/ 文件不存在阻断死链会让模型空读一次
E011技能目录嵌套超过三层阻断vercel:发现深度上限
E012描述不含任何触发信号(Use when / 用于 / 当…时 / 触发)阻断论断 02 的直接落地
E013硬编码 /Users/… 或 /home/… 绝对路径阻断可移植性;公开前须脱敏
E014疑似密钥(API key、GitHub token、AWS key、私网 IP)阻断分发前的脱敏闸门
W020description 短于 150 字符警告实测最常见的失败区间
W021正文超过 500 行警告规范:建议值,非硬限
W022正文超过 800 行警告已明显超出预算
W023metadata.version 缺失警告治理需要,不影响运行

刻意区分「阻断」与「警告」是这套规则集的关键设计。如果 18 条全部阻断,人们会开始加 --no-verify;如果全部警告,等于什么都没说。

CI 闸门

两道就够了,都很便宜:契约仍然成立,索引没有过期。

name: skills
on: [push, pull_request]
jobs:
  check:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: python3 tools/lint.py --quiet
      - run: python3 tools/build_index.py --check

一个真实收益

这套检查器第一次运行就抓出了自身的问题:新写的 SKILL.md 引用了不存在的 evals/evals.json。规则的价值不在于它多聪明,而在于它不会疲劳。

09反模式清单

按「内容 / 结构 / 治理」三层归拢十四条。每条都给出症状、成因和修正动作—— 症状是你能观察到的现象,成因才是需要改的地方。

内容层:技能本身写得不对

症状成因修正
装了但从没被调用描述只讲「能做什么」,没讲「何时用」补三段式:做什么 / 何时用(含同义词)/ 何时不用
什么任务都被它抢走描述过宽,与兄弟技能无边界加 Don't use for …,点名不该用的场景
触发了但不按要求做正文前半段是背景与原理,指令埋在后面命令式步骤前置,原理移到引用文件
每次运行都重写同一个助手脚本可执行逻辑写成了散文抽到 scripts/,正文只说「运行它」
模型只读了技能的一半正文超过上下文预算拆到 references/,每个文件标注何时读
你的机器能跑,别人装了报错硬编码绝对路径、依赖本机环境一律相对技能根目录;环境要求写进 compatibility

结构层:库的形状不对

症状成因修正
市场里每个条目都只有一个技能把「一个技能」当成了「一个包」按主题收敛到 5–8 个 plugin,每个含 2 个以上技能
索引和实际技能对不上把索引当配置文件手写改为脚本生成,CI 里加 --check
深处有几个技能从来没被扫到目录层级超过三层的发现上限压平到 skills/<name>/ 或 skills/<品类>/<name>/
上传被拒,提示名称非法用了 claude / anthropic 等保留词,或大写、下划线改为小写连字符,且与目录名完全一致

治理层:库的生命周期没人管

症状成因修正
库越建越大,但感觉没变强把技能数量当进度指标按论断 03 的「修剪三问」定期删;宁少勿滥
半成品被别人装走了未标记内部状态metadata.internal: true,从发现中隐藏
公开了但没人能合法复用缺 license补字段;一次性决定,永久有效
不知道改完之后是变好还是变坏没有评测集,改动全凭感觉写 2–3 条真实话术,做带 / 不带双跑

最贵的一条

「库越建越大但没变强」是最贵的一条反模式——它不会报错,不会有人抱怨,只会在某一天让你发现:过去半年的投入,全部变成了上下文里的噪声。

10路线图:先修哪一处

存量改造不应该按「文件顺序」推进,而应该按「收益 / 成本比」排。 下面五步的顺序是刻意打乱的——不是从易到难,而是从最能改变生效率的开始。

存量技能库改造的五步顺序 五步依次为修致命项、重写描述、补许可、拆长正文、分组打包,其中重写描述收益最高。 ① 修致命项 缺字段 / 超限 影响 3 个技能 ② 重写描述 补触发词与反例 影响 27 个 · 收益最高 ③ 补许可 一次决定,永久有效 影响 37 个技能 ④ 拆长正文 移入引用文件 影响 2 个技能 ⑤ 分组打包 5–8 个主题 影响全部
图 6 改造顺序。② 之所以排在 ③ 前面,是因为它改变的是「技能会不会被调用」;③ 虽然影响面最大,但只影响「能不能被别人复用」——两者不在同一个量级上。

每步的验收标准

步骤做什么做完能观察到什么
①补 name / description,把超 1024 的描述压到限内lint.py 不再有 E003 / E007 / E008 类阻断
②逐个重写描述:三段式 + 触发词(中英双语)+ 反例随手说一句真实需求,原先不响应的技能开始被调用
③给每个技能补 license,删掉不该公开的内部信息可以放心执行 gh repo create --public
④把超 500 行的正文按主题拆进 references/所有正文回到 500 行内,且引用都有「何时读」
⑤写 marketplace.json,按主题聚成 5–8 个 pluginnpx skills add <owner>/<repo> 可以正常安装

不建议一次性打包全库。迁移的价值在于逐步暴露问题——把 45 个技能一次全搬进新仓库, 等于把 45 个未知状态一次性冻结,之后每一次改动都要先搞清楚「这个是当初为什么这么写的」。 搬一个,验一个。

11结论

以下是我的判断,不是共识。它们建立在前面可复跑的证据上,但推论本身包含取舍。

技能库不是知识库

知识库的直觉是「越多越好,反正能搜到」。技能库相反:每一条都常驻上下文, 所以它的经济学是「每多一条,所有其他条的可读性都下降一点」。 用知识库的直觉建技能库,必然走向臃肿。

先有评测,再谈规模

没有评测集的技能库,规模扩张等于盲飞。你会同时收获「有用的」和「有害的」, 而无法区分。20 个经过验证的技能,胜过 200 个没有验证的。

格式会收敛,判断不会

五家仓库现在就已经在 SKILL.md 上达成一致,未来只会更一致。 所以值得投入的是「这个判断值不值得沉淀」,而不是「清单字段该怎么写」—— 后者随时会被生态替你决定。

写给人看的文档会过时,写给模型的不会

产品文档描述「系统能做什么」,系统变了文档就错了。 技能描述的是「这类任务该怎么做才对」,这个判断变化得慢得多—— 这正是技能比文档更耐久的根本原因。

如果只做一件事

把现有技能的 description 全部重写一遍。它不需要新建任何基础设施,不需要改任何代码,但它决定了你已有的全部投入是否真的在工作。

12参考来源

按证据类型分组。所有一手来源均在 2026 年 11 月实际抓取核对。

规范与一手文档

一手实测(可复跑)

推导与建模(非实测,需谨慎引用)

本文档自身