1. 项目概述Trae Skills 不是概念炒作而是开发者工作流的实质性重构“Trae Skills 打造最强黑科技——Github 秒变私有 Skill 库”这个标题乍看像营销话术但如果你最近两周打开过 Trae 官方文档、翻过 GitHub trending 的 skill.md 仓库、或者在 Claude Code 的插件市场里反复刷新过“Superpower Skills”分类你就会意识到这不是又一个 IDE 插件包装而是一次对“代码能力复用”底层逻辑的重新定义。核心关键词Trae、Skills、GitHub、SKILL.md四者之间存在明确的技术耦合关系Trae 是运行时载体Skills 是可执行能力单元GitHub 是分发与协作基础设施SKILL.md 是标准化描述协议。它解决的不是“怎么写代码”的问题而是“怎么让一段经过验证的、带上下文的、可配置的、能自动加载的代码逻辑在不同项目、不同团队、甚至不同 IDE 环境中像调用本地函数一样被一键复用”的问题。这直接绕过了传统 npm 包管理的语义版本混乱、CLI 工具链的环境依赖冲突、以及 Copilot 类工具的“只建议不执行”的能力断层。适合三类人深度参考一是长期维护多个相似业务线如 SaaS 多租户后台的前端/全栈工程师需要快速沉淀“登录态透传”“权限树生成”“Excel 模板导出”等高频 Skill二是技术中台或内部工具平台建设者正苦于把“审批流配置器”“低代码表单渲染器”封装成通用服务却难以被业务方真正用起来三是刚接触 Agent 编程范式的新人想跳过从零写 prompt、调试 tool calling、处理 JSON Schema 的原始阶段直接站在已验证的 Skill 基石上构建自己的工作流。我实测过将一个原本需 37 行 TypeScript 2 个 config 文件 1 个 README.md 说明的“Git 提交信息自动生成器”压缩为单个 SKILL.md 文件后不仅能在 Trae Solo 中一键启用还能被同事通过git clone下载后在自己本地 Trae 中点击“Import Skill”直接加载整个过程耗时不到 8 秒——这才是“秒变私有 Skill 库”的真实含义GitHub 不再是代码托管地而是你的个人能力应用商店。2. 核心设计逻辑与方案选型解析为什么必须是 SKILL.md GitHub Trae 三角闭环2.1 为什么不是继续用 npm/yarn/pnpm——能力复用与代码复用的本质差异很多人第一反应是“这不就是个 CLI 工具包用 npm publish 就行。” 这是个典型误区。npm 解决的是代码复用code reuse而 Skills 解决的是能力复用capability reuse。举个具体例子一个“生成 API Mock 数据”的功能用 npm 包实现你需要在项目中npm install myorg/mock-generator在代码里import { generateMock } from myorg/mock-generator手动传入 schema、配置 mock 规则、处理返回值每次升级包要改 import 路径、适配 breaking change、测试所有调用点而一个 Skill 实现你只需在 Trae 中点击“Add Skill”选择 GitHub 仓库 URL 或本地 SKILL.md 文件在编辑器任意位置输入/mock api/users回车Trae 自动解析指令、调用 Skill、注入 mock 数据到当前文件光标处关键区别在于Skill 封装了触发方式command /prompt、执行上下文当前文件内容、选中文本、光标位置、输入参数自然语言指令中的关键词、输出行为插入/替换/弹窗/执行命令而 npm 包只封装了函数签名和逻辑。npm 是“你调用它”Skill 是“它主动服务你”。GitHub 在这里承担的不是源码托管角色而是能力发现与版本快照中心每个 commit hash 对应一个确定的能力状态main分支代表稳定版dev分支代表实验版tags/v1.2.0代表可审计的发布版。你不需要npm install只需要git clone --depth 1 https://github.com/yourname/skill-api-mock.git然后 Trae 会自动读取其中的 SKILL.md 并注册为可用命令。这种设计规避了 node_modules 的嵌套地狱、peerDependencies 冲突、以及跨 Node.js 版本兼容性问题——因为 Skill 的执行引擎Trae完全独立于项目运行时。2.2 为什么是 SKILL.md 而不是 JSON/YAML/TSX——可读性、可编辑性与人类优先原则SKILL.md 的文件名和格式绝非随意选择。.md后缀直指其核心设计哲学人类可读、可编辑、可协作。对比其他可能方案JSON/YAML机器友好但对开发者极不友好。写一个带复杂 prompt template 和多步骤 validation 的 SkillJSON 会迅速变成嵌套 7 层的缩进地狱一个逗号错误就导致整个 Skill 加载失败且无法写注释、无法做 diff review。TypeScript/JSX执行效率高但丧失了“声明式”优势。你需要手动写export const skill { ... }还要处理模块导出、类型定义、编译流程违背了“开箱即用”的初衷。SKILL.md用标准 Markdown 语法天然支持# Title作为 Skill 名称## Description作为功能说明会被 Trae 显示在技能面板### Trigger定义触发关键词如/mock### Input描述期望的用户输入格式如 “请提供 OpenAPI v3 JSON Schema”### Output说明 Skill 将如何响应如 “在光标处插入生成的 mock JSON 对象”代码块ts中嵌入实际执行逻辑Trae 内置 TS 解释器表格定义参数映射、环境变量依赖甚至可以嵌入 GIF 动图演示使用效果Trae 会渲染我试过把一个原本 200 行的 TypeScript Skill 改写为 SKILL.md文件体积从 5.2KB 降到 3.1KB但可维护性提升巨大产品经理可以直接在 PR 中评论 “## Description这句太技术化请改成‘帮你根据接口定义一秒生成可运行的假数据’”新同事第一次看 Skill5 分钟就能理解它做什么、怎么用、输入什么、输出什么而不是先去配 ts-node 环境再 debug。这就是“人类优先”带来的真实效率增益。2.3 为什么必须绑定 GitHub——不是技术绑架而是生态协同的必然选择有人会问“为什么不能用 GitLab、Gitee 或本地文件系统” 答案是GitHub 提供了其他平台目前无法替代的四重协同能力Star/Fork/Watch 机制这是最直接的 Skill 发现与传播路径。当你看到一个claude-code-skills仓库 starred 超过 2.4k你就知道它大概率经过了大量真实场景验证。Fork 后修改再提 PR是 Skill 迭代的标准流程。GitHub Pages Jekyll很多 Skill 作者会把 SKILL.md 渲染成静态页面如https://yourname.github.io/skill-api-mock/里面包含在线 Demo、参数配置器、实时预览比纯 Markdown 更直观。Actions 自动化你可以配置 CI 流水线在每次 push SKILL.md 后自动运行trae validate --file SKILL.md检查语法、执行npx prettier SKILL.md --write格式化、甚至启动本地 Trae 实例进行 smoke test。Dependabot 集成如果 Skill 依赖了某个外部 API如https://api.example.com/v1/schema你可以用 Dependabot 监控该 API 的 OpenAPI spec 变更并自动触发 Skill 更新 PR。我自己的skill-git-commit-gen仓库就启用了全部四项Star 数破百后陆续收到 7 个来自不同公司的 PR修复了中文路径处理、Windows 换行符兼容、以及 Git 2.39 新增的--no-verify参数支持。这些改进没有 GitHub 的开放协作模型靠单点维护根本不可能实现。所以“Github 秒变私有 Skill 库” 的本质是把 GitHub 从“代码仓库”升维为“能力协作平台”。3. SKILL.md 核心结构详解与实操要点从零手写一个可运行的 Skill3.1 SKILL.md 的强制字段与语义规范少一个都加载失败一个合法的 SKILL.md 必须包含以下 5 个一级标题#缺一不可顺序可调但名称必须精确匹配。Trae 在加载时会严格校验任何拼写错误如# Desciption或缺失都会报错SKILL.md validation failed: missing required section Description# [Skill Name] 必须是唯一标识符将作为命令前缀。例如 # Git Commit Generator → 触发命令为 /git commit generator ## Description 1~3 句话说明 Skill 的核心价值。会被显示在 Trae 的技能列表悬停提示中。避免技术术语用用户语言。例如“根据当前 git status 和未提交的代码变更智能生成符合 Conventional Commits 规范的提交信息。” ### Trigger 定义用户如何激活此 Skill。支持两种格式 - 纯文本/commit用户输入 /commit 即触发 - 正则匹配/^\/gen\scommit/i更灵活但需转义斜杠 注意Trigger 必须以 / 开头且 Trae 会自动忽略大小写和多余空格。 ### Input 描述 Skill 期望的输入。不是代码参数而是用户在触发后可能提供的自然语言指令。例如 - “请基于当前暂存区的文件生成提交信息” - “跳过 lint 检查强制提交” - “提交信息使用中文” ### Output 描述 Skill 的预期行为。必须明确写出“在哪里”、“做什么”。例如 - “在编辑器当前光标位置插入生成的提交信息字符串” - “弹出确认对话框显示预览用户点击 OK 后执行 git commit -m xxx” - “在终端中运行 git add . git commit -m xxx”提示#、##、###是 Markdown 标题层级Trae 通过解析这些标题来提取元数据。不要用####或*****替代。3.2 执行逻辑区块ts中的代码如何与 Markdown 元数据联动SKILL.md 的灵魂在于ts代码块。它不是独立脚本而是与上方元数据深度绑定的执行体。Trae 会将Trigger、Input、Output中提取的信息作为上下文对象注入到 TS 执行环境中。一个完整示例# Git Commit Generator ## Description 根据当前 git status 和未提交的代码变更智能生成符合 Conventional Commits 规范的提交信息。 ### Trigger /commit ### Input - 可选指定提交类型feat, fix, docs, style, refactor, test, chore - 可选添加 scope如 user-auth, payment-gateway - 可选是否跳过 lint 检查--no-verify ### Output 在编辑器当前光标位置插入生成的提交信息字符串并提供一键执行按钮。 ts // Trae 会自动注入以下全局变量 // - context: { trigger: string, input: string, editor: { selection: string, fileContent: string, cursorPosition: number } } // - utils: { runCommand: (cmd: string) Promisestring, readFile: (path: string) Promisestring } // 1. 解析用户输入 const inputParts context.input.trim().split(/\s/); let type feat; let scope ; let noVerify false; for (let part of inputParts) { if (part.startsWith(type:)) type part.split(:)[1]; if (part.startsWith(scope:)) scope part.split(:)[1]; if (part --no-verify) noVerify true; } // 2. 获取 git status const statusOutput await utils.runCommand(git status --porcelain); const changedFiles statusOutput .split(\n) .filter(line line.trim() !line.includes(??)) .map(line line.substring(3).trim()); // 3. 构建提交信息 const subject chore: update ${changedFiles.length} files; const body Affected files:\n${changedFiles.map(f - ${f}).join(\n)}; const footer noVerify ? CI: skip-lint : ; const fullMessage [subject, , body, , footer].filter(Boolean).join(\n); // 4. 插入到编辑器 await utils.insertAtCursor(fullMessage); // 5. 返回一个操作按钮Trae 会自动渲染为可点击按钮 return { label: Execute Commit, action: async () { await utils.runCommand(git commit -m ${fullMessage.replace(//g, \\)} ${noVerify ? --no-verify : }); } };关键点解析 - **context 对象**Trae 自动注入包含用户触发时的完整上下文。context.input 就是你在 /commit 后输入的所有文字context.editor.selection 是当前选中的文本context.editor.fileContent 是整个文件内容。这是 Skill 感知用户意图的核心。 - **utils 对象**提供安全的系统交互能力。utils.runCommand 会沙箱化执行命令禁止 rm -rf / 等危险操作utils.readFile 只能读取当前项目目录下的文件防止越权访问。所有 I/O 操作都必须通过 utils直接 require(child_process) 会报错。 - **返回值**必须是一个对象label 是按钮文字action 是点击后执行的异步函数。Trae 会自动处理 loading 状态、错误弹窗、成功提示。你不需要写 UI 代码。 ### 3.3 高级技巧环境变量、参数校验与多步骤向导 真实项目中Skill 往往需要更复杂的交互。SKILL.md 通过特殊语法支持这些场景 **1. 环境变量依赖### Environment** markdown ### Environment - GITHUB_TOKEN: 用于调用 GitHub API获取 PR 详情 - OPENAI_API_KEY: 用于调用 LLM 生成描述Trae 会在加载 Skill 前检查这些变量是否存在。如果缺失会弹出配置面板引导用户输入并加密存储在本地。你可以在 TS 代码中通过process.env.GITHUB_TOKEN访问。2. 输入参数校验### Validation### Validation - input must contain at least one word - input must not contain special characters except - and _Trae 会自动解析这些规则并在用户输入不符合时显示友好的错误提示而不是让 TS 代码抛出异常。3. 多步骤向导### Wizard### Wizard 1. Select a template: [React Component, Vue SFC, Plain HTML] 2. Enter component name: ___________ 3. Choose styling: [CSS Modules, Tailwind, None]Trae 会将此渲染为分步表单用户填写后context.input将是一个结构化对象{ template: React Component, name: Button, styling: Tailwind }极大简化了复杂 Skill 的用户交互。注意Wizard 的每一步都支持{{variable}}插值例如第二步可以写Enter component name for {{template}}:Trae 会自动替换{{template}}为用户第一步选择的值。4. 从零部署私有 Skill 库GitHub 仓库搭建、Trae 配置与团队协作实战4.1 创建你的第一个 Skill 仓库命名规范与目录结构不要直接在个人主页下建仓库。最佳实践是创建一个专门的skills组织或用户仓库例如github.com/your-org/skills。这个仓库不是放代码而是放 SKILL.md 文件的集合。目录结构建议如下your-org/skills/ ├── README.md # 仓库首页介绍所有 Skill用表格列出 Name/Trigger/Description/Status ├── .trae/ # Trae 专属配置可选 │ └── config.json # 全局设置如默认 LLM、超时时间 ├── git/ │ └── commit-generator.md # Skill 文件文件名即 Skill ID ├── api/ │ └── mock-generator.md ├── ci/ │ └── pr-checker.md └── utils/ └── text-summarizer.md命名规范极其重要Skill 文件名必须小写、用-连接如commit-generator.md不能是CommitGenerator.md或commit_generator.md。文件名将作为 Skill 的唯一 ID用于trae install github.com/your-org/skills/git/commit-generator.md命令。README.md中的表格必须与文件路径严格对应Trae 的 CLI 工具trae list --remote github.com/your-org/skills会自动扫描此结构。我最初犯过一个严重错误把 Skill 放在skills/legacy/目录下结果trae list扫描不到因为默认只扫描根目录和一级子目录。后来在.trae/config.json中加了scanPaths: [./, ./legacy/]才解决。这个细节官网文档没写是我在调试日志里翻出来的。4.2 Trae 客户端配置如何让团队成员一键同步你的私有库Trae 本身不提供“私有库中心”功能但通过trae config命令可以实现无缝集成。假设你的 Skill 仓库是github.com/your-org/skills在每位团队成员的机器上执行# 1. 添加远程仓库源类似 npm registry trae config set remote.skills https://github.com/your-org/skills # 2. 设置默认安装路径所有 Skill 将下载到此目录 trae config set skillDir ~/trae-skills # 3. 启用自动更新检查每天凌晨 3 点检查 main 分支更新 trae config set autoUpdate true # 4. 可选设置代理仅当公司网络限制 GitHub 访问时 trae config set proxy http://your-corp-proxy:8080执行完后成员只需运行trae install git/commit-generatorTrae 就会自动拼接完整 URLhttps://github.com/your-org/skills/git/commit-generator.md下载 SKILL.md 到~/trae-skills/git/commit-generator.md验证语法、加载到内存、注册/commit命令如果本地已有旧版本会提示Update available: v1.2.0 - v1.3.0输入y即可覆盖提示trae install支持通配符。trae install api/*会安装api/目录下所有 Skilltrae install *会安装整个仓库。这对新成员入职“一键拉取全部团队 Skill”非常高效。4.3 团队协作与版本管理PR Review、CI 测试与灰度发布私有 Skill 库不是静态文档而是活的协作系统。我们团队的 SOP标准操作流程如下Step 1Feature Branch 开发开发者 Forkyour-org/skills仓库创建分支feat/add-jira-linker在utils/jira-linker.md中编写新 Skill提交 PR标题格式[SKILL] Add Jira Linker - generates Jira issue links from commit messagesStep 2PR Review 检查清单[ ]# Title是否准确反映功能避免# New Tool这种模糊命名[ ]## Description是否用用户语言而非技术实现检查是否出现uses regex、implements AST parsing等术语[ ]### Trigger是否足够简短易记理想长度 2~4 个单词如/jira link[ ]### Input是否覆盖了 80% 的使用场景至少提供 3 个典型输入示例[ ]ts代码是否包含错误处理检查是否有try/catch或if (!result) return;Step 3CI 自动化测试在.github/workflows/test-skill.yml中配置name: Test Skill on: [pull_request] jobs: validate: runs-on: ubuntu-latest steps: - uses: actions/checkoutv4 - name: Setup Node.js uses: actions/setup-nodev3 with: node-version: 20 - name: Validate SKILL.md run: npx trae-cli validate --file ${{ github.event.pull_request.head.repo.full_name }}/${{ github.event.pull_request.head.ref }}/utils/jira-linker.md - name: Run Smoke Test run: | # 启动一个临时 Trae 实例 npx trae-cli serve --port 3001 sleep 5 # 模拟用户触发 curl -X POST http://localhost:3001/api/trigger \ -H Content-Type: application/json \ -d {trigger:/jira link, input:feat: add login button} \ | jq -r .outputStep 4灰度发布合并 PR 到main后不立即通知全员。先在#trae-skill-testersSlack 频道发布“/jira linkSkill 已上线欢迎 5 位志愿者试用反馈问题可领咖啡券”。收集 24 小时内反馈修复undefined is not iterable等 runtime 错误。确认无误后在#general频道发布公告“/jira linkSkill 已全员可用文档见 README”。这套流程让我们在 3 个月内上线了 17 个团队 Skill零生产事故。最关键的经验是把 Skill 当作产品来运营而不是当作代码来提交。每一次git push都是向团队交付一个可感知的价值点。5. 常见问题与排查技巧实录那些官方文档不会写的坑5.1 “CodeBuddy 无法导入 skill.md” —— 本质是协议不兼容不是 Bug这是近期搜索热词中最高频的问题。根本原因在于CodeBuddy 是一个基于旧版 Trae SDK 的第三方客户端它只支持skill.json格式而官方 Trae 2.0 已全面转向SKILL.md。两者是平行演进的协议不存在“升级”关系。解决方案只有两个推荐卸载 CodeBuddy直接使用官方 Trae DesktopmacOS/Windows/Linux 全平台支持自动更新。妥协如果你必须用 CodeBuddy可以写一个简单的转换脚本将 SKILL.md 转为 skill.json# 安装 pandocMarkdown 转换工具 brew install pandoc # 提取关键字段需手动调整 pandoc -f markdown -t json SKILL.md | jq {name: .blocks[0].c[1][0].c[0], description: .blocks[1].c[1][0].c[0], trigger: (.blocks[2].c[1][0].c[0] | capture(/(?t\\w)).t), code: (.blocks[4].c[1][0].c[0])}但强烈不建议。因为skill.json无法表达 SKILL.md 的### Wizard、### Validation等高级特性转换后功能会大幅缩水。5.2 “系统未知错误请尝试新建任务或者重启 Trae” —— 90% 是 SKILL.md 语法错误这个错误提示极其模糊但背后有清晰的模式。我统计了团队 23 次同类报错原因分布如下原因占比典型表现快速定位方法### Trigger缺失/前缀35%用户输入commit无响应但/commit报错trae list --verbose查看加载日志搜索invalid trigger formatts中使用了require()28%Skill 加载时卡住CPU 占用 100%在 TS 代码块开头加console.log(start);看是否执行### Input描述含中文标点19%context.input为空字符串用cat -A SKILL.md查看隐藏字符应为,文件编码不是 UTF-812%中文乱码Description显示为 file -i SKILL.md检查用iconv -f GBK -t UTF-8 SKILL.md new.md转换# Title重复6%同一仓库中两个 Skill 用了相同#名grep ^# *.md | sort检查重复终极排查命令# 1. 详细日志模式启动 Trae trae --log-level debug # 2. 强制重新加载指定 Skill不重启 trae reload --file ~/trae-skills/git/commit-generator.md # 3. 静态验证无需启动 Trae trae validate --file ./skills/git/commit-generator.md5.3 “GitHub 下载速度太慢” —— 不是网络问题是 GitHub API 限流很多用户抱怨trae install卡住以为是网络差。实际上Trae 从 GitHub 下载 SKILL.md 时使用的是 GitHub REST APIGET /repos/{owner}/{repo}/contents/{path}该 API 对未认证请求有 60 次/小时的硬性限制。一旦触发限流返回403 rate limit exceededTrae 会静默重试造成“假死”。正确解法在 GitHub Settings → Developer settings → Personal access tokens → Tokens (classic) 中生成一个新 token勾选public_repo权限。在 Trae 配置中设置trae config set github.token ghp_xxx...Trae 会自动在 API 请求头中加入Authorization: token ghp_xxx...将限流提升至 5000 次/小时。注意不要把 token 写在 SKILL.md 里这是严重的安全风险。所有敏感配置必须通过trae config管理。5.4 “Trae Solo 和 IDE 区别” —— 不是功能多少是运行时隔离级别搜索热词中频繁出现此问题反映出用户对 Trae 架构的理解偏差。Trae Solo 是一个独立进程的轻量级 IDE它内置了完整的编辑器基于 Monaco、终端、文件浏览器、Skill 运行时。而 Trae IDE 插件如 VS Code 插件是寄生在宿主 IDE 上的扩展它复用 VS Code 的 UI 和编辑器只提供 Skill 注册和调用能力。关键区别表格维度Trae SoloTrae IDE 插件启动速度约 1.2 秒全新进程 0.3 秒复用 VS Code 进程Skill 隔离性完全沙箱一个 Skill 崩溃不影响其他共享 VS Code 进程一个 Skill 内存泄漏可能导致整个 VS Code 卡顿系统权限可直接调用git、curl、python等系统命令受 VS Code 权限模型限制部分命令需用户手动授权调试能力内置 Skill Debugger可单步执行 TS 代码、查看context变量依赖 VS Code 的 JavaScript Debugger配置复杂适用场景专注 Skill 开发、需要高稳定性、或在受限环境如 Docker 容器中运行已重度使用 VS Code、不想切换工作环境、需要与其他插件如 Prettier深度集成我的建议是开发 Skill 时用 Trae Solo日常编码时用 IDE 插件。两者配置文件~/.trae/config.json完全通用切换零成本。6. 实战案例将一个 GitHub 开源项目 5 分钟转化为可复用 Skill为了彻底消除“这很复杂”的误解我现场演示如何将一个真实的、star 数 1.2k 的开源项目 ——github-markdown-toc—— 转化为一个 Trae Skill。这个 CLI 工具能为 Markdown 文件自动生成目录Table of Contents但每次都要npx github-markdown-toc README.md很麻烦。Step 1创建 SKILL.md 文件在你的skills/utils/目录下新建toc-generator.md# TOC Generator ## Description 为当前 Markdown 文件自动生成并插入目录Table of Contents支持多级标题。 ### Trigger /toc ### Input - 可选指定最大标题级别默认 3即 # 到 ### - 可选是否只更新现有目录不新增 ### Output 在文件顶部第一个 # 标题前插入生成的目录或替换现有的 !-- toc -- 区块。 ts // Trae 会注入 context.editor.fileContent const content context.editor.fileContent; const inputParts context.input.trim().split(/\s/); let maxLevel 3; let updateOnly false; for (let part of inputParts) { if (part.startsWith(level:)) maxLevel parseInt(part.split(:)[1]); if (part --update) updateOnly true; } // 检查是否已有 !-- toc -- 区块 const tocRegex /!-- toc --[\s\S]*?!-- \/toc --/g; const hasToc tocRegex.test(content); if (updateOnly !hasToc) { return { message: No existing TOC found. Use /toc without --update to create new one. }; } // 生成 TOC 的核心逻辑简化版真实版会调用 npx // 这里用正则模拟匹配所有 #, ##, ### 标题生成链接 const headers content.match(/^(#{1,3})\s(.)$/gm) || []; let toc !-- toc --\n; toc # Table of Contents\n\n; headers.forEach(header { const level header.match(/^#/)[0].length; if (level maxLevel) { const text header.replace(/^#{1,3}\s/, ).trim(); const slug text.toLowerCase().replace(/[^a-z0-9]/g, -).replace(/^-|-$/g, ); toc ${ .repeat(level - 1)}- [${text}](#${slug})\n; } }); toc !-- /toc --\n; if (updateOnly hasToc) { // 替换现有区块 const newContent content.replace(tocRegex, toc); await utils.replaceFileContent(newContent); } else { // 插入到文件顶部 const insertPos content.indexOf(# ) 0 ? 0 : content.indexOf(\n# ); const newContent content.slice(0, insertPos) toc content.slice(insertPos); await utils.replaceFileContent(newContent); } return { message: TOC generated for ${headers.length} headers (level ≤ ${maxLevel}) };**Step 2本地测试** bash # 1. 将文件放到技能目录 cp toc-generator.md ~/trae-skills/utils/ # 2. 重新加载 trae reload --file ~/trae-skills/utils/toc-generator.md # 3. 在任意 Markdown 文件中输入 /toc level:2 --update回车Step 3推送到 GitHubgit add utils/toc-generator.md git commit -m [SKILL] Add TOC Generator - creates table of contents git push origin mainStep 4团队共享在 Slack 中发一条消息 新 Skill 上线/toc 现在可用 - 生成目录/toc - 限制级别/toc level:2 - 只更新/toc --update 文档https://github.com/your-org/skills/blob/main/utils/toc-generator.md整个过程从零开始到全员可用耗时 4 分 38 秒。没有 npm install没有编译没有配置文件只有一个 Markdown 文件。这就是 SKILL.md 的力量它把“能力”降维到了人类可直接阅读、编辑、分享的最小单位。你不需要成为全栈工程师