
这是 Codex 系列的第 12 篇。
第 11 篇做出了第一个仓库级 Skill:review-technical-article。当用户说“从读者角度 review 这篇教程”时,它能告诉 Codex 何时介入、按什么顺序检查,以及怎样给出发布结论。
如果这份 Skill 只偶尔使用,到这里就够了。第 12 篇处理的是另一种情况:同一套能力开始被反复使用、修改和共享,原来的一份 SKILL.md 渐渐承受不了全部职责。
这一篇不会重新创建另一个玩具 Skill,而是继续改造这个真实案例。重点也不是“凑齐四个目录”,而是判断:什么问题应该继续交给 Agent,什么问题应该沉淀成知识、脚本或评估用例。
版本与证据说明
本文按 2026-07-15 的 OpenAI Skills 文档、Agent Skills specification、Anthropic Agent Skills 与 Claude Code 文档整理,并对照 OpenAI、Anthropic 的官方 GitHub 示例。Codex 是本文的实际运行环境,Claude 只用于说明共用规范和产品边界;官方约定与本文项目自定义字段会分开标注。
本文已经验证目录结构和两个确定性脚本,但没有把“评估清单结构通过”写成“模型行为已经通过”。完整行为评估需要在相互独立的干净任务里运行当前 Skill 和基线,再人工比较结果。
一分钟概览
先把整篇压缩成一条升级路线:
所以,第 12 篇真正讲的是:
其中最重要的边界是:

图 1 可以从左到右理解:SKILL.md 继续负责判断和编排;详细知识按需进入 references;确定性检查进入 scripts;真实任务留在 evals;最后仍由人决定是否接受结果。
第一次阅读可以先跳过什么
-
只想理解方法:读到第 2 节,再看第 16 节练习和第 17 节清单。 -
准备给 Skill 增加脚本:重点看第 3-5 节和第 13 节的实际结果。 -
准备修改触发条件:重点看第 6-8 节,尤其是当前版与基线隔离。 -
准备迁移到 Claude 或安装社区 Skill:最后再看第 14 节,不需要一开始背产品差异。
最终目录长什么样
这次升级后的目录如下:
这是改造完成后的状态,不是创建 Skill 时必须复制的模板。一个稳定的 instruction-only Skill 仍然可以只有 SKILL.md;只有当上表中的问题真实出现时,才值得增加对应目录。
下载本文验证过的 review-technical-article 1.1.0 Codex 仓库级示例包
压缩包只包含 Skill 目录和一篇明确标注“故意含错”的评估 fixture,不包含博客正文或项目依赖。它验证于 Codex 和当前博客仓库。解压到其他项目以后,仍需安装 Node.js 与 gray-matter,或者把预检脚本改成自包含实现;先运行文中的结构和脚本检查,再决定是否启用隐式调用。
在 npm 项目中可以安装本文实际使用的版本:
使用 pnpm、Yarn 或 Bun 时换成对应的安装命令。若只需要 instruction、references 和 eval 用例,也可以不运行依赖 gray-matter 的文章预检脚本,但必须把这项验证标成未执行。
本文附件的 SHA-256 为 41815817F52B82BFA755F8E1BEEA1106D69C272338FA3F67165A32D264F128C9。它用于确认下载文件与本文最终复验的压缩包一致,不代表包内 Skill 已完成模型行为评估。
1. 先定义要验证哪一层
“这个 Skill 已经验证过”听起来像一个结论,实际上至少包含四个不同问题。先说清正在验证哪一层,后面的脚本和 eval 才不会被过度解读。
对本文这个技术文章审查 Skill,我把可靠拆成四层:
这四层不能相互替代。
例如,article-preflight.mjs 能确认图片文件存在,却不知道图里是否写错了命令;它能确认摘要不是空字符串,却不知道摘要是否准确;它能确认外链返回了 HTTP 200,却不能证明链接内容支持正文里的主张。
所以本文的目标不是“用脚本替代编辑”,而是:
2. 先按问题分工,再决定放在哪里
Skill 变复杂以后,第一个设计问题不是“如何拆文件”,而是“这条内容属于谁”。

