Skip to content

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.

Gnome mascot

What you'll learn

  • One gateway process runs all platforms simultaneously , hermes gateway setup for each platform, then restart once, and everything comes up together
  • hermes tools opens an interactive curses UI to enable or disable tools per platform, disable terminal and file on 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
  • /approve and /deny control 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 layerWhat it doesWhen to use it
Per-platform tools (hermes tools)Disables specific tools for specific platforms, e.g., terminal off for Discord, on for TelegramEvery multi-platform setup. Public platforms get fewer tools
Pairing approval (hermes pairing)Requires you to explicitly approve each new user before Hermes responds to themPublic-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 platformWhen 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 modeDisables all approval prompts, Hermes auto-executes everythingPrivate, 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:

/platforms

Send 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 tools

This 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:

PlatformTypical tool configWhy
Telegram (personal)Everything onIt's your private bot, same access as the CLI
Discord (team server)Everything except terminal and file writeTeam members can ask questions and get information, but shouldn't execute shell commands
Discord (public server)safe toolset onlyRead-only, search, no code execution or terminal access
Slack (work)Everything on, but with gateway approval enabledSame 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 restart

Tool 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 /tmp

If 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:

CommandWhat it does
/platformsList connected platforms and their status
/approveApprove a pending tool execution that's waiting for your okay
/denyDeny a pending tool execution
/restartRestart the gateway (use when configuration changes or something gets stuck)
/sethomeSet the current chat as the home channel for automated deliveries
/statusShow session information
/topic on|offEnable 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

MistakeHow you notice itThe fix
Tool restriction applies to wrong platformA 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 platformhermes gateway restart fails after adding a second platform configOne 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 youAfter enabling pairing, nobody can message Hermes, including the bot ownerhermes 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 commandTyping /approve on Discord or Telegram doesn't autocompleteGateway 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 effectDisabled a tool but Hermes still uses itToolset 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.