OpenClaw blogwatcher 技能详解:用 blogwatcher CLI 为 Agent 接入博客与 RSS/Atom 订阅监控
【免费下载链接】openclawThe AI that really does things. Any OS. Any Platform. The lobster way. 🦞项目地址: https://gitcode.com/GitHub_Trending/cl/openclaw
OpenClaw 通过skills/blogwatcher/SKILL.md这个内置技能(Skill),教 Agent 使用blogwatcherCLI 来跟踪博客与 RSS/Atom 订阅源的更新。读完本文,你能掌握该技能的完整命令用法、SKILL.md 前置元数据(frontmatter)中requires.bins门控与 Go 安装器声明的机制,以及 OpenClaw 技能加载器如何依据源码判断该技能是否可用。
技能定位:一条 CLI 打通"订阅 → 扫描 → 已读"闭环
blogwatcher 技能的目标很直接:让 Agent 通过命令行工具完成博客/RSS/Atom 源的监控,核心工作流为四步——添加博客(add)、扫描更新(scan)、查看文章(articles)、标记已读(read/read-all)。技能正文以 skills/blogwatcher/SKILL.md 为唯一载体,其中 frontmatter 声明了name、description、homepage与metadata.openclaw门控块,正文则给出安装方式、快速上手、常用命令与示例输出。
与 OpenClaw 仓库中其他技能(如weather、himalaya)一样,blogwatcher 属于"文件型技能"(file-backed skill):只要SKILL.md出现在技能根目录(默认最深 6 层)下,加载器就会发现它。该技能的加载优先级遵循 OpenClaw 的技能层级体系,bundled 技能(随安装包发行)位于第 5 级,详见 Skills 文档。
安装:一条 go install 命令
技能正文给出的唯一安装途径是 Go:
go install github.com/Hyaxia/blogwatcher/cmd/blogwatcher@latest快速上手只需先运行帮助命令确认二进制可用:
blogwatcher --help需要注意的是,OpenClaw 的requires.bins门控检查的是宿主机PATH上是否存在blogwatcher可执行文件(见下文门控机制一节)。如果你手动go install后技能仍未出现在 Agent 的技能列表中,通常是GOBIN未加入PATH;或者改用 OpenClaw 自带的安装器机制,由 Gateway 代装到其管理的 bin 目录。
安装器声明与 OpenClaw 的 Go 安装规则
frontmatter 中的metadata.openclaw.install声明了一条 Go 安装器规格(kind: "go",模块github.com/Hyaxia/blogwatcher/cmd/blogwatcher@latest),供 macOS Skills UI 与 Gateway 使用。根据 Skills 文档中的 Go 安装器说明,OpenClaw 对 Go 类安装有三条硬性规则,理解它们能解释安装行为:
- OpenClaw 要求 Go 1.21 或更新版本才支持自动安装技能依赖;若宿主机缺少
go且可用 Homebrew,会先经 Homebrew 安装 Go;Linux 无 Homebrew 时可走apt-get的golang-go通道(需 root 或免密 sudo,且版本满足最低要求)。 - 实际的
go install始终指向 OpenClaw 管理的专用 bin 目录(新安装时是 Homebrew 的bin,否则为~/.local/bin),而不是你配置的GOBIN。你自己的GOBIN、GOPATH、GOTOOLCHAIN环境变量只会被读取、绝不会被覆盖。 - 多安装器场景下 Gateway 按 Homebrew → uv → 配置的 node 包管理器 → go → download 的偏好顺序选择;blogwatcher 只声明了 go 一种,因此直接走 Go 通道。
常用命令与示例输出
技能正文列出的完整命令集如下,均可直接复制运行:
| 用途 | 命令 |
|---|---|
| 添加博客 | blogwatcher add "My Blog" https://example.com |
| 列出已跟踪博客 | blogwatcher blogs |
| 扫描更新 | blogwatcher scan |
| 列出文章 | blogwatcher articles |
| 标记某篇文章已读 | blogwatcher read 1 |
| 全部标记已读 | blogwatcher read-all |
| 移除博客 | blogwatcher remove "My Blog" |
典型交互输出(引自 SKILL.md 原文示例):
$ blogwatcher blogs Tracked blogs (1): xkcd URL: https://xkcd.com$ blogwatcher scan Scanning 1 blog(s)... xkcd Source: RSS | Found: 4 | New: 4 Found 4 new article(s) total!从scan的输出结构可以看出,blogwatcher 会为每个源报告解析到的源类型(如Source: RSS)、本次发现的文章数与新文章数;"New" 计数说明它内部维护了已见文章状态(与read/read-all的已读标记共同构成增量阅读体验)。
发现更多参数时,SKILL.md 给出的通用建议是:对任意子命令追加--help,即用blogwatcher <command> --help探索 flag 与选项。
门控机制:requires.bins 如何让技能"按需可见"
blogwatcher 的 frontmatter 完整结构如下(摘自 skills/blogwatcher/SKILL.md):
--- name: blogwatcher description: "Monitor blogs and RSS/Atom feeds for updates using the blogwatcher CLI." homepage: https://github.com/Hyaxia/blogwatcher metadata: { "openclaw": { "emoji": "📰", "requires": { "bins": ["blogwatcher"] }, "install": [ { "id": "go", "kind": "go", "module": "github.com/Hyaxia/blogwatcher/cmd/blogwatcher@latest", "bins": ["blogwatcher"], "label": "Install blogwatcher (go)", }, ], }, } ---这段元数据在 OpenClaw 加载时承担三个职责:
requires.bins: ["blogwatcher"]是硬性依赖门控。加载器在加载技能时检查宿主机PATH上是否存在该二进制;未安装则技能整体不可用,不会进入 Agent 提示词。这意味着 blogwatcher 技能是典型的"工具型技能"——它自身不含脚本,只是教会模型如何驱动外部 CLI。install数组提供补救路径。当门控失败时,macOS Skills UI / Gateway 可依据安装器规格代为安装;安装成功后,新依赖检查能发现已进入PATH的blogwatcher二进制,从而让技能变为合格(eligible)。emoji与homepage属于展示性字段,分别用于 macOS Skills UI 的图标与"网站"入口。
从源码结构看,门控与安装声明的汇聚点在 collectSkillBins:它遍历一组技能条目,把metadata.requires.bins、metadata.requires.anyBins与每条install规格的bins字段合并去重(并按序排序),供二进制探测与状态展示复用。blogwatcher 的requires.bins与install[0].bins都指向同一个blogwatcher,二者合并后即为一个条目,探测命中即门控通过。frontmatter 的解析入口在 src/skills/loading/frontmatter.ts,其嵌套metadata块会被扁平化为 JSON 字符串后按 JSON5 重新解析,这正是 blogwatcher frontmatter 采用 JSON5 对象字面量写法的原因。
会话生命周期:快照、刷新与配置开关
结合 Skills 文档 的运行时说明,blogwatcher 技能的实际生效还受以下机制约束:
- 会话级快照:OpenClaw 在会话开始时对合格技能做快照,会话内各轮次复用同一份列表。因此安装
blogwatcher后,若当前会话的快照仍不含它,新会话才会稳定纳入;技能文件变化或新节点连接触发的刷新则会在下一轮生效。 - 沙箱注意:
requires.bins在宿主机检查,但若 Agent 运行在沙箱中,二进制还必须存在于容器内——可通过agents.defaults.sandbox.docker.setupCommand或自定义镜像安装blogwatcher,否则 Agent 看到技能、执行却找不到命令。 - 配置开关:可以在
~/.openclaw/openclaw.json的skills.entries下按技能名控制:
{ skills: { entries: { blogwatcher: { enabled: false }, // 显式禁用该内置技能 }, }, }enabled: false会直接让技能不可用;blogwatcher 未声明primaryEnv,因此不需要apiKey/env注入,这是它与gemini等需要凭据技能的重要区别。
- 提示词成本:每个合格技能在系统提示词中约增加 97 个字符(约 24 token)加
name/description长度;blogwatcher 的 description 很短,开销可控。
适用前提与小结
本技能适用于已安装 Node 版 OpenClaw 且能在宿主机(或沙箱)PATH上提供blogwatcher二进制的任何操作系统环境;依赖 Go 1.21+ 仅在使用 OpenClaw 自动安装通道时才是前提。整体来看,skills/blogwatcher/SKILL.md 是一份紧凑的"CLI 驱动型技能"范本:frontmatter 用requires.bins+ Go 安装器规格解决依赖,正文用 7 条命令 + 2 段示例输出覆盖订阅监控全生命周期;而门控、安装器偏好与快照刷新的底层行为,则由 src/skills 目录下的发现(discovery)与加载(loading)模块保证,读者可沿 collectSkillBins 与 Skills 文档 继续深入。
【免费下载链接】openclawThe AI that really does things. Any OS. Any Platform. The lobster way. 🦞项目地址: https://gitcode.com/GitHub_Trending/cl/openclaw
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考