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会认 name 和 description:
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[1] if 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 xxx 或 brew install xxx |
| Skill 加载失败 | SKILL.md 格式错误 | 检查 YAML 头部格式 |
8. 一句话总结
Skill = 一个文件夹 + 一个 SKILL.md + 一些脚本,OpenClaw就能用它干活。
就这么简单。
别想复杂了,先跑通一个最简单的,再慢慢加功能——这是程序员最好的学习方法,也是好奇猫推荐给所有人的路线。
🚀 MiniMax Token Plan 惊喜上线!新增语音、音乐、视频和图片生成权益。邀请好友享双重好礼,助力开发体验!
好友立享 9折 专属优惠 + Builder 权益,你赢返利 + 社区特权!
👉 立即参与:

夜雨聆风