Reddit 与 RSS 的"无浏览器"时代:Hermes 服务器上也能读社区与订阅源

周三晚上你想写周报,想看看“圈子里最近在聊什么”:那个新框架社区到底怎么评价?关注的仓库是不是又发了新版?可惜现实很骨感——如果你把 Hermes 跑在一台服务器上,Reddit 基本是死的:网页版弹“Prove your humanity”人机验证,.json 接口直接 403,绕来绕去都进不去;RSS 呢,不是要装阅读器,就是要自己写脚本去啃一堆格式各异的 XML。信息通路断了,调研就只能靠猜。9 月 5 日合入 Hermes 主分支的两个新内置技能,把这条路修通了:rss-feeds 把 RSS / Atom / JSON Feed 读成一条干净的列表,reddit-reading 让你不装浏览器、不登录账号就读 Reddit——两个都随 Hermes 自带,零安装、零配置就能跑。
先说人话:这两个技能是什么
Hermes 的“技能”(skills)是装在它脑子里的操作手册:遇到对应场景时,它自己会加载手册、按步骤执行。这次新增的两个属于内置技能(bundled),意思是跟着 Hermes 一起分发、默认就能用,不需要像可选技能那样先执行安装命令。
- rss-feeds:读取 RSS 2.0、RSS 1.0/RDF、Atom、JSON Feed 四种格式,输出按时间倒序的干净列表(标题、链接、UTC 发布时间、作者、摘要)。只依赖 Python 标准库,不用装任何包。你只给一个普通网页地址它也能自动“发现”藏在页面里的订阅源。
- reddit-reading:读 subreddit 版面、站内/版内搜索、完整帖子(含评论区)、用户动态。它不发布、不投票、不登录你的账号——纯只读。
它们的用武之地很典型:社区口碑调研(“r/LocalLLaMA 最近怎么说这个新模型”)、项目版本监控(GitHub 的 releases.atom)、把“每天刷一遍的网站”变成定时摘要。
RSS:从“要装阅读器”到“一句话的事”
对 Hermes 说话不用背命令,自然语言就行:
“这个 GitHub 仓库最近发了哪些版本?” “帮我把这些博客的更新整理成摘要:https://simonwillison.net/” “每天早上 9 点把 arXiv cs.CL 的新论文发给我。”
背后实际执行的是技能自带的小脚本。把地址换成任意 RSS/Atom/JSON Feed,或者干脆只给一个网站首页(它会自动发现订阅源):
python3 scripts/feed.py read https://github.com/NousResearch/hermes-agent/releases.atom --limit 5
python3 scripts/feed.py read https://simonwillison.net/ # 传页面地址 → 自动发现 feed
python3 scripts/feed.py read URL --since 2026-09-01 --json # 只要某天之后的新条目
python3 scripts/feed.py discover https://example.com/ # 列出页面上能找到的所有候选 feed
输出里每条包含 title / link / published(UTC)/ author / summary,摘要去掉了 HTML、最长 2000 字符,按时间从新到旧排好。常见的订阅源地址它都认,比如:
| 想看什么 | 订阅源地址 |
|---|---|
| GitHub 仓库的发版/提交/标签 | https://github.com/OWNER/REPO/releases.atom、…/commits/BRANCH.atom |
| 某个 subreddit | https://www.reddit.com/r/NAME/.rss |
| YouTube 频道 | https://www.youtube.com/feeds/videos.xml?channel_id=UC… |
| Hacker News | https://hnrss.org/frontpage、https://hnrss.org/newest?q=关键词 |
| arXiv 论文 | https://rss.arxiv.org/rss/cs.CL |
| Substack / Medium / WordPress / Ghost | 站点 /feed、medium.com/feed/@用户 等 |
两个实用细节:一是做定时摘要时用 --since 只抓上次之后的新内容——上次看到的发布时间存下来,下次传给脚本,天然去重,比每次把整个首页抓回来再比对省得多(配合 Hermes 的 cron 自动化很顺);二是 feed 里的摘要经常被截断或只有第一段,想要全文,把条目的 link 丢给 web_extract 去抓完整页面即可。
Reddit:服务器 IP 也能读,不登录
你可能试过:从 VPS 上访问 reddit.com/…/.json 返回 403,api.reddit.com、old.reddit.com 也一样;伪装浏览器 User-Agent 照样 403;就连 r.jina.ai 这类代理和浏览工具也会撞上“blocked by network security”的人机墙。Reddit 对数据中心 IP 几乎关闭了所有免登录通道——除了它自己的公开 Atom feed。reddit-reading 用的正是这条路:默认后端是 Reddit 的 .rss 接口,匿名、免登录,代价是限流比较狠(大约每 IP 每分钟 1 次请求),而且只有帖子和顶层评论、没有分数。
如果你需要更频繁、更完整地读(比如持续盯某个版),有一个免费的可选升级:去 Reddit 的 应用设置页 注册一个 “script” 类型的应用,把拿到的两个值写进 ~/.hermes/.env:
REDDIT_CLIENT_ID=...
REDDIT_CLIENT_SECRET=...
这里要澄清一个常见的误会:这是应用注册,不是用户登录。脚本只用 app-only 的 client_credentials 授权方式,从不使用你的用户名、密码或浏览器 Cookie,也永远不会以你的身份发帖。配上凭证后自动切换成 OAuth 接口,限流大约提升到每分钟 100 次,并且能拿到嵌套评论、分数和评论数;凭证缺失或被拒时自动退回匿名模式。两种模式对比如下:
| 匿名模式(默认) | OAuth 应用凭证 | |
|---|---|---|
| 准备工作 | 什么都不用 | 注册免费应用,填 2 个环境变量 |
| 限流 | 约 1 次/分钟/IP | 约 100 次/分钟 |
| 帖子数据 | 帖子 + 顶层评论,无分数 | 嵌套评论、分数、评论数 |
| 是否会以你的身份操作 | 不会 | 不会 |
用法同样是自然语言为主(“r/LocalLLaMA 最近在聊什么?”),底层命令长这样:
python3 scripts/reddit.py doctor # 当前用哪个后端、限流窗口还剩多久
python3 scripts/reddit.py sub LocalLLaMA --sort hot --limit 15
python3 scripts/reddit.py search "hermes agent" --sub LocalLLaMA --sort new
python3 scripts/reddit.py thread <帖子链接> --limit 40 # 帖子 + 评论区
python3 scripts/reddit.py user spez --limit 10
一次会话里如果还没跑过 doctor,先跑一下——它会告诉你当前后端和匿名窗口剩余秒数,避免你规划了五连发结果全撞在限流上(匿名模式每分钟只能发大约一个请求,脚本遇到 429 会等窗口重置后自动重试一次)。
“大家怎么说 X”:一个问题,自动铺开五条线
这两个技能单独用已经很值,真正的化学反应在组合拳里。它们被编进了 Hermes 的调研链路:grounded-citations(带引用的调研)和 competitor-news-monitor(竞品动态监控)的关联技能列表都加上了它们。效果是,当你问“大家现在怎么说 X?“,Hermes 会把这个问题自动铺到多条线上——网页搜索、Reddit 讨论、订阅源、视频、代码——然后每条引用都指向原始链接(比如 Reddit 帖子的 permalink,而不是列表页),方便你点回去核实。比起只搜网页,这种”多平台扫一遍“的调研方式更不容易漏掉社区里真正的声音。
先看清边界,再放心用
- 纯只读:reddit-reading 不发布、不投票、不私信、不做任何需要登录的操作。想用 Hermes 发帖是另一回事,不在这个技能范围内。
- 别去硬碰 403:数据中心 IP 上
.json/api.reddit.com/old.reddit.com都是死路,伪装浏览器 UA 也没用;r.jina.ai同样被墙。走技能的默认通道就好。blocked-page-recovery的 Wayback 路线只能救回被存档过的旧帖子,抓不了新内容。 - 限流是设计的一部分:匿名模式 1 次/分钟是 Reddit 定的规矩,脚本会等窗口,但如果你需要持续高频读取(监控、一次几十个请求),正确的做法是去注册免费应用凭证,而不是反复重试硬刷。
- 密钥别进聊天:
REDDIT_CLIENT_SECRET只放在.env里,脚本从环境变量读取;别把它贴进对话或日志。 - 版本状态:这两个技能 9 月 5 日合入主分支,在 8 月 31 日发布的 v0.21.0 之后,所以目前属于
main分支专属,随下一个版本发布;Hermes 的更新机制会把内置技能一起带过去。想抢先体验的话,用装了最新main的安装即可。
小结
对一个跑在服务器上的 agent 来说,“读社区”曾经是最别扭的能力之一——Reddit 层层设卡、RSS 又要自己造轮子。现在这两件事都变成了随身的零安装技能:RSS 管订阅源的广度(GitHub、HN、arXiv、博客、播客),Reddit 管社区声音的深度(版面、搜索、帖子、用户),再配上自动铺开的多平台调研和逐条引用,盯行业动态这件事,终于可以完全交给 agent 了。顺便说一句,如果你也常用 Hermes 的各种免费搜索渠道,这套“网页 + 社区 + 订阅源”的组合,基本覆盖了日常情报收集的完整链路。