5分钟在ClawHub发布你的第一个Agent技能

1 阅读5分钟

什么是 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 分钟)

# 创建技能目录
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 这个技能是什么、怎么用。

---
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

#!/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 分钟)

# 测试脚本
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

#!/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 工具调用:

# Agent 调用示例
result = exec("python ~/.openclaw/skills/my-first-skill/scripts/hello.py 用户名")
print(result)  # 输出 JSON 格式的问候信息

发布到 ClawHub

准备工作

  1. 先安装 Node.js 和 npm
node -v
npm -v
  1. 安装 clawhub CLI
npm i -g clawhub
  1. 验证 clawhub 命令已生效
clawhub --help
  1. 登录 ClawHub
clawhub login

执行后窗口会出现

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

发布流程

# 进入技能目录
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 会失败,错误如下

× Publish payload: acceptLicenseTerms: invalid value

这个问题是clawhub cli 的bug

https://github.com/openclaw/clawhub/issues/648

根据官方给的临时解决方案是在请求体增加一个 "acceptLicenseTerms": true 参数

于是我在本地clawhub安装目录找到了publish.js,在payload中增加了上面的参数

 // 临时增加 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)

接着执行

clawhub undelete my-first-skill-0311

然后在 https://clawhub.ai/skills 搜索即可看到发布的skill

image-1.png

验证发布

# 搜索你的技能
clawhub search my-first-skill-0311

# 安装测试
clawhub install my-first-skill-0311

实战:开发一个天气查询 Skill

光说不练假把式,我们来开发一个实用的天气查询 Skill。

目录结构

weather-skill/
├── SKILL.md
├── scripts/
│   └── weather.py
└── README.md

SKILL.md

---
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

#!/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()

测试

$ 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. 目录结构规范

your-skill/
├── SKILL.md          # 技能元信息(必须)
├── README.md         # 详细文档
├── scripts/          # 可执行脚本
│   ├── main.py
│   └── utils.py
├── config/           # 配置文件
│   └── default.json
└── tests/            # 测试文件
    └── test_main.py

2. SKILL.md 规范

name: skill-name     # 唯一标识,小写+连字符
version: 1.0.0        # 语义化版本
description: 简短描述  # 50字以内
author: your-name     # 作者名
homepage: https://... # 项目主页

写在最后

至此,一个最小可用的 ClawHub Skill 就开发完成了。

你已经完成了 Skill.md 编写、功能脚本开发、本地测试,以及通过 ClawHub 进行发布验证这几步。

接下来,只需要把示例中的脚本替换成你自己的业务逻辑,就可以继续扩展出更多可复用的 Skills。