一、技能核心概念

在 OpenClaw 中,技能(Skill) 并非传统二进制插件 / 代码模块,本质是带规则说明的目录 + SKILL.md 文档。智能体会读取文档内的指令、流程、权限规则,自动完成对应业务逻辑。

最简技能结构仅两层:

plaintext

my-skill/
└── SKILL.md

二、技能目录结构

根据功能复杂度,分为最小结构完整结构

1. 最小结构(简单功能推荐)

仅必备配置文件,适合单一场景、轻量化技能:

plaintext

my-skill/
└── SKILL.md  # 技能核心规则文件(必选)

2. 完整结构(复杂功能推荐)

支持脚本、模板、独立配置文件,适合多流程、带依赖的技能:

plaintext

my-complex-skill/
├── SKILL.md          # 技能元数据+使用规则(核心必选)
├── install.sh        # 自定义安装脚本(可选)
├── templates/        # 文本/文档模板目录(可选)
│   └── report.md
└── config/           # 技能独立配置(可选)
    └── defaults.json

三、SKILL.md 标准格式

SKILL.md 分为两大块:YAML 头部元数据(Frontmatter) + Markdown 正文规则,头部和正文之间用空行分隔。

3.1 基础必填元数据

所有技能必须配置 namedescription,放在文件最顶部:

yaml

---
name: my-weather-skill
description: 查询多城市天气预报,支持温度、风力、天气预警查询
---

表格

字段类型说明
name字符串技能唯一标识,统一使用小写字母 + 连字符,全局不可重复
description字符串一句话简介,展示在技能列表中

3.2 常用可选元数据

拓展技能属性、主页、调用权限等:

yaml

---
name: my-weather-skill
description: 查询多城市天气预报,支持温度、风力、天气预警查询
homepage: https://github.com/xxx/xxx
user-invocable: true
disable-model-invocation: false
command-dispatch: false
version: 1.0.0
---

表格

字段类型默认值说明
homepage字符串技能项目地址、文档地址
user-invocable布尔true是否允许用户手动调用
disable-model-invocation布尔false是否禁止模型自动调用
command-dispatch布尔false是否开启命令分发模式
version字符串技能版本号,用于版本管理

3.3 调用权限组合说明

通过两个布尔字段控制调用主体,适配不同使用场景:

表格

配置组合用户可调用模型自动调用适用场景
默认(不配置)通用日常技能
user-invocable: false内部辅助技能,仅模型后台调用
disable-model-invocation: true敏感操作,仅允许用户手动触发
两者均设为 false技能禁用,无实际用途

3.4 运行前置门控(Requires)

用于声明技能运行依赖,不满足条件则技能不会加载,避免报错。

1)依赖命令行工具 requires.bins

检测系统是否存在指定命令,常用于运维、容器类技能:

yaml

---
name: docker-manager
description: 容器启停、状态查询管理
requires:
  bins:
    - docker
    - docker-compose
---

2)依赖环境变量 requires.env

检测系统环境变量,多用于各类 API 密钥类技能:

yaml

---
name: openai-helper
description: OpenAI 模型辅助调用
requires:
  env:
    - OPENAI_API_KEY
---

3)依赖网关配置项 requires.config

检测 openclaw.json 中的指定配置:

yaml

---
name: github-review
description: GitHub PR 自动审查
requires:
  config:
    - github.token
---

4)快捷单变量 primaryEnv

仅依赖单个环境变量时,可简化写法:

yaml

---
name: weather-api
description: 第三方天气接口查询
primaryEnv: WEATHER_API_KEY
---

5)操作系统过滤 os

限定技能仅在指定系统加载,可选值:darwin(macOS)、linuxwin32(Windows)

yaml

---
name: macos-auto-tool
description: macOS 桌面自动化工具
os:
  - darwin
---

3.5 自动安装依赖(installers)

声明技能所需外部包 / 二进制,安装技能时自动拉取依赖,支持多种安装器。

基础语法示例

yaml

---
name: data-processor
description: 批量数据解析处理
installers:
  - type: node
    package: csv-parser
  - type: brew
    package: jq
---

安装器类型对照表

表格

类型适用场景示例
brewmacOS / Linux Homebrew 工具brew: jq
nodenpm 全局包node: typescript
goGo 语言工具go: github.com/xxx/tool@latest
uvPython 包管理uv: requests
download下载独立二进制文件配置 URL、权限、存放路径

download 二进制下载示例

yaml

---
name: special-bin-tool
description: 第三方二进制工具调用
installers:
  - type: download
    url: https://xxx/releases/tool-linux-amd64
    target: tool
    chmod: true
---
  • target:保存后的文件名
  • chmod: true:自动添加可执行权限

四、Markdown 正文编写规范(核心规则)

正文是给智能体执行的操作手册,遵循 5 大编写原则,保证执行准确率。

原则 1:逻辑清晰,步骤化描述

直接写明触发条件 + 执行步骤,拒绝冗余文案:

markdown

## 使用方法
当用户询问天气时,按以下流程执行:
1. 使用 `web_search` 工具搜索「{城市} 今日天气预报」
2. 提取温度、风力、天气状况、湿度数据
3. 整理信息并简洁回复用户

原则 2:明确安全规则,划定禁区

强制约束高危操作,规避数据、权限风险:

markdown

## 安全规则
- 禁止执行文件删除、系统配置修改操作
- 禁止输出用户密钥、密码等敏感信息
- 涉及高危操作,必须先向用户二次确认
- 禁止执行未知外部脚本

原则 3:使用 {baseDir} 引用技能路径

