back
loading skill details...
帮我写个 skill。
--- name: meta-skill-writer version: "1.3.0" description: "帮我写个 skill。" --- # Meta Skill Writer — 教你写 Skill 的 Skill 当用户提出「帮我写个 skill」时,按以下方法论创建。 ## 核心原则 ### 1. 渐进式加载优先 - **description**:只放触发条件,不放教程。让 Agent 一眼判断"这个场景该不该用我" - **SKILL.md**:放操作流程和规则。描述工作步骤,不是原理说明 - **references/**:放长文档、API 说明、示例。只在执行中需要时才读 - **scripts/**:放确定性的机械操作。不要用脚本做"AI 文本处理",要用脚本做"格式校验/API调用/文件操作" - 不需要一开始就把所有内容塞进 prompt ### 2. 角色定位清晰 - 一个 skill 只做**一类任务** - 如果发现 SKILL.md 里在写"如果是场景A就…如果是场景B就…",说明该拆成两个 skill 了 ### 3. 可测试 - 每个 skill 都应该能用 `openclaw skills check` 验证依赖 - 关键的脚本路径应该能在命令行独立测试 ## 工作流 ### Step 1:需求分析 和用户确认三个问题: 1. **用户说什么话时应该触发这个 skill?** → 这就是 future description 2. **这个 skill 处理完交付什么?** → 确定输出(文件?消息?数据?) 3. **它的上游输入和下游依赖是什么?** → API?本地工具?用户手动提供? ### Step 2:结构设计 按以下规则决定目录结构: **最小集(大部分场景够用):** ``` skill-name/ ├── SKILL.md # 必需。核心说明书 ├── scripts/ # 可选。确定性脚本 ├── references/ # 可选。长文档/参考 ├── examples/ # 可选。输入输出样例 └── evals/ # 可选。最小评测集 ``` **什么时候加 scripts/:** - 有重复的格式化/校验/转换操作 - 有外部 API 调用 - 操作顺序固定、参数明确、不依赖 AI 判断 **什么时候加 references/:** - API 文档太长,放 SKILL.md 里会冲淡流程 - 有 checklist、示例、模板需要按需读取 - 有业务背景知识但并非每次都需要 **什么时候加 examples/:** - 输出格式复杂,Agent 容易跑偏 - 同一个任务有多种正确结果的风格,需要有参考对照 - 边界情况(如空输入、错误输入)的预期输出不好描述 - 好的做法:放 1-3 个好例子 + 1 个坏例子,标明为什么好/坏 **什么时候加 evals/:** - skill 有核心路径不能倒退(改了某处不能把原本会做的做坏) - 有多个脚本需要联动验证 - 需要定期回归检查的场景 - 最小评测集:5-10 个输入 + 预期输出,每次迭代后跑一遍 **什么时候不该加:** - 不需要把"用 Python 的话要怎么装依赖"写成脚本(模型已经知道) - 不需要把明显的常识性知识塞进 references - examples/ 和 evals/ 不是越大越好——精选 3-5 个高质量样例胜过 20 个凑数的 ### Step 3:写 SKILL.md 使用 `references/skill-template.md` 作为起点,填充以下内容: **frontmatter 必须包含:** ```yaml --- name: skill-name # 简短,kebab-case version: "1.0.0" # 语义化版本 description: "一句话说明" # 关键!Agent 靠这个判断是否触发 --- ``` **description 写作原则:** - **直接用用户会说的话** — 不用加"当用户说…时"这种包装。用户会说"帮我评估一下这个skill",那 description 就写「帮我评估一下这个 skill」,一字不改 - 只写触发条件,不写功能描述 - 不写步骤细节(那些放正文) - 中英文均可,但要一致 **对比案例(multi-agent-skill-evaluator 的真实迭代):** | 版本 | description | 问题 | |------|------------|------| | ❌ v1.2 | Multi-agent独立技能评估。对任意skill,通过3个隔离的子agent分别打分+评语,最后汇总报告 | 描述功能,不是触发条件 | | ❌ v1.3 | 当你想评估某个 skill 能不能胜任它的工作... | 好了点,但还有包装 | | ✅ v1.4 | **帮我评估一下这个 skill** | 用户会说的话,一字不改 | **正文结构:** ``` # Skill 名称 — 一句话用途 (如果超出 2 行,说明 skill 范围太大) ## 首次设置(如果没有就是空) ## 工作流(核心步骤,从触发到交付) ## 输出格式(如果有) ## 注意事项 ``` **正文写作原则:** - 写操作步骤,不是写原理 - 每步说明"做什么"和"为什么",但不写"怎么实现"(模型知道怎么实现) - 边界条件写清楚:"什么情况下停下来问用户"、"什么情况下继续" - 错误处理写清楚:"失败了怎么办"、"预期时长" ### Step 4:创建脚本(如果需要) 脚本的原则: - **可独立测试**:`bash script.sh "input"` 应该能跑通 - **参数化**:不要硬编码路径,用参数或环境变量 - **有错误处理**:检查输入、检查依赖、检查返回值 - **有回退策略**:主方案失败时尝试次方案 ### Step 5:自检清单 完成前逐项自查: - [ ] description 是否直接用用户会说的话? - [ ] SKILL.md 把"怎么做"写清楚了吗?AI 按步骤执行会不会卡住? - [ ] 有没有把常识性知识写进 skill(模型不需要教)? - [ ] 是否有测试过关键脚本路径? - [ ] 输出格式是否明确? - [ ] 失败场景是否说明? - [ ] 依赖是否在 metadata 中声明? - [ ] examples/ 和 evals/ 如果加了,内容是否精选而非凑数? ### Step 6:可选——让 skill-evaluator 评估 创建完成后,可以调用 `multi-agent-skill-evaluator` 对新建的 skill 进行质量评估,获取改进建议。 ## 常见反模式 | 反模式 | 说明 | 正确做法 | |--------|------|---------| | description 写成长文 | 触发条件模糊 | **直接用用户会说的话** | | SKILL.md 里塞 API 文档 | 冲淡操作流程 | 放 references/ | | 一个 skill 做两件事 | 职责不清 | 拆成两个 | | 用脚本做 AI 判断 | 脚本不应该依赖 AI | 脚本只做确定性操作 | | 缺少错误处理 | 失败时用户不知道怎么办 | 写明"如果 X 失败,告诉用户 Y" | | 硬编码路径/凭据 | 不可移植 | 用参数/环境变量 |
don't have the plugin yet? install it then click "run inline in claude" again.