
OpenClaw 自定义 Skill 开发:把 AI 变成你的专属工具
作者:小高 | 公众号:nas奇思妙想
聚焦 OpenClaw / NAS / 自动化 玩法
本文将从零开始,手把手教你开发一个自定义 Skill,让 AI 一听到某个关键词就自动加载你的专属工作流——就像给它装上了一个永久的记忆和能力包。
一、为什么你需要自定义 Skill?
先理解一个核心问题:OpenClaw 原生已经很强大了——它能操控浏览器、执行脚本、管理文件。那为什么还要自定义 Skill?
答案很简单:原生能力解决「通用问题」,Skill 解决「你的问题」。
举几个真实场景:
- 每次写公众号文章都要手动复制到微信后台?如果有一个 Skill 知道你的账号信息,一键自动排版发布……
- 每天要检查服务器状态、备份 NAS 文件?写一个 Skill,让 AI 每天自动执行,你只需问「今天备份了吗?」
- 你是程序员,每次要解释代码规范和项目结构?把规范写成 Skill,AI 永远记住。
核心价值: Skill 是 OpenClaw 的「能力扩展包」,本质上是一个配置文件 + 一段代码规范,告诉 AI 在什么场景下该用什么工具、遵循什么流程。写好后,AI 会在触发关键词时自动加载,整个过程无需你再重复说明。
二、Skill 的核心结构
一个 Skill 只需要两个核心文件,结构清晰到令人感动:
my-skill/
├── SKILL.md # 灵魂文件:描述 Skill 的触发条件和使用方式
└── scripts/ # (可选)自定义脚本或工具
└── my_tool.js
2.1 SKILL.md:Skill 的身份证
SKILL.md 是 OpenClaw 识别 Skill 的唯一入口,它的核心是一个 YAML 头信息:
yaml---
name: my-skill
description: "我的自定义Skill,一句话说明它是干什么的。
当用户提到这些关键词时,AI会自动加载本Skill:
-关键词1、关键词2、关键词3
"
---
# Skill 名称和说明
这里是 Skill 的详细使用说明,支持 Markdown 格式……
几个必须掌握的元字段:
| 字段 | 作用 | 示例 |
|---|---|---|
name | Skill 的唯一标识名 | my-skill |
description | 触发关键词描述(AI 据此判断何时加载) | 详见上方 |
| 标题层级 | 正文使用 # ## ### 分层 | 组织内容结构 |
2.2 触发机制:关键词匹配
Skill 的触发完全基于 description 字段中的关键词匹配。当你说出相关内容时,AI 会:
- 1扫描所有已安装 Skill 的 description
- 2找出匹配度最高的 Skill
- 3加载其 SKILL.md 作为执行指引
这意味着你不需要「调用」Skill,只需要「描述你的需求」——AI 会自动推理出该用哪个 Skill。
设计原则: description 中的关键词要具体、准确,避免歧义。用具体场景而非抽象概念来描述触发条件效果最好。
三、实战:开发一个「NAS 状态监控」Skill
理论讲完了,现在来真格的。我们开发一个真实的 Skill:监控 NAS 运行状态、自动告警。
3.1 第一步:规划 Skill 能力
这个 Skill 需要做到:
- 定时检查 NAS 的 CPU、内存、硬盘使用率
- 当硬盘空间低于阈值时发出告警
- 支持用自然语言查询:「NAS 当前状态怎么样?」
- 告警信息推送到微信
3.2 第二步:创建 Skill 目录结构
在 OpenClaw 的 skills 目录下创建:
~/.qclaw/workspace/skills/nas-monitor/
├── SKILL.md
└── scripts/
├── nas_status.py # 读取 NAS 状态(通过 SSH 或 API)
└── alert_notify.py # 发送告警通知
3.3 第三步:编写 SKILL.md
markdown---
name: nas-monitor
description: "NAS 状态监控与告警。当用户提到以下任一关键词时自动触发:
-NAS 状态、NAS 监控、NAS 检查
-群晖状态、威联通状态、NAS 健康
-硬盘状态、存储空间、NAS 告警
-备份状态、NAS 温度、NAS 日志
"
---
# NAS 状态监控 Skill
本 Skill 帮助你实时监控 NAS 运行状态,自动完成健康检查和异常告警。
## 工具集
本 Skill 提供以下能力,AI 可直接调用:
### 1. nas_status_check
读取 NAS 当前运行状态(CPU、内存、存储、硬盘 SMART)。
python
scripts/nas_status.py
import subprocess import json
NAS_HOST = "192.168.1.100" # 替换为你的 NAS IP NAS_USER = "admin" # NAS 用户名 NAS_PASS = "your_password" # 推荐使用 SSH Key 替代密码
def get_nas_status(): """通过 SSH 获取 NAS 运行状态""" cmd = [ "ssh", f"{NAS_USER}@{NAS_HOST}", "cat /proc/cpuinfo | grep 'model name' | head -1; " "df -h; " "free -m; " "cat /sys/class/thermal/thermal_zone0/temp" ] result = subprocess.run(cmd, capture_output=True, text=True, env={"SSH_PASSWORD": NAS_PASS}) return result.stdout
def check_disk_health(): """检查硬盘 SMART 状态""" cmd = [ "ssh", f"{NAS_USER}@{NAS_HOST}", "smartctl -a /dev/sda 2>/dev/null | grep -E " "'SMART overall-health|Power_On_Hours|Reallocated_Sector'" ] result = subprocess.run(cmd, capture_output=True, text=True) return result.stdout
def main(): status = get_nas_status() health = check_disk_health() print(json.dumps({"status": status, "health": health}, ensure_ascii=False))
if __name__ == "__main__": main()
### 2. nas_alert_send
当检测到异常时,通过 Webhook 发送告警到微信或邮件。
python
scripts/alert_notify.py
import urllib.request import json import datetime
企业微信 Webhook 地址(替换为你自己的)
WEBHOOK_URL = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=YOUR_KEY" DINGTALK_WEBHOOK = "https://oapi.dingtalk.com/robot/send?access_token=YOUR_TOKEN"
def send_wechat_alert(title: str, message: str, level: str = "warning"): """发送企业微信告警""" color_map = {"info": "172703613", "warning": "16563350", "critical": "16733149"} color = color_map.get(level, "172703613")
payload = { "msgtype": "markdown", "markdown": { "content": ( f"### 🔔 NAS 告警 [{level.upper()}]\n" f"{title}\n\n{message}\n\n" f"> 📅 触发时间:{datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')}" ) } }
data = json.dumps(payload).encode("utf-8") req = urllib.request.Request( WEBHOOK_URL, data=data, headers={"Content-Type": "application/json"} ) with urllib.request.urlopen(req) as resp: return json.loads(resp.read())
def check_and_alert(status_data: dict, disk_threshold_gb: int = 100): """分析状态数据,必要时触发告警""" # 解析存储使用情况(df -h 输出示例解析) lines = status_data.get("status", "").split("\n") for line in lines: if "/volume1" in line or "volume1" in line.lower(): parts = line.split() if len(parts) >= 5: total, used, avail = parts[1], parts[2], parts[4] avail_gb = int(''.join(filter(str.isdigit, avail)))
if avail_gb < disk_threshold_gb: send_wechat_alert( title="⚠️ NAS 存储空间不足", message=f"可用空间仅剩 {avail_gb} GB,建议及时清理或扩容。\n" f"总容量:{total} | 已用:{used} | 可用:{avail}", level="warning" ) return {"checked": True, "alert_sent": False}
## 使用方式
### 自然语言查询
你:「NAS 当前状态怎么样?」 AI:调用 nas_status_check → 返回格式化结果: CPU:ARM Cortex-A57 四核 @ 1.7GHz 内存:2.1GB / 3.8GB(使用率 55%) 存储:12.5TB / 15TB(使用率 83%) 硬盘 SMART:健康 ✓
### 定时自动检查
配合 OpenClaw Cron 功能,设置每日早 9 点自动执行:
在 OpenClaw 中输入:
每天早上9点检查NAS状态,如果硬盘空间低于100GB就发微信告警
### 手动触发
你:「帮我查一下 NAS 温度和硬盘健康」 AI:执行 nas_status_check + check_disk_health,返回完整诊断报告
---
## 四、Skill 开发进阶技巧
### 4.1 让 Skill 记住你的个人配置
一个好的 Skill 应当支持灵活配置,而不是写死参数。在 SKILL.md 中预留配置插槽:
markdown
配置说明
本 Skill 支持以下环境变量,请在首次使用时设置:
| 变量名 | 说明 | 默认值 |
|---|---|---|
NAS_HOST | NAS IP 地址 | 192.168.1.100 |
NAS_USER | SSH 用户名 | admin |
DISK_THRESHOLD_GB | 告警阈值(GB) | 100 |
WEBHOOK_URL | 告警 Webhook 地址 | 无(必填) |
### 4.2 错误处理:让 Skill 优雅地失败
python
def robust_execute(func, fallback_msg: str = "获取失败,请检查 NAS 连接"): """带错误处理的执行包装器""" try: return func() except subprocess.TimeoutExpired: return {"error": "NAS 连接超时,请检查网络"} except FileNotFoundError: return {"error": "未找到 ssh 命令,请安装 OpenSSH"} except Exception as e: return {"error": f"未知错误: {type(e).__name__}: {str(e)}"}
### 4.3 多 Skill 协作
OpenClaw 支持多个 Skill 同时生效。比如「NAS 监控」Skill 可以调用「腾讯云 API」Skill 的发送能力:
markdown
Skill 协作
本 Skill 产生的告警信息,会自动委托 cloud-notify Skill 发送到指定渠道。 确保 cloud-notify Skill 已安装并配置好腾讯云凭证。 ``
五、OpenClaw Skill 生态一览
目前社区已有大量成熟 Skill,覆盖各类场景:
| 类别 | 代表 Skill | 功能 |
|---|---|---|
| 内容创作 | content-factory | 多 Agent 内容生产线,从选题到发布全自动化 |
| 文档处理 | pdf | PDF 读取、合并、拆分、水印 |
| 数据分析 | neodata-financial-search | 自然语言金融数据查询 |
| 云端协作 | kdocs / tencent-docs | 金山文档 / 腾讯文档在线管理 |
| 天气出行 | weather-advisor | 智能天气顾问 + 出行建议 |
| 定时任务 | qclaw-cron-skill | 定时任务、提醒、日报自动推送 |
| 安全加固 | healthcheck` | 系统安全加固与风险评估 |
安装方式: 在 OpenClaw 中直接说「帮我安装 xxx Skill」,AI 会自动从 SkillHub 下载并配置。整个过程一行命令搞定,无需手动操作。
六、把你的 Skill 发布到社区
开发完自己的 Skill 后,如果你愿意,可以将它发布到 OpenClaw SkillHub 帮助其他人:
- 1将 Skill 整理成标准化格式(包含 SKILL.md + 示例脚本)
- 2编写 README.md,说明功能和使用方法
- 3打包成 GitHub 仓库
- 4提交到 SkillHub 社区
发布后,全球用户都能搜索到你的作品——这可能是你影响力最大的一次代码贡献。
一个好的 Skill 就是一份产品说明书。它不需要多复杂,只需要:触发条件清晰,执行结果可预期,配置项一目了然。 做到这三点,你的 Skill 就是好 Skill。
七、总结
今天我们从零认识了 OpenClaw Skill 系统:
- ✅ Skill 是 OpenClaw 的能力扩展包,让 AI 记住专属工作流
- ✅ 核心文件只有两个:SKILL.md(灵魂)+ scripts/(工具集)
- ✅ 触发机制基于关键词自动匹配,无需手动调用
- ✅ 从「NAS 监控」实战看到了完整开发流程
- ✅ 社区已有丰富生态,安装只需一句话
- Skill 让 AI 从「每次都要教」变成「一次学会,永远记住」
- SKILL.md = 身份证 + 说明书,scripts/ = 工具集(可选)
- 关键词要具体,用场景而非抽象概念描述触发条件
- 好的 Skill = 触发清晰 + 结果可预期 + 配置简单
- 社区生态丰富,安装简单(AI 一句话搞定)
- 你也可以把自己的 Skill 发布到 SkillHub 帮助他人
💬 如果你在使用 OpenClaw 时遇到具体问题,欢迎在评论区留言,下期文章可能就是为你量身定制的解决方案!
关注公众号 「nas奇思妙想」,第一时间获取 OpenClaw 养虾技巧与自动化玩法。
■ END
夜雨聆风