SKILL.md别急着翻译:拆解Agent Skill设计的五个维度 最近有朋友在群里丢了一份英文 SKILL.md问我能不能帮忙翻译成中文。文件写得很完整步骤、示例、边界全都有但他第一反应是“翻译”而不是“这玩意儿为什么这么写”。我拦了一句先别急着翻译。SKILL.md 不是散文里面的每一段几乎都在影响 Agent 的调用和输出翻译解决的是语言问题拆解解决的才是设计问题。我后来干脆写了一个专门拆解 Skill 设计的小工具不翻译内容只把 Skill 文件的骨架、触发条件、步骤流程、依赖文件和模糊地带全部摊开给你看。用了一段时间帮自己和身边人看懂了不少开源 Skill 的套路。这篇就聊聊为什么别急着翻译以及怎么拆一个 SKILL.md 才不算白拆。1. 别急着翻译SKILL.md 真正要拆的是设计逻辑1.1 SKILL.md 是什么它不是文档是给 Agent 的“执行约定”先对齐一下概念。这些年 Claude Code、Codex、各类 Agent 框架里冒出来很多 Skill表现形式就是一个目录里面放着 SKILL.md有时还搭几个参考文件。SKILL.md 用的是 Markdown但它的本质不是给人看的知识库而是给 Agent 看的一组“执行约定”。一个合格的 SKILL.md 通常包含几个模块最上层的 YAML frontmatter描述这个 Skill 叫什么、什么时候用、版本多少正文是触达条件、操作步骤、规则、示例、输入输出格式、可引用的外部文件。它的运作逻辑和插件不一样更接近“按需加载的做事方法包”Agent 在对话里判断当前场景匹配某个 Skill就把这份文件的内容放进上下文然后照着里面的流程去干活。理解了这一点就能明白为什么“翻译”是件很亏的事。翻译处理的是文字但 SKILL.md 的关键在于结构、触发语义、步骤边界和依赖关系。你把一段英文翻译成中文并没有真正搞懂它为什么把某个场景放在 Description 里、为什么某个步骤要拆成两步、为什么示例里特意写了个“错误示范”。这些才是决定 Skill 好不好用的东西。1.2 翻译解决不了的问题几个“不可译”的层面我见过不少人把翻译当成理解 Skill 的第一步结果翻完照样不会改、不会写、不会判断好坏。原因是 SKILL.md 里有好几层信息是翻译带不走的。第一层是触发权重。frontmatter 里的 description 看起来只是“一句话介绍”但 Agent 的调用链路里这句话是要和用户当前输入做匹配的。英文原文里“generate a website from scratch”和“help user build a website”一个强调从零生成一个强调辅助翻译成中文以后往往会变成同一句“帮助用户创建网站”触发条件下一次就被模型混淆。第二层是流程的颗粒度。英文 Skill 常说“do A, then B, then C”翻译时人习惯把它们合并成自然语言“然后依次执行ABC”但 Agent 真正需要的是明确的输出物和检查点句子越顺滑指令反而越模糊。第三层是术语一致性技术类 Skill 里有大量命令、参数、文件名翻译后如果顺手改成中文Agent 执行时根本找不到对应实体。说白了翻译是在帮你“读懂字面”拆解才是帮你“读懂决策”。一个 Skill 作者为什么要这么写、在哪里留了余地、在哪里没留余地、哪里是真正影响输出的关键这些是翻译永远给不了你的。1.3 谁适合用拆解的思路看 Skill我接触过几类人拆解这套思路对他们帮助最大。第一类是刚开始接触 Skill 但想写自己的第一个 Skill 的人。与其从空白文档开始憋不如挑三个口碑不错的 Skill拆到只剩骨架再照着骨架搭自己的内容成功率会高很多。第二类是在 Codex、Claude Code 这类 Agent 环境里反复调 Skill 但效果不稳定的人问题往往出在触发条件太模糊、步骤颗粒度不对、示例太少拆分以后一眼就能看出来。第三类是团队的“技能管理员”要维护一批 SKILL.md 给同事用这类人更需要能快速判断这个文件结构是否完整、有没有过度依赖外部资源、描述里有没有写了等于没写的废话。Skill 在你面前不再是一个黑盒文件而是一张可以修改的设计图这才是拆解的目的。2. 拆解工具怎么设计把 Skill 摊开成五个维度2.1 工具定位不翻译、不改写只做“结构勘探”动手写工具之前我给自己定了个原则它不做翻译不做润色也不给这个 Skill 打分。它只做一件事把 SKILL.md 拆成一套结构化的信息让使用者能快速回答三个问题——这个 Skill 在什么情况下会被调用它让 Agent 按照什么路径执行有没有会导致执行翻车的漏洞我把它定位成“结构勘探器”就像开工前先给地皮做个勘探而不是直接上去盖楼。市面上已经有不少工具能渲染 Markdown、能翻译文档但缺的是“站在 Agent 视角”的解析。Agent 读取 SKILL.md 的顺序和人类不一样它会先读 YAML 元信息判断是否匹配再读正文的步骤和规则最后才看示例和附录。所以工具的输出顺序也必须还原这个读取路径而不是按照文件里的物理顺序平铺。实现上我没有用重型框架就是一个本地运行的命令行脚本输入一个 SKILL.md 路径或者 Skill 目录输出分层的解析结果。轻量、可改、可嵌进自己的工作流这比做个大而全的网页更实在。2.2 核心拆解维度五个问题对应五类关键信息我整理了五个拆解维度基本覆盖了 SKILL.md 里所有影响执行质量的内容。第一个是 frontmatter 元信息。解析 name、description、version 这些字段同时额外标记“触发关键词密度”。一个 description 里如果有明确动词和名词比一堆形容词更容易被 Agent 命中。第二个是触发与边界。除了看它写了哪些“使用时需要满足的条件”还要看有没有“不要用于什么场景”的负面声明。负边界能防止 Agent 在错误场景里强行套用 Skill这是很多人会漏掉的部分。第三个是执行流程。把正文里的步骤按顺序抽出来看它有没有明确输入、动作、输出物每一步之间是否顺承。第四是规则与约束。把“必须”“禁止”“当…时”这类约束性语句单独拎出来它们通常散落在段落中很容易被读者忽略但 Agent 对这类高权限指令最敏感。第五是资源依赖。收集正文里出现的所有相对路径引用、文件名、外部工具命令然后去磁盘上查一遍哪些存在、哪些缺失全列出来。这五个维度其实就是一份“Skill 体检表”。拆完一个文件你得到的不再是长篇大论的译文而是一张能直接定位问题的结构图。我后续在写新 Skill 时也会拿这五个维度自查缺了哪一块、哪一块含糊一测便知。2.3 为什么输出要“分层”而不是“翻译成稿”工具设计过程中我犹豫过输出形式。最早的版本为了“方便阅读”把解析结果做成了像翻译稿一样的长文本解释每一段在说什么。试用以后发现没什么用——信息密度太低反而把关键结构埋没了。后来改成现在的分层输出第一层是文件概览包含元信息、文件行数、检测到的引用数量第二层是触发分析解读它会在什么场景被调用、负边界是否充分第三层是流程拓扑以有序列表还原执行顺序第四层是问题清单只列缺失的、模糊的、可能存在风险的点。使用者可以层层下钻也可以只看最后一层。这里有个重要心得拆解工具最忌“替用户做结论”。它应该做的是把信息摆清楚至于这个 Skill 好不好、要不要改成什么样应该由使用者结合自己的场景判断。一旦工具开始自作主张地给建议就容易输出一堆“建议补充示例”“建议增加步骤”之类的正确废话对解决实际问题帮助不大。3. 拆解过程实录从 YAML 到正文再到依赖检查3.1 YAML frontmatter 解析最容易被搞坏的入口凡是处理过 SKILL.md 的人都知道frontmatter 是第一个坑。它看起来像 YAML实际写起来五花八门有人用description有人用Description有人写discription这类拼写错误还有人干脆不写 frontmatter把所有信息都塞在正文标题里。这些不标准写法在人工阅读时没问题但对机器解析极不友好。我的工具第一步先把文件头部的---块截出来用 YAML 解析器加载。加载失败时不直接报错退出而是退化为“全文扫描模式”用正则把name:、description:这类行抠出来尽量挽救能用的信息。实测下来常见开源 Skill 的 frontmatter 至少有一半能顺利解析剩下的一半里拼写不规范和缺少 frontmatter 约各占三分之一。这里给写 SKILL.md 的人一个额外建议frontmatter 里的 description 最好控制在两行以内开头第一个词就用动词不要用“This file helps...”这种绕弯说法。直接写“Generate React component based on user request”就比“This document provides guidance on generating React components”更容易被模型命中。这个差异在单次测试里不明显但放到几十个 Skill 的候选池里触发率差距会被放大。3.2 Markdown 结构提取处理“约定俗成大于规范”的现实SKILL.md 的正文结构比 frontmatter 更乱。有的作者习惯用## Overview、## Steps、## Examples这种标准章节也有不少作者用## How to Use、## Workflow、## Scenarios还有人把步骤直接编号写成### Step 1: Collect Requirements。对这些格式正则硬匹配迟早会翻车。我的做法是两层配合。第一层按 Markdown 的 Heading 层级把全文切成区块先不看标题内容只看哪些是二级标题、哪些是三级标题。第二层再做语义归并把常见章节名映射到五个内部类别trigger、workflow、rules、examples、resources。映射不中的区块也不丢统一归到“未分类区块”并在输出时提示使用者人工确认。这个设计是踩坑踩出来的。早期版本只认固定关键词比如只认steps结果一份写得挺好的 Skill 因为把流程写成了“Phase 1/Phase 2”就被工具漏判输出结果看上去像功能不全。后来改成“层级切分语义映射”再奇怪的章节划分也能保留在结果里只是多一个标记。拆解工具的价值首先是不漏信息其次才是归类准确。3.3 占位符与外部引用检查把隐藏的坏味道挖出来很多 SKILL.md 不是孤立的它会引用同目录下的 templates、examples、data.json、rules.md。这些引用如果路径写错Agent 执行到一半就会找不到文件表现成“模型突然说无法继续”。人工读文本很难一眼发现因为路径藏在段落中间不仔细看根本注意不到。工具会做一轮全量引用抽取匹配./xxx、xxx.md、xxx.json、{{xxx}}、${xxx}这类模式然后在 Skill 目录里做存在性检查。引用文件存在就打 ✅不存在就打“缺失”并把上下文段落一起输出。这个功能带来的价值超乎预期——我拆了二十来个热门 Skill几乎每五个里就有一个引用文件不存在或者目录层级对不上。作者可能本地有那个文件但发到仓库时漏了或者改过路径忘了同步。更有意思的是占位符检查。有的 Skill 里写了{{user_input}}说明它预留了变量接口这是好设计但也有人写{prompt}、[input]、user混用说明作者自己都没想清楚变量体系。这种不一致在纯阅读时很难察觉可一旦进入工程化流程统一不了变量名就意味着没法批量调用。3.4 实测效果一次典型的 SKILL.md 拆解输出拿我拆过的一个前端生成类 Skill 举例最终输出大概是这种感觉文件frontend-builder/SKILL.md86 行3 个引用文件 [元信息] - name: frontend-builder - version: 1.2.0 - description: Build Vue3 page from user requirement (动词开头触发匹配度中高) [触发条件] - 正向用户提供页面描述、组件需求 - 边界未声明“不适用于已有代码库的增量修改” [执行流程] 1. 解析需求 - 输出字段清单 2. 环境检测 - 检查 node/npm 版本 3. 生成目录 - 依赖 templates/vue3-base/ 4. 首组件编码 - 参照 examples/button.demo.vue 5. 自检 - 按 rules.md 逐项核对 [约束规则] - 禁止生成 styles.css样式统一使用 CSS Modules - 组件命名优先采用 PascalCase [风险点] - 引用文件“design-tokens.json”缺失第 63 行上下文可查 - 流程第 4 步没有明确“当示例不可用时怎么办”这个输出不评价“这个 Skill 好不好”但读者一眼就能知道这个 Skill 结构相对完整触发描述还行但是缺负边界、有个文件缺失、第 4 步存在模糊地带。下一步要去改哪里清清楚楚。比起全文翻译成中文这种“带问题导向的骨架图”信息量高得多。4. 拆完有什么收获用“再设计”视角反推好 Skill4.1 实操方法拿到陌生 Skill 后的一小时拆解法拆解工具能帮你节省重复劳动但要真正提升对 Skill 设计的理解还是要有方法。我第一次拆一个陌生 Skill 时基本毫无头绪后来固定下来一套“一小时”流程分享给大家直接用。前 10 分钟只看元信息和触发条件。关掉正文只看 frontmatter 里 name 和 description想一个问题如果我现在是 Agent用户说什么话我才应该调用这个 Skill描述里哪些词会帮助匹配哪些词纯属噪音第二个 20 分钟看流程拓扑把工具输出的步骤列表当作地图沿着地图走一遍重点观察步骤之间的衔接处有没有“从 A 直接跳到 C”的断层。第三个 20 分钟看示例和规则把示例输入输出对照规则逐条检验看示例是否覆盖了规则中的边界情况。最后 10 分钟专门看风险点记录缺失文件和模糊指令想想如果要在自己项目里复用这个 Skill需要补哪些东西。这套流程走完你对该 Skill 的理解深度绝对超过读一遍原文。关键的区别在于读原文是被作者带着走拆解是主动找作者做过的每个取舍然后判断这个取舍合不合理。4.2 高质量 Skill 的通用骨架从大量文件中总结出的共性拆了几十个比较受欢迎的 Skill它们风格各异但骨架高度相似。我把它整理成六段式结构写新 Skill 时可以直接套。第一frontmatter 要极简且动词开头name 控制在三个词以内description 里明确输入对象和产物。第二紧跟着是“When to Use”用三到五条列出正触发条件接着单独列几条“When NOT to Use”。很多新手只写正向不写负向Agent 就容易在错误场景硬套。第三“Workflow”用有序列表尽量控制在三到八步每步格式是“动作对象输出物”比如“解析需求-输出需求字段 JSON”。第四“Rules”放硬性约束一条规则一句话不要解释太长避免和流程步骤语义重叠。第五“Examples”至少给两个一个常规输入加标准输出一个边界输入加容错输出。第六“References”列外部文件相对路径并在正文中准确引用。这套骨架不是唯一正确模板但对绝大多数场景够用。拆解得越多你会越认同一个观点Skill 设计本质上是信息架构设计文件长短不重要每一条信息是否放在 Agent 最需要它的位置这才是核心。4.3 坏写法 vs 好写法用对照表快速识别外行 Skill很多 SKILL.md 一眼就能看出是新手写的不是因为语言不够漂亮而是因为话说了等于没说。我整理了一组对照用来教团队里的同事识别低信息量表达场景低质量写法高质量写法触发描述帮助用户创建网站用户给出页面描述且未指定技术栈时生成 Vue3 Vite 项目骨架步骤描述根据需求进行开发先输出页面组件树再按组件树逐个生成文件边界规则注意代码质量禁止使用 any 类型函数必须显式标注返回类型错误处理如果出错请处理当 npm install 失败时检查 registry 并重试一次仍失败则报告具体错误码示例覆盖示例一个按钮页面示例含一种基础场景和一种权限不足场景的响应方式低质量写法的共同点是“让 Agent 自己看着办”高质量写法是“把决策分支写清楚”。技术类 Skill 尤其如此模型不擅长在指令模糊时自己脑补约束。如果你发现自己的 Skill 全文都是“适当”“合理”“必要时”这类词那它的执行效果大概率不稳定。拆解工具输出的风险清单里这类词会被用特殊标记列出来因为你每用一个模糊词就等于把一个决策权交给了模型而模型每次理解都可能不一样。5. 常见问题速查与实操建议5.1 拆解时最常遇到的几个困惑很多人第一次把 SKILL.md 丢进工具拆完之后会问为什么拆出来的东西这么少这通常有两个原因要么是文件本身内容就单薄信息密度低要么是文件里大量使用图片、外链和格式排版把关键指令藏在很难被 Agent 有效读取的地方。这种情况工具会提示“正文有效指令密度低”剩下的需要作者自己去补充。还有人会问拆解输出和原来文件的关系是什么是不是以后写 Skill 得按这个输出格式写不是。拆解输出只是“体检报告”不是“架构标准”。SKILL.md 依然建议用 Markdown 写保持人在 IDE 里好编辑、模型在上下文里好读取的平衡。工具的作用只是帮你发现问题和定位问题。另外我建议不要只拆写得好的 Skill。遇到执行效果差的 Skill也拆一下往往更有教育意义。看一个设计混乱、逻辑残缺的样本比看十个完美作品更能帮你想清楚规则的重要性。坏样本里的“坑”都是活生生的反例。5.2 常见问题速查表从现象到解决办法现象可能原因排查方向解决建议Agent 从不主动调用该 Skilldescription 触发词不匹配或太泛检查 frontmatter看描述是否有明确动词和输入对象改为“当用户提供…时执行…并输出…”句式有时调用、有时不调用description 语义太窄或和正文不一致对比触发描述与实际流程覆盖的范围扩大正向描述补充负向边界调用了但输出不稳定步骤颗粒度过粗看流程步骤之间是否缺少明确输入输出把每个步骤补成“动作对象输出物”输出格式每次都不一样规则和示例不够具体检查是否缺少输出 JSON Schema 或示例增加一个固定输出模板和至少两个示例执行中提示找不到文件引用路径错误或文件缺失用工具做资源依赖检查修正相对路径确保引用文件在目录内全文读起来很通顺但不好用模糊表达占比过高扫描“适当、合理、必要时”等词把模糊词替换成具体判断条件和兜底行为这张表不只服务于工具使用者也适合写 Skill 时自查。写完后快速过一遍表格能拦下大部分低级问题。5.3 几个从实践里沉淀下来的操作建议最后说说我在反复拆解中沉淀出的几个建议都是实操后总结的如果你也打算长期做 Skill 相关的工作大概率用得上。第一对 Skill 做版本管理时记得把 SKILL.md 的改动记录放在注释里。很多开发者不习惯给 Markdown 写 changelog但 Skill 这种文件迭代很频繁没有变更记录两周后你可能完全不记得当时为什么加那条规则。第二尽量保持 SKILL.md 的纯文本可读性避免用大幅表格和大段嵌套引用。Markdown 表格在部分模型上下文里的解析效果不够稳定还是分点列表最稳妥。第三变量占位符统一用一种风格别一会儿{{}}一会儿${}。工具抽取时能识别但模型在生成内容时容易被多套风格搞乱。另外如果你所在团队要同时维护多个 Skill建议给每个 Skill 目录配一个最小示例输入文件这个文件不需要 SKILL.md 那么长只需要让测试者在几分钟内验证 Agent 是否按预期流程执行。有了最小示例拆解工具的流程分析也会更准确因为你很快就能发现“步骤写了不少但没有一个输入能真正走完全程”这类结构性问题。从最开始看到别人盲目翻译 SKILL.md到自己写工具、总结拆解方法再到用这套思路指导新 Skill 的设计我最大的体会是一个 Skill 文件的价值上限早在你写第一行之前就已经被结构决定了。翻译只是把它换个语言外壳拆解才能看见里面的梁柱。下次再有人往群里发一份英文 Skill与其问“能不能翻译”不如先问一句“要不要拆一下”