Skip to main content
← All posts
作者:Sagasu

OpenClaw实战教程系列第13篇 - 发布你自己的Skill

把你的自动化方案打包成 Skill,分享给全世界。


什么是 Skill?

Skill = 可复用的自动化能力包

你已经用 OpenClaw 做了很多自动化:

  • 查天气 → 调用 API → 输出结果

  • 读邮件 → 分析内容 → 发送通知

  • 采集数据 → 整理格式 → 保存文件

为什么不把这些打包起来,下次直接用?甚至分享给别人用?

这就是 Skill 的价值。

Skill 的好处:

✅ 一次编写,到处使用 - 不用每次重复配置
✅ 分享给他人 - 帮助社区,也获得反馈
✅ 版本管理 - 像管理代码一样管理自动化
✅ 组合使用 - 多个 Skill 协同工作


Skill 文件结构

一个标准的 Skill 目录:

my-skill/
├── SKILL.md      # ⭐ 核心文件:AI 根据这个学会怎么用
├── scripts/      # 脚本文件(可选)
│   └── main.sh
├── package.json  # 元数据(可选)
└── README.md     # 人类阅读的说明

核心原则:

  1. SKILL.md** 是灵魂** - AI 读这个文件,决定什么时候用、怎么用

  2. 单一职责 - 一个 Skill 只做一件事

  3. 自包含 - 所有依赖在 SKILL.md 里声明


创建 Skill:实战演示

案例:创建一个“天气查询” Skill

功能:查询指定城市的天气,返回温度和天气状况


步骤 1:创建目录

你可以选择两个位置之一创建 Skill:

选项 A:工作区 Skills(推荐,适合项目特定 Skill)

mkdir -p ~/.openclaw/workspace/skills/weather
cd ~/.openclaw/workspace/skills/weather

选项 B:本地 Skills(适合跨项目共享的 Skill)

mkdir -p ~/.openclaw/skills/weather
cd ~/.openclaw/skills/weather

💡 路径说明:

  • ~/.openclaw/workspace/skills/ - 工作区 Skills(最高优先级)

  • ~/.openclaw/skills/ - 本地 Skills(全局共享)

这里使用选项 A(工作区 Skills)作为示例。


步骤 2:编写 SKILL.md

创建 SKILL.md 文件:

---
name: weather
description: 查询指定城市的当前天气,返回温度、天气状况和穿衣建议
version: 1.0.0
---

# Weather Skill

## 用途

当用户询问天气时,使用此 Skill 查询指定城市的实时天气。

## 触发场景

- "今天北京天气怎么样?"
- "查询上海的天气"
- "明天需要带伞吗?"
- "纽约现在多少度?"

## 使用方法

### 1. 获取城市名称

从用户输入中提取城市名(如"北京"、"上海"、"New York")。

### 2. 查询天气

使用 wttr.in API 查询天气:

$$bash
curl -s "wttr.in/{城市名}?format=%C+%t+%p"
$$

### 3. 解析结果

返回格式示例:
- `Sunny +25°C 0.0mm`
- `Rain +18°C 5.2mm`
- `Cloudy +20°C 0.0mm`

### 4. 返回给用户

用自然语言描述天气:
- 温度
- 天气状况
- 是否需要带伞
- 穿衣建议

## 示例对话

**用户**:今天北京天气怎么样?

**AI**:查询中……

🌤️ 北京今天天气:
- 天气:晴朗
- 温度:25°C
- 降水:无
- 建议:适合外出,注意防晒

---

**用户**:上海需要带伞吗?

**AI**:查询中……

☔ 上海现在下雨,记得带伞!
- 温度:18°C
- 降水:5.2mm
- 建议:带伞,穿防水的鞋子


步骤 3:测试 Skill

重启 Gateway 让 Skill 生效:

openclaw gateway restart

对话测试:

你:今天北京天气怎么样?

AI:正在查询北京天气……
(调用 weather skill)

🌤️ 北京今天天气:
- 天气:晴朗
- 温度:25°C
- 建议:适合外出,注意防晒

SKILL.md 编写规范

必须包含的章节

1. Frontmatter(YAML 格式)

---
name: skill-name        # Skill 标识符
description: 一句话描述  # AI 用这个匹配场景
version: 1.0.0          # 版本号
author: your-name       # 作者(可选)
---

