什么是 ClawHub?
ClawHub 是 OpenClaw 的技能市场,类似于 VS Code 的插件市场、Chrome 的扩展商店。
核心概念:
- Skill:一个可复用的功能模块
- Agent:使用 Skills 的 AI 助手
- ClawHub:Skills 的发布和分发平台
目前 ClawHub 已有技能:
tavily-search:网络搜索agent-memory-store:跨 Agent 记忆共享weather:天气查询healthcheck:系统健康检查- ...
目前共计有 19268 个 skill
本文将分享如何开发一个自己的 Skill,并上传到 ClawHub。
5 分钟开发第一个 Skill
第一步:创建 Skill 目录(1 分钟)
bash
# 创建技能目录
mkdir -p ~/.openclaw/skills/my-first-skill
cd ~/.openclaw/skills/my-first-skill
# 创建核心文件
touch SKILL.md
mkdir -p scripts
第二步:编写 SKILL.md(2 分钟)
SKILL.md 是技能的配置文件,告诉 OpenClaw 这个技能是什么、怎么用。
markdown
---
name: hello-world
version: 1.0.0
description: 我的第一个 OpenClaw 技能, say hello to the world
author: your-name
homepage: https://github.com/your-name/hello-world-skill
---
# Hello World Skill
一个简单的示例技能,展示 OpenClaw Skill 的基本结构。
## 功能
- 向用户打招呼
- 返回当前时间
## 使用
```bash
# 命令行调用
python scripts/hello.py
第三步:编写功能脚本(1 分钟)
创建 scripts/hello.py:
python
#!/usr/bin/env python
"""
Hello World Skill - 我的第一个 OpenClaw 技能
"""
import datetime
def main():
now = datetime.datetime.now()
print(f"👋 Hello from OpenClaw!")
print(f"🕐 Current time: {now.strftime('%Y-%m-%d %H:%M:%S')}")
print(f"✨ Your first skill is working!")
if __name__ == "__main__":
main()
第四步:本地测试(1 分钟)
bash
# 测试脚本
python scripts/hello.py
# 输出:
# 👋 Hello from OpenClaw!
# 🕐 Current time: 2026-03-10 21:55:32
# ✨ Your first skill is working!
恭喜你!第一个 Skill 开发完成。
进阶:让 Agent 能调用 Skill
上面的 Skill 只是命令行工具,真正的威力是让 Agent 能调用它。
创建 Agent 可调用的版本
修改 scripts/hello.py:
python
#!/usr/bin/env python
"""
Hello World Skill - Agent 可调用版本
"""
import datetime
import json
import sys
def get_greeting(name="World"):
"""获取问候语"""
hour = datetime.datetime.now().hour
if 5 <= hour < 12:
greeting = "早上好"
elif 12 <= hour < 18:
greeting = "下午好"
else:
greeting = "晚上好"
return {
"greeting": greeting,
"name": name,
"time": datetime.datetime.now().isoformat(),
"message": f"{greeting},{name}!欢迎使用 OpenClaw Skills 🎉"
}
def main():
# 支持命令行参数
name = sys.argv[1] if len(sys.argv) > 1 else "World"
result = get_greeting(name)
print(json.dumps(result, ensure_ascii=False, indent=2))
if __name__ == "__main__":
main()
在 Agent 中使用
Agent 可以通过 exec 工具调用:
python
# Agent 调用示例
result = exec("python ~/.openclaw/skills/my-first-skill/scripts/hello.py 用户名")
print(result) # 输出 JSON 格式的问候信息
发布到 ClawHub
准备工作
- 先安装 Node.js 和 npm:
bash
node -v
npm -v
- 安装 clawhub CLI:
bash
npm i -g clawhub
- 验证 clawhub 命令已生效:
bash
clawhub --help
- 登录 ClawHub:
bash
clawhub login
执行后窗口会出现
perl
Opening browser: https://clawhub.ai/cli/auth?redirect_uri=http%3A%2F%2F127.0.0.1%3A54109%2Fcallback&label_b64=xxxx&state=***
复制在浏览器访问下即可完成登录
登录成功,命令窗口会出现 √ OK. Logged in as @xxx
发布流程
bash
# 进入技能目录
cd ~/.openclaw/skills
# 发布技能
clawhub publish my-first-skill --slug my-first-skill-0311 --name my-first-skill-0311 --version 1.0.0 --changelog "Initial release"
实际你会发现 clawhub publish 会失败,错误如下
yaml
× Publish payload: acceptLicenseTerms: invalid value
这个问题是clawhub cli 的bug
ruby
https://github.com/openclaw/clawhub/issues/648
根据官方给的临时解决方案是在请求体增加一个 "acceptLicenseTerms": true 参数
于是我在本地clawhub安装目录找到了publish.js,在payload中增加了上面的参数
c
// 临时增加 acceptLicenseTerms 参数
const acceptLicenseTerms = true;
form.set('payload', JSON.stringify({
slug,
displayName,
version,
changelog,
acceptLicenseTerms,
tags,
...(forkOf ? { forkOf } : {}),
}));
再次执行,发布成功
√ OK. Published my-first-skill-0311@1.0.0 (k97bxxt91xh9g632ghjjympy0s82mcc9)
接着执行
perl
clawhub undelete my-first-skill-0311
然后在 https://clawhub.ai/skills 搜索即可看到发布的skill

验证发布
bash
# 搜索你的技能
clawhub search my-first-skill-0311
# 安装测试
clawhub install my-first-skill-0311
实战:开发一个天气查询 Skill
光说不练假把式,我们来开发一个实用的天气查询 Skill。
目录结构
objectivec
weather-skill/
├── SKILL.md
├── scripts/
│ └── weather.py
└── README.md
SKILL.md
markdown
---
name: weather-query
version: 1.0.0
description: 查询全球任意城市的天气,支持中文城市名
author: your-name
homepage: https://github.com/your-name/weather-skill
---
# Weather Query Skill
基于 wttr.in 的天气查询技能,无需 API Key。
## 功能
- 查询指定城市天气
- 支持中文城市名
- 返回温度、湿度、天气状况
## 使用
```bash
python scripts/weather.py 北京
python scripts/weather.py Tokyo
scripts/weather.py
python
#!/usr/bin/env python
"""
Weather Query Skill - 天气查询
基于 wttr.in,无需 API Key
"""
import urllib.request
import json
import sys
def get_weather(city):
"""获取城市天气"""
try:
# 使用 wttr.in API
url = "https://wttr.in/{city}?format=j1"
req = urllib.request.Request(url, headers={
'User-Agent': 'Mozilla/5.0'
})
with urllib.request.urlopen(req, timeout=10) as response:
data = json.loads(response.read())
current = data['current_condition'][0]
return {
"city": city,
"temp_c": current['temp_C'],
"temp_f": current['temp_F'],
"humidity": current['humidity'],
"weather": current['weatherDesc'][0]['value'],
"wind": f"{current['windspeedKmph']} km/h",
"observed": current['observation_time']
}
except Exception as e:
return {"error": str(e)}
def main():
if len(sys.argv) < 2:
print(json.dumps({"error": "请提供城市名,如:python weather.py 北京"}, ensure_ascii=False))
return
city = sys.argv[1]
result = get_weather(city)
print(json.dumps(result, ensure_ascii=False, indent=2))
if __name__ == "__main__":
main()
测试
bash
$ python scripts/weather.py 北京
{
"city": "北京",
"temp_c": "15",
"temp_f": "59",
"humidity": "45",
"weather": "晴朗",
"wind": "12 km/h",
"observed": "09:00"
}
安装
参照上面的发布到 ClawHub流程将skill名称换成weather-skill即可完成发布
Skill 开发模板
1. 目录结构规范
csharp
your-skill/
├── SKILL.md # 技能元信息(必须)
├── README.md # 详细文档
├── scripts/ # 可执行脚本
│ ├── main.py
│ └── utils.py
├── config/ # 配置文件
│ └── default.json
└── tests/ # 测试文件
└── test_main.py
2. SKILL.md 规范
markdown
name: skill-name # 唯一标识,小写+连字符
version: 1.0.0 # 语义化版本
description: 简短描述 # 50字以内
author: your-name # 作者名
homepage: https://... # 项目主页
写在最后
至此,一个最小可用的 ClawHub Skill 就开发完成了。
你已经完成了 Skill.md 编写、功能脚本开发、本地测试,以及通过 ClawHub 进行发布验证这几步。
接下来,只需要把示例中的脚本替换成你自己的业务逻辑,就可以继续扩展出更多可复用的 Skills。