人人都能写 OpenClaw Skill!手把手带你做一个自动日报技能
引子
我前几天在想一个问题:AI Agent 到底怎么才能"学会"新技能?
不是那种微调训练的学法,而是——我今天有个新需求,希望 Agent 明天就能处理,后天就能自动化。这种"即插即用"的能力扩展,有没有一种足够轻量的实现方式?
后来我在 OpenClaw 里找到了答案:Skill。
它的做法简单到有点反直觉——写一个 Markdown 文件,描述清楚"你是谁、什么时候用、怎么做",放到指定目录下,Agent 下次对话就能自动识别和执行。不需要编译,不需要注册,不需要重启。
这篇文章我会手把手带你写一个"每日技术日报"Skill,从目录结构到完整代码,再到调试上线。你会发现,门槛真的没有想象中那么高。
Skill 是什么
在 OpenClaw 的架构里,Skill 是 AI Agent 的能力扩展单元。但它不是传统意义上的代码插件——它是一份 Markdown 格式的操作手册。
工作原理:
- Agent 启动时扫描所有 Skill 的 name 和 description(元数据层,常驻内存)
- 用户发来请求时,Agent 根据 description 判断该不该触发某个 Skill
- 触发后,Agent 才去读取 SKILL.md 的正文内容(指令层,按需加载)
- 按正文中的指令执行操作
这种三层加载的设计(元数据 → 正文 → 附属资源)是为了节省上下文窗口。毕竟 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 的
---分隔符是否完整 name和description是否存在
加载了但没触发?
多半是 description 覆盖不够。解决办法:在 description 里加更多触发关键词和场景描述。
YAML 解析出错?
常见坑——description 中包含冒号:
# ❌ 冒号会导致解析错误
description: 功能:生成日报
# ✅ 用引号包裹
description: "功能:生成日报"
# ✅ 或用多行语法
description: |
功能:生成日报
脚本执行失败?
检查清单:
- 有没有执行权限(
chmod +x) - 依赖的命令是否存在(
curl) - 网络是否通畅
写好 description 的窍门
description 是 Skill 开发中容易被忽视但又极其关键的部分。我的经验是先上线一个"够用"的版本,然后在实际对话中观察 Agent 什么时候该触发但没触发,把那些没覆盖到的说法补回去。
好的 description 写法:
description: |
每日技术日报生成与推送。自动搜索当天技术热点新闻,
生成中文摘要日报,推送到 Slack 频道。
触发条件:用户要求生成技术日报、每日新闻摘要、技术热点汇总,
或定时任务触发每日日报生成。
关键词:日报、技术新闻、热点、每日摘要、tech digest、
今日资讯、新闻早报、技术周报。
注意最后加了"今日资讯""新闻早报""技术周报"这些变体——用户不会永远用同一种说法来描述同一个需求。
进阶:发布到 ClawHub
写好的 Skill 可以打包发布到 ClawHub——OpenClaw 的技能分享平台。
大致流程:
- 确保 frontmatter 完整
- 用打包工具生成
.skill文件 - 提交到 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?评论区晒一下 🎉