Skip to content

Skill 开发指南

学习如何创建自定义 Skill,扩展 OpenClaw 的能力。

Skill 文件结构

my-skill/
├── SKILL.md          # 必需 - 核心指令文件
├── scripts/          # 可选 - 辅助脚本
│   └── helper.sh
└── references/       # 可选 - 参考文档
    └── notes.md

Skill 放置在 ~/.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-report

2. 编写 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.sh

4. 测试

在 OpenClaw 对话中发送:

生成 openclaw/openclaw 的日报

Skill 加载优先级

  1. <workspace>/skills(最高优先级,项目级)
  2. ~/.openclaw/skills(用户级)
  3. 内置 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 的写法学习最佳实践

OpenClaw 中文教程 - 社区项目