如果你已经用上了AI助手,但发现它大多数时候还只是个"聊天机器人",那你大概率缺的不是更强的模型,而是更贴合你工作流的Skill(技能)。
在OpenClaw里,一个Skill本质上就是一个markdown格式的SKILL.md文件。你用文字把自己的经验、流程和判断标准写进去,AI就能按你的方式干活。
这意味着什么?
你可以让它每天早上自动巡检服务器,并把结果发到飞书
你可以让它自动汇总Git提交,生成开发日报
你甚至可以让它在对话里自己给自己写一个新Skill
更关键的是,这件事的门槛并不高。一点点简单的Markdown,就能开始教AI做事。
如果你正想把AI从"能聊"变成"能干活",这篇文章会比较适合你。
前情提要
在上一篇文章中,我们完成了OpenClaw(小龙虾)的安装,并把它和飞书打通了,实现了在飞书里直接运维内网服务器。
但那只是冰山一角。
小龙虾之所以叫"龙虾",是因为它有一个威力无穷的"钳子"——Skill(技能)。一只刚出生的龙虾,和一只训练有素、装备精良的龙虾,战斗力天差地别。
今天这篇文章,就来彻底讲透OpenClaw的Skill系统,重点不是讲概念,而是讲一件更实际的事:怎么把你自己的经验封装成AI随时可调用的能力。
什么是Skill
Skill是OpenClaw的能力扩展单元,可以理解为龙虾身上的一把"钳子"。
一个Skill就是一个文件夹,里面放一个SKILL.md文件,用YAML frontmatter定义元数据,用Markdown写指令。就这么简单。
如果说大模型是龙虾的"大脑",那么Skill就是龙虾的"技能"。大脑负责思考,技能负责行动。没有Skill的龙虾只会聊天,有了Skill的龙虾才能真正把经验转化成生产力。
类比一下:
大模型 = 龙虾的大脑(思考、理解、决策)
Skill = 龙虾的钳子和腿(行动、操作、执行)
MCP = 龙虾的触角(感知外部数据源)
Plugin = 龙虾的外挂装甲(第三方能力集成)
Channel = 龙虾的通讯方式(与外界交流的渠道)
Skill的三层架构
根据小龙虾官方文档,OpenClaw的Skill加载有明确的优先级:

