人人都能写 OpenClaw Skill!手把手带你做一个自动日报技能

48 阅读1分钟

人人都能写 OpenClaw Skill!手把手带你做一个自动日报技能

引子

我前几天在想一个问题:AI Agent 到底怎么才能"学会"新技能?

不是那种微调训练的学法,而是——我今天有个新需求,希望 Agent 明天就能处理,后天就能自动化。这种"即插即用"的能力扩展,有没有一种足够轻量的实现方式?

后来我在 OpenClaw 里找到了答案:Skill

它的做法简单到有点反直觉——写一个 Markdown 文件,描述清楚"你是谁、什么时候用、怎么做",放到指定目录下,Agent 下次对话就能自动识别和执行。不需要编译,不需要注册,不需要重启。

这篇文章我会手把手带你写一个"每日技术日报"Skill,从目录结构到完整代码,再到调试上线。你会发现,门槛真的没有想象中那么高。


Skill 是什么

在 OpenClaw 的架构里,Skill 是 AI Agent 的能力扩展单元。但它不是传统意义上的代码插件——它是一份 Markdown 格式的操作手册

工作原理:

  1. Agent 启动时扫描所有 Skill 的 namedescription(元数据层,常驻内存)
  2. 用户发来请求时,Agent 根据 description 判断该不该触发某个 Skill
  3. 触发后,Agent 才去读取 SKILL.md 的正文内容(指令层,按需加载)
  4. 按正文中的指令执行操作

这种三层加载的设计(元数据 → 正文 → 附属资源)是为了节省上下文窗口。毕竟 Agent 的上下文是有限资源,不能把所有 Skill 的内容都塞进去。

你可以把 Skill 理解为给 Agent 写的 SOP(标准操作程序)。写得好的 Skill,Agent 拿到就能干活。


目录结构

一个 Skill 的标准结构:

skill-name/
├── SKILL.md          # 必需:技能定义文件
├── scripts/          # 可选:可执行脚本
├── references/       # 可选:参考文档
└── assets/           # 可选:模板、图标等资源

只有 SKILL.md 是必需的,其他目录根据需要创建:

  • scripts/:放 Bash 或 Python 脚本。适合那些每次都要重写且需要确定性输出的操作
  • references/:放详细的参考资料。比如 API 文档、数据库 schema,Agent 在需要时才读取
  • assets/:放模板文件、图标等。Agent 不会读取这些文件的内容,而是直接在输出中使用它们

关键原则:SKILL.md 保持精简,大段内容拆到子目录。这样 Agent 触发 Skill 时只加载核心指令,不会一次性吃掉太多上下文。


SKILL.md 的写法

SKILL.md 由两部分组成:

Frontmatter(YAML 头部)

---
name: daily-tech-digest
description: |
  每日技术日报生成与推送。自动搜索当天技术热点新闻,
  生成中文摘要日报,推送到 Slack 频道。
  触发条件:日报、技术新闻、热点、每日摘要、tech digest。
---

name 是 Skill 的标识符,小写+连字符。

description 是核心——Agent 靠它决定什么时候触发这个 Skill。写 description 的关键是要覆盖足够多的触发场景,把用户可能的各种说法都考虑到。

正文(Markdown 指令)

正文就是写给 Agent 看的操作指南。用祈使句,简洁直接。

内容一般包含:

  • 什么时候用 / 不用
  • 具体执行步骤
  • 输出格式要求
  • 注意事项

实战:每日技术日报 Skill

说够了理论,来看完整实现。

需求

每天早上自动搜索技术热点,生成中文日报,推送到 Slack。

目录结构

daily-tech-digest/
├── SKILL.md
└── scripts/
    └── generate_digest.sh

完整 SKILL.md

---
name: daily-tech-digest
description: |
  每日技术日报生成与推送。自动搜索当天技术热点新闻,生成中文摘要日报,
  推送到 Slack 频道。
  触发条件:用户要求生成技术日报、每日新闻摘要、技术热点汇总,
  或定时任务触发每日日报生成。
  关键词:日报、技术新闻、热点、每日摘要、tech digest。
---

# 每日技术日报

自动搜索技术热点,生成中文日报并推送到 Slack。

## 使用场景

 **适用:**
- 用户说"生成今天的技术日报"
- 定时任务触发每日日报
- 用户要求搜索技术热点并汇总

 **不适用:**
