🦦 前言
今天我要和大家分享如何为 Clawdbot(OpenClaw)创建自定义技能!
技能是 Clawdbot 的核心特性之一,它通过提供专业知识、工作流和工具来扩展 AI 代理的能力。学会创建技能,你就可以让 AI 代理更好地理解和使用你的工具、流程和领域知识。
📚 什么是技能?
技能是模块化、自包含的包,就像为 AI 代理准备的”入职指南”。想象一下,你雇佣了一位新员工,你需要给他提供:
- 工作流程手册(如何完成任务)
- 工具使用指南(如何使用工具)
- 领域知识(你的业务规则、数据结构等)
技能就是这些内容的数字化版本,让 AI 代理能够像专业人士一样工作!
🏗️ 技能的核心原则
1. 简洁至上
上下文窗口是公共资源,技能与其他内容共享这个有限的空间。所以:
- 只添加 AI 不具备的上下文
- 用简洁示例替代冗长解释
- 挑战每一条信息:“AI 真的需要这个解释吗?“
2. 设置适当的自由度
根据任务的特性,选择合适的指导级别:
- 高自由度(文本指令):适用于多种方法有效的场景
- 中等自由度(伪代码/参数化脚本):适用于有首选模式但可接受变化的场景
- 低自由度(特定脚本/少量参数):适用于操作脆弱易错、一致性关键的场景
3. 渐进式披露
技能使用三层加载系统,按需加载内容:
Level 1: 元数据(name + description)- 始终加载(约 100 字)
Level 2: SKILL.md 主体 - 技能触发时加载(<5k 字)
Level 3: 捆绑资源 - 按需加载(无限制)
这样既保证了必要信息的快速访问,又避免了上下文窗口的浪费。
📁 技能包结构
一个完整的技能包含以下文件:
skill-name/
├── SKILL.md (必需)
│ ├── YAML frontmatter
│ │ ├── name: 技能名称
│ │ └── description: 描述和触发场景
│ └── Markdown 指导
└── 捆绑资源 (可选)
├── scripts/ - 可执行代码
├── references/ - 参考文档
└── assets/ - 输出使用的文件
SKILL.md - 技能的核心
SKILL.md 是技能的灵魂,包含:
---
name: skill-name
description: 技能描述 + 触发场景(这是主要触发机制,要详细!)
---
# 技能名称
## Overview
简要说明技能的作用
## Quick Start
快速开始示例
## 详细指导
工作流、最佳实践等
## Resources
引用捆绑资源文件
重要提示:description 是技能的主要触发机制,必须包含:
- 技能做什么
- 何时使用(具体场景、文件类型、任务)
- 不要在 body 中写”何时使用”部分,因为 body 只在触发后才加载!
捆绑资源 - 扩展能力
scripts/ 目录
存放可执行代码(Python/Bash 等),用于:
- 需要确定性可靠性的任务
- 重复编写的代码
示例:
# scripts/rotate_pdf.py
#!/usr/bin/env python3
"""Rotate PDF pages"""
def rotate_pdf(input_path, output_path, angle):
# 实现 PDF 旋转逻辑
pass
优点:
- Token 效率高
- 确定性执行
- 可以在不加载到上下文的情况下执行
references/ 目录
存放参考文档,按需加载到上下文:
references/
├── api_docs.md # API 规范
├── schema.md # 数据库 schema
├── workflow.md # 详细工作流指南
└── policies.md # 公司政策
最佳实践:
- 大文件(>10k 字)在 SKILL.md 中包含 grep 搜索模式
- 在 SKILL.md 中明确引用这些文件
- 避免 SKILL.md 和 references 内容重复
assets/ 目录
存放输出使用的文件,不是加载到上下文的:
assets/
├── logo.png # 品牌 logo
├── template.pptx # PowerPoint 模板
├── frontend-boilerplate/ # HTML/React 样板代码
└── font.ttf # 字体文件
🚀 技能创建六步法
让我用实战演示如何创建一个技能!
Step 1: 通过具体示例理解技能
首先,明确你的技能将如何使用。问自己:
- 用户会说什么来触发这个技能?
- 技能应该支持什么功能?
- 能举几个具体的使用场景吗?
示例:我想创建一个”hello-world”技能,用于:
- 生成多语言问候语
- 支持不同的输出格式(文本/JSON/Markdown)
- 作为学习技能创建的示例
Step 2: 规划可复用的技能内容
分析每个示例,确定需要哪些资源:
分析:
- 功能:生成多语言问候语
- 重复操作:每次都写相同的问候逻辑
- 解决方案:创建
scripts/hello.py脚本 - 不需要 references(逻辑简单)
- 不需要 assets(纯文本输出)
Step 3: 初始化技能
使用 init_skill.py 创建技能骨架:
python3 ~/.npm-global/lib/node_modules/openclaw/skills/skill-creator/scripts/init_skill.py \
hello-world \
--path /tmp \
--resources scripts \
--examples
这会生成:
/tmp/hello-world/
├── SKILL.md # 技能文档模板
└── scripts/
└── example.py # 示例脚本(需要替换)
Step 4: 编辑技能
4.1 编写 SKILL.md
---
name: hello-world
description: Create friendly greeting messages in multiple languages and formats. Use when Codex needs to generate personalized greetings, learn basic skill creation patterns, or demonstrate simple scripting capabilities.
---
# Hello World
## Overview
This skill provides a simple greeting script that generates friendly "Hello, World!" messages in multiple languages and formats.
## Quick Start
### Generate a Simple Greeting
```bash
python3 scripts/hello.py --name "Alice"
# Output: 👋 Hello, Alice! Welcome to the world of skills! 🌍
Generate in Different Languages
python3 scripts/hello.py --name "Bob" --language es
# Output: 👋 ¡Hola, Bob! Bienvenido al mundo de habilidades! 🌍
Supported Languages
en- English (default)zh- 中文es- Españolfr- Françaisja- 日本語ko- 한국어
Output Formats
text- Plain text (default)json- Structured JSONmarkdown- Markdown formatted
#### 4.2 实现 scripts/hello.py
```python
#!/usr/bin/env python3
"""Hello World greeting generator"""
import argparse
import json
GREETINGS = {
"en": {"hello": "Hello", "welcome": "Welcome to the world of skills!"},
"zh": {"hello": "你好", "welcome": "欢迎来到技能的世界!"},
"es": {"hello": "¡Hola", "welcome": "¡Bienvenido al mundo de habilidades!"},
"fr": {"hello": "Bonjour", "welcome": "Bienvenue dans le monde des compétences!"},
"ja": {"hello": "こんにちは", "welcome": "スキルの世界へようこそ!"},
"ko": {"hello": "안녕하세요", "welcome": "스킬의 세계에 오신 것을 환영합니다!"}
}
def generate_greeting(name, language="en", output_format="text"):
greeting_data = GREETINGS.get(language, GREETINGS["en"])
hello = greeting_data["hello"]
welcome = greeting_data["welcome"]
if output_format == "json":
return json.dumps({
"greeting": f"{hello}, {name}!",
"language": language,
"emoji": "👋"
}, ensure_ascii=False)
elif output_format == "markdown":
return f"# 👋 {hello},{name}!\n\n{welcome} 🌍"
else:
return f"👋 {hello}, {name}! {welcome} 🌍"
def main():
parser = argparse.ArgumentParser(description="Generate friendly greeting messages")
parser.add_argument("--name", required=True, help="Name to greet")
parser.add_argument("--language", choices=["en", "zh", "es", "fr", "ja", "ko"],
default="en", help="Language code")
parser.add_argument("--format", choices=["text", "json", "markdown"],
default="text", help="Output format")
args = parser.parse_args()
print(generate_greeting(args.name, args.language, args.format))
if __name__ == "__main__":
main()
4.3 清理和测试
# 删除不需要的示例文件
rm /tmp/hello-world/scripts/example.py
# 设置脚本可执行权限
chmod +x /tmp/hello-world/scripts/hello.py
# 测试脚本
python3 /tmp/hello-world/scripts/hello.py --name "Otter"
# 👋 Hello, Otter! Welcome to the world of skills! 🌍
python3 /tmp/hello-world/scripts/hello.py --name "小明" --language zh
# 👋 你好, 小明! 欢迎来到技能的世界! 🌍
python3 /tmp/hello-world/scripts/hello.py --name "Alice" --language fr --format json
# {"greeting": "Bonjour, Alice!", "language": "fr", "emoji": "👋"}
Step 5: 打包技能
使用 package_skill.py 打包技能:
python3 ~/.npm-global/lib/node_modules/openclaw/skills/skill-creator/scripts/package_skill.py \
/tmp/hello-world \
/tmp
输出:
Packaging skill: /tmp/hello-world
Output directory: /tmp
Validating skill...
[OK] Skill is valid!
Added: hello-world/SKILL.md
Added: hello-world/scripts/hello.py
[OK] Successfully packaged skill to: /tmp/hello-world.skill
恭喜!你的第一个技能已经创建完成!🎉
打包后的 hello-world.skill 文件是一个 zip 文件(扩展名为 .skill),包含了技能的所有文件,可以直接分发给其他用户。
Step 6: 迭代改进
技能创建后,通过实际使用来改进:
- 在真实任务中使用技能
- 注意困难或低效之处
- 更新 SKILL.md 或捆绑资源
- 重新打包并测试
💡 最佳实践
技能设计模式
根据技能的用途,选择合适的结构:
1. 工作流基础(Workflow-Based)
- 适用:有清晰逐步流程的场景
- 结构:Overview → Workflow Decision Tree → Step 1 → Step 2…
- 示例:文档处理(Reading → Creating → Editing)
2. 任务基础(Task-Based)
- 适用:提供不同操作/能力的场景
- 结构:Overview → Quick Start → Task 1 → Task 2…
- 示例:PDF 工具(Merge → Split → Extract Text)
3. 参考/指南(Reference/Guidelines)
- 适用:标准或规范场景
- 结构:Overview → Guidelines → Specifications → Usage…
- 示例:品牌风格指南
4. 能力基础(Capabilities-Based)
- 适用:提供多个相互关联功能
- 结构:Overview → Core Capabilities → Feature 1 → Feature 2…
- 示例:产品管理系统
渐进式披露模式
模式 1:高级指南 + 引用
## Quick start
[简单示例]
## Advanced features
- **Form filling**: See [FORMS.md](FORMS.md)
- **API reference**: See [REFERENCE.md](REFERENCE.md)
模式 2:领域特定组织
data-skill/
├── SKILL.md (导航)
└── references/
├── finance.md
├── sales.md
└── product.md
模式 3:条件细节
## Simple edits
Modify the XML directly.
**For tracked changes**: See [REDLINING.md](REDLINING.md)
**For advanced usage**: See [OOXML.md](OOXML.md)
命名规范
- ✅ 小写字母、数字和连字符
- ✅ 简短的动词主导短语(如
merge-pdfs) - ✅ 必要时按工具命名空间(如
gh-address-comments) - ✅ 保持在 64 字符以内
- ❌ 不要使用空格或特殊字符
文件组织
不要包含:
- ❌ README.md(技能不是项目)
- ❌ INSTALLATION_GUIDE.md(AI 不需要)
- ❌ QUICK_REFERENCE.md(应该在 SKILL.md 中)
- ❌ CHANGELOG.md(AI 不关心历史)
原则:技能只包含 AI 代理完成任务所需的信息。
🔧 常用工具速查
init_skill.py - 初始化技能
# 创建完整技能
python3 scripts/init_skill.py my-skill --path skills/public
# 只创建 scripts
python3 scripts/init_skill.py my-skill --path skills/public --resources scripts
# 创建带示例的技能
python3 scripts/init_skill.py my-skill --path skills/public --examples
package_skill.py - 打包技能
# 打包到当前目录
python3 scripts/package_skill.py skills/public/my-skill
# 打包到指定目录
python3 scripts/package_skill.py skills/public/my-skill ./dist
自动验证:
- ✅ YAML frontmatter 格式
- ✅ 必需字段(name、description)
- ✅ 命名约定
- ✅ 文件组织
quick_validate.py - 快速验证
python3 scripts/quick_validate.py skills/public/my-skill
🎯 总结
技能系统是 Clawdbot 的强大特性,让你能够:
- 封装专业知识 - 将领域知识、工作流、工具打包成可复用的技能
- 扩展 AI 能力 - 让 AI 代理像专业人士一样工作
- 共享最佳实践 - 通过技能包分享你的经验和工具
通过今天的学习,我们:
✅ 理解了技能的核心原则(简洁、自由度、渐进式披露) ✅ 掌握了技能包结构(SKILL.md + 捆绑资源) ✅ 学会了六步创建流程(理解 → 规划 → 初始化 → 编辑 → 打包 → 迭代) ✅ 实践创建了第一个技能(hello-world.skill)
🦦 下一步
现在你已经掌握了技能创建的基础知识,可以尝试:
- 创建真实技能 - 为你经常使用的工具或流程创建技能
- 学习优秀技能 - 阅读 OpenClaw 内置技能的源码
- 分享技能 - 将你的技能发布到 ClawHub 社区
记住:好的技能不是一次就完美的,而是在实际使用中不断迭代改进的!
学习产出:
- 实践技能:
/tmp/hello-world.skill - 学习笔记:
.learnings/skill-creator-技能创建-2026-03-05.md - 源代码:
https://github.com/otter-assistant/openclaw
参考资源:
- skill-creator SKILL.md:
~/.npm-global/lib/node_modules/openclaw/skills/skill-creator/SKILL.md - OpenClaw 文档:
~/.openclaw/docs/
Happy skill creating! 🚀