Agent stack build plans · № 5 · Hermes news pipeline

Set it up

Real commands, real file paths, staged. Budget an evening; the crons wait until stage 5.

1 · Install and first run

Linux / macOS / WSL2 / Termux

curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash

Windows (PowerShell)

iex (irm https://hermes-agent.nousresearch.com/install.ps1)

Run hermes once to finish onboarding. Hermes is model-agnostic — point the model section of ~/.hermes/config.yaml at Nous Portal, OpenRouter, OpenAI, or your own endpoint. For this build you need a Nous Portal subscription regardless of which model you chat with, because Portal’s tool gateway is what serves web_search, web_extract, x_search, and the browser tools — all metered (see the docs, integrations → Nous Portal). Secrets go in ~/.hermes/.env, never in config.yaml.

2 · The messaging gateway

Configure your platform (Telegram and Slack both confirmed; ~20 others supported), then start the daemon — it’s installable as a systemd/launchd service so it survives reboots, which a cron pipeline obviously requires.

Start the gateway

hermes gateway

Gateway access is binary — approved senders get the whole agent. When you (or your co-editor) first DM the bot, an unknown sender gets a one-time pairing code; approve it from the terminal:

Approve a paired user

hermes pairing approve telegram <code>

3 · The voice files

Two files, two sizes. ~/.hermes/SOUL.md is loaded into every session (system-prompt slot #1) — keep it under a screenful. The full style guide lives in a skill, loaded only when invoked:

~/.hermes/skills/editorial/house-style/SKILL.md — skeleton

---
name: house-style
description: >
  House style for [publication]: voice, banned words, lede rules,
  sourcing standards, structure, and the 10-point scoring rubric.
  Apply when drafting or scoring any piece.
version: 0.1.0
---

## Voice
[register, reader, what we never do]

## Banned words and constructions
[the list — be specific, this is what the score checks]

## Sourcing
Every stat and quote carries a numbered source. One source = a hedge
or a cut, never a confident claim.

## Structure
Headline ≤ 70 chars · dek · lede ≤ 2 sentences · 2–3 sections ·
further-reading links.

## Scoring rubric (0–100)
[10 checks × 10 points — the Summarizer self-scores against these]

You don’t have to hand-write either file — stage 1 of the prompts has Hermes draft both from examples of your writing, using its skill_manage tool (writes are gated by skills.write_approval, so you confirm each file). The skill then answers as the /house-style slash command. Worth knowing: hermes skills browse / search / install exist for the skills hub, but your house style is the one skill you should never install off a shelf.

4 · Safety toggles before any cron exists

5 · The cron jobs

Create them by asking the agent — the cronjob tool takes natural-language schedules and stores definitions in ~/.hermes/cron/ (stage 2 of the prompts is the exact ask). Then verify and dry-run from the CLI:

Inspect, dry-run, and control the schedule

hermes cron list
hermes cron run <job>      # fire one edition now, watch it in Telegram
hermes cron status
hermes cron pause <job>    # holidays exist
hermes cron resume <job>

Run hermes cron run manually for the first few days before letting the schedule tick on its own — every early mistake you catch by hand is a mistake that doesn’t recur three times daily on a meter.

6 · Optional: the RSS-to-webhook bridge (you build this)

Only after the cron sweep proves insufficient. Point an external RSS-to-webhook service — or a ten-line script on any machine with a crontab — at Hermes’ webhook gateway:

Bridge target (route configured under platforms.webhook.extra)

POST http://your-server:8644/webhooks/rss-inbox
# port 8644 · shared secret · HMAC validation supported
# rate_limit 30/min · max_body_bytes enforced

Give the route a prompt template that triages the item against your bar and a deliver target of your Telegram thread — a fat feed item can then wake the desk between editions. This is glue you own and maintain; that’s the honest price of “RSS support”.

Disagree? Pin a note on it →