- 查询特定技术问题的深度分析
- 非技术类新闻汇总

## 执行流程

### 1. 搜索技术热点

使用 web_search 工具搜索以下关键词(每个取前 5 条):

- "AI 人工智能 新闻 today"
- "云计算 cloud computing news"
- "开源项目 trending"
- "软件开发 技术趋势"

### 2. 筛选和去重

从搜索结果中筛选:
- 过滤掉超过 48 小时的旧新闻
- 去除重复内容(相同 URL 或标题相似度 > 80%)
- 保留 8-12 条高质量条目

### 3. 生成日报

按以下格式生成中文日报:

```markdown
📰 技术日报 | YYYY-MM-DD

## 🔥 今日热点

### 1. [标题]
摘要(2-3 句话概括核心内容)
🔗 来源:[链接]

### 2. [标题]
...

---
💡  OpenClaw 自动生成

4. 推送到 Slack

使用 message 工具发送到指定 Slack 频道:

  • 默认频道:当前对话所在频道
  • 如果用户指定了频道,发送到指定频道
  • 消息格式使用 Slack 兼容的 Markdown

5. 保存归档

将日报保存到 ~/.openclaw/workspace/digests/YYYY-MM-DD.md 归档。

脚本

如需批量抓取,可执行辅助脚本:

bash scripts/generate_digest.sh

定时任务

建议通过 OpenClaw 的 cron 功能设置每日定时执行:

  • 时间:每天早上 9:00(UTC+8)
  • 任务:生成技术日报并推送到 Slack

注意事项

  • 搜索结果依赖 web_search 工具的可用性
  • 单次生成的日报条目控制在 8-12 条,避免信息过载
  • 如搜索结果不足,如实告知,不要编造内容

### 辅助脚本

`scripts/generate_digest.sh`:

```bash
#!/usr/bin/env bash
# 辅助脚本:抓取 AWS 官方博客最新文章作为日报素材之一

set -euo pipefail

DATE=$(date +%Y-%m-%d)
OUTPUT_DIR="${HOME}/.openclaw/workspace/digests"
OUTPUT_FILE="${OUTPUT_DIR}/${DATE}.md"

mkdir -p "$OUTPUT_DIR"

echo "📰 技术日报 | ${DATE}" > "$OUTPUT_FILE"
echo "" >> "$OUTPUT_FILE"
echo "## 🔥 今日技术热点" >> "$OUTPUT_FILE"
echo "" >> "$OUTPUT_FILE"

# 从 AWS 官方博客 RSS 拉取最新条目
FEED_URL="https://aws.amazon.com/blogs/china/feed/"
TITLES=$(curl -s "$FEED_URL" | grep -oP '(?<=<title>).*?(?=</title>)' | head -12 | tail -10)

INDEX=1
while IFS= read -r title; do
  if [ -n "$title" ]; then
    echo "### ${INDEX}. ${title}" >> "$OUTPUT_FILE"
    echo "" >> "$OUTPUT_FILE"
    INDEX=$((INDEX + 1))
  fi
done <<< "$TITLES"

echo "---" >> "$OUTPUT_FILE"
echo "💡 由 OpenClaw 自动生成" >> "$OUTPUT_FILE"

echo "日报已保存到: ${OUTPUT_FILE}"

这个脚本作为 fallback 使用——主搜索由 Agent 的 web_search 工具完成,脚本则从 AWS 官方博客 RSS 补充素材。


安装和测试

安装

# 创建 Skill 目录
mkdir -p ~/.openclaw/workspace/skills/daily-tech-digest/scripts

# 复制文件
cp SKILL.md ~/.openclaw/workspace/skills/daily-tech-digest/
cp scripts/generate_digest.sh ~/.openclaw/workspace/skills/daily-tech-digest/scripts/
chmod +x ~/.openclaw/workspace/skills/daily-tech-digest/scripts/generate_digest.sh

放好就行了。OpenClaw 会在下次会话时自动扫描加载,不用重启

测试

在 Slack 里直接说:

生成今天的技术日报

或者换个说法:

帮我整理一下今天的技术热点

Agent 应该能识别到 daily-tech-digest Skill 并执行。如果没有触发,往下看调试部分。


调试技巧

Skill 没被加载?

问 Agent:"你现在有哪些 skills?"

