3 jobs, one per editionAgent stack build plans · № 5 · Hermes news pipeline
Architecture
One Hermes instance, four stages. Everything metered is marked, and so is everything you have to build yourself.
1 · Schedule — Hermes built-in cron
The cronjob tool creates jobs (natural-language schedules supported); definitions live in ~/.hermes/cron/; manage with hermes cron list/run/pause/status. Each tick runs the monitoring prompt below and delivers output to your messaging platform.
Telegram / Slack thread2 · Watch — the monitoring sweep metered · Nous Portal
All web tools route through the paid Nous Portal tool gateway. The sweep checks each watchlist item since the last run and applies your bar.
web_search → web_extract (Firecrawl-powered)x_search on your handle listweb_extract on the subreddit page — or a fetch script the skill runs you build this3 · Draft desk — subagent delegation metered + LLM tokens ×3
Three delegate_task calls per story (the delegation toolset spawns isolated subagents for parallel workstreams — Hermes’ own user-stories doc shows this orchestration with a different model per role).
web_extract 4–6 primary sources → numbered claims-to-URLs list. Cheap fast model./house-style skill + SOUL.md voice, cites by claim number, self-scores on your rubric rubric is yours. Strongest model.web_extract, marks verified / unverified. Different model from the Summarizer.4 · Review — the human
Drafts + sources + fact-check table + style score land in the chat via the hermes gateway daemon. You approve, edit (in-thread), or spike. No CMS credentials exist anywhere in this system.
hermes gateway — Telegram, Slack, Discord, and ~20 other platformsWhere the voice lives
Two real mechanisms, used together. ~/.hermes/SOUL.md
is the persona file — system-prompt slot #1, loaded into every session including
every cron tick — so it holds the short version: who you write for, register,
three hard rules. The house-style skill
(~/.hermes/skills/editorial/house-style/SKILL.md, YAML frontmatter,
invoked as the /house-style slash command) holds the long version:
banned words, lede rules, sourcing standards, structure, and the scoring rubric —
loaded only when the Summarizer drafts, not on every tick. Keep them in that
order of size; the traps page explains the billing reason.
The escalation ladder for stubborn pages
web_extract— the default; handles most article pages.browser_navigate/browser_snapshot— Browser Use cloud headless Chromium, also metered via Portal — only where extraction fails (JS-walled pages, cookie mazes).browser_visionis the expensive last resort; the monitoring prompt should say so explicitly.- Respect the walls: no paywall circumvention, no login-walled scraping, honour robots and rate limits. If a source is paywalled, the draft links it and says so.
The optional RSS bridge (you build this)
Hermes has no RSS reader, but it does have a real
webhook gateway: an external RSS-to-webhook service (or a tiny
script on any box with a crontab) POSTs new items to
http://your-server:8644/webhooks/<route-name>. Routes are
configured under platforms.webhook.extra (port 8644, shared secret,
rate limit 30/min, max body size), support HMAC validation, prompt templates,
and deliver targets — so a fat feed item can wake the draft desk between cron
ticks. It’s glue you own: budget an hour, and skip it until the cron
sweep proves insufficient.
State, for completeness
Run-to-run continuity (“since the last run”, “already
covered this”) rides on Hermes’ session recall —
session_search over the SQLite store at
~/.hermes/state.db — plus a running “covered stories”
list the cron prompt maintains. There is no built-in vector store, whatever
other write-ups claim; don’t design as if there were.