Skip to main content
Bindings map messaging platform conversations to agents. Each binding defines which agent handles messages from a specific guild, workspace, channel, or user.

Binding Definition

agent_id
string
required
ID of the agent that handles messages matching this binding.
[[bindings]]
agent_id = "support"
channel
string
required
Messaging platform. Must match a configured messaging adapter.Valid values: discord, slack, telegram, email, twitch, webhook
[[bindings]]
agent_id = "main"
channel = "discord"
adapter
string
Named adapter instance for platforms that support multiple instances (Discord, Slack, Telegram, Email, Twitch).If not set, targets the default adapter credentials.
[[bindings]]
agent_id = "support"
channel = "discord"
adapter = "support_bot"  # Uses messaging.discord.instances[0] where name="support_bot"

Platform-Specific Filters

Discord

guild_id
string
Discord guild (server) ID. Only messages from this guild match this binding.
[[bindings]]
agent_id = "community"
channel = "discord"
guild_id = "123456789012345678"
channel_ids
array
Discord channel IDs. Only messages from these channels (or threads under these channels) match this binding.If empty, all channels in the guild are allowed.
[[bindings]]
agent_id = "support"
channel = "discord"
guild_id = "123456789012345678"
channel_ids = ["987654321098765432", "876543210987654321"]
require_mention
boolean
default:"false"
Require explicit @mention or reply-to-bot for inbound messages in guild channels.
[[bindings]]
agent_id = "assistant"
channel = "discord"
guild_id = "123456789012345678"
require_mention = true
dm_allowed_users
array
User IDs allowed to DM the bot through this binding. If empty, DMs are ignored for this binding.
[[bindings]]
agent_id = "personal"
channel = "discord"
dm_allowed_users = ["111222333444555666", "777888999000111222"]

Slack

workspace_id
string
Slack workspace (team) ID. Only messages from this workspace match this binding.
[[bindings]]
agent_id = "team"
channel = "slack"
workspace_id = "T01234567"
channel_ids
array
Slack channel IDs. Only messages from these channels match this binding.If empty, all channels in the workspace are allowed.
[[bindings]]
agent_id = "support"
channel = "slack"
workspace_id = "T01234567"
channel_ids = ["C01234567", "C07654321"]
dm_allowed_users
array
Slack user IDs allowed to DM the bot through this binding.
[[bindings]]
agent_id = "personal"
channel = "slack"
dm_allowed_users = ["U01234567", "U07654321"]

Telegram

chat_id
string
Telegram chat ID. Only messages from this chat match this binding.
[[bindings]]
agent_id = "group"
channel = "telegram"
chat_id = "-1001234567890"
dm_allowed_users
array
Telegram user IDs allowed to DM the bot through this binding.
[[bindings]]
agent_id = "personal"
channel = "telegram"
dm_allowed_users = ["123456789", "987654321"]

Twitch

channel_ids
array
Twitch channel names (without the # prefix). Only messages from these channels match this binding.
[[bindings]]
agent_id = "stream"
channel = "twitch"
channel_ids = ["mystreamer", "otherstreamer"]

Binding Resolution

Bindings are evaluated in order. The first binding that matches an inbound message determines which agent handles it. If no binding matches, the message is routed to the default agent (the agent with default = true).

Examples

Discord Guild Binding

[[bindings]]
agent_id = "community"
channel = "discord"
guild_id = "123456789012345678"
This binding routes all messages from Discord guild 123456789012345678 to the community agent.

Discord Channel-Specific Binding

[[bindings]]
agent_id = "support"
channel = "discord"
guild_id = "123456789012345678"
channel_ids = ["987654321098765432"]
This binding routes messages only from channel 987654321098765432 to the support agent.

Discord DM Binding

[[bindings]]
agent_id = "personal"
channel = "discord"
dm_allowed_users = ["111222333444555666"]
This binding allows user 111222333444555666 to DM the bot, routed to the personal agent.

Discord with Mention Requirement

[[bindings]]
agent_id = "assistant"
channel = "discord"
guild_id = "123456789012345678"
require_mention = true
Messages in guild channels are only processed if the bot is @mentioned or replied to.

Slack Workspace Binding

[[bindings]]
agent_id = "team"
channel = "slack"
workspace_id = "T01234567"
This binding routes all messages from Slack workspace T01234567 to the team agent.

Slack Channel-Specific Binding

[[bindings]]
agent_id = "support"
channel = "slack"
workspace_id = "T01234567"
channel_ids = ["C01234567"]
Only messages from channel C01234567 are routed to the support agent.

Telegram Chat Binding

[[bindings]]
agent_id = "group"
channel = "telegram"
chat_id = "-1001234567890"
Messages from Telegram chat -1001234567890 are routed to the group agent.

Twitch Channel Binding

[[bindings]]
agent_id = "stream"
channel = "twitch"
channel_ids = ["mystreamer"]
Messages from Twitch channel mystreamer are routed to the stream agent.

Multiple Agents, Multiple Platforms

# Support agent handles Discord support channel
[[bindings]]
agent_id = "support"
channel = "discord"
guild_id = "123456789012345678"
channel_ids = ["987654321098765432"]

# Community agent handles rest of Discord guild
[[bindings]]
agent_id = "community"
channel = "discord"
guild_id = "123456789012345678"

# Team agent handles Slack workspace
[[bindings]]
agent_id = "team"
channel = "slack"
workspace_id = "T01234567"

# Default agent handles everything else
[[agents]]
id = "default"
default = true

Named Adapter Instances

# Configure two Discord bot instances
[messaging.discord]
token = "env:DISCORD_TOKEN_MAIN"

[[messaging.discord.instances]]
name = "support_bot"
token = "env:DISCORD_TOKEN_SUPPORT"

# Main bot handles general guild
[[bindings]]
agent_id = "community"
channel = "discord"
guild_id = "111111111111111111"
# No adapter specified = uses default token

# Support bot handles support guild
[[bindings]]
agent_id = "support"
channel = "discord"
adapter = "support_bot"
guild_id = "222222222222222222"

Build docs developers (and LLMs) love