如果列表里没有你的 Skill,检查:

  • 路径是否正确:~/.openclaw/workspace/skills/daily-tech-digest/SKILL.md
  • YAML frontmatter 的 --- 分隔符是否完整
  • namedescription 是否存在

加载了但没触发?

多半是 description 覆盖不够。解决办法:在 description 里加更多触发关键词和场景描述。

YAML 解析出错?

常见坑——description 中包含冒号:

# ❌ 冒号会导致解析错误
description: 功能:生成日报

# ✅ 用引号包裹
description: "功能:生成日报"

# ✅ 或用多行语法
description: |
  功能:生成日报

脚本执行失败?

检查清单:

  • 有没有执行权限(chmod +x
  • 依赖的命令是否存在(curl
  • 网络是否通畅

写好 description 的窍门

description 是 Skill 开发中容易被忽视但又极其关键的部分。我的经验是先上线一个"够用"的版本,然后在实际对话中观察 Agent 什么时候该触发但没触发,把那些没覆盖到的说法补回去。

好的 description 写法:

description: |
  每日技术日报生成与推送。自动搜索当天技术热点新闻,
  生成中文摘要日报,推送到 Slack 频道。
  触发条件:用户要求生成技术日报、每日新闻摘要、技术热点汇总,
  或定时任务触发每日日报生成。
  关键词:日报、技术新闻、热点、每日摘要、tech digest、
  今日资讯、新闻早报、技术周报。

注意最后加了"今日资讯""新闻早报""技术周报"这些变体——用户不会永远用同一种说法来描述同一个需求。


进阶:发布到 ClawHub

写好的 Skill 可以打包发布到 ClawHub——OpenClaw 的技能分享平台。

大致流程:

  1. 确保 frontmatter 完整
  2. 用打包工具生成 .skill 文件
  3. 提交到 ClawHub

这样其他 OpenClaw 用户就能一键安装你的 Skill。如果你对 Skill 的质量有信心,值得试试。


进阶技巧:让 Skill 更好用

在实际使用中,我总结了几个让 Skill 更健壮的小技巧:

善用 references/ 拆分内容

如果你的 Skill 涉及多个领域的热点(AI、云计算、前端等),可以把每个领域的搜索策略拆到 references/ 目录下:

daily-tech-digest/
├── SKILL.md
├── scripts/
│   └── generate_digest.sh
└── references/
    ├── ai-sources.md
    ├── cloud-sources.md
    └── frontend-sources.md

在 SKILL.md 中引用:

## 数据源配置

- AI 方向:参见 [references/ai-sources.md](references/ai-sources.md)
- 云计算方向:参见 [references/cloud-sources.md](references/cloud-sources.md)
- 前端方向:参见 [references/frontend-sources.md](references/frontend-sources.md)

这样 Agent 会根据用户的具体需求,只加载对应的参考文件,节省上下文。

用 assets/ 存模板

如果你想让日报有固定的排版模板,可以放一个模板文件到 assets/ 目录:

daily-tech-digest/
├── SKILL.md
├── scripts/
│   └── generate_digest.sh
└── assets/
    └── digest_template.md

Agent 会直接拿模板来填充内容,不需要每次重新生成格式。

定时任务配合 HEARTBEAT

除了 cron,OpenClaw 还有一个 heartbeat 机制——Agent 会定期被唤醒检查是否有待办任务。你可以在 HEARTBEAT.md 里加一行:

- [ ] 如果是工作日早上 9:00 左右,执行每日技术日报 Skill

这样即使不设 cron,Agent 在心跳检查时也会主动触发日报生成。


小结

写 OpenClaw Skill 的体验可以用一句话概括:像写文档一样写插件

核心要点回顾:

  • SKILL.md 是仅有的必需文件,Markdown 格式
  • description 决定触发时机,写得越覆盖越好
  • 正文写给 Agent 看的操作指令,简洁直接
  • 需要脚本就放 scripts/,需要参考文档就放 references/
  • 放到 ~/.openclaw/workspace/skills/ 下即可生效

我目前在亚马逊云科技的工作中用 OpenClaw 自动化了不少重复流程,Skill 机制是其中很关键的一环。AI Agent 的能力边界不再由框架开发者决定,而是由使用者自己定义。如果你也在做 AI Agent 相关的探索,建议从一个小 Skill 开始尝试,你会惊讶于它的灵活性。


你写了什么有趣的 Skill?评论区晒一下 🎉