
| 📢 导读 | 别人的Skill再好,也不如自己写的顺手。今天从0到1写一个真正能用的Skill,让AI学会你的独家绝活。 |
前言:Skill不是黑盒,是一本说明书
前面我们搞懂了OpenClaw怎么工作、怎么加载Skill。但你可能还是觉得“写Skill”是件很高级的事。
其实没那么玄乎。Skill就是一个Markdown文件——SKILL.md,里面用大白话写清楚“什么情况下用”和“具体怎么做”。AI读到它,就能照着执行。
这一篇,我们从零开始写一个实用Skill:自动抓取微信公众号文章正文。这个Skill我们前面的文章里提过,今天就把它落地成代码,让你亲身体验一遍从想法到可用的完整过程。
写完之后,你还可以把它分享给团队,甚至提交到ClawHub让全社区用。这就是Skill的价值:一次封装,无限复用。
01 Skill长什么样?
一个标准的Skill,核心就是一个SKILL.md文件,放在~/.openclaw/skills/你的Skill名/目录下。
它的结构很简单,分三块:
1.1 前置元数据(YAML格式)
用---包裹,告诉系统这个Skill的基本信息:
---name: wechat-article-viewerdescription: 读取微信公众号文章正文,支持通过浏览器渲染绕过反爬version: 1.0.0author: 你的名字tags: [web, wechat, scraping]---
name:Skill唯一标识,建议小写+连字符description:一句话描述,这会被加载到Skill索引里(第1层)version:版本号,方便更新author/tags:可选,方便分享
1.2 使用说明(给AI看的)
这部分用自然语言写清楚:什么场景下调用、怎么用。
## 适用场景当用户提供微信公众号文章链接(mp.weixin.qq.com),并要求总结、提取关键信息或全文时,使用此Skill。## 使用方法1. 首先通过 `openclaw browser list` 检查是否有已连接的浏览器实例2. 如果没有,提示用户启动Chrome并打开调试端口:`/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9222`3. 使用 `openclaw browser navigate` 打开文章链接,等待页面完全加载(约3秒)4. 执行 `openclaw browser snapshot` 获取页面HTML结构5. 从HTML中提取 `.rich_media_content` 内的正文内容,以及 `#activity-name` 中的标题6. 将正文和标题返回给用户
关键是步骤要清晰、命令要准确。AI会逐条执行,所以每一步都要是可执行的。
1.3 注意事项(给AI和用户的)
## 注意事项- 需要用户预先在浏览器中登录微信网页版,否则可能无法访问文章- 如果浏览器未开启调试端口,Skill会自动给出启动命令- 文章正文可能包含大量HTML标签,返回前建议做简单清洗
这部分不是必须,但能帮AI避免常见坑。
02 实战:微信文章读取器
我们以解决“微信文章抓不到正文”这个真实痛点为例,写一个完整的Skill。
2.1 创建目录和文件
mkdir -p ~/.openclaw/skills/wechat-article-viewercd ~/.openclaw/skills/wechat-article-viewertouch SKILL.md
2.2 编写SKILL.md
用你喜欢的编辑器打开SKILL.md,填入以下内容:
---name: wechat-article-viewerdescription: 读取微信公众号文章正文,通过浏览器渲染绕过反爬,支持提取标题、作者和正文内容version: 1.0.0author: 你的名字tags: [wechat, scraping, browser]---## 适用场景- 用户提供 mp.weixin.qq.com 链接- 要求总结、提取信息、翻译或分析文章内容## 前置条件需要一个已打开调试端口的 Chrome 浏览器,并登录了微信网页版。如果尚未准备,按以下方式启动:- Mac: `/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9222`- Windows: `"C:\Program Files\Google\Chrome\Application\chrome.exe" --remote-debugging-port=9222`- Linux: `google-chrome --remote-debugging-port=9222`## 执行步骤1. **检查浏览器连接**- 运行 `openclaw browser list`- 如果返回空,提示用户启动带调试端口的浏览器,并重试2. **打开文章链接**- 使用 `openclaw browser navigate --url {用户提供的链接}`- 等待 3 秒让页面完全渲染3. **获取页面内容**- 执行 `openclaw browser snapshot`- 返回的是页面的 DOM 结构4. **提取关键信息**- 标题:选择器 `#activity-name` 的文本- 作者:选择器 `#js_name` 的文本(可选)- 正文:选择器 `.rich_media_content` 的 HTML 内容- 将正文中的 `<p>`、`<section>` 等标签转换为纯文本,保留段落结构5. **返回结果**- 格式:标题:{title}作者:{author}正文:{content}## 错误处理- 如果浏览器未连接 → 给出启动命令并终止- 如果页面加载超时 → 提示用户网络问题,建议重试- 如果选择器找不到内容 → 返回原始 snapshot 的前500字符,供用户判断## 示例用户输入:`帮我总结这篇文章:https://mp.weixin.qq.com/s/xxxx`Skill执行后返回文章标题和正文摘要。
2.3 测试Skill
保存文件后,不需要重启OpenClaw。由于OpenClaw有文件监听机制,Skill会自动生效。
在Web控制台输入一条指令测试:
帮我抓取这篇文章:https://mp.weixin.qq.com/s/xxxx观察AI的反应。如果一切正常,它会:
检查浏览器连接
打开链接
提取内容
返回结果
2.4 调试技巧
如果没成功,排查三步:
看日志:
tail -f ~/.openclaw/logs/skill.log手动执行命令:先在终端里跑
openclaw browser list,确认浏览器可连接简化步骤:把Skill里写的一大段先删掉,只留第一步,看AI能不能识别
03 进阶:给Skill加“智能”
上面的Skill完全靠AI执行固定命令。如果你想让它更智能,可以加入条件判断和动态决策。
比如,用户可能丢过来一个链接,但没说“我要全文”。AI需要自己判断:是不是微信文章?是,就调用这个Skill;不是,用普通web_fetch。
这可以通过在SKILL.md里写“决策逻辑”来实现:
## 决策逻辑当用户提供URL时:- 如果URL包含 `mp.weixin.qq.com` → 调用此Skill- 否则 → 使用内置的 `web_fetch` 工具
AI会把这个逻辑融入自己的推理链。
更高级的玩法是:在Skill里调用其他Skill。比如读完微信文章后,自动调用“总结Skill”生成摘要。这就实现了Skill组合,形成工作流。
3.1 安装与分享
写好的Skill,你可以直接放在~/.openclaw/skills/目录,全局生效。
如果想分享给别人:
把
wechat-article-viewer文件夹打包对方解压到自己的
~/.openclaw/skills/即可
如果想提交到ClawHub社区:
确保Skill有完整的README和LICENSE
在GitHub上创建一个仓库,按ClawHub的规范提交
通过
clawhub publish发布
3.2 安全提示
即使是自己写的Skill,也可能引入风险:
如果用
openclaw shell执行系统命令,确保命令是安全的如果Skill会操作敏感文件或API,用
.env管理密钥,不要硬编码测试时先用“干跑”模式(不实际执行),确认没问题再启用
OpenClaw的权限系统可以限制每个Skill的能力:在Web控制台的“Skill管理”页面,关掉“允许执行Shell”等高风险权限。
最后:从使用者变成贡献者
刚刚我们从零写了一个能解决真实问题的Skill。这意味着已经从OpenClaw的“使用者”变成了“贡献者”。
以后遇到任何重复性的工作——整理日报、监控数据、处理邮件——都可以用同样的方法,把它封装成一个Skill,让AI帮你自动完成。
Skill的价值不是“写起来多简单”,而是一次编写,无限复用。你今天花半小时写的Skill,明天可能帮团队省下几十个小时。
这就是工程化的力量。

夜雨聆风