
1. 先搞清楚 SKILL.md 到底是个什么东西如果你之前用过 Trae IDE 的对话功能大概会有一种感觉每次都要把同一套要求重新说一遍。比如你总是让它「按布鲁姆分类法生成教学目标」每次开新会话都得把分类法的六个层级、动词表、输出格式重新贴一遍。时间一长聊天记录里全是重复的提示词。Skill 就是来解决这个问题的。你可以把它理解成「给 AI 装的一份岗位说明书」写一次之后在 Trae IDE 里随时调用不用重复交代背景。而这份说明书的载体就是一个叫SKILL.md的 Markdown 文件外加一段用 YAML 写的元数据。这一篇是系列的第二部分聚焦一件事从零把 Skill 的骨架搭起来。所谓骨架就是目录结构 SKILL.md的两段式内容YAML 元数据 Markdown 正文。骨架搭对了后面往里填业务逻辑就是水到渠成的事骨架搭错了最常见的后果就是技能加载了但不触发或者干脆 YAML 解析失败。适合谁看刚接触 Trae IDE 技能系统、想自己动手做一个可复用技能的人已经会写提示词、但不知道怎么把它固化成文件的人以及被 YAML 缩进坑过一次、想系统理一遍的人。我试过把一段两百行的提示词直接塞进SKILL.md的正文里结果触发率很低——问题不在正文而在元数据里的description写得太笼统。所以这篇会花不少篇幅讲清楚目录怎么建、YAML 每个字段什么含义、正文怎么写才既完整又不啰嗦最后在 Trae IDE 里走一遍加载和验证的完整流程。核心检索词先摆出来SKILL.md 是什么、YAML 元数据怎么写、Trae IDE 怎么创建 Skill、Markdown 技能文件怎么挂载。这几个问题在下面会逐个拆开。先给一个最小可用的心理预期一个能跑起来的 Skill最少只需要两样东西——一个目录加一个SKILL.md。目录名就是技能名SKILL.md放在目录第一层。其他的scripts/、references/、assets/都是「以后需要再加」的抽屉第一次搭骨架完全可以不建。2. 目录结构与 YAML 字段逐项拆解2.1 目录结构一个目录 一个必需文件先看完整形态长什么样心里有个全景图bloom-objective-generator/ # 技能目录目录名 技能名 ├── SKILL.md # 必需元数据 指令正文 ├── scripts/ # 可选可执行脚本 │ └── validate.py ├── references/ # 可选参考文档 │ └── BLOOM_LEVELS.md └── assets/ # 可选模板与资源 └── objective_template.md这四个位置各管一摊用厨房来类比最直观SKILL.md像厨房门口挂的菜单看一眼就知道这家店做什么菜、大概怎么做。菜单不用写成长篇菜谱说清「是干嘛的」就够。scripts/像提前切配好的半成品料包放冰箱里要用的时候直接下锅。对应到 AI 场景就是不让它从零拼字符串而是直接跑一段现成代码。references/像书柜里的饮食手册不是每天翻但遇到拿不准的问题时拿出来查。适合放那些「偶尔要查详细资料」的长文档。assets/像蛋糕模具和饰菜盘预先备好模板输出时直接套用保证格式统一。一句话SKILL.md是「这道菜怎么做」其余三个目录都是「可能用得上的辅助材料」。第一次搭骨架只建目录和SKILL.md就行。2.2 SKILL.md 的两段式结构打开SKILL.md内容分成上下两段中间用---隔开部分名称作用格式Part AYAML Frontmatter元数据告诉 AI「我是谁、什么时候用我」YAML用---包裹Part BMarkdown Body指令告诉 AI「具体怎么做」MarkdownYAML 说白了就是「用冒号和缩进写的配置」比 JSON 还省事。看个例子name: 张三 age: 28 hobbies: - 打游戏 - 看书 - 听音乐规则就三条冒号左边是名称、右边是内容中间必须有一个空格同一层级的内容缩进空格数必须一致以-开头表示列表项。新手 90% 的 YAML 报错来自这三个坑易错点错误写法正确写法后果冒号后没空格name:张三name: 张三解析失败缩进不一致同级有的 2 空格有的 4 空格同级统一缩进解析失败用了 Tab按 Tab 键缩进用空格缩进解析失败不需要背 YAML 语法本文样例就几行复制一份改名字就能用。2.3 name 字段的命名规则name是技能的唯一标识规则是小写字母 数字 连字符长度 1–64 个字符不能以连字符开头或结尾不能出现连续两个连字符。类型示例是否合法原因正例bloom-objective-generator合法小写 连字符语义清晰正例quiz-maker合法简洁明了反例Bloom Objective不合法含大写和空格反例bloom-objective-不合法以连字符结尾反例bloom--objective不合法连续两个连字符2.4 description 字段决定技能会不会被触发这是整个元数据里最容易被低估的字段。description不是写给人看的简介而是写给 AI 看的「触发条件」。AI 在决定要不要调用某个技能时主要就是拿当前对话内容和description做匹配。写得好的description通常包含三块信息这个技能做什么、在什么场景下用、产出什么形式的结果。description: 根据布鲁姆分类法生成教学目标。当用户需要为课程、教案或培训材料编写可测量的学习目标时使用。输出包含认知层级标注的目标列表。写得差的description长这样description: 测试或者description: 一个很有用的技能这类描述没有提供任何可匹配的语义信息结果就是技能明明加载成功了但对话时永远不触发。排查半天以为是路径问题其实是描述写废了。2.5 一份可直接复制的 SKILL.md 模板把上面几节拼起来就是一份能直接用的骨架。新建文件原样粘贴改掉name和description即可--- name: bloom-objective-generator description: 根据布鲁姆分类法生成教学目标。当用户需要为课程、教案或培训材料编写可测量的学习目标时使用。输出包含认知层级标注的目标列表。 --- # 布鲁姆教学目标生成器 ## 何时使用 当用户提出以下类型需求时启用本技能 - 为某节课、某个单元编写教学目标 - 把笼统的教学意图改写成可测量的目标 - 检查已有目标覆盖了哪些认知层级 ## 执行步骤 1. 确认学科、学段、知识点三个要素缺失时主动追问。 2. 按记忆、理解、应用、分析、评价、创造六个层级各生成至少一条目标。 3. 每条目标使用可观测的行为动词开头避免「了解」「掌握」这类无法测量的词。 4. 在每条目标后用括号标注所属层级。 ## 输出格式 以 Markdown 无序列表输出每条目标一行层级标注放在行尾括号内。 ## 约束 - 不编造教材中不存在的知识点。 - 若用户只给了知识点没给学段默认按高中处理并在开头说明。这份模板里YAML 部分只有name和description两个字段正文部分用四个二级标题把「何时用、怎么做、输出什么、不能做什么」讲清楚。骨架到此就完整了。3. 在 Trae IDE 中把骨架挂载成可调用技能骨架文件写好了接下来要让它被 Trae IDE 认出来。有三种创建方式从简到繁。3.1 方式一对话创建推荐直接在聊天框里描述需求让 AI 帮你生成SKILL.md帮我创建一个 Skill 名称叫 bloom-objective-generator 功能是根据布鲁姆分类法生成教学目标。 保存到项目技能目录。AI 通常会追问细节比如面向哪个学科、哪个学段、有没有示例。逐个回答后它会自动生成文件并放到正确位置。这种方式最不容易出错因为 AI 会主动引导你补全信息你不用一次性构思好所有字段。3.2 方式二设置面板手动创建打开「设置」→「技能与命令」Skills Commands在技能区域点「创建」选择类型全局 / 项目然后填写三项技能名称、描述Description、指令Instructions点确认。项目技能会自动在.trae/skills/技能名/下生成SKILL.md。注意软件界面会随版本更新变化具体按钮位置以官方文档为准。3.3 方式三导入现成文件同样在「设置」→「技能与命令」→「创建」里上传SKILL.md文件或者上传包含SKILL.md的.zip压缩包。Trae 会自动解析并填入名称、描述、指令确认即可。3.4 各平台存放路径对照同一份SKILL.md放进不同平台约定的目录就能用。下表为 2026 年 8 月核实版本平台用户级路径全局项目级路径仅当前项目Trae国际版~/.trae/skills/.trae/skills/Trae国内版~/.trae-cn/skills/.trae/skills/Claude Code~/.claude/skills/.claude/skills/Codex CLI~/.agents/skills/.agents/skills/Gemini CLI~/.gemini/skills/.gemini/skills/Cursor~/.cursor/rules/.cursor/rules/Windows 用户注意表中的~表示用户目录即C:\Users\你的用户名\。例如 Trae 全局技能目录就是C:\Users\你的用户名\.trae\skills\。用户级和项目级怎么选想让技能在所有项目里都能用放用户级只想在当前项目用或者希望随项目一起分享给同事放项目级。跨平台复用有个小技巧SKILL.md里只写标准字段namedescription 正文兼容性最好平台特有字段会被其他平台忽略不会导致报错。3.5 手动放置的完整命令如果你习惯用命令行操作在项目根目录执行mkdir -p .trae/skills/bloom-objective-generator然后把写好的SKILL.md放进这个目录# 假设 SKILL.md 已经在当前目录 mv SKILL.md .trae/skills/bloom-objective-generator/SKILL.md确认结构正确find .trae/skills -type f预期输出.trae/skills/bloom-objective-generator/SKILL.md到这里骨架已经挂载完成。接下来是验证它是否真的生效。4. 验证技能生效从加载到触发4.1 确认加载状态回到 Trae IDE打开「设置」→「技能与命令」在技能列表里应该能看到bloom-objective-generator。如果列表里没有先检查两件事SKILL.md是否放在skills目录的第一层以及目录名是否和name字段完全一致。4.2 触发测试新建一个对话输入一段能匹配description的请求帮我为高中生物「细胞呼吸」这一节写教学目标。如果技能生效AI 的输出应该呈现这些特征目标按六个认知层级分布、每条以行为动词开头、行尾带层级标注。如果输出是普通的泛泛而谈说明技能没被触发回到description检查语义匹配度。4.3 用一段更明确的请求做二次验证有时候第一次不触发是因为请求太短语义不够明确。换一段更贴近description的表述再试我需要为培训材料编写可测量的学习目标请按布鲁姆分类法生成。这段请求里出现了「可测量的学习目标」「布鲁姆分类法」两个关键词和description高度重合触发概率会明显提高。4.4 验证输出格式是否符合正文约束技能触发只是第一步还要确认正文里的约束有没有被执行。比如模板里写了「每条目标用括号标注所属层级」那就检查输出里有没有这个括号。如果格式没跟上说明正文的指令不够明确需要把「输出格式」那一节写得更具体比如给出一个示例输出。4.5 一个可复现的验证清单把上面的动作整理成清单每次新建技能后照着走一遍检查项预期结果不通过时看哪里技能出现在设置列表能看到技能名目录位置、目录名与 name 是否一致首次触发输出带层级标注description 语义匹配度二次触发稳定触发同上可补充同义关键词输出格式符合正文约束正文「输出格式」一节边界行为缺信息时主动追问正文「执行步骤」一节5. 骨架搭建阶段的常见报错与排查这一节按真实报错现象来组织每条给出原因和动作。5.1 技能不触发现象设置里能看到技能但对话时 AI 完全不理它。原因通常是两个SKILL.md没放在skills目录根或者目录名和name不一致。Trae 是按「目录名 技能名」来索引的目录叫bloom-skill而name写bloom-objective-generator就会对不上。动作确认路径是.trae/skills/bloom-objective-generator/SKILL.md且name字段的值和最后一级目录名完全相同。5.2 YAML 解析失败现象技能加载时报错或者干脆不显示。原因集中在 2.2 节列的三个坑冒号后没空格、缩进不一致、用了 Tab。动作把SKILL.md开头到第二个---之间的内容单独复制出来逐行检查。冒号后面必须有一个空格同级字段的缩进空格数必须一样全文不要出现 Tab 字符。可以用编辑器打开「显示空白字符」功能Tab 会显示成箭头。5.3 中文乱码现象技能名或描述显示成乱码。原因文件保存成了 GBK 编码。动作用编辑器另存为 UTF-8 编码。VS Code 里点右下角的编码标识选「通过编码保存」→「UTF-8」。5.4 技能加载但没生效现象技能在列表里触发也触发了但输出和没装技能时差不多。原因description写成了「测试」「一个有用的技能」这类无意义词AI 匹配不到。动作按 2.4 节的三段式重写description——做什么、什么场景用、产出什么。写完再跑一次 4.2 的触发测试。5.5 报错对照速查报错 / 现象大概率原因处理动作技能不触发路径不对或目录名与 name 不一致核对.trae/skills/技能名/SKILL.mdYAML 解析失败冒号后缺空格 / 缩进不一致 / 用了 Tab按 2.2 三条规则逐行检查中文乱码文件编码为 GBK另存为 UTF-8加载但没生效description 无意义按三段式重写 description输出格式不符正文约束太笼统在「输出格式」一节补示例5.6 关于 OAuth 与本地代理类报错的说明如果你在配置过程中遇到401、local proxy failed、reading choices这类报错通常和技能骨架本身无关而是模型接入层的配置问题。这类问题需要回到接入配置去核对 Base URL、Key、Model ID 三件套是否齐全且一致。技能文件只负责「告诉 AI 怎么做」不负责「AI 怎么连上」两者要分开排查别混在一起找原因。6. 把骨架跑通之后下一步做什么骨架搭完、验证通过你手上就有了一个可复用的技能。接下来可以做的事有几件第一件把description当成产品文案来打磨。技能用久了你会发现触发率高低几乎全看这一行。可以准备三到五个不同表述的测试请求反复调整描述里的关键词直到稳定触发。第二件按需往目录里加抽屉。需要跑校验逻辑就建scripts/需要查长文档就建references/需要统一输出模板就建assets/。不要一开始就全建上用不到的空目录只会增加维护负担。第三件把技能文件纳入版本管理。.trae/skills/目录可以直接提交到 Git团队里其他人拉下来就能用。这也是项目级技能比用户级技能更适合协作场景的原因。如果你在接入模型时需要一个稳定的 API 入口来配合技能调试可以看下 TaoToken 的接入文档里面把 Base URL、Key、Model ID 的配置方式讲得比较清楚https://taotoken.net/api 。需要生成和验证 Key 的话控制台在 https://taotoken.net/console API Keys 管理页在 https://taotoken.net/api-keys 。想先直观感受一下模型对话效果可以直接用 https://taotoken.net/chat 。如果打算长期跑编码类或 Agent 类任务Coding Plan 的入口在 https://taotoken.net/coding-plan 按用量规划会更省心。骨架这一步的价值在于它把「每次重新交代背景」变成了「写一次、到处调用」。目录结构、YAML 字段、正文指令这三块理顺了后面 Part 3 开始迭代内容质量时你改的只是正文里的几句话而不是推倒重来。