Agent Barn ships five external Platform Plugins: Slack, Microsoft Teams, Telegram, Discord, and Email. Email requires deployment configuration before a Connection can be created. Built-in Web Chat is a separate dashboard option that needs no external provider credentials.
Platform compatibility is independent of Runtime choice. This reference describes the capabilities Agent Barn currently configures and enforces; the underlying providers may offer additional features that Agent Barn does not configure.
Compatibility scope
An Agent is created without a required communication Platform. Communication is added afterward as one or more Communication Connections.
- An Agent can have zero, one, or many Communication Connections.
- The same Agent can have multiple Connections for the same Platform, such as two Slack workspaces.
- Platform selection is independent of Runtime selection.
- Both Hermes and OpenClaw consume the same runtime-neutral Communications protocol.
- All five external Platform Plugins work with both supported Runtimes.
Where this page says a control is not available, it means Agent Barn does not currently expose it as a Connection policy. The underlying provider may still offer an equivalent control through its own administration.
See Communication Connections for the full ownership and lifecycle model.
Quick answer
- Allocated addresses with deployment-enabled sending, inbound routing, and sender policy
- Slack
- Workspace channels with configurable thread mention behavior
- Microsoft Teams
- Microsoft 365 tenants, using an authenticated provider webhook
- Telegram
- Lightweight bot deployment with group chats and configurable direct messages
- Discord
- Server, channel, user, and role-based boundaries
These are selection guidelines, not Platform rankings. Choose based on where your users already work and which access boundary you need.
| Requirement | Usually the best fit | Why |
|---|---|---|
| Workspace channels with tunable thread behavior | Slack | Socket Mode avoids a public inbound route, and thread mention behavior is configurable per Connection |
| Microsoft 365 and Teams app governance | Microsoft Teams | Native Teams application flow, tenant credentials, and group, channel, and personal scopes |
| Lightweight group and direct-message bot | Telegram | One bot token, with configurable group and direct-message policies |
| Server, channel, user, and role restrictions | Discord | The most granular shared-space access model |
| Several audiences on different providers | Any combination | One Agent can hold a Connection for each Platform |
Runtime independence
Every shipped Platform Plugin works with either Runtime. There is no Runtime-versus-Platform compatibility matrix to satisfy.
| Runtime | Slack | Microsoft Teams | Telegram | Discord | |
|---|---|---|---|---|---|
| Hermes | Supported | Supported | Supported | Supported | Supported |
| OpenClaw | Supported | Supported | Supported | Supported | Supported |
Choose a Runtime on its own merits: operating model, command approval, Template compatibility, Skills, and resource footprint. See Choose an Agent runtime.
Connection ownership
Provider connectivity belongs to the Communication Connection and the Communications Gateway, not to the Agent Runtime.
- Provider sessions and per-Connection credentials stay in Communications; Email uses deployment-managed credentials.
- The Communications Gateway owns provider connectivity, inbound normalization, policy enforcement, and outbound delivery.
- Provider credentials are encrypted and are never returned through the API after being stored.
- Provider tokens are not passed into the Agent Runtime.
- Conversations and resolved identities remain scoped to their Connection.
- Connection changes reconcile independently and do not require restarting the Agent.
Platform capability comparison
Each capability below describes what a Communication Connection configures and enforces for that Platform.
| Platform | Provider ingress | Shared-space controls | Direct-message policy | Additional controls |
|---|---|---|---|---|
| Slack | Supervised Socket Mode connection | Open or allowlisted channels | Off, open, or allowlist | Thread mention behavior can be every_message or start_only |
| Microsoft Teams | Authenticated provider webhook | Open or allowlisted group and channel conversations | Off, open, or allowlist | Group and channel messages require an Agent mention |
| Telegram | Supervised polling connection | Open or allowlisted group chats | Off, open, or allowlist | Policies use Telegram chat and user identities |
| Discord | Supervised Gateway connection | Open or allowlisted servers and channels | Off, open, or allowlist | User and role restrictions plus configurable mention gating |
| Cloudflare Email Worker to authenticated Product API inbound route | Open or sender allowlist | Reply to source sender only | Deployment-managed credentials; no per-Connection provider credentials. Threaded plain-text inbound and replies; no attachments; reply-only. |
Shared-space access, direct-message access, and mention requirements are Connection policies. They are not Runtime capabilities, and they can be changed without recreating the Agent.
Provider ingress
Slack, Telegram, and Discord use supervised provider sessions. Teams and Email use different webhook ingress paths: Teams addresses one Connection, while Email resolves the allocated recipient address through the shared inbound route. Built-in Web Chat uses authenticated Product API routes and is not another external webhook setup.
Cloudflare Email Worker to shared authenticated email ingress
Worker access to Product API required
Configure routing, sending, and matching deployment secrets. The shared route resolves the allocated recipient address.
Slack
Supervised Socket Mode
No public inbound route
The Communications service holds the Socket Mode session using the Connection’s bot and app-level tokens.
Microsoft Teams
Authenticated provider webhook
Public inbound route required
Microsoft Teams calls a Connection-scoped webhook on the Communications service, which verifies the request before admitting it.
Telegram
Supervised polling
No public inbound route
The Communications service polls Telegram using the Connection’s bot token.
Discord
Supervised Gateway session
No public inbound route
The Communications service maintains the Discord Gateway session for real-time events.
The Microsoft Teams webhook is scoped to a Communication Connection rather than to an Agent, and has this shape:
https://AGENT_BARN_HOST/communications/v1/webhooks/CONNECTION_IDA Teams Connection therefore needs a stable external Agent Barn URL and public HTTPS access to the Communications webhook prefix. A Teams app package may be available for download from the Connection when the installed Teams Platform Plugin exposes that capability.
Slack, Telegram, and Discord need no inbound route into the deployment.
Credential requirements
Each Platform Plugin defines its own credential schema. Credentials are entered on the Connection.
| Platform | Connection credentials | Additional setup identifiers |
|---|---|---|
| Slack | Bot token and app-level token | Channel and user identities for allowlists |
| No per-Connection provider credentials; sending credentials and inbound secret belong to the deployment | Allocated address and sender policy; deployment setup | |
| Microsoft Teams | App ID, app password or client secret, and tenant ID | Provider webhook URL and Teams app package |
| Telegram | Bot token | Numeric chat and user IDs for allowlists |
| Discord | Bot token | Application, server, channel, user, and role IDs as needed |
Secret classification
| Value | Classification |
|---|---|
| Slack bot token | Secret |
| Slack app-level token | Secret |
| Teams app password or client secret | Secret |
| Telegram bot token | Secret |
| Discord bot token | Secret |
| Teams app ID | Not secret |
| Teams tenant ID | Identifier: still avoid unnecessary disclosure |
| Discord Application ID | Not secret |
| Channel, chat, server, user, and role IDs | Identifiers, not authentication credentials |
Use a distinct bot or application identity for each production Connection, and do not run two Connections against the same provider bot token.
Access controls
Two separate authorization boundaries apply, and they are not interchangeable:
- Agent Access controls who can view or manage the Agent inside Agent Barn.
- Communication Connection policies control which provider-side users, channels, chats, servers, roles, or conversations may interact with it.
Slack
| Boundary | Available policies |
|---|---|
| Channels | Open or allowlist |
| Direct messages | Off, open, or user allowlist |
| Thread mention behavior | every_message or start_only |
| Private channel membership | Bot must be invited |
Recommended production baseline:
Channel access: Allowlist
Direct messages: Off or Allowlist
Thread mentions: every_messageSlack provides directory-backed channel and user selection. Private channels appear only after the Slack bot has been invited.
Microsoft Teams
| Boundary | Available policies |
|---|---|
| Group and channel conversations | Open or allowlist |
| Direct messages | Off, open, or allowlist |
| Shared-space activation | Agent mention required |
| Installation scope | Governed by the Microsoft tenant |
The Microsoft tenant, administrator approval, and where the Teams application is installed remain an additional boundary on top of the Connection policy.
Telegram
| Boundary | Available policies |
|---|---|
| Group chats | Open or allowlist |
| Direct messages | Off, open, or user allowlist |
| Group activation | Explicit mention required |
| Group membership | Bot must be added manually |
Recommended production baseline:
Group access: Allowlist
Direct messages: Off or Allowlist
Mention gating: RequiredTelegram policies use Telegram chat and user identities. Usernames and group names are not accepted as access identifiers.
Review Telegram Group Privacy separately. It controls what Telegram delivers at all, before any Connection policy applies.
Discord
| Boundary | Available policies |
|---|---|
| Servers | Open or allowlist |
| Channels | Open or allowlist |
| Users | All users or user allowlist |
| Roles | Role allowlist |
| Direct messages | Off, open, or allowlist |
| Shared-channel activation | Configurable mention gating |
Recommended production baseline:
Server access: Allowlist
Allowed channels: Explicitly configured
Allow all users: Disabled
Allowed users or roles: Explicitly configured
Require explicit mention: Enabled
Direct messages: OffWhen Allow all users is disabled, at least one allowed user or role is required.
Discord calls servers “guilds” in its own API, so provider identifiers may use that term.
Mention and direct-message policy
Agents should not act on ordinary conversation in shared spaces unless they are intentionally addressed. How strictly that is enforced is a Connection policy, not a fixed Platform trait.
Slack thread mention behavior
A Slack Connection chooses between two thread behaviors.
every_message requires a fresh mention for each message, including thread replies:
start_only requires the mention that starts the thread, after which replies in that thread can continue without a new mention:
Use every_message for shared channels where several people talk, and start_only where a thread is a deliberate working session with the Agent.
Microsoft Teams, Telegram, and Discord
- Microsoft Teams requires an Agent mention for group and channel messages.
- Telegram requires an explicit mention in group chats.
- Discord exposes configurable mention gating for server channels.
Keep mention gating enabled unless a channel is deliberately dedicated to one Agent.
Direct messages
Direct messages do not require a mention, and every Platform supports the same three-way policy: off, open, or allowlist. Choose per Connection based on who should be able to reach the Agent privately.
Changing mention or direct-message policy is a Connection update. It reconciles on its own and does not require restarting the Agent.
Operational differences
Activity name enrichment
| Platform | Agent Barn activity display |
|---|---|
| Slack | Channel and sender names are resolved on a best-effort basis |
| Microsoft Teams | Conversation identifiers are shown where directory enrichment is unavailable |
| Telegram | Chat names are resolved through the Telegram bot API |
| Discord | Channel and user names are resolved through the Discord bot API |
Directory results are cached, so a recently changed name may not appear immediately. Provider identifiers remain authoritative even when a human-readable name is displayed, and resolved identities stay scoped to their Connection.
Scheduled and initiated messages
Slack currently supports Agent-initiated delivery through Agent Barn Communications. Interactive sends require a live inbound execution and remain on its Connection. Scheduled results use their recorded origin or the Agent's configured default, subject to runtime limitations and the Connection's current policies.
Email, Teams, Telegram, Discord, and built-in Web Chat do not currently advertise this initiated-delivery capability. Their existing inbound and reply paths are separate. A destination-like setting alone does not enable scheduled delivery on another plugin.
For Slack setup and the default target, see the Slack guide. For Hermes and OpenClaw completion routing and recovery, see Runtime Assembly and Deployment.
Additional provider-specific behavior
| Platform | Behavior |
|---|---|
| Slack | Socket Mode must be enabled, and reinstalling is required after changing OAuth scopes |
| Microsoft Teams | Requires an Azure Bot channel and a reachable provider webhook endpoint |
| Telegram | Telegram Group Privacy affects which group messages the provider delivers at all |
| Discord | Message Content Intent is required; Server Members Intent is required for role-based restrictions |
Choose a Platform
Use this sequence.
- Choose the Platform where the intended users already work.
- Create the Agent with the appropriate Runtime and Template.
- Add one or more Communication Connections.
- Follow the selected plugin’s credential or deployment setup and configure its policies.
- Enable the Connection when it is ready to receive traffic.
Platform choice does not constrain Runtime choice, so it never eliminates a Runtime option. If a second audience uses a different provider, add another Connection instead of starting over.
| Priority | Better fit |
|---|---|
| Server, channel, user, and role boundaries | Discord |
| Workspace channel discovery and tunable thread mentions | Slack |
| Lightweight groups and configurable direct messages | Telegram |
| Microsoft tenant integration | Microsoft Teams |
See Hire your first Agent for the creation flow, then Communication Connections for the Connection workflow.
Multi-Platform Agents
One Agent can expose the same role through several Connections at once:
- Slack workspace Connection
- Microsoft Teams tenant Connection
- Telegram bot Connection
- Discord server Connection
These Connections share the same Agent (its Runtime, Template Version, Skills, Integrations, and cost identity) while provider credentials, policies, identities, and conversation histories stay Connection-scoped.
Shared by the Agent
- Runtime selection
- The pinned Template Version
- Assigned Skill Versions
- Model selection
- Agent Secrets and Shared Credential references
- Agent Access assignments
- Cost attribution
Scoped to each Connection
- Platform Plugin selection
- Provider bot or application identity
- Encrypted provider credentials
- Routing and admission policy
- Resolved provider identities
- Conversation history
- Communication Deliveries
- Connection health
- Proactive destination setting
Do not clone the Agent merely to support another Platform. Use a separate provider bot or application identity for each Connection, and never run two Connections against the same provider token.
API values
Runtime values
agent_type selects the Runtime:
hermes
openclawAgent creation
An Agent creation request carries no Platform fields:
{
"name": "Example Agent",
"agent_type": "hermes",
"template_key": "REPLACE_WITH_TEMPLATE_KEY",
"model": "REPLACE_WITH_MODEL",
"skill_ids": []
}Platform configuration is created separately as a Communication Connection after the Agent exists, and the Platform-specific settings and credentials are defined by the selected Platform Plugin.
Setup guides
Continue with the setup guide for the selected Platform.
After adding a Connection:
- Review the Connection lifecycle
- Review Agent health and logs, separately from Connection health
- Test an allowed shared-space request.
- Test an unmentioned shared-space message.
- Test a user or destination outside the intended boundary.
- Record credential ownership and rotation procedures.
- Review the Template and Skills assigned to the Agent.
Email and built-in Web Chat
Agent Barn ships external Platform Plugins for Slack, Microsoft Teams, Telegram, Discord, and Email, plus built-in Web Chat. Email requires deployment configuration. Web Chat is built into the Agent page and does not require external provider credentials.
Email ingress runs from a Cloudflare Email Worker to an authenticated Product API inbound route. Access is Open or sender allowlist, with an empty allowlist by default. Address local parts are permanently non-reissued. Credentials are deployment-managed, with no per-Connection provider credentials. Content is threaded plain-text inbound and replies: no attachments, reply-only. Web Chat is separate from external provider ingress.
Continue with Connect an Agent to Email.