我现在使用下面这张决策表:
这里有两个常见误区。
第一,references/ 不是把 SKILL.md 随便拆小。参考文件应该可以被一句明确条件召回,例如“文章包含版本敏感或安全相关事实时读取来源策略”。如果正文只写“按需读取相关资料”,Agent 仍然不知道什么时候读。
第二,scripts/ 不是“看起来更工程化”的装饰。若步骤需要综合语境、判断论证是否成立,脚本很可能不合适;若结果可以通过解析和规则稳定算出,才适合脚本。
3. references:知识变长时再拆出去
这一节只解决“详细知识放哪里”。在本文案例里,需要移出去的是来源优先级和证据记录方法,而不是整个 review 流程。
第 11 篇的 SKILL.md 里已经有一句:
方向没错,但真实 review 里还会遇到:
-
官方文档与社区教程冲突时信谁? -
博客里的亲身经验算不算证据? -
哪些主张值得逐条记录,哪些只是普通叙述? -
链接能打开,是否等于它支持正文? -
版本敏感事实需要记录什么日期?
如果全部继续写进主文件,Skill 每次触发都要加载一大段来源规范,即使任务只是检查一个不含版本事实的静态算法教程。
因此我增加:
它只在文章包含“版本敏感、存在争议、安全敏感或产品特定主张”时读取。核心优先级是:
低优先级来源不是不能用。社区 issue 很适合补充真实故障,作者经验也可能非常有价值;问题在于不能把它们写成官方保证。
3.1 一份够用的证据台账
参考文件还定义了一个小型 evidence ledger:
例如,本文关于评估目录的记录可以写成:
这张表的价值不是让文章显得严谨,而是迫使作者把三个相近概念分开。
3.2 references 的三个边界
不要重复项目规则。 博客的分类、构建命令和发布流程已经在 AGENTS.md,来源策略不再复制。
不要形成深层引用链。 SKILL.md 指向一份具体参考文件,比“参考文件 A 再让 Agent 去找 B、C、D”更可控。
不要无条件加载。 如果每次都需要读,内容可能就应该留在 SKILL.md;如果只在少数场景需要,才适合渐进式加载。
4. scripts:只有确定性检查才脚本化
一个简单判断是:如果你能提前写清输入、输出和失败条件,而且同样输入应该重复得到同样结果,它才适合进入脚本。需要理解语境、权衡论证或判断读者价值的工作,继续留给 Agent 和人。
技术文章 review 中有一批问题非常适合脚本:
-
frontmatter 必填字段是否齐全; date
与 updated是否为真实日期;updated
是否早于 date;-
发布检查时 draft是否已经是false; -
标签是否为空或数量明显失控; -
本地图片和文件链接是否存在; -
图片 alt 是否为空; -
外部链接是否至少可以访问。
这些问题如果只交给模型,每次都要重新扫描文本,还可能漏掉隐藏在长文后半段的路径。
但以下问题不应该交给这个脚本:
-
命令是否适合当前 Codex 版本; -
引用页面是否真的支持正文结论; -
教程是否值得收藏; -
图是否帮助理解; -
一段个人判断是否有足够上下文。
4.1 先写脚本合同
我没有直接从正则开始,而是先约定命令接口:
这个接口体现了 Agent 脚本应有的几个特征:
-
非交互式,调用后不等待用户输入。 -
默认只读,不修改文章。 --help
能独立说明输入、输出与退出码。 -
数据可以输出 JSON,诊断信息有明确错误代码。 -
失败可被上层工作流判断,而不是只打印一句“有问题”。
脚本依赖 Node.js 18+ 和当前博客仓库已经安装的 gray-matter。这个前提被写进 Skill;如果运行环境缺失依赖,Agent 应该披露“未运行”,不能假装通过。
这也是一个明确的可移植性取舍:本文做的是仓库级 Skill,它可以复用项目已有依赖;若准备通过 Plugin 分发给其他项目,应把脚本改成自包含实现,或使用可锁定版本的运行方式,并重新跑完整评估。把目录复制走不等于完成迁移。
4.2 预检脚本做了什么
实现逻辑可以压缩成下面这段伪代码:
这里特意把远程链接失败设为 warning。原因很现实:限流、登录墙和反爬策略都可能让一个有效页面暂时返回 403 或超时。脚本可以证明“这次请求没确认成功”,不能直接宣布“文章引用失效”。
4.3 运行真实文章
从仓库根目录执行:
正文优先给单行、正斜杠版本,因为它在 PowerShell、Bash 和多数命令执行器里都更容易直接复用。若在本地把命令拆成多行,再使用当前 shell 对应的续行语法,不要把 PowerShell 的反引号写进 Skill 的通用说明。
2026-07-15 的实际结果摘录:
这证明第 11 篇的 frontmatter、本地图片和发布状态通过了这套机械规则。它没有证明第 11 篇里每一条 Codex 事实都正确,也没有证明文章对每个读者都有价值。
4.4 故意让它失败
只测试成功样例,很容易把“脚本能运行”误当成“脚本能拦错”。我又创建了一个临时损坏样例:
发布模式实际返回:
成功路径和失败路径都符合预期以后,这个脚本才算完成最小验证。
5. 仓库已有检查,不要在 Skill 里重写
当前博客本来就有:
它一次检查整个 content/blog,适合 CI 或发布前全量校验。新的 article-preflight.mjs 一次检查一篇文章,适合 Skill 在 review 过程中获得结构化证据。
两者有部分重叠,但调用场景不同:
如果两个脚本以后开始复制大量业务逻辑,就应该提取共享模块。当前只共享少量基础规则,保持独立更容易理解,也不会让一个仓库级 Skill 反向控制整个站点构建。
这个判断很重要:增加 scripts/ 不代表要把仓库已有工具全部重写一遍。
6. evals:把真实任务保存为回归用例
第 6-8 节最容易混淆,可以把它们理解成一次考试:
这一节先建立题库,还没有开始执行模型测试。
Agent Skills 的评估指南建议在 Skill 目录里使用:
测试用例至少包含任务 prompt 和 expected_output,也可以附带输入文件。指南还建议先从少量真实且有差异的任务开始,并把当前 Skill 与没有 Skill 或旧版本的基线作对照。
本文建立了 7 个用例,而不是只写一个最容易通过的正向 Prompt。
显式发布审查用例附带 evals/files/sample-codex-skill-tutorial.md。这篇 fixture 故意写错仓库级 Skill 路径和隐式调用默认值,并保留 draft: true 与一张缺失图片,用来检查事实审查与确定性预检是否都能发现问题。它不是参考资料,也不得发布。
其中一个用例的简化版本如下:
6.1 哪些字段是官方约定,哪些是本地扩展
这里必须把边界写清楚。
evals/evals.json 是 Agent Skills 创建与评估指南推荐的目录和文件。prompt、expected_output 与可选 files 属于通用测试任务信息。
本文额外使用了:
skill_version
:记录这批用例对应的 Skill 版本; evaluated_on
:记录检查日期; assertions
:保存可观察的验收语句; activation
:标记 required、forbidden 或 clarify; invocation
:标记 explicit 或 implicit。
后面这些是本文评估工作流的本地元数据。不要因为它们写在 evals.json 里,就暗示 Codex 运行时会自动读取或执行。
6.2 断言要能被观察
差的断言:
这类句子几乎无法稳定判定。
更好的断言:
断言不是越细越好。若把每个标题、每个词序都锁死,Skill 只要做了合理表达调整也会被判失败。应该锁定读者真正依赖的行为和产物。
7. 清单格式通过,不等于模型行为通过
沿用上面的比喻,这一步只是在检查“试卷有没有漏题、重复题和错误字段”,不是宣布考生已经通过。
手写 JSON 很容易出现重复 id、漏字段或只覆盖正向案例。于是我增加了第二个确定性脚本:
它检查:
skill_name
、版本和日期格式; -
至少三个用例; -
id 唯一; -
prompt、expected output 和 assertions 非空; -
required、forbidden、clarify 三类触发覆盖; -
explicit、implicit 两种调用覆盖。
命令:
实际结果:
最后这句 note 不是客套话,而是最重要的边界。
校验脚本只证明“评估清单结构符合本文约定”。它没有向 Codex 发送 7 个任务,也没有判断输出是否满足断言。
8. 行为评估:当前版和基线分别跑
真正的“答题”从这里才开始:同一道任务分别交给当前 Skill 和没有 Skill 或旧版 Skill,比较它是否减少遗漏,同时没有带来新的误触发。

