Skill 开发指南
学习如何创建自定义 Skill,扩展 OpenClaw 的能力。
Skill 文件结构
my-skill/
├── SKILL.md # 必需 - 核心指令文件
├── scripts/ # 可选 - 辅助脚本
│ └── helper.sh
└── references/ # 可选 - 参考文档
└── notes.mdSkill 放置在 ~/.openclaw/skills/ 目录下,文件夹名使用小写加连字符。
SKILL.md 格式
这是 Skill 的核心文件,定义了 Skill 的行为:
yaml
---
name: daily-summary
description: 生成每日工作摘要并发送到指定渠道
metadata:
openclaw:
emoji: "📋"
requires:
env: ["CALENDAR_API_KEY"]
bins: ["jq"]
---
# Daily Summary
## 功能说明
获取今日日历事件和待办事项,生成格式化的每日摘要。
## 工作流程
1. 从日历 API 获取今日事件
2. 从 Todoist 获取待办事项
3. 格式化为 Markdown 摘要
4. 发送到用户指定的渠道
## 输出格式
- 使用 Markdown 格式
- 按时间排序
- 标注优先级权限门控
通过 metadata.openclaw.requires 声明 Skill 的依赖:
| 类型 | 作用 | 示例 |
|---|---|---|
bins | 检查 PATH 中的二进制文件 | ["jq", "curl"] |
anyBins | 至少存在一个即可 | ["rg", "ag", "grep"] |
env | 检查环境变量是否存在 | ["GITHUB_TOKEN"] |
config | 检查 openclaw.json 配置 | ["browser.enabled"] |
os | 限制操作系统 | ["darwin", "linux"] |
示例:
yaml
metadata:
openclaw:
requires:
env: ["GITHUB_TOKEN", "SLACK_WEBHOOK"]
bins: ["git", "jq"]
os: ["darwin", "linux"]实战:创建一个 GitHub 日报 Skill
1. 创建目录
bash
mkdir -p ~/.openclaw/skills/github-daily-report2. 编写 SKILL.md
bash
cat > ~/.openclaw/skills/github-daily-report/SKILL.md << 'EOF'
---
name: github-daily-report
description: 生成 GitHub 仓库的每日活动报告
metadata:
openclaw:
emoji: "📊"
requires:
env: ["GITHUB_TOKEN"]
bins: ["gh"]
---
# GitHub Daily Report
## 功能
生成指定 GitHub 仓库的每日活动报告,包括:
- 新增/关闭的 Issues
- 合并的 Pull Requests
- 最近的 Commits
- 活跃的 Contributors
## 使用方式
用户发送 "生成 [owner/repo] 的日报" 时触发。
## 工作流程
1. 使用 `gh` CLI 获取仓库最近 24 小时的活动
2. 分类整理 Issues、PRs、Commits
3. 生成 Markdown 格式的报告
4. 包含关键数据统计
## 输出格式
```markdown
# 📊 [repo] 日报 - YYYY-MM-DD
## Issues
- 新增: X 个
- 关闭: X 个
## Pull Requests
- 合并: X 个
- 新增: X 个
## Commits
- 总计: X 个提交
## 活跃贡献者
- @user1 (X commits)
- @user2 (X commits)辅助脚本
如需获取原始数据,可调用 scripts/fetch-activity.sh EOF
### 3. 添加辅助脚本(可选)
```bash
mkdir -p ~/.openclaw/skills/github-daily-report/scripts
cat > ~/.openclaw/skills/github-daily-report/scripts/fetch-activity.sh << 'SCRIPT'
#!/bin/bash
REPO=$1
SINCE=$(date -u -d '24 hours ago' '+%Y-%m-%dT%H:%M:%SZ' 2>/dev/null || \
date -u -v-24H '+%Y-%m-%dT%H:%M:%SZ')
echo "=== Issues ==="
gh issue list -R "$REPO" --state all --search "created:>=$SINCE" --json number,title,state
echo "=== PRs ==="
gh pr list -R "$REPO" --state all --search "created:>=$SINCE" --json number,title,state
echo "=== Commits ==="
gh api "repos/$REPO/commits?since=$SINCE" --jq '.[].commit.message'
SCRIPT
chmod +x ~/.openclaw/skills/github-daily-report/scripts/fetch-activity.sh4. 测试
在 OpenClaw 对话中发送:
生成 openclaw/openclaw 的日报Skill 加载优先级
<workspace>/skills(最高优先级,项目级)~/.openclaw/skills(用户级)- 内置 Skills(最低优先级)
项目级 Skill 可以覆盖同名的用户级或内置 Skill。
发布到 ClawHub
本地使用
直接放在 ~/.openclaw/skills/ 即可,无需发布。
分享到 GitHub
推送包含 SKILL.md 的文件夹到 GitHub 仓库。
发布到 ClawHub 市场
bash
# 发布单个 Skill
clawhub publish ~/.openclaw/skills/my-skill
# 同步所有本地 Skills
clawhub sync --all调试技巧
bash
# 查看 Skill 加载日志
openclaw gateway logs | grep skill
# 列出已加载的 Skills
openclaw skills list
# 验证 Skill 格式
openclaw skills validate ~/.openclaw/skills/my-skill开发建议
- SKILL.md 中的指令要清晰具体,AI 会严格按照描述执行
- 复杂逻辑放在 scripts/ 中,SKILL.md 只描述意图和流程
- 先在本地测试通过,再发布到 ClawHub
- 参考热门 Skills 的写法学习最佳实践