2. 核心章节

  • 用途 - 这个 Skill 是做什么的

  • 触发场景 - 什么时候该用这个 Skill(给 AI 的判断依据)

  • 使用方法 - 详细的操作步骤,AI 会按这个执行

  • 示例对话 - 展示完整的使用流程


好的 SKILL.md 示例

GitHub PR Skill

---
name: github-pr
description: 查看 GitHub 仓库的 Pull Request 状态,列出需要 review 的 PR
version: 1.0.0
---

# GitHub PR Skill

## 用途

查询 GitHub 仓库的 PR 状态,帮助用户管理和 review Pull Request。

## 触发场景

- "看看我的 open PR"
- "有哪些 PR 需要 review?"
- "检查 GitHub PR 状态"
- "我的 PR 合并了吗?"

## 使用方法

### 1. 确定仓库

- 如果用户指定了仓库,使用指定仓库
- 如果没有指定,使用 `gh repo view` 获取当前目录的默认仓库

### 2. 列出 PR

$$bash
gh pr list --json number,title,author,state,url
$$

### 3. 分类展示

按状态分类:
- Open:待 review
- Draft:草稿
- Merged:已合并
- Closed:已关闭

### 4. 详细信息(可选)

如果用户问某个具体 PR:

$$bash
gh pr view {number} --json number,title,body,author,reviewers,state
$$

## 示例对话

**用户**:看看我的 PR

**AI**:正在查询当前仓库的 PR……

✓ 找到 3 个 Open PR:
1. #45 - 添加用户认证功能 @alice (需要 review)
2. #46 - 修复登录超时问题 @bob (已批准)
3. #47 - 更新文档 @carol (草稿)

---

**用户**:#45 的详情

**AI**:查询中……

**PR #45 - 添加用户认证功能**
- 作者:@alice
- 状态:等待 review
- 描述:实现了 JWT 认证……
- 文件变更:12 个文件

使用脚本(可选)

如果 Skill 需要复杂逻辑,可以写脚本:

my-skill/
├── SKILL.md
├── scripts/
│   ├── main.sh      # 主脚本
│   └── utils.py     # 辅助脚本
└── package.json

在 SKILL.md 中调用脚本:

## 使用方法

### 执行脚本

$$bash
bash ~/.openclaw/workspace/skills/my-skill/scripts/main.sh {参数}
$$

### 解析输出

脚本返回 JSON 格式:

$$json
{
  "status": "success",
  "data": {...}
}
$$

本地测试

测试清单

1. Skill 被识别

你:列出所有可用的 Skills

AI:当前可用的 Skills:
- weather: 查询天气
- github-pr: 查看 PR
- my-skill: 你的 Skill 描述

2. 触发场景匹配

你:符合触发场景的话

AI:自动调用对应的 Skill

3. 执行结果正确

  • 输出符合预期

  • 错误处理完善


调试技巧

Skill 没被识别?

  • 检查目录位置:~/.openclaw/workspace/skills/ 或 ~/.openclaw/skills/

  • 检查 SKILL.md 语法(YAML frontmatter 是否正确)

  • 重启 Gateway 或说“刷新 skills”

