文章定位:概念科普 + 实操入门。你已经装好了 OpenClaw,会基本 CLI 操作,但对 Skills 系统还没有系统认知。这篇文章帮你搞清楚:Skills 是什么、怎么工作、怎么用、怎么写、有什么风险。前置要求:已安装 OpenClaw,Gateway 正常运行。如果还没装,先看《OpenClaw CLI 新手完全指南》。
一句话定义
Skills = Agent 的"操作手册"。
Tools 是手脚(读文件、发请求、跑命令),Skills 是教 Agent 怎么用手脚完成任务的指南。
打个比方:Tools 是锤子和螺丝刀,Skills 是"如何组装宜家家具"的说明书。你把锤子给一个人,他未必知道该敲哪里;但给他说明书,他就能照着一步步把书柜装好。

一、Skills 是什么?
核心定义
一个 Skill 就是一个文件夹,里面有一个SKILL.md文件。这个文件用 YAML frontmatter(元数据头)+ Markdown 正文,告诉 Agent:"遇到这类任务,按这个流程做。"
就这么简单。一个 Markdown 文件,就是一个技能。

Skills vs Tools 的区别
这两个概念新手最容易搞混,用一张表说清楚:

关键认知:没有 Tools,Agent 没有能力做事;没有 Skills,Agent 有能力但不知道怎么做事。两者缺一不可。
为什么需要 Skills?
你可能会想:AI 不是很聪明吗?我直接告诉它"帮我搜论文",它不就知道怎么做了?
大部分时候确实可以。但问题是:
1.Agent 不知道你的环境里有什么工具。你装了 MediaCrawler 可以爬小红书,但 Agent 不知道这个工具存在,更不知道怎么调用它。Skill 告诉它:"你有这个工具,这样用。"
2.复杂任务需要编排多个步骤。"帮我搜论文"听起来简单,但实际上要:调 arXiv API → 解析 XML → 补充 Semantic Scholar 引用数据 → 格式化输出。这些步骤写在 Skill 里,Agent 照着做就行。
3.经验可以复用。你花了一小时调好了一个搜索流程,写成 Skill 之后,每次都能复用。还能分享给别人。
一句话:Skills 把"怎么做"标准化了。
二、Skills 的三级加载机制

Agent 启动时会从三个地方加载 Skills,优先级从高到低:
第一级:工作区 Skills(优先级最高)
<workspace>/skills/
项目专属技能。比如你的工作空间在~/.openclaw/workspace/,那就是~/.openclaw/workspace/skills/。
适用场景:只在当前项目中使用的技能。
第二级:用户 Skills
代码块Plain Text
跨项目共享的技能。clawhub install默认安装到这里。
适用场景:所有项目都能用的通用技能,比如搜索、邮件、GitHub 操作。
第三级:内置 Skills(优先级最低)
OpenClaw 自带的技能,比如github、memory、summarize等 52 个。不需要安装,开箱即用。
门控过滤
加载时不是所有 Skill 都会生效。OpenClaw 会检查每个 Skill 声明的依赖:
- •requires.bins:需要的 CLI 工具(比如gh、docker)
- •requires.env:需要的环境变量(比如TAVILY_API_KEY)
- •requires.os:支持的操作系统
缺依赖的 Skill 自动跳过,不会报错,也不会加载。这意味着你可以放心装一堆 Skill,用不了的会自动忽略。
查看当前哪些 Skill 满足条件可以使用:
openclaw skills list --eligible
查看哪些 Skill 因为缺依赖被跳过:
openclaw skills check --verbose
三、一个 Skill 长什么样?
SKILL.md 的结构