技能包含模板、配置等附属文件时,用 {baseDir} 占位符(运行时自动替换为技能真实目录):

markdown

## 模板使用
读取 `{baseDir}/templates/report.md` 作为报告模板,替换占位内容后生成文档。

原则 4:补充交互示例

提供对话样例,让智能体理解交互格式与输出风格:

markdown

## 交互示例
用户:帮我查上海明天天气
助手:上海明日天气预报
🌡 气温:18℃ ~ 26℃
💨 风力:东南风 2~3级
☁ 天气:多云,局部有小雨
温馨提示:出门建议携带雨具。

原则 5:声明依赖工具

明确技能需要调用的内置工具,避免智能体调用出错:

markdown

## 依赖工具
本技能需调用以下内置工具:
- web_search:网络信息检索
- read:读取本地模板文件
- write:生成并保存文档

五、技能存放路径 & 加载优先级

OpenClaw 按优先级从高到低依次加载技能,同名技能会被高优先级版本覆盖,开发测试建议使用最高优先级目录。

表格

优先级目录路径说明
1(最高)~/.openclaw/workspace/skills/工作区技能,开发测试首选
2当前项目 skills/项目局部技能
3~/.openclaw/skills/个人全局技能
4ClawHub 托管目录clawhub install 在线安装的技能
5系统内置技能OpenClaw 原生自带技能
6(最低)extraDirs配置文件额外指定目录

开发目录创建命令

bash

运行

# 在最高优先级目录创建自定义技能文件夹
mkdir -p ~/.openclaw/workspace/skills/my-new-skill

# 编辑核心文件
nano ~/.openclaw/workspace/skills/my-new-skill/SKILL.md

六、本地测试与调试

技能编写完成后,分步骤测试加载、调用、异常场景。

1. 基础快速测试

直接传参调用会话,验证功能是否正常:

bash

运行

openclaw agent --message "帮我查询北京天气"

2. 交互式深度测试

进入交互终端,测试多轮对话、边界场景、异常输入:

bash

运行

openclaw

3. 排错调试命令

bash

运行

# 查看全部已加载技能,确认自定义技能是否存在
clawhub list

# 全局环境诊断,检测技能门控、语法、路径问题
openclaw doctor

# 过滤日志,查看技能加载详情
openclaw gateway logs | grep skill

常见加载失败原因

  1. SKILL.md 头部 YAML 语法错误(冒号、缩进、符号问题);
  2. 门控条件不满足(缺失命令、环境变量、系统不匹配);
  3. 目录放置错误,不在技能检索路径内;
  4. 高优先级目录存在同名技能,被覆盖。

七、技能发布到 ClawHub

本地测试无误后,可发布至官方技能中心,供全网用户使用。

1. 发布前置准备

  1. 检查 SKILL.md 元数据完整,无语法错误;
  2. 清理目录临时文件、日志、缓存;
  3. 提前注册 ClawHub 账号。

2. 账号登录

bash

运行

clawhub login

按照终端提示完成账号认证。

3. 发布技能

bash

运行

# 发布当前目录下所有技能
clawhub sync --all

# 指定单个技能目录发布
clawhub sync ./my-new-skill
  • 未手动指定 version 时,系统自动递增版本号;
  • 如需固定版本,在 SKILL.md 头部添加 version 字段。

4. 发布后验证

bash

运行

# 终端搜索已发布技能
clawhub search my-new-skill

# 另一台设备测试安装
clawhub install my-new-skill

八、完整实战示例:代码审查技能

1. 完整 SKILL.md

yaml

---
name: code-review-helper
description: 代码审查助手,检查规范、漏洞、性能问题并给出优化建议
homepage: https://github.com/xxx/code-review-helper
version: 1.0.0
requires:
  bins:
    - git
  env:
    - GITHUB_TOKEN
user-invocable: true
disable-model-invocation: false
---

## 功能说明
针对代码片段、GitHub PR 进行代码审查,输出标准化评审意见。

## 使用流程
### 场景1:审查代码片段
1. 读取用户粘贴的代码内容
2. 依次检查:命名规范、异常处理、性能、安全漏洞、可读性
3. 按等级分类输出评审结果

### 场景2:审查 GitHub PR
1. 使用 `exec` 执行 `git diff` 获取代码变更
2. 逐文件分析变更内容
3. 汇总全部问题与优化建议

## 审查维度
1. 命名规范:变量、函数、文件命名是否统一
2. 异常处理:是否存在未捕获异常
3. 性能问题:循环嵌套、重复查询、无效逻辑
4. 安全风险:明文密钥、注入漏洞、权限问题
5. 代码可读性:注释、逻辑分层

## 输出格式
🔴 **严重问题(必须修复)**
- 问题描述 + 修复方案

🟡 **优化建议(可选改进)**
- 优化点 + 参考代码

🟢 **亮点**
- 优秀设计与写法

## 安全规则
1. 仅输出评审建议,**禁止修改/删除任何代码文件**
2. 发现密钥、账号等敏感信息,仅做提醒,不展示完整内容
3. 禁止执行代码片段中的命令、脚本

## 依赖工具
- exec:执行 git 命令
- read:读取代码文件

九、总结

  1. 自定义技能核心 = 目录 + SKILL.md,本质是给智能体的操作手册;
  2. 头部 YAML 配置元数据、调用权限、依赖门控、自动安装器;
  3. 正文分步骤写清流程、规则、示例、工具依赖,越严谨执行越稳定;
  4. 开发测试优先使用工作区技能目录(最高优先级);
  5. 本地通过 clawhub listopenclaw doctor 排错,测试完成后通过 clawhub sync 发布。