OpenClaw Skill开发实战:从入门到独立发布

踩坑无数后整理的Skill开发心得,希望对你有帮助。


前言

用OpenClaw也有一段时间了,不得不说这工具确实香。但时间一长,就发现官方自带的那些Skill不太够用了。

比如我想让它帮我查查股票,发现没有。比如我想让它读飞书文档,官方那个用起来总是差点意思。

后来就想,与其凑合用,不如自己写一个。这一写不要紧,发现这里门道还挺多。今天就把踩过的坑整理出来,供大家参考。


一、Skill到底是啥?

1.1 先搞清楚概念

OpenClaw里的Skill,本质上就是一个文件夹:

objectivec 复制代码
my-skill/
├── SKILL.md          // 必须有,这是核心
├── scripts/          // 可选,放脚本
└── resources/       // 可选,放资源文件

重点是SKILL.md------这玩意儿就是AI的说明书。AI能不能用好这个Skill,全看它写得清不清楚。

1.2 工作流程

objectivec 复制代码
你发消息 → Agent判断用哪个Skill → 读取SKILL.md → 按说明执行操作 → 返回结果

就这么个流程,没啥神秘的。

1.3 加载优先级

位置 优先级 啥意思
/skills 最高 当前工作区专用
~/.openclaw/skills 所有Agent都能用
内置Skill 最低 官方自带的

如果你在workspace里写了个跟内置同名的Skill,会直接覆盖掉它。这个机制挺有用的,可以魔改官方Skill。


二、实战:写一个股票查询Skill

2.1 需求先说清楚

我就一个朴素的需求:

  • 能查A股、港股、美股
  • 显示当前价格和涨跌幅
  • 免费,不想花冤枉钱

技术方案很简单,用新浪财经的免费接口就行。

2.2 动手建目录

在终端执行下面命令:

bash 复制代码
mkdir -p ~/.openclaw/workspace/skills/stock-query
cd ~/.openclaw/workspace/skills/stock-query

2.3 重点:写好SKILL.md

这是最关键的一步,直接决定AI能不能正确使用这个Skill。文件内容如下:

yaml 复制代码
---
name: stock_query
description: 查询A股、港股、美股实时行情
metadata: { "openclaw": { "emoji": "📈", "requires": { "bins": ["curl"] } } }
---

# 股票行情查询 Skill

## 什么时候用

用户问股票价格、涨跌幅、行情的时候用。

## 能查什么

- A股:上证、深证、创业板,还有个股
- 港股:恒生指数、腾讯阿里这些
- 美股:苹果特斯拉这些

## 怎么用

### 查A股

查询上证指数:
curl -s "https://hq.sinajs.cn/list=s_sh000001"

查询茅台:
curl -s "https://hq.sinajs.cn/list=s_sh600519"


### 查港股

查询恒生指数:
curl -s "https://hq.sinajs.cn/list=rt_hkHSI"

查询腾讯:
curl -s "https://hq.sinajs.cn/list=rt_hk00700"


### 查美股

查询苹果:
curl -s "https://hq.sinajs.cn/list=n_aapl"

查询特斯拉:
curl -s "https://hq.sinajs.cn/list=n_tsla"


## 代码规则

| 市场 | 前缀怎么写 | 例子 |
|------|------------|------|
| 上证 | s_sh | 600519 |
| 深证 | sz_ | 000001 |
| 港股 | rt_hk | 00700 |
| 美股 | n_ | aapl |

## 返回什么

接口返回的是原始数据,自己解析一下。解析后给人看的内容包括:
- 当前价格
- 涨跌多少钱
- 涨跌幅
- 最高最低
- 成交量

## 注意点

- 新浪接口有频率限制,别疯狂请求
- 美股数据可能有延迟
- 建议加个缓存,5分钟内不重复查

2.4 想更可控?加个自定义工具

如果觉得让AI直接调bash不太安全,可以自己写个Node.js工具。创建tools.js文件,内容如下:

javascript 复制代码
// tools.js
const http = require('http');

async function getStockPrice(code, market = 'a股') {
  let url;
  
  switch(market) {
    case '港股':
      url = 'https://hq.sinajs.cn/list=rt_hk' + code;
      break;
    case '美股':
      url = 'https://hq.sinajs.cn/list=n_' + code.toLowerCase();
      break;
    default:
      // A股自动判断沪市还是深市
      if (code.startsWith('6')) {
        url = 'https://hq.sinajs.cn/list=s_sh' + code;
      } else {
        url = 'https://hq.sinajs.cn/list=sz_' + code;
      }
  }

  return new Promise((resolve, reject) => {
    http.get(url, (res) => {
      let data = '';
      res.on('data', chunk => data += chunk);
      res.on('end', () => {
        const match = data.match(/="([^"]+)"/);
        if (match) {
          resolve(parseStockData(match[1]));
        } else {
          resolve({ error: '没找到这只股票' });
        }
      });
    }).on('error', reject);
  });
}

function parseStockData(raw) {
  const parts = raw.split(',');
  if (parts.length < 30) return { error: '数据好像有问题' };
  
  const name = parts[0];
  const open = parseFloat(parts[1]);
  const close = parseFloat(parts[2]);
  const high = parseFloat(parts[3]);
  const low = parseFloat(parts[4]);
  
  const change = close - open;
  const changePercent = (change / open * 100).toFixed(2);
  
  return {
    name: name,
    current: close.toFixed(2),
    change: change.toFixed(2),
    changePercent: changePercent + '%',
    changeType: change >= 0 ? '涨' : '跌'
  };
}