每个 Skill 的核心就是一个SKILL.md文件,结构像这样:
SKILL.md 结构:
├── YAML Frontmatter(元数据)
│ ├── name + description(必填)
│ ├── version
│ └── metadata.openclaw(运行时需求)
│ ├── requires(依赖声明)
│ ├── install(自动安装规格)
│ └── emoji / os / always 等
└── Markdown Body(指令正文)
├── 触发条件
├── 工作流步骤
└── 注意事项
最小示例(5 行就是一个 Skill)
代码块Markdown
对,就这么短。name+description+ 一段指令,就是一个合法的 Skill。
完整示例:天气查询 Skill
---
name: weather-query
description: 查询指定城市的天气信息。当用户问"今天天气怎么样"、"北京天气"、"明天会下雨吗"等天气相关问题时触发。
version: 1.0.0
tags: [weather, utility]
metadata:
openclaw:
requires:
env: [OPENWEATHER_API_KEY]
emoji: 🌤️
---
# 天气查询
### Step 3: 格式化输出
从 API 返回的 JSON 中提取:
- 温度(当前 / 最高 / 最低)
- 天气描述
- 湿度和风速
- 体感温度
用简洁自然的语言回复,例如:
"北京现在 22°C,晴,体感 20°C。最高 25°C,最低 18°C。湿度 45%,微风。适合出门。"
Frontmatter 关键字段详解

重点说description:这个字段决定了 Skill 的"生死"。Agent 在接到用户消息时,会扫描所有可用 Skill 的 description,判断哪些跟当前任务相关。description 写得不好 = Skill 永远不会被触发。
社区的经验是:description 要写得"有点激进",鼓励触发而非欠触发。宁可多触发几次(用户会纠正),也不要错过该触发的场景。
四、ClawHub — 技能市场
是什么
ClawHub 是 OpenClaw 的官方技能注册中心,网址clawhub.com。截至 2026 年 3 月,有13,729+个社区贡献的技能。
你可以把它理解成 Skills 的"App Store"——搜索、安装、更新、发布,一条龙。

CLI 操作速查
# 搜索(语义搜索,基于向量索引,不是简单的关键词匹配)
clawhub search "天气查询"
clawhub search "github issue management"
# 安装
clawhub install <slug>
# 查看不安装(先看看这个 Skill 做了什么)
clawhub inspect <slug>
# 更新全部已安装的 Skill
安装后验证
# 重启 Gateway 让新 Skill 生效
openclaw gateway restart
# 查看是否加载成功
openclaw skills list | grep <skill-name>
# 检查依赖是否满足
openclaw skills check --verbose
版本管理
ClawHub 使用语义化版本(semver)+ 内容哈希比对。clawhub update不只看版本号,还会比对实际内容变化,避免无意义更新。
许可证
ClawHub 上的技能统一采用MIT-0许可证——可以用、可以改、可以商用、不用署名。
五、自己写一个 Skill(5 分钟上手)
别被"写 Skill"这件事吓到。前面你已经看到了,最简单的 Skill 只要 5 行。下面我们来写一个真正能用的——天气查询 Skill。
Step 1:创建目录
mkdir -p ~/.openclaw/skills/weather/
Step 2:编写 SKILL.md
cat > ~/.openclaw/skills/weather/SKILL.md << 'EOF'
---
name: weather
description: 查询城市天气。当用户问"天气怎么样"、"北京天气"、"明天下雨吗"、"需要带伞吗"时触发。
version: 1.0.0
---
# 天气查询
GEThttps://wttr.in/{城市}?format=j1
### 3. 格式化回复
从返回 JSON 的 `current_condition` 中提取:
- `temp_C`:当前温度
- `weatherDesc`:天气描述
- `humidity`:湿度
- `windspeedKmph`:风速
- `FeelsLikeC`:体感温度
用自然语言回复,例如:
"北京现在 22°C,晴天,体感 20°C,湿度 45%,微风。出门不用带伞。"
Step 3:重启 Gateway
代码块Bash
Step 4:验证
代码块Bash
看到输出中有weather就说明加载成功了。
Step 5:测试
向你的 Agent 发一条消息:
"今天北京天气怎么样?"
Agent 应该会触发 weather Skill,调用 wttr.in API,给你返回天气信息。
如果没触发怎么办?最常见的原因是description写得不够"激进",Agent 没有把用户消息和这个 Skill 关联起来。调整 description,让它覆盖更多表述方式。
六、进阶用法
写出基础 Skill 之后,还有几个进阶能力值得了解。
Bundled Resources:给 Skill 附带参考文档
如果你的 Skill 需要参考大量文档(比如一个 API 的完整规格),可以在 Skill 目录下创建references/目录:
代码块Plain Text
Agent 在执行 Skill 时会按需加载这些文件,不会一次性塞进上下文浪费 token。
Scripts:可执行脚本
如果 Skill 需要跑一些脚本(Python、Shell 等),放在scripts/目录:
代码块Plain Text
在 SKILL.md 中通过exec工具调用这些脚本。
依赖声明 + 自动安装
在 frontmatter 中声明依赖,OpenClaw 会在加载时自动检查,缺失时提示安装:
metadata:
requires做的是检查,install做的是告诉 Agent 怎么装。
发布到 ClawHub
写好一个 Skill,觉得别人也能用?发布出去:
clawhub publish ~/.openclaw/skills/my-skill
发布前用quick_validate.py校验结构是否合法(如果你装了 skill-creator 技能的话),或者至少确保 frontmatter 中name和description都有。
七、常见问题 FAQ
Q1: Skill 装了但没触发?
最常见原因:description写得太保守,Agent 没有匹配上。
排查步骤:
1.确认 Skill 已加载:openclaw skills list | grep <name>
2.确认依赖满足:openclaw skills check --verbose
3.检查description是否覆盖了用户的表述方式。比如你写的是"查询天气",但用户说的是"明天需要带伞吗"——这两个表述差很远
4.尝试在 description 中加入更多触发词和场景描述
Q2: Skill 和 MCP Server 什么关系?
互补关系,不是竞争关系。
- •MCP(Model Context Protocol)是一个开放协议,让 AI 连接外部工具和数据源。它定义的是"AI 怎么跟外部服务通信"
- •Skill是 Agent 内部的操作指南,告诉 Agent"遇到这类任务怎么做"
举个例子:你可以用 MCP 连接了一个 Notion 数据库,然后写一个 Skill 教 Agent "当用户说'记个笔记'时,把内容写入 Notion"。MCP 提供通道,Skill 提供逻辑。
Q3: YAML frontmatter 解析报错?
最常见的坑:description 中的冒号后面有空格。
代码块YAML
YAML 中:+ 空格是键值分隔符,如果你的文本里有这个组合,必须加引号。
Q4: 工作区 Skills 和用户 Skills 有同名的怎么办?
工作区优先。三级加载机制中,工作区 > 用户 > 内置,同名时高优先级的覆盖低优先级的。
Q5: 怎么知道一个 Skill 被触发了几次?
目前没有内置统计。社区推荐的方式:在 SKILL.md 的工作流中加一步"执行前在 memory/ 中记录一次",手动统计。或者看 Gateway 日志:
openclaw logs --follow
日志里会显示 Agent 加载了哪些 Skill。
Q6: 能不能让某个 Skill 每次对话都加载?
可以。在 frontmatter 中设置:
代码块YAML
但要谨慎使用——每次都加载意味着每次都消耗 token。

