Run Hive from your own private Discord server. One bot account, three personas:
| Channel | Persona | What it does |
|---|---|---|
#general (text) |
The Steward | Executive assistant with every tool group, all connected MCP servers, and on-the-fly skill loading (list_skills / load_skill). Just talk to it. |
colony (forum) |
The Operator | One thread per colony team, created automatically. Instructions in a thread start missions (or steer a live run); questions get answered from team state. Step-by-step progress (✅/❌ mission board) and a final status card post automatically. |
health (forum) |
The Sentinel | Posts deduplicated findings — budget burn, provider outages, failed missions, blockers, repeated errors — one thread per problem, auto-resolved when it clears. Reply in a thread and a triage agent investigates and can file a GitHub issue. |
The full design lives in the repository’s Discord bridge specification.
Setup
- Create the bot. In the Discord Developer Portal: New Application → Bot. Under Privileged Gateway Intents, enable Message Content Intent. Copy the bot token.
- Invite it to your private server. OAuth2 → URL Generator: scopes
bot+applications.commands; bot permissions: View Channels, Send Messages, Send Messages in Threads, Create Public Threads, Manage Threads, Read Message History, Add Reactions. Open the generated URL and pick your server. - Give Hive the token. Settings → Discord Bridge in the Hive UI, or set
DISCORD_BOT_TOKENin the environment (env wins). The bridge hot-starts on save — no restart needed. - Prepare the channels. You need one text channel (e.g.
#general) and two forum channels (e.g.colonyandhealth). Default name-matching finds channels whose names containgeneral/colony/health. - Run
/hive setupin your server. The first person to run it becomes the owner — the bridge ignores everyone else (default-deny). Passgeneral:/colony:/health:options to bind specific channels; re-running rebinds idempotently. - Pick models. The bridge personas are staff profiles — open the Staff page and set a model preference for Steward, Colony Operator, and Health Triage. Until a model is set, the persona replies with a pointer here instead of an answer.
Slash commands
/hive setup— bind channels, claim ownership (first run)/hive status— uptime, running missions, gateway health/hive colonies— roster with live status and queue depth/hive stop team:<name>— stop a colony’s running mission/hive new-session— fresh conversation in the current channel/thread (sessions also roll after 24h idle)/hive skills— the skill catalog the Steward can load
How the colony threads behave
- Every colony team gets exactly one thread, created within a minute of the team existing. Deleting a team archives its thread with a farewell post — history is never deleted.
- Message an idle team → the Operator starts a mission immediately (your message is the authorization). Message a working team → your message is injected as a high-priority direction the crew picks up between rounds.
- A mission posts: a start note, one mission-board message edited in place as steps flip 🔄→✅/❌, at most one orchestrator summary per round, questions when a human gate or permission block is hit, and a final status card (steps passed, duration, artifacts, summary). Token streams and raw logs never post.
Security notes
- Only the owner allowlist gets responses; strangers in the server get silence — no acks, no side effects.
- The bot token is stored like every other Hive secret (masked in the UI,
0600SQLite, env-var override). - Everything the bridge posts to Discord leaves your machine: deliverable summaries, health evidence, mission goals. Keep the server private.
- Issues from health triage go to the repo in the
discord_health_reposetting (owner/repo), falling back to the git remote of the Hive checkout itself.