乐于分享
好东西不私藏

手把手教你写OpenClaw Skill:从“这是啥”到“我会了”

手把手教你写OpenClaw Skill:从“这是啥”到“我会了”

0. 先回答一个问题

Skill 是什么?

简单说:Skill 是 OpenClaw 的超能力扩展包。

你装了一个 Skill,就相当于给OpenClaw装了一个新技能——比如查天气、管日历、发邮件、搜索网页、生成图片……

想象一下:OpenClaw本来只会扫地,你给它装了一个"洗碗 Skill",它就突然会洗碗了。再装一个"做饭 Skill",它就又会做饭了。

这就是 OpenClaw 的设计哲学:工具化,可插拔,谁都能写。


1. Skill 长什么样?

一个 Skill 本质上就是一个文件夹,里面装了几个文件。

就像这样:

my-first-skill/
├── SKILL.md          # 说明书(必须)
├── references/       # 参考资料(可选)
│   └── api.md
└── scripts/          # 脚本(可选)
    └── run.sh

就这么简单。没有固定套路,没有复杂配置,就是一个文件夹加几个文件。


2. SKILL.md 是灵魂

每个 Skill 必须有一个 SKILL.md 文件,这个文件就是OpenClaw理解这个 Skill 的说明书。

写法超级简单,就三个部分:

---
name: my-first-skill
description: 这个技能是干嘛的,什么时候触发它
---


# 我的第一个 Skill

## 使用方法

在这里写清楚用户怎么用这个技能。

OpenClaw会认 namedescription

  • name:技能名字
  • description:什么时候用这个技能(触发条件)

只要这两个东西写清楚了,OpenClaw就能在合适的场景自动调用你写的 Skill。


3. 写一个真的 Skill:帮我查天气

现在来实战!

第一步:创建一个文件夹

mkdir weather-skill
cd weather-skill

第二步:写 SKILL.md

---
name: weather
description: 当用户问天气、温度、要不要带伞的时候触发
---


# 天气查询技能

## 功能

查询指定城市的当前天气和未来天气预报。

## 使用方式

用户说:"北京今天天气怎么样?" 或者 "深圳明天要带伞吗?"

## 核心参数

- `{city}`:城市名(必填)
- `{days}`:预报天数,默认1天

## 示例

- "北京天气"
- "上海明天天气"
- "深圳后天要不要带伞"

第三步:写查询脚本

scripts/ 目录下放一个执行脚本:

scripts/weather.sh

#!/bin/bash
# 调用 wttr.in 查天气,免费无需 API Key

CITY=${1:-"深圳"}
curl -s "wttr.in/${CITY}?format=3&lang=zh"

等等,Shell 脚本我不会写怎么办?

没关系,Python 也可以:

scripts/weather.py

#!/usr/bin/env python3
import requests
import sys

city = sys.argv[1if len(sys.argv) > 1 else "深圳"
url = f"https://wttr.in/{city}?format=3&lang=zh"
resp = requests.get(url)
print(resp.text)

第四步:注册到 OpenClaw

打开 OpenClaw 的配置文件,添加这个 Skill 的路径:

# 告诉 OpenClaw:"我这里有一个新技能"
openclaw skills add /Users/你/的/path/weather-skill

完事!

第五步:测试

用户:深圳今天天气怎么样?

OpenClaw内心:收到 Weather Skill 请求,正在执行 scripts/weather.py 深圳,返回结果给用户。✅


4. Skill 开发的三个核心概念

概念一:触发条件(description)

OpenClaw 靠 description 决定什么时候调用哪个 Skill。

写 description 的技巧:

  • 写具体的使用场景,不要写抽象功能
  • ✅ "当用户问天气的时候触发"
  • ❌ "天气查询功能模块"

越具体,OpenClaw越能准确命中。

概念二:参数传递

用户在对话里说了一段话,OpenClaw会帮你提取关键信息(参数),传给你的脚本。

比如用户说:"帮我查一下北京明天天气"

会解析出:

  • 城市 = 北京
  • 时间 = 明天

这些参数通过环境变量或者命令行参数传给脚本。

概念三:输出格式

你的脚本运行完毕,返回什么?

最简单的方式:直接 print,OpenClaw会自动把 stdout 当作 Skill 的返回结果,呈现给用户。

print("北京今天晴,26度,适合出行 ☀️")

这就是 Skill 的全部秘密。


5. 进阶:让 Skill 更专业

进阶一:支持配置

很多 Skill 需要用户填 API Key 之类的配置,这时候可以在 SKILL.md 里加一个配置说明:

## 配置

使用前需要设置以下环境变量或配置项:

- `WEATHER_API_KEY`:天气API密钥(可选,默认用 wttr.in)
- `DEFAULT_CITY`:默认城市,默认"深圳"

进阶二:增加错误处理

import sys
try:
    city = sys.argv[1]
    # 查天气...
except Exception as e:
    print(f"查天气失败了:{e}")
    sys.exit(1)

进阶三:缓存结果

查天气这种场景,不需要每次都请求外部 API,可以加个简单缓存:

import time
import os

CACHE_FILE = "/tmp/weather_cache.json"
CACHE_TTL = 1800  # 缓存30分钟

def get_weather(city):
    # 检查缓存
    if os.path.exists(CACHE_FILE):
        age = time.time() - os.path.getmtime(CACHE_FILE)
        if age < CACHE_TTL:
            return load_cache()
    # 否则请求并缓存
    ...

6. 社区 Skill 生态

写 Skill 不是从零开始,你可以在 ClawhHub(openclaw 的技能市场)找到别人写好的 Skill,直接安装使用。

类比一下:

  • OpenClaw = 手机系统
  • Skill = App
  • ClawhHub = App Store

去逛逛:https://clawhub.ai[1]


7. 常见报错急救包

报错 原因 解决
Skill 装了但不触发 description 写得不够具体 把 description 改得更像人话
脚本权限不够 文件没有执行权限 chmod +x scripts/*.sh
脚本报错"找不到命令" 依赖没装 pip install xxxbrew install xxx
Skill 加载失败 SKILL.md 格式错误 检查 YAML 头部格式

8. 一句话总结

Skill = 一个文件夹 + 一个 SKILL.md + 一些脚本,OpenClaw就能用它干活。

就这么简单。

别想复杂了,先跑通一个最简单的,再慢慢加功能——这是程序员最好的学习方法,也是好奇猫推荐给所有人的路线。


🚀 MiniMax Token Plan 惊喜上线!新增语音、音乐、视频和图片生成权益。邀请好友享双重好礼,助力开发体验!

好友立享 9折 专属优惠 + Builder 权益,你赢返利 + 社区特权!

👉 立即参与: