Appearance
OpenClaw 自定义 Skill 从 0 到 1 开发教程:手把手教你创建第一个技能
官方技能不够用?社区技能不精准?自己写一个 Skill,让 AI 完全按你的逻辑干活。
Skill 是什么?
Skill(技能)是 OpenClaw 的功能扩展模块,教 Agent 如何使用特定工具、执行固定流程、遵循特定规范。
核心特点:
| 特点 | 说明 |
|---|---|
| Markdown 格式 | 无需编程,写文档就能定义技能 |
| 独立目录 | 每个技能一个文件夹,便于管理 |
| 触发词驱动 | 用户说特定关键词时自动激活 |
| 权限隔离 | 技能可申请特定权限,安全可控 |
Skill 目录结构
基本结构
skills/
└── my-first-skill/ # 技能目录名 = 技能唯一标识
├── SKILL.md # 技能定义文件(必须)
├── README.md # 说明文档(可选)
└── assets/ # 资源文件(可选)
└── example.pngSKILL.md 基本格式
markdown
---
name: 我的第一个技能
description: 这是一个示例技能
triggers:
- 当用户说"帮我XXX"时
- 当用户提到"XXX"时
---
# 我的第一个技能
## 功能说明
告诉 Agent 这个技能能做什么。
## 使用场景
- 场景一:...
- 场景二:...
## 执行步骤
1. 第一步:...
2. 第二步:...
3. 第三步:...Frontmatter 配置详解
完整参数列表
yaml
---
# 基本信息
name: 技能名称 # 必填,显示名称
description: 技能描述 # 必填,功能说明
version: 1.0.0 # 可选,版本号
author: your-name # 可选,作者
# 触发条件
triggers: # 必填,触发词列表
- 当用户说"帮我XXX"时
- 当用户提到"XXX"关键词时
# 权限申请
permissions: # 可选,需要的权限
- file_read
- file_write
- network
# 依赖技能
dependencies: # 可选,依赖的其他技能
- web-search
- file-operations
# 执行配置
execution: # 可选,执行参数
timeout: 60000 # 超时时间(毫秒)
retry: 2 # 重试次数
---权限类型说明
| 权限 | 说明 |
|---|---|
file_read | 读取文件 |
file_write | 写入文件 |
network | 网络访问 |
execute | 执行命令 |
browser | 浏览器操作 |
memory | 记忆系统访问 |
实战案例一:创建翻译技能
Step 1:创建技能目录
bash
mkdir -p skills/my-translatorStep 2:编写 SKILL.md
markdown
---
name: 智能翻译助手
description: 中英互译,支持专业术语、俚语、长文翻译
triggers:
- 当用户说"翻译"时
- 当用户说"translate"时
- 当用户提供外文内容请求翻译时
permissions:
- network
---
# 智能翻译助手
## 功能说明
提供高质量的中英互译服务,支持:
- 普通文本翻译
- 专业术语翻译
- 俚语/口语翻译
- 长文档翻译
## 翻译原则
1. **信**:准确传达原文含义,不漏译、不错译
2. **达**:译文通顺流畅,符合目标语言习惯
3. **雅**:用词优美,风格恰当
## 执行流程
### 短文本翻译(<500字)
1. 识别源语言和目标语言
2. 直译核心内容
3. 意译优化表达
4. 输出双语对照
### 长文本翻译(≥500字)
1. 分析文本结构和专业领域
2. 提取专业术语,建立术语表
3. 分段翻译,保持上下文连贯
4. 整合校对,输出完整译文
## 输出格式
### 短文本原文:[原文内容] 译文:[译文内容]
### 长文本【译文】
[分段译文]
【术语表】
| 原文 | 译文 |
|---|---|
| term | 术语 |
## 特殊处理
- **代码片段**:保持原样,翻译注释
- **专有名词**:保留原文或采用通行译法
- **文化梗**:加注释说明文化背景Step 3:测试技能
bash
openclaw skill test my-translator输入测试内容:
翻译:The quick brown fox jumps over the lazy dog.预期输出:
原文:The quick brown fox jumps over the lazy dog.
译文:敏捷的棕色狐狸跳过了懒狗。实战案例二:创建日报生成技能
Step 1:创建技能目录
bash
mkdir -p skills/daily-reportStep 2:编写 SKILL.md
markdown
---
name: 日报生成器
description: 根据工作记录自动生成格式化日报
triggers:
- 当用户说"生成日报"时
- 当用户说"写日报"时
- 当用户说"今日工作总结"时
permissions:
- file_read
- file_write
---
# 日报生成器
## 功能说明
自动整理工作内容,生成规范化的日报文档。
## 日报模板
```markdown
# 工作日报 - {日期}
## 一、今日完成
- [ ] 任务1:描述
- [ ] 任务2:描述
- [ ] 任务3:描述
## 二、进行中
- 任务A:进度 XX%
- 任务B:进度 XX%
## 三、遇到问题
1. 问题描述
- 影响:
- 解决方案:
## 四、明日计划
- [ ] 计划1
- [ ] 计划2
## 五、备注
其他需要说明的事项执行流程
询问收集
- 今日完成了哪些任务?
- 进行中的任务及进度?
- 遇到什么问题?
- 明天计划做什么?
整理归纳
- 提取关键信息
- 分类整理
- 补充细节
生成日报
- 填充模板
- 格式化输出
- 询问是否保存文件
输出要求
- 简洁明了,避免废话
- 用数据说话,量化成果
- 问题要写明影响和解决方案
- 保存为 Markdown 文件
### Step 3:交互测试用户:生成日报
Agent:好的,我来帮你生成日报。请告诉我:
- 今日完成了哪些任务?
- 进行中的任务有哪些?进度如何?
- 遇到什么问题?
- 明天计划做什么?
用户:完成了用户登录功能开发和API文档编写。进行中的任务:订单模块开发,进度60%。遇到问题是第三方支付接口调用超时,已联系技术支持。明天计划完成订单模块,开始支付对接。
Agent:正在生成日报...
工作日报 - 2026-04-08
一、今日完成
- 用户登录功能开发
- API 文档编写
二、进行中
- 订单模块开发:进度 60%
三、遇到问题
- 第三方支付接口调用超时
- 影响:支付功能无法正常使用
- 解决方案:已联系技术支持,等待回复
四、明日计划
- 完成订单模块开发
- 开始支付对接
是否保存为文件?
---
## 实战案例三:创建代码审查技能
### SKILL.md 完整示例
```markdown
---
name: 代码审查助手
description: 审查代码质量,发现潜在问题,提出优化建议
triggers:
- 当用户说"审查代码"时
- 当用户说"code review"时
- 当用户提供代码片段请求审查时
permissions:
- file_read
---
# 代码审查助手
## 审查维度
### 1. 代码规范
- 命名规范:变量、函数、类名是否语义化
- 格式规范:缩进、空格、换行是否统一
- 注释规范:关键逻辑是否有注释
### 2. 代码质量
- 可读性:代码是否易于理解
- 可维护性:修改是否方便
- 可测试性:是否便于单元测试
### 3. 潜在问题
- 空指针风险
- 资源泄漏
- 并发安全
- SQL 注入
- XSS 漏洞
### 4. 性能优化
- 算法复杂度
- 数据库查询效率
- 内存使用
## 输出格式
```markdown
# 代码审查报告
## 总体评价
- 评分:A/B/C/D
- 摘要:一句话总结
## 问题列表
### 严重问题(必须修复)
| 行号 | 问题 | 修复建议 |
|------|------|----------|
| 42 | 空指针风险 | 添加 null 检查 |
### 一般问题(建议修复)
| 行号 | 问题 | 修复建议 |
|------|------|----------|
| 15 | 变量命名不清晰 | 改为语义化命名 |
### 优化建议
- 建议1
- 建议2
## 亮点
- 值得肯定的代码实践执行流程
解析代码
- 识别编程语言
- 分析代码结构
逐项检查
- 按审查维度检查
- 记录问题和位置
生成报告
- 分类整理问题
- 提供修复建议
- 给出总体评价
---
## 高级配置
### 多语言支持
```yaml
---
name: 多语言技能
i18n:
zh-CN:
name: 中文技能名
description: 中文描述
en-US:
name: English Skill Name
description: English description
---执行环境配置
yaml
---
execution:
timeout: 120000 # 超时 2 分钟
retry: 3 # 失败重试 3 次
parallel: true # 允许并行执行
memory_limit: 512 # 内存限制 512MB
---条件触发
yaml
---
triggers:
- condition: user_role == 'developer'
phrases:
- "代码审查"
- "code review"
- condition: time >= '09:00' and time <= '18:00'
phrases:
- "生成日报"
---调试技巧
查看技能加载日志
bash
openclaw skill list --verbose测试技能触发
bash
openclaw skill test my-skill --trigger "翻译这段话"查看技能执行过程
bash
openclaw skill debug my-skill常见错误排查
| 错误 | 原因 | 解决 |
|---|---|---|
| Skill not found | 目录名与配置不匹配 | 检查目录名和 SKILL.md 中的 name |
| Trigger not working | 触发词格式错误 | 使用标准格式:"当用户说XXX时" |
| Permission denied | 未申请必要权限 | 在 frontmatter 中添加 permissions |
| Timeout | 执行时间过长 | 增加 execution.timeout |
发布技能到 ClawHub
Step 1:准备发布文件
my-skill/
├── SKILL.md # 技能定义
├── README.md # 详细说明
├── LICENSE # 开源协议
├── examples/ # 使用示例
│ └── example1.md
└── tests/ # 测试用例
└── test1.mdStep 2:打包
bash
tar -czvf my-skill.tar.gz my-skill/Step 3:提交审核
访问 ClawHub 技能市场,上传技能包,等待审核通过。
最佳实践
实践一:单一职责
一个技能只做一件事,职责清晰。
实践二:明确触发词
触发词要具体,避免歧义:
✅ 当用户说"翻译成中文"时
❌ 当用户提到"翻译"时(太宽泛)实践三:输出结构化
使用表格、列表、代码块,让输出清晰易读。
实践四:异常处理
在 SKILL.md 中说明异常情况的处理方式。
实践五:版本管理
用 Git 管理技能代码,方便迭代。
总结
| 步骤 | 内容 |
|---|---|
| 1. 创建目录 | mkdir skills/my-skill |
| 2. 编写 SKILL.md | frontmatter + 内容 |
| 3. 配置触发词 | phrases 或 condition |
| 4. 申请权限 | permissions 列表 |
| 5. 测试验证 | openclaw skill test |
| 6. 发布分享 | 打包提交 ClawHub |
核心要点:
- Skill 本质是 Markdown 文档,无编程门槛
- 触发词决定何时激活技能
- 权限配置确保安全可控
- 结构化输出提升可读性
从简单的单功能技能开始,逐步扩展到复杂的多步骤技能。关键是明确技能要解决的问题,用清晰的逻辑告诉 Agent 该怎么做。
