Architecture
One daemon with markdown memory, plus three skills you add to make it a community manager.
session_search over SQLite FTS5 at ~/.hermes/state.dbskill_manage, gated by skills.write_approvalmessaging, discord, discord_admin, terminal, memory, session_search, cronjob, skillsskill_managediscord_admin assigns the roleHow it works
Answering
A member posts on any platform. The gateway checks pairing and allowlists,
then the agent answers, using session_search for past
discussions and the changelog skill for facts. Because it’s one agent, a
Slack answer can draw on a Discord thread.
Remembering
Built-in memory is small: two capped markdown files go into every system prompt, and full-text search covers past sessions. There is no vector store and no per-member memory. So MEMORY.md stays an index (“member notes live in the community-notes skill”), and the detail goes in per-member files the agent maintains.
Rewarding
On Friday a cron job has the agent gather evidence from session search and
the notes files and DM you proposals. You approve, the shoutouts skill posts,
and discord_admin assigns roles. Hermes has no rewards feature, so
this is the scheduler plus one skill you set up in
the prompts. Slack and WhatsApp get the
announcement, and roles are Discord-only.
Why not one bot per platform?
With one agent, a Slack answer can mention that petra asked on Discord last week, each person has one notes file wherever they posted, and there’s one reward queue. One bot everywhere also means one bot that can do damage everywhere, so setup spends most of its time on access control.