module.exports = { getStockPrice };

2.5 配置文件里的一些门道

yaml 复制代码
---
name: stock_query
description: 股票行情查询Skill
metadata: {
  "openclaw": {
    "emoji": "📈",
    "requires": { "bins": ["curl", "node"] },
    "primaryEnv": "STOCK_API_KEY",
    "os": ["linux", "darwin", "win32"]
  }
}
user-invocable: true
---

配置项说明:

字段 干啥的
emoji 显示的图标
requires.bins 需要哪些命令
primaryEnv 需要哪个环境变量
os 支持哪些系统
user-invocable 能不能直接调用

三、本地测试怎么搞

3.1 让Agent刷新一下

最简单的方式就是在对话里说一声"刷新一下Skill列表"。

或者重启Gateway:

复制代码
openclaw gateway restart

3.2 试一把

复制代码
查茅台:茅台现在多少钱

查苹果:苹果股票啥价

查腾讯:腾讯控股咋样了

3.3 调试心得

如果跑不通,先看日志:

css 复制代码
openclaw gateway --verbose

先手动调一下接口,确认能跑通再说:

arduino 复制代码
curl -s "https://hq.sinajs.cn/list=s_sh600519"

四、发布到ClawHub

4.1 目录结构

objectivec 复制代码
stock-query/
├── SKILL.md
├── tools.js
└── README.md

4.2 发布命令

先装CLI:

复制代码
npm install -g clawhub

登录:

复制代码
clawhub login

发布:

bash 复制代码
clawhub publish ./stock-query

4.3 别人怎么用

安装:

erlang 复制代码
clawhub install stock-query

更新:

sql 复制代码
clawhub update stock-query

五、常见问题

5.1 Skill不生效

查这几个点:

  1. 目录名和name对不上
  2. SKILL.md位置不对
  3. YAML格式写错了
  4. Gateway没重启

5.2 接口调不通

可能原因:

  • 网络问题,有些API国内访问不了
  • 频率太高被限了
  • 接口本身挂了

解决思路:准备备选方案。新浪不行就换东方财富:

arduino 复制代码
curl -s "https://push2.eastmoney.com/api/qt/stock/get?fields=f43,f44,f45,f46,f47,f48,f50,f51,f52,f57&secid=1.600519"

5.3 AI理解错了

这很正常。解决办法就是在SKILL.md里把"什么时候用""什么时候不用"写得更细,越具体越好。


六、进阶玩法

6.1 缓存得加上

同一个问题5分钟内别调接口了,浪费资源。缓存在~/.cache/stock-query/目录。

6.2 错误处理要做好

别把原始错误信息暴露给用户,不太好。接口出问题就先试试备选接口,都不行就说"暂时查不了,稍后再试"。

6.3 输出用中文

既然是中国人用,就用中文返回,别中英文混杂。

正确示例:茅台 1695.00元 涨5块 (+0.30%)

错误示例:Maotai: 1695.00, change: +5.00 (+0.30%)


写在最后

开发Skill这件事,说难也不难,关键就三点:

  1. SKILL.md写清楚------AI能不能用好全看这个
  2. 工具选对------bash能搞定的事没必要整那么复杂
  3. 多测------别想当然,踩坑很正常

熟练了之后,你会发现这玩意儿真的很好用。任何重复性的工作都可以变成一个Skill,让AI帮你干。

有问题评论区聊。


参考资料:

OpenClaw官方文档:docs.openclaw.ai

ClawHub技能市场:clawhub.com

AgentSkills规范:agentskills.io

相关推荐
一只叫煤球的猫3 小时前
[自荐] macOS 99% 原生 SSH + SFTP 工具 Remora ,现在开源了~
开源·ssh·github
ApacheSeaTunnel4 小时前
从 Apache SeaTunnel 走向 ASF Member:一位开发者的长期主义样本
大数据·开源·数据集成·seatunnel·数据同步
小陈工4 小时前
2026年3月24日技术资讯洞察:边缘AI商业化,Java26正式发布与开源大模型成本革命
java·运维·开发语言·人工智能·python·容器·开源
罗小罗同学6 小时前
首个病理AI领域的扩散基础模型CytoSyn开源,可生成高度逼真、符合生物学规律的H&E染色病理切片
人工智能·开源·医学图像处理·医工交叉·医学ai
前端付豪7 小时前
实现 AI 回复支持 Markdown 渲染
前端·人工智能·markdown
沐曦股份MetaX7 小时前
沐曦芯生 开源共创 | 沐曦股份北京AI研究院揭幕,共建开源生态高地
人工智能·开源
F1FJJ7 小时前
一个 CLI 工具的开源迭代记录:从单二进制到全平台分发
网络·网络协议·docker·golang·开源·开源软件
hutengyi7 小时前
开源的Text-to-SQL工具WrenAI
数据库·sql·开源
七七powerful7 小时前
GreatSQL 深度解析:金融级开源数据库全攻略
数据库·金融·开源