一轮完整评估应该这样做:
-
固定要测试的 Skill 版本和 evals.json。 -
为每个 case 创建一个全新任务,运行当前 Skill。 -
再创建另一个全新任务,在不加载该 Skill 或使用旧版 Skill 的条件下运行同一输入。 -
保存输出、工具调用、脚本结果和失败信息。 -
检查可机械判定的 assertions。 -
人工 review 事实质量、读者价值和风险。 -
记录当前版本比基线好在哪里,又引入了什么副作用。
为什么一定要干净上下文?
因为 Agent 会使用当前对话里已经出现的规则和结论。若在同一任务里先解释“这个 Skill 应该怎样工作”,再测试它是否知道怎样工作,测试本身已经把答案泄露给了模型。
8.1 把每次运行保存成可以比较的证据
不要只在聊天窗口里凭印象对比。先在 Skill 目录旁边建立独立工作区:
当前版本在一个全新任务里显式运行:
基线要在另一个全新任务里运行同一段测试任务。最稳妥的做法是使用一个不包含当前 Skill 的独立测试目录,并保持输入文章、项目规则和验收条件一致;若比较旧版本,则把旧 Skill 快照放在另一个隔离目录中。
不要让同名的新旧 Skill 同时处于一个发现范围。OpenAI 当前文档明确说明,同名 Skill 不会自动合并,选择器里可能同时出现两个,测试就无法确认究竟加载了哪一份。
如果当前环境无法保证隔离,就把结果标成“baseline 未运行”,不要用同一任务里的第二次回答代替基线。
8.2 触发评估和输出评估是两件事
一个 Skill 可能触发正确,但输出很差;也可能输出模板漂亮,却在不该出现时频繁抢任务。
因此,description 的评估不能只看“能不能触发”。它同时要控制召回率和误触发率。
如果 Skill 准备跨入口或跨模型使用,还要把运行环境作为评估变量,而不是把所有结果混在一起:
Anthropic 的当前建议是至少准备三个真实评估,并在计划使用的模型上分别测试;OpenAI 则强调用测试 Prompt 检查 description 的触发行为。两边的方法可以互相借鉴,但目前没有一个 evals.json 会被 Codex 和 Claude 自动用同一种 runner 执行。通用的是用例和证据组织方式,产品调用与隔离仍需要各自实现。
8.3 本文诚实停在哪里
本文已经完成:
-
7 个评估任务的设计; -
正向、负向、模糊和显式、隐式覆盖; -
manifest 结构与覆盖校验; -
Skill 目录快速验证; -
两个脚本的真实成功和失败运行。
本文没有声称完成:
-
7 个 case 的当前 Skill 与基线双跑; -
自动判断全部行为 assertions; -
跨 Codex App、CLI、IDE 的一致性比较; -
跨 Codex 与 Claude Code、Claude API 的运行对照; -
不同模型或推理设置下的统计稳定性。
写下“尚未验证”比给一张虚假的全绿表更有价值。下一轮维护可以从这里继续,而不是误以为质量问题已经被证明不存在。
9. openai.yaml:明确是否允许自动调用
第 11 篇已经生成了界面元数据:
这一篇增加:
OpenAI 当前的 Skills 文档支持用这个策略控制隐式调用。默认值是 true,所以这里即使不写也能隐式触发;显式写出,是为了让维护者看到这是一个经过判断的策略,不是遗忘。
为什么本文保持 true?
-
这个 Skill 只读文章和资料; -
脚本也是只读检查; -
即使误触发,主要代价是输出变长,而不是修改外部系统; -
用户经常会自然地说“review 一下是否适合发布”,隐式召回有实际价值。
如果 Skill 会删除文件、发布内容、发消息、操作付费资源或修改远程数据,我会优先考虑:
这样它仍可被显式调用,但不会只因为一句含糊描述就自行启动高影响工作流。
10. 版本号只负责指向证据
本文在评估清单里使用:
这里的 1.1.0 是维护约定:
1.0.0
:第 11 篇的 instruction-only 工作流; 1.1.0
:增加 references、只读 scripts、eval manifest 和调用策略; -
未来若输出合同发生不兼容变化,再考虑提升 major。
它帮助我把评估结果对应到具体文件状态,但不代表 Codex 运行时会读取 skill_version 或按 SemVer 选择 Skill。
Skill frontmatter 里也记录了 metadata.version: "1.1.0",Node.js、gray-matter 和可选网络依赖则写在主文件的资源说明中。Agent Skills specification 允许客户端使用自定义 metadata,但不保证每个客户端都按相同方式解释版本,所以它仍然只是维护信息。
真正可追溯还需要:
-
Git commit 或可比较的文件快照; -
测试日期和运行环境; -
用例、输出与断言结果; -
已知未验证项; -
修改原因,而不只是版本号。
版本号是索引,不是证据。
11. SKILL.md 只增加资源调用条件
主文件新增的关键内容不是一大段脚本源码,而是资源使用条件:
工作流最前面还增加了 deterministic preflight:
这段编排解决了两个问题。
第一,Codex 不需要每次重新发明命令和参数。第二,脚本结果不会混进 editorial findings,让读者误以为“路径存在”与“内容合理”拥有相同证据等级。
12. 可以直接交给 Codex 的升级任务
如果你已经有第 11 篇那样的最小 Skill,可以从下面这份任务开始,而不是手工逐个建文件:
这份 Prompt 的重点不是目录名,而是每个文件的职责和验收边界。
13. 本地验证记录
本文写作前实际运行了以下检查:
这里仍有两个残余风险。
一是 Markdown 链接语法有很多边缘情况,当前脚本面向本博客常用写法,不是完整 Markdown parser。二是外链检查受网络和站点策略影响,所以只作 warning。
这两个限制已经写进文章和脚本行为,不需要为了“全绿”而隐藏。
14. 进阶补充:迁移和共享时再看这些边界
到第 13 节为止,Codex 仓库级 Skill 的主线已经结束。下面两部分只在迁移到其他 Agent、分发 Plugin 或安装第三方 Skill 时需要;如果你只是维护自己的项目 Skill,可以直接跳到第 15 节。
14.1 迁移到 Claude:格式相通,不等于直接复制
Agent Skills 的开放规范让不同 Agent 可以共享 SKILL.md、references/、scripts/ 和 assets/ 这些基本组织方式。但“格式相通”只代表迁移成本较低,不代表安装、权限和运行时完全相同。
迁移时先保留通用核心,再为目标产品补适配层。Codex 的 agents/openai.yaml 不属于开放规范,Claude Code 的工具控制也不会因为复制这份文件自动生效。本文附件中的 gray-matter 是另一个例子:在不能安装包的容器里,必须换成自包含脚本,或先确认目标环境已经提供依赖。
frontmatter 也有类似差异。开放规范允许 metadata,而 OpenAI 当前 Skill Creator 的作者指引倾向只保留 name 与 description。本文实测当前 Codex quick validator 可以接受 metadata.version;若追求最大的客户端兼容性,也可以把版本只放在 evals.json、CHANGELOG 和 Git tag 中。无论采用哪种方式,都不要让业务逻辑依赖 Agent 自动理解这个版本号。
14.2 从 GitHub 安装 Skill 前,把它当软件审计
第三方 Skill 可以携带脚本、外部链接和工具指令;Plugin 还可能包含 MCP 配置、commands、hooks 与其他可执行入口。仓库公开不等于代码已经替你审计过,star 数也不能代替权限检查。
安装前至少检查:
-
阅读完整的 SKILL.md,确认描述的任务与实际步骤一致。 -
检查 scripts/、依赖和所有外部 URL,留意网络请求、凭据读取、文件删除与远程写入。 -
若是 Plugin,继续检查 .codex-plugin/plugin.json、MCP、hooks、commands 和权限声明。 -
核对每个目录的许可证。一个仓库可能同时包含开源与仅源码可见的内容。 -
固定到可追踪的 commit 或 tag,不依赖持续变化的默认分支。 -
先在测试仓库、最小权限和 sandbox 中运行,再逐步开放网络、凭据和写权限。
Anthropic 官方把 Skill 明确视为需要像软件一样审计的能力;OpenAI 的 Plugin 结构也说明一个分发包不只包含说明文件。这里的结论不是“不要使用社区 Skill”,而是把来源、版本、代码和运行权限一起纳入验收。
15. 最常见的六种失败方式
15.1 一开始就创建所有目录
空 references/、scripts/ 和 assets/ 不会增加可靠性,只会增加维护噪声。先从最小 Skill 开始,遇到具体压力再拆。
15.2 把长说明移走,却不写召回条件
SKILL.md 只写“需要时参考资料”几乎没有帮助。应该写清“文章包含时间敏感或安全相关主张时读取 source-policy.md”。
15.3 用脚本处理主观判断
正则可以找缺图,不能判断图是否帮助理解。若脚本只能靠越来越多模糊启发式猜测,任务可能应该留给 Agent 和人。
15.4 只写正向 eval
“明确点名 Skill 时能触发”是最低难度。真正影响日常体验的往往是误触发,所以负向和模糊任务不可缺少。
15.5 在同一对话里测试当前版和基线
前一次输出会给后一次提供规则和答案,结果不能作为干净对照。每个 run 都要使用独立任务。
15.6 把每个绿色结果都叫作“验证通过”
最危险的表述是:
更准确的是:
证据说到哪,结论就停到哪。
16. 45-60 分钟跟做练习
不要一上来复制本文整个目录。选择你已经使用过至少两次的 Skill,再按这个节奏升级。
0-10 分钟:找出不稳定点
记录最近两次使用里重复出现的问题:
-
哪段知识总要重新解释? -
哪个机械检查总会漏? -
哪种相似任务不应该触发? -
输出里哪个字段是下游真正依赖的? -
最终准备在哪个 Agent、入口和运行环境里使用?
只选一个最明显的问题。
10-20 分钟:决定放置位置
用图 2 的决策顺序判断:
写不清职责就先不要拆。
20-35 分钟:实现一个最小扩展
二选一即可:
-
增加一份只在特定条件加载的 reference; -
增加一个只读、非交互、带 --help和退出码的 script。
同时把调用条件写回 SKILL.md。
35-45 分钟:建立评估矩阵
至少写 4 个任务:
-
一个显式正向; -
一个自然语言正向; -
一个相似但不应触发的负向; -
一个信息不足的模糊任务。
每个用例至少写一条可观察断言。
若计划跨入口使用,再为用例记录 surface、model、runtime 和 Skill revision;不需要第一轮就覆盖所有组合,但必须知道这次结果属于哪一个环境。
45-60 分钟:跑失败路径并记录边界
-
让脚本处理一个合法输入; -
故意制造一个错误输入; -
校验 eval manifest; -
写下哪些行为没有运行; -
在另一个干净任务里准备基线测试。
练习完成的标准不是“目录和本文一样”,而是你能回答:
17. 收藏清单
以后升级 Skill,可以按这份顺序检查:
设计
-
[ ] Skill 仍然只解决一个清楚的任务。 -
[ ] SKILL.md只保留触发、编排和输出合同。 -
[ ] reference 有明确读取条件,没有复制 AGENTS.md。 -
[ ] script 只承担确定性、重复处理。 -
[ ] 外部实时动作没有被误塞进本地脚本。
脚本
-
[ ] 非交互、默认只读、有 --help。 -
[ ] 输入、输出、依赖和退出码明确。 -
[ ] Skill 内部路径使用正斜杠,目标环境能够提供所需依赖。 -
[ ] 结构化数据走 stdout,诊断信息清楚。 -
[ ] 成功样例与失败样例都实际运行。 -
[ ] 网络失败与内容错误没有混为一谈。
评估
-
[ ] 有正向、负向和模糊任务。 -
[ ] 同时覆盖显式与隐式调用。 -
[ ] 断言可以观察,不依赖模糊的“高质量”。 -
[ ] 当前 Skill 与基线使用独立干净任务。 -
[ ] 结果记录了 surface、model、runtime 和 Skill revision。 -
[ ] 机械断言、人工判断和未验证项分别记录。
安装与共享
-
[ ] 已审查 SKILL.md、scripts、外部 URL 和依赖。 -
[ ] Plugin 的 MCP、hooks、commands 和权限入口也经过检查。 -
[ ] 已核对许可证,并固定到可追踪的 commit 或 tag。 -
[ ] 第一次运行使用测试仓库、sandbox 和最小权限。 -
[ ] 已区分通用 Skill 核心与 Codex、Claude 的产品专属配置。
发布
-
[ ] 官方事实有来源和核对日期。 -
[ ] 本地扩展没有写成 Codex 运行时保证。 -
[ ] 版本号能对应具体文件状态。 -
[ ] 没有用“清单通过”代替“行为通过”。 -
[ ] 最终高影响动作仍由人验收。
写在最后
第 11 篇解决的是“怎样不再反复写同一段 Prompt”。第 12 篇解决的是更长期的问题:
答案不是把 SKILL.md 写到无限长,也不是给目录塞满文件。更可持续的做法是把职责拆清楚:
references
保留需要时才加载的知识; scripts
提供可重复的机械证据; evals
保存真实任务与回归边界; -
人工 review 负责事实、质量和风险; -
版本记录把结论对应到具体状态。
下一篇进入第 13 篇:Plugins、MCP 与 Apps:什么时候让 Codex 连接外部工具。届时会继续用同一套判断方法,区分“给 Agent 一套可复用说明”“把能力打包分发”和“连接需要认证的实时外部系统”。
参考资料
官方与规范
-
OpenAI:Build skills -
OpenAI:Build plugins -
OpenAI Skills repository -
OpenAI Plugins repository -
Anthropic:Agent Skills overview -
Anthropic:Skill authoring best practices -
Claude Code:Agent Skills in the SDK -
Anthropic Skills repository -
Agent Skills specification -
Agent Skills specification repository -
Agent Skills:Evaluating skills -
Agent Skills:Using scripts in skills
社区案例
-
junminhong/awesome-agent-skills -
ComposioHQ/awesome-codex-skills
社区仓库只用于观察目录组织和应用场景,当前路径、字段和产品行为仍以官方资料与实际运行结果为准。使用 GitHub 示例时还要逐目录核对许可证:例如 Anthropic 官方仓库中的多数 Skill 使用 Apache 2.0,但 docx、pdf、pptx、xlsx 属于 source-available,并不能因为仓库公开就统一称为开源。
订阅智宅客
AI / 技术 / 数字生活方式,新文章第一时间送到邮箱。








