two¢ents

Architecture

One daemon with markdown memory, plus three skills you add to make it a community manager.

Discordserver + DMs
Slackworkspace
WhatsAppgroup + DMs
↓  messages in, replies out  ↓
hermes gatewayone background daemon serves every platform · at the door: DM pairing + allowlists (in or out)
↓
agent coreyour model via Nous Portal, OpenRouter, OpenAI, or your own endpoint · persona in ~/.hermes/SOUL.md
↓  reads and writes  ↓
MemoryMEMORY.md (2,200-char cap) + USER.md (1,375) injected into the system prompt · session_search over SQLite FTS5 at ~/.hermes/state.db
Skills~/.hermes/skills/<category>/<name>/SKILL.md + scripts/ · the agent edits them via skill_manage, gated by skills.write_approval
Cronbuilt-in scheduler, jobs in ~/.hermes/cron/ · natural-language schedules · delivers to any connected platform
Toolsetsmessaging, discord, discord_admin, terminal, memory, session_search, cronjob, skills
↓  the community-manager layer  ↓
community-notes skill you build thisone markdown file per member under the skill’s references/, kept up to date by the agent with skill_manage
changelog skill you build thisscripts/ that fetch your repo’s releases, so answers cite versions
weekly-shoutouts skill + cron you build thisproposes rewards to you; on approval, discord_admin assigns the role
external memory provider optionalMem0, Honcho or another provider, if you want semantic recall beyond keyword search

How 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.

Disagree? Pin a note on it →