Workspace Skills(/skills):最高优先级。放在当前工作空间下,只对当前agent生效。适合放项目专属的技能。
Managed/Local Skills(~/.openclaw/skills):中等优先级。放在用户目录下,对本机所有agent生效。适合放个人常用的技能。
Bundled Skills:最低优先级。随OpenClaw安装包自带,开箱即用。
如果三个位置存在同名Skill,高优先级覆盖低优先级。这意味着你可以通过在workspace放一个同名Skill来"覆盖"内置技能的行为。
看看小龙虾已经有了哪些Skill
安装OpenClaw后,它已经自带了大约几十个内置Skill。我们来问问它:
你目前有哪些技能?目前我有以下技能:🔧 工具类- weather - 获取天气预报(通过 wttr.in 或 Open-Meteo)- tmux - 远程控制 tmux 会话🦊 飞书系列(需要配置)- feishu-doc - 飞书文档读/写- feishu-drive - 飞书云盘文件管理- feishu-perm - 飞书权限管理- feishu-wiki - 飞书知识库导航🛡️ 系统运维- healthcheck - 主机安全加固和风险配置检查- node-connect - 诊断 OpenClaw 节点连接/配对失败📝 其他- skill-creator - 创建、编辑、改进或审计 AgentSkills- daily-hot-images - 每天早上6点自动生成热点图片报告- hot-report - 获取并汇报全球热点信息需要我详细介绍某个技能,或者执行什么具体任务吗?
Openclaw出厂自带几十个"标配钳子",够用,但远远不够强。
从ClawHub安装社区技能
ClawHub是OpenClaw的技能市场,类似于手机上的应用商店。截至2026年3月,ClawHub上已有两万多个社区贡献的Skill。
浏览地址:https://clawhub.com
安装一个Skill非常简单,一条命令搞定:
clawhub install skill-name也可以直接让龙虾自己安装:
帮我安装一个gmail的技能好的老大,我来安装Gmail技能。🛠️ Exec{}clawhub install skill-gmail✔ Installed skill-gmail@2.1.4 to ./skills/skill-gmail✔ Skills refreshed (14 → 15 eligible)Gmail技能已安装成功!不过使用前需要配置Google API凭证。您需要:1. 在Google Cloud Console创建一个OAuth 2.0客户端2. 将Client ID和Client Secret配置到OpenClaw需要我帮您配置吗?
ClawHub上热门的Skill包括:
Skill名称 | 功能 |
skill-gmail | Gmail邮件管理 |
skill-calendar | Google日历 |
skill-web-search | 增强网页搜索 |
skill-file-ops | 文件操作 |
skill-notion | Notion集成 |
但社区的Skill再多,终究是别人做的,不一定完全符合你的需求。真正让龙虾变成"你的"超级龙虾的方式,是自己创建Skill。
从零创建一个自定义Skill
重点来了,小龙虾自带的技能都是一些通用的功能,在自己实际的工作流中,往往并不满足需求,因此想自己的战力最大化,最好根据自己的需求打造一个自己的Skill。
最简Skill:Hello World
先来一个最简单的例子,理解Skill的结构。
mkdir -p ~/.openclaw/skills/hello-world然后在里面创建一个SKILL.md文件:
---name: hello-worlddescription: 一个简单的问候技能,当用户打招呼时使用---# Hello World当用户说"你好"或打招呼时,用一种特别热情的方式回应,并且在末尾加上当前的系统时间。使用 `exec` 工具执行 `date` 命令获取当前时间。
就这么简单。一个YAML头部定义名字和描述,下面的Markdown内容就是给大模型看的"指令"。
刷新技能后测试一下:
你好🎉 老大好啊!!!见到你太高兴了!!!🛠️ Exec{}现在是 2026年03月14日 星期六 22:58:03 CST此刻是2026年3月14日晚上22:58,周六的夜晚,希望老大今天过得愉快!有什么我能帮忙的吗?😊
生效了。这个Skill虽然简单,但它展示了Skill的本质:用自然语言告诉大模型该怎么做。
SKILL.md的完整结构
一个标准的SKILL.md由两部分组成:
1. YAML Frontmatter(元数据)
---name: my-skill # 技能名称,小写字母+数字+连字符,最长64字符description: 技能的描述 # 描述,最长1024字符,决定了大模型何时使用这个技能metadata: {"openclaw": {"requires": {"bins": ["curl"]}, "primaryEnv": "API_KEY"}}---
其中name和description是必填的,metadata是可选的,用来定义依赖条件。
2. Markdown Body(指令内容)
这部分是给大模型读的"操作手册"。你怎么写都行,但记住一个原则:大模型已经很聪明了,只写它不知道的东西。
不需要写"你是一个AI助手"这种废话,直接写"做什么、怎么做、有什么限制"就行。
实战:创建一个服务器巡检Skill
来做一个有实际价值的Skill——每天自动巡检服务器,生成报告。
创建目录:
mkdir -p ~/.openclaw/skills/server-patrol创建SKILL.md:
---name: server-patroldescription: 服务器巡检技能。当用户要求巡检服务器、检查服务器状态、或触发定时巡检时使用。生成结构化的巡检报告。---# 服务器巡检## 巡检流程执行以下检查项,每一项都通过 `exec` 工具运行对应的shell命令:1. **磁盘使用率** — `df -h`- 告警阈值:任一分区使用率超过85%2. **内存使用** — `free -h`- 告警阈值:可用内存低于总内存的15%3. **CPU负载** — `uptime`- 告警阈值:15分钟平均负载超过CPU核心数4. **GPU状态** — `nvidia-smi --query-gpu=name,temperature.gpu,utilization.gpu,memory.used,memory.total --format=csv,noheader` (如果有GPU)- 告警阈值:温度超过85°C或显存使用率超过90%5. **关键服务状态** — `systemctl is-active docker nginx mysql`(按需调整)6. **最近异常日志** — `journalctl -p err --since "24 hours ago" --no-pager | tail -20`7. **网络连通性** — `ping -c 3 8.8.8.8`8. **系统运行时间** — `uptime -s`## 报告格式汇总后按以下格式输出:🖥️ 服务器巡检报告📅 时间:{当前时间}⏱️ 运行时间:{启动时间至今}✅ 正常项:{列出所有正常的检查项}⚠️ 告警项:{列出超过阈值的项目及具体数值}❌ 异常项:{列出失败或错误的检查项}📊 概要:共检查{N}项,正常{X}项,告警{Y}项,异常{Z}项## 注意事项- 如果某条命令执行失败,标记为异常但不中断整个巡检- GPU检查在无GPU的服务器上直接跳过- 服务列表根据实际部署情况灵活调整
刷新技能后测试:
巡检一下服务器好的老大,我来对服务器进行全面巡检。🛠️ Exec df -h🛠️ Exec free -h🛠️ Exec uptime🛠️ Exec nvidia-smi --query-gpu=...🛠️ Exec systemctl is-active docker🛠️ Exec journalctl -p err --since "24 hours ago" --no-pager | tail -20🛠️ Exec ping -c 3 8.8.8.8🛠️ Exec uptime -s🖥️ 服务器巡检报告📅 时间:2026-03-14 23:05:12 CST⏱️ 运行时间:自2026-02-01启动,已运行41天✅ 正常项:- 磁盘使用率:主盘58%,数据盘44%- 内存:总计64GB,可用38GB(59%)- CPU负载:0.12 0.08 0.05(远低于核心数16)- GPU温度:42°C,显存使用44MiB/22528MiB- Docker服务:运行中- 网络连通性:ping 8.8.8.8 平均延迟12.3ms⚠️ 告警项:- 无❌ 异常项:- nvidia-smi驱动版本不匹配(Driver/library version mismatch)- 过去24小时有3条error级别日志(USB设备相关,非严重)📊 概要:共检查8项,正常6项,告警0项,异常2项建议关注nvidia驱动版本不匹配的问题,可能需要更新驱动。其他一切正常,服务器状态良好。
一个完整的服务器巡检报告就生成了。而且这个Skill可以配合定时任务使用:
每天早上9点自动巡检服务器,结果发到飞书告诉我好的老大,我来设置定时巡检任务。🛠️ Scheduler{}✔ 创建定时任务:每天 09:00 执行服务器巡检并通过飞书发送报告已设置完成!每天早上9点我会自动执行服务器巡检,并将巡检报告通过飞书发送给您。如果有告警或异常项,我会特别标注提醒。
这就是Skill的威力:定义一次,反复使用,还能和其他能力(定时器、飞书)组合。
实战:创建一个Git仓库日报Skill
再来一个更复杂的例子——自动生成Git仓库的每日开发日报。
mkdir -p ~/.openclaw/skills/git-daily-reportSKILL.md内容:
---name: git-daily-reportdescription: Git仓库每日开发日报生成。当用户要求生成日报、查看今日代码提交、总结开发进度时使用。---# Git日报生成## 触发条件当用户说"生成日报"、"今天的开发进度"、"代码提交总结"等相关内容时触发。## 操作步骤1. 确认目标仓库路径(如果用户没指定,询问)2. 执行以下命令获取数据:- `git log --since="today 00:00" --format="%h|%an|%s|%ci" --all` — 今日所有提交- `git diff --stat HEAD~{N}..HEAD` — 代码变更统计(N为今日提交数)- `git branch -a` — 分支信息- `git log --since="today 00:00" --format="%an" | sort | uniq -c | sort -rn` — 贡献者统计3. 整理成日报格式## 输出格式📋 开发日报 — {仓库名} — {日期}👥 贡献者({人数}人):{姓名}:{提交数}次提交📝 提交记录:哈希 作者 提交信息 时间... ... ... ...📊 代码统计:变更文件数:{N}新增行数:{+N}删除行数:{-N}🌿 活跃分支:{分支列表}💡 今日概要:{用一段话概括今天的主要开发内容和进展}## 注意事项- "今日概要"需要根据提交信息智能总结,不是简单罗列- 如果今天没有提交,输出"今天暂无代码提交"- 时间格式统一使用24小时制
实战:创建一个带API调用的Skill
Skill不仅可以调用shell命令,还可以调用外部API。比如创建一个天气+穿衣建议的Skill:
mkdir -p ~/.openclaw/skills/weather-advisor---name: weather-advisordescription: 天气查询与穿衣建议。当用户询问天气、穿什么、要不要带伞时使用。metadata: {"openclaw": {"requires": {"bins": ["curl"]}, "primaryEnv": "WEATHER_API_KEY"}}---# 天气与穿衣建议## 获取天气使用 `exec` 工具执行 curl 调用天气API:```bashcurl -s "https://api.weatherapi.com/v1/forecast.json?key=${WEATHER_API_KEY}&q={城市}&days=1&lang=zh"如果用户没有指定城市,默认使用"上海"。输出内容当前天气:温度、体感温度、湿度、风向风速、天气状况今日预报:最高/最低温度、降水概率、紫外线指数穿衣建议:根据温度和天气状况给出具体建议< 5°C:羽绒服、围巾、手套5-15°C:厚外套、毛衣15-22°C:薄外套、长袖22-28°C:短袖、薄长裤28°C:短袖短裤、注意防晒带伞提醒:降水概率>40%时提醒带伞特殊提醒:雾霾建议戴口罩、紫外线强建议防晒等
然后在`~/.openclaw/openclaw.json`中配置API Key:
```json5{skills: {entries: {"weather-advisor": {enabled: true,env: {WEATHER_API_KEY: "你的API密钥"}}}}}
这样API密钥通过环境变量注入,不会暴露在Skill文件里。
小龙虾自己也可以查询天气,但是这样自定义的天气预报能力更强大,输出更符合的需求。
Skill的高级特性
环境变量注入
在openclaw.json中可以为每个Skill单独配置环境变量和API Key:
{skills: {entries: {"my-skill": {enabled: true,apiKey: { source: "env", provider: "default", id: "MY_API_KEY" },env: {MY_API_KEY: "sk-xxx",MY_ENDPOINT: "https://api.example.com"}}}}}
这些变量在agent运行时注入,运行结束后恢复原始环境,不会污染系统环境。
热更新(Skills Watcher)
OpenClaw默认开启了文件监听,当你修改SKILL.md文件后,不需要重启,下一次对话就会自动加载最新的Skill内容:
{skills: {load: {watch: true, // 默认开启watchDebounceMs: 250 // 防抖间隔}}}
这意味着你可以一边写Skill,一边测试,即时生效。
Skill覆盖
如果你对某个内置Skill的行为不满意,不需要修改源码,只需要在高优先级目录下创建一个同名Skill即可覆盖。
比如,你觉得内置的web_search技能返回的结果不够好,可以在~/.openclaw/skills/下创建自己的版本:
mkdir -p ~/.openclaw/skills/web_search---name: web_searchdescription: 增强版网页搜索。使用多个搜索引擎并交叉验证结果。---# 增强版网页搜索搜索时同时使用以下策略:1. 使用默认搜索工具进行搜索2. 对搜索结果去重、排序3. 优先展示来自官方文档、GitHub、Stack Overflow的结果4. 自动过滤明显的SEO垃圾页面5. 对结果进行简要摘要,而不是返回大段原文
你的版本会覆盖内置版本,生效于本机所有agent。
Skill vs MCP vs Plugin
这三个概念容易混淆,但它们的定位完全不同:


简单来说:
Skill是最轻量的扩展方式,一个Markdown文件搞定
MCP适合需要和外部数据打通的场景
Plugin适合需要深度集成、添加新协议的场景
对于大多数用户,Skill就够用了。
Skill设计的最佳实践
写了这么多Skill之后,总结几条实战经验:
1. 描述(description)决定一切
description是大模型决定"什么时候使用这个Skill"的唯一依据。写得不好,Skill就是废物。
# 差:太模糊,大模型不知道什么时候该用description: 一个有用的工具# 好:明确说了做什么、什么时候用description: 服务器巡检技能。当用户要求巡检服务器、检查服务器状态、或触发定时巡检时使用。
2. 指令要具体,不要空洞
# 差:大模型本来就会这些请帮用户完成任务,注意礼貌用语。# 好:告诉大模型它不知道的事磁盘使用率超过85%时标记为告警。使用 nvidia-smi 的 --query-gpu 参数获取结构化数据。报告使用表格格式输出。
3. 提供明确的输出格式
大模型最怕"你看着办"。给一个明确的输出模板,可以让输出结果稳定和标准化,效果会好很多。
4. 善用已有工具
Skill本身不需要实现功能,它只需要"指挥"大模型使用已有的工具。exec能执行任何命令,web_fetch能抓取任何网页,memory能记住任何信息。Skill做的是把这些能力编排成流程。
5. 一个Skill做一件事
不要试图写一个"万能Skill",那和没有Skill没区别。每个Skill聚焦一个明确的场景,多个Skill可以被大模型自动组合使用。
让龙虾自己写Skill
最后,分享一个最"赛博朋克"的玩法——让龙虾自己给自己写Skill。
OpenClaw的meta skill功能允许agent在对话过程中创建新的Skill,不需要重启:
我经常让你帮我查Docker容器的状态,你能不能自己写一个专门的技能,以后用起来更方便?可以看到小龙虾开始干活,等待期间,可以用这个锻炼一下手部肌肉:
很快,一个Skill写好了:
好的老大,我来创建一个Docker容器管理的技能。🛠️ Exec{}mkdir -p ~/.openclaw/skills/docker-patrol📝 Edit{}Created ~/.openclaw/skills/docker-patrol/SKILL.md我已经创建了 docker-patrol 技能,内容包括:1. 查看所有容器状态(运行中/已停止/异常)2. 容器资源使用统计(CPU、内存、网络)3. 异常容器告警(非Running状态、重启次数过多)4. 输出结构化的状态报告技能已自动加载,现在你可以直接说"查看Docker状态",我就会按照标准流程执行检查。要试试吗?
试试🛠️ Exec docker ps -a --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"🛠️ Exec docker stats --no-stream --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}"🐳 Docker容器状态报告📅 时间:2026-03-14 23:22:18✅ 运行中(3个):| 容器名 | 状态 | CPU | 内存 | 端口 ||--------|------|-----|------|------|| nginx-proxy | Up 41 days | 0.02% | 12MiB/64GiB | 80,443 || postgres-main | Up 41 days | 0.15% | 256MiB/64GiB | 5432 || redis-cache | Up 41 days | 0.08% | 48MiB/64GiB | 6379 |⏹️ 已停止(1个):| 容器名 | 状态 ||--------|------|| temp-builder | Exited (0) 3 days ago |📊 概要:4个容器,3个运行中,1个已停止,0个异常💡 所有运行中的容器状态正常,资源使用合理。
龙虾给自己写了一个Skill,然后自己用上了。
这就是为什么说OpenClaw打开了一个新篇章——AI不再只是使用工具,而是开始制造工具。
我的Skill清单
分享一下我目前正在使用的自定义Skill,供参考:

每一个Skill都是一个Markdown文件,不超过50行,却能让龙虾在特定场景下表现得像一个专业的运维工程师。
总结
Skill是OpenClaw最优雅的扩展机制——零代码、零部署、即时生效。
写一个Skill,本质上就是在写一份"给AI看的SOP"。你把自己的专业经验、工作流程、判断标准写成Markdown,龙虾就能按照你的标准去执行。

这意味着什么?
意味着每一个人都可以把自己多年积累的专业经验"灌注"到一只龙虾里,让它成为你在数字世界的分身。运维工程师可以打造一只运维龙虾,开发者可以打造一只开发龙虾,产品经理可以打造一只产品龙虾。
你有多专业,你的龙虾就有多强大。
这也许就是AI时代个人能力的新杠杆——你的经验不再只存在于你的脑子里,而是可以被编码、被复制、被24小时不间断地执行。
小龙虾还在进化,而你的Skill清单,就是它进化的方向。
如果你准备自己动手,建议先从文中的三个模板开始:server-patrol、note-backup、weather-advisor。这三个场景最容易上手,也最容易立刻感受到收益。
如果你对这种"把经验写成AI能力"的玩法感兴趣,欢迎关注公众号。后面我还会继续写:
如何梳理自己的工作流,从而整理一套自己的高频Skill清单
如何把Skill和定时任务、飞书、MCP组合起来
如何让龙虾在真实工作流里稳定地跑起来
(文章中所有的key、code均已经过混淆处理)
夜雨聆风