Appearance
Multi-Platform & Approval Controls
By now you have at least one platform connected and working. The next step is running multiple platforms from the same gateway, Telegram for quick mobile access, Discord for team channels, maybe Slack for work. A single Hermes gateway handles all of them simultaneously, sharing the same agent core, configuration, and session state.
But running multiple platforms raises a question you didn't have with just one: who gets access to what? The bot that helps you deploy code probably shouldn't run shell commands for a random person who found your Telegram bot. This lesson covers running multiple platforms side by side, per-platform tool controls, and the approval system that gates access.

What you'll learn
- One gateway process runs all platforms simultaneously ,
hermes gateway setupfor each platform, then restart once, and everything comes up together hermes toolsopens an interactive curses UI to enable or disable tools per platform, disableterminalandfileon public-facing platforms while keeping them on trusted ones- Gateway pairing approval gates who can interact with Hermes, new users are held in a pending state until you run
hermes pairing approve /approveand/denycontrol command-level approval from within the chat platform itself, so you don't need terminal access to gate dangerous operations
The problem
You have Telegram working. Then you add Discord. Both connect. But now your Discord server has people on it who shouldn't run arbitrary shell commands on your infrastructure. And someone in a Telegram group you didn't intend to be public finds your bot and starts sending it prompts.
The gateway needs two layers of control: platform-level tool gating (which tools does each platform get) and user-level pairing (which users are allowed to interact at all). Without these, you're running an open terminal that anyone with your bot's username can access.
Options & when to use each
| Control layer | What it does | When to use it |
|---|---|---|
Per-platform tools (hermes tools) | Disables specific tools for specific platforms, e.g., terminal off for Discord, on for Telegram | Every multi-platform setup. Public platforms get fewer tools |
Pairing approval (hermes pairing) | Requires you to explicitly approve each new user before Hermes responds to them | Public-facing bots, shared servers, any platform where you don't control who finds the bot |
Gateway command approval (/approve /deny) | Lets you approve or deny individual tool calls from within the chat platform | When you want to gate dangerous commands but don't want to disable tools entirely |
Safe toolset (hermes tools → toggle safe) | Restricts a platform to a minimal, low-risk toolset (search, read-only file access, no terminal) | Public channels, demo bots, untrusted environments |
| YOLO mode | Disables all approval prompts, Hermes auto-executes everything | Private, trusted environments where you explicitly want full autonomy. Not recommended for shared platforms |
Build it
Step 1: Add a second platform
If you completed both the Telegram and Discord lessons, you already have two platforms. If not, pick the one you haven't set up and run through its lesson now. Both platforms coexist in the same gateway configuration.
Check what's currently connected:
/platformsSend this slash command from any connected platform. Hermes responds with a list of connected platforms and their status. You should see both Telegram and Discord (or whichever you've configured) showing as connected.
Step 2: Configure per-platform tools
Launch the interactive tool configuration UI to manage platform permissions. Use this interface to disable dangerous tools on public-facing platforms while keeping them enabled for trusted ones.
bash
hermes toolsThis opens an interactive curses UI. Use arrow keys to navigate, space to toggle, and Enter to confirm. The UI shows each toolset and, when you select one, the platforms it's enabled for.
What to disable on which platform depends on trust level:
| Platform | Typical tool config | Why |
|---|---|---|
| Telegram (personal) | Everything on | It's your private bot, same access as the CLI |
| Discord (team server) | Everything except terminal and file write | Team members can ask questions and get information, but shouldn't execute shell commands |
| Discord (public server) | safe toolset only | Read-only, search, no code execution or terminal access |
| Slack (work) | Everything on, but with gateway approval enabled | Same as personal, but dangerous commands need explicit approval from within Slack |
For this lesson, set Discord to a restricted toolset. Open hermes tools, navigate to terminal, and disable it for Discord. Do the same for file. Leave web, search, vision, and session_search enabled. Apply the changes.
Apply these changes by restarting the gateway process. The new restrictions will take effect on the next session.
bash
hermes gateway restartTool changes take effect on new sessions. Any active conversation on Discord will pick up the restrictions when the next message starts a fresh session.
Step 3: Test the tool restrictions
From Discord, send a message asking Hermes to run a terminal command:
Run: ls -la /tmpIf the terminal toolset is disabled for Discord, Hermes refuses with a message like "The terminal toolset is not available on this platform." If it executes the command, the tool restriction didn't take effect, run hermes tools again and verify you disabled it for the correct platform.
From Telegram (if you have it), send the same command. It should work, tool restrictions are per-platform, and Telegram still has terminal enabled.
Step 4: Enable pairing approval
Pairing approval gates who can interact with Hermes at all. New users are held in a pending state. You approve them explicitly:
bash
# List pending pairing requests
hermes pairing list
# Approve a specific user
hermes pairing approve
# Revoke access from an approved user
hermes pairing revoke <user_id>Without pairing enabled, anyone who finds your bot can message it and Hermes responds. With pairing enabled, only approved users get through. You can also enable auto-approval for specific platforms or disable pairing entirely, the behavior depends on your gateway configuration.
Step 5: Use gateway slash commands
These slash commands work from any connected platform. They give you gateway control without needing terminal access:
| Command | What it does |
|---|---|
/platforms | List connected platforms and their status |
/approve | Approve a pending tool execution that's waiting for your okay |
/deny | Deny a pending tool execution |
/restart | Restart the gateway (use when configuration changes or something gets stuck) |
/sethome | Set the current chat as the home channel for automated deliveries |
/status | Show session information |
/topic on|off | Enable or disable DM topic sessions (Telegram only) |
During a conversation, if Hermes needs approval for a tool call and you've configured gateway approval, it sends a message describing the command and waits. You respond with /approve to let it run or /deny to block it. This is the same approval flow as the CLI, but it works from any platform.
What goes wrong
| Mistake | How you notice it | The fix |
|---|---|---|
| Tool restriction applies to wrong platform | A platform that should have tools enabled says they're unavailable (or vice versa) | hermes tools shows which platforms each toolset is enabled for. Tool names can be misleading , file controls file write operations, not just reads. Double-check the UI and restart the gateway after changes |
| Gateway crash when adding a second platform | hermes gateway restart fails after adding a second platform config | One platform's bad config crashes the entire gateway, not just that platform. Check ~/.hermes/logs/gateway.log for errors, the failing platform will be named. Fix or remove its config, then restart |
| Pairing approval blocks everyone including you | After enabling pairing, nobody can message Hermes, including the bot owner | hermes pairing approve from the terminal approves your own Telegram/Discord user. You're not auto-approved just because you set up the bot, you need to approve yourself first |
/approve doesn't appear as a slash command | Typing /approve on Discord or Telegram doesn't autocomplete | Gateway slash commands take effect after a restart. If you enabled the gateway recently, hermes gateway restart and wait for slash commands to propagate (up to 60 seconds on Discord) |
| Tool changes don't take effect | Disabled a tool but Hermes still uses it | Toolset changes apply to new sessions only, not existing conversations. Active sessions retain the toolset they started with. Either /new from the platform or restart the gateway and start a fresh conversation |
Confirm it worked
Run these checks to verify that multiple platforms are active and that tool restrictions and pairing approvals are functioning correctly.
bash
# 1. Verify multiple platforms are connected
# Send /platforms from any connected platform
# 2. Verify tool restrictions work
# From Discord (where you disabled terminal):
# "Run: echo test"
# Should be refused
# From Telegram (where terminal is enabled):
# "Run: echo test"
# Should execute and return "test"
# 3. Verify pairing approval
# Have someone else (or a second account) message the bot
# Run: hermes pairing list
# Should show their pending request
# Run: hermes pairing approve
# They should now be able to interact
# 4. Test gateway command approval from a chat platform
# Send /restart from Telegram
# Hermes should restart the gateway (and you'll see it come back online)If step 1 shows both platforms connected, step 2 demonstrates different tool access on different platforms, and step 3 confirms pairing approval works, you have a multi-platform gateway with proper access controls. Your agent is now safely reachable from multiple surfaces, each with the right level of access for its audience.
Next: Voice Mode , add speech-to-text and text-to-speech so you can talk to Hermes instead of typing.