学员须知(小白基础答疑手册)
作业提交步骤指导:☎️AI训练营 - 学员须知(持续更新)
OpenClaw主文档(含所有回放):第五期:OpenClaw小龙虾训练营
AI训练营数据中心(含证书获取、找搭子):🌈AI训练营第1课:第1课:认知破局——认识OpenClaw小龙虾第2课:第2课:基建搭建——小龙虾云端部署+技能初始化第3课:第3课:数据中枢——小龙虾协同多维表格第4课:第4课:社媒引流——小红书自动化运营第5课:第5课:私域沉淀-微信公众号一键排版第6课:第6课:主动出击——让小龙虾给你打电话
第7课:第7课:赋予声带——让小龙虾开口说话第8课:第8课:顶峰相见,谁的龙虾会运营课程在线回答汇总:🥠课程在线回答问题汇总优秀笔记:优秀笔记分享自习室:自习室
✨从训练营出发,你与AI的故事我们想听 | WaytoAGI AI训练营老学员专属回访https://waytoagi.feishu.cn/share/base/form/shrcnvP68KwlHihAAi7UQ2Dzw2g
从训练营出发,你与AI的故事我们想听 | WaytoAGI AI训练营老学员专属回访https://waytoagi.feishu.cn/share/base/form/shrcnvP68KwlHihAAi7UQ2Dzw2g
@版权归WaytoAGI及课程讲师所有,未经许可不得传播售卖。如有侵权将依法追究法律责任。
