如何自定义skills (agentskills.io 规范)
先理清核心规则:
Skill = 独立文件夹 + SKILL.md,纯声明式配置,不需要写代码;遵循渐进式披露机制。
存放路径:~/.openclaw/skills/[你的skill名称]/SKILL.md
一、目录规范(强制)
注意: 1. 不能多层嵌套;所有skill直接放在skills一级子目录 2. 文件夹名不要空格、中文尽量少用 3. 修改文件后执行
openclaw skills refresh重载
二、SKILL.md 标准结构模板
文件分为两大部分:Frontmatter(顶部---配置区) + 正文SOP
---
# Frontmatter 元数据(机器读取,用于索引匹配、权限控制)
name: mkdocs-builder
description: >
MkDocs文档自动化工具。
用户要求构建站点、启动本地预览、排查mkdocs.yml语法错误时启用;
支持 mkdocs build、mkdocs serve,读取配置定位YAML报错。
allowed-tools: read_file, run_bash
# optional: priority: 5 数字越大优先级越高,避免多个skill同时匹配冲突
---
# 业务SOP(模型命中后,渐进式完整注入上下文)
## 执行步骤
1. 检查当前工作目录是否存在 mkdocs.yml
2. 根据用户指令选择动作:
- 构建静态网站:执行 mkdocs build
- 本地开发预览:执行 mkdocs serve
3. 构建报错时,读取mkdocs.yml,定位行号,给出YAML修复建议
## 约束规则
- 执行bash命令前,向用户告知即将运行的指令
- 禁止自动删除文件、清空目录
- 如果目录不存在mkdocs.yml,立刻停止并询问路径
Frontmatter字段详解
name唯一标识,小写横杠命名,全局不可重名。-
description【渐进式披露核心】 只写触发场景、适用意图,不要堆砌详细步骤。OpenClaw 只会把所有skill的description汇总成简短清单常驻上下文,用来判断要不要加载完整skill。 ❌ 错误:把执行步骤写进description,破坏渐进披露,token暴涨 ✅ 正确:只描述「什么情况下启用这个技能」
-
allowed-tools白名单!限制该技能能调用哪些底层工具,安全边界。 常用内置工具: read_file读取本地文件write_file写入文件run_bash执行终端命令-
web_fetch请求网页不在列表内的工具,Agent无法调用
-
priority(可选) 取值 1~10,默认5。多条skill同时匹配用户问题时,优先加载优先级高的。
三、从零创建自定义Skill实操步骤
1)创建目录
2)编写 SKILL.md
---
name: go-code-review
description: >
Go代码静态审查技能。
用户要求评审go源码、查找潜在bug、检查规范、优化逻辑时启用;
读取go源码,分析语法、并发风险、错误处理规范。
allowed-tools: read_file, run_bash
priority: 6
---
# 代码评审流程
1. 获取用户指定的Go文件路径
2. 读取源码内容
3. 重点检查:
- error 是否妥善处理,不忽略err
- goroutine 并发竞态风险
- 资源是否关闭(io.Close)
- 硬编码、魔术数字问题
4. 分点输出问题 + 修改建议,附带代码示例
# 约束
不允许直接修改文件;仅输出评审意见。
3)重载生效
看到状态✓ ready 代表成功。
4)TUI内测试
四、设计最佳实践(适配渐进式披露)
1. description 撰写公式
【场景】 + 【触发关键词】 + 【能力简述】
示例:
Elasticsearch查询助手。用户需要构造DSL、排查集群日志、索引管理时启用,可以执行curl查询es接口。
2. 正文SOP结构化
固定三段式,模型更容易遵守: 1. 执行步骤 2. 校验清单 3. 硬性禁止约束
3. 权限最小原则
allowed-tools 只放必须用到的工具
例如文档构建skill不需要write_file就不要加上,缩小风险面。
五、常见踩坑清单
- ❌ 文件名叫 skill.md(小写) → ✅ 必须
SKILL.md - ❌ 多层目录嵌套:
skills/project/skill/→ 不支持 - ❌ 修改SKILL.md后不执行 refresh → 加载旧版本
- ❌ description写超长流程 → 破坏渐进披露,上下文膨胀
- ❌ allowed-tools 漏写工具 → Agent想调用但被系统拦截,任务卡住
- ❌ 多个skill description高度相似,同时命中 → 使用 priority 区分优先级
六、进阶玩法
- 技能互相调用 在SOP里引导Agent主动触发其他Skill,实现工作流组合。
- 条件分支控制 在正文写明:满足A条件执行方案1,满足B条件执行方案2,由LLM做分支判断(区别于LangGraph代码硬编码流程图)。
- Human-in-the-loop 在约束中写明:高危操作(删除文件、大批量变更)必须先询问用户确认。
七、对比两条技术路线帮你理清边界
- OpenClaw Skill:自然语言SOP驱动,配置文件,无代码,适合业务自动化、本地运维任务
- LangGraph:Python代码定义状态、节点、路由,强编程模型,适合高度可控、复杂多智能体系统
如果你告诉我一个场景(比如 ES日志排查、mkdocs发布自动化、数据库分析),我可以直接生成一份开箱即用完整的 SKILL.md。