执行报错?

  • 检查脚本权限:chmod +x scripts/*.sh

  • 检查依赖是否已安装

  • 在终端手动执行脚本,看错误信息


发布到 ClawHub

什么是 ClawHub?

ClawHub 是 OpenClaw 的官方 Skills 市场

  • 网站:https://clawhub.com

  • 功能:发现、安装、发布 Skills

  • 特点:所有 Skills 免费、开源


发布步骤

1. 安装 ClawHub CLI

npm install -g clawhub

2. 登录

clawhub login
# 浏览器打开授权页面

3. 发布

cd ~/my-skill
clawhub publish

发布流程:

📦 打包 Skill……
✓ 验证通过
✓ 上传到 ClawHub
⏳ 等待审核……

✅ 发布成功!
Skill: weather
版本:1.0.0
链接:https://clawhub.com/skills/weather

4. 更新版本

修改 SKILL.md 中的 version,然后:

clawhub publish --version 1.1.0

好 Skill 的标准

✅ 做得好

  1. 单一职责 - 一个 Skill 只做一件事

  2. 触发明确 - 触发场景描述清晰,AI 能准确判断

  3. 文档完整 - 包含用途、方法、示例

  4. 错误处理 - 考虑各种失败情况

  5. 有示例 - 至少 2-3 个对话示例

❌ 避免

  1. 功能混杂 - 一个 Skill 既查天气又查股票

  2. 触发模糊 - AI 不知道该不该用

  3. 文档缺失 - 没有使用方法

  4. 硬编码路径 - 假设用户的环境和你一样

  5. 没有错误处理 - 失败就崩溃


实战案例:完整的 Skill

Skill:系统健康检查

目录结构:

system-health/
├── SKILL.md
├── scripts/
│   └── check.sh
└── package.json

SKILL.md:

---
name: system-health
description: 检查系统健康状态,包括 CPU、内存、磁盘使用情况
version: 1.0.0
author: saga-su
---

# System Health Skill

## 用途

检查当前系统的资源使用情况,包括 CPU、内存、磁盘、负载等。

## 触发场景

- "系统状态怎么样?"
- "查看系统健康"
- "检查资源使用"
- "磁盘还剩多少空间?"
- "CPU 占用高吗?"

## 使用方法

### 执行检查脚本

$$bash
bash ~/.openclaw/workspace/skills/system-health/scripts/check.sh
$$

### 解析结果

脚本返回:
- CPU 使用率
- 内存使用率
- 磁盘使用率
- 系统负载
- 运行时间

### 生成建议

- CPU > 80%:提醒注意
- 内存 > 90%:建议清理
- 磁盘 < 10GB:提醒清理
- 负载 > 5:系统繁忙

## 示例对话

**用户**:系统状态怎么样?

**AI**:正在检查系统健康……

📊 系统状态:
- CPU:45%(正常)
- 内存:72%(正常)
- 磁盘:120GB / 500GB(剩余 76%)
- 负载:1.2(正常)
- 运行时间:3 天 12 小时

✅ 系统健康,运行良好!

---

**用户**:磁盘快满了吗?

**AI**:检查磁盘使用……

💾 磁盘状态:
- 已用:450GB / 500GB(90%)
- 剩余:50GB

⚠️ 磁盘空间紧张!建议:
1. 清理 Downloads 文件夹
2. 删除旧的日志文件
3. 卸载不用的应用

scripts/check.sh:

#!/bin/bash

# CPU 使用率
CPU=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'%' -f1)

# 内存使用率
MEM=$(free | grep Mem | awk '{printf "%.0f", $3/$2 * 100.0}')

# 磁盘使用率
DISK=$(df -h / | tail -1 | awk '{print $5}' | sed 's/%//')
DISK_AVAIL=$(df -h / | tail -1 | awk '{print $4}')

# 系统负载
LOAD=$(uptime | awk -F'load average:' '{print $2}' | awk '{print $1}' | sed 's/,//')

# 运行时间
UPTIME=$(uptime -p | sed 's/up //')

echo "CPU: ${CPU}%"
echo "Memory: ${MEM}%"
echo "Disk: ${DISK}% (${DISK_AVAIL} available)"
echo "Load: ${LOAD}"
echo "Uptime: ${UPTIME}"

故障排除

Q1: Skill 发布失败?

检查:

  1. SKILL.md 格式是否正确(YAML frontmatter)

  2. 是否已登录 clawhub login

  3. Skill 名是否已存在

Q2: Skill 审核被拒?

常见原因:

  • 描述不清晰

  • 有安全风险(如执行危险命令)

  • 与现有 Skill 重复

Q3: 如何更新已发布的 Skill?

# 修改版本号
vim SKILL.md  # 修改 version: 1.0.1

# 重新发布
clawhub publish

验证清单

  • 创建了 Skill 目录

  • 编写了完整的 SKILL.md

  • 包含 frontmatter(name, description, version)

  • 包含触发场景

  • 包含使用方法

  • 包含示例对话

  • 本地测试通过

  • 发布到 ClawHub(可选)


下一步

恭喜你!你已经学会了 OpenClaw 的所有核心功能。下一篇是一个完整的实战复盘:

→ [第 14 篇 | 实战复盘:从零到日报自动化的 30 天] — 真实踩坑记录,包括所有失败经验和最终解决方案。


💬 读者讨论

你最想创建什么 Skill?

  • A. 天气查询

  • B. 股票监控

  • C. 智能家居控制

  • D. 其他(请评论)

欢迎在评论区分享!