Set it up
Install, pick a model and connect three platforms. Then spend the rest of the evening on access control.
1 · Install and pick a model
macOS / Linux / 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 and connect a provider: Nous Portal,
OpenRouter, OpenAI or your own endpoint. Start with a mid-tier
model, since every message is a model call, and move up once
you’ve seen the volume. Config is in ~/.hermes/config.yaml,
secrets in ~/.hermes/.env. CLI args beat config.yaml, which beats
.env, which beats defaults.
2 · Connect the three platforms
You need a Discord bot token, a Slack app and a WhatsApp link. Variable
names and scopes change, so take them from each platform’s page in the
messaging
docs. Tokens go in ~/.hermes/.env, settings in that
platform’s section of config.yaml. Then start the
gateway:
Run the gateway (one daemon, all platforms)
hermes gateway
When it works in the foreground, install it as a systemd (Linux) or launchd (macOS) service so it survives reboots. Add Discord first, since it’s easiest to verify, then Slack, then WhatsApp.
3 · Lock it down before you invite it anywhere
Access is in or out: anyone who passes can command the agent. The gateway checks in this order: per-platform allow-all → DM-pairing approved list → platform allowlists → global allowlist → global allow-all → deny. Two rules:
- Never enable allow-all where strangers can message the bot. On a public Discord, every member, present and future, could command it. It’s first in the check order, so it overrides every list below it.
- Use DM pairing for people and allowlists for known IDs. An unknown user who DMs the bot gets a one-time code, gives it to you, and you approve it:
Approve a paired user (per platform)
hermes pairing approve discord <code>
Pair yourself and your mods. Everyone else is community. There are
no role tiers inside one instance. If mods need a different
bot from the one you run, make a separate profile
(hermes profile create mods, run with
hermes --profile mods) with its own config, allowlist and
toolsets. hermes gateway list shows gateways per profile. Most
communities don’t need this on day one.
4 · Set the approval gates
Two settings in config.yaml:
skills.write_approvalgates the agent editing its own skills withskill_manage. Keep it on. The prompts have the agent write three skills, and you want to see each diff, because skill files persist and run scripts.approvals.modeissmart(the model judges risk),manualoroff. Usemanualfor the first week while you see what the bot tries to do.approvals.denytakes fnmatch globs for commands that must never run, whoever asks.
5 · Cron
Jobs live in ~/.hermes/cron/, schedules can be plain
language, and output can go to any connected platform (that’s how the
pulse reaches your DMs). You’ll create the jobs in the prompts. These
manage them:
Cron management
hermes cron list hermes cron status hermes cron run <job> # fire one now to test it hermes cron pause <job> hermes cron remove <job>
Before building a changelog fetcher, try hermes skills search
and hermes skills install. They pull published skills from the
Skills Hub and scan them on install.