Skip to main content
What it does: Gives agents one unified API to send, reply to, react to, edit, delete, fetch, and attach messages on any connected channel. Who it’s for: Anyone building cross-channel agents — alert routing, notification systems, multi-platform bots. The same message tool call works for Discord, Telegram, Slack, WhatsApp, Signal, iMessage, IRC, LINE, and Email.
Channel confinement (security). When an agent is handling an inbound user message, its message calls are confined to the channel that conversation arrived on — a prompt-injected agent cannot read or post to a different channel the bot can reach (the confused-deputy / cross-channel exfiltration boundary in the threat model). Cross-channel delivery is available from trusted contexts: scheduled/heartbeat tasks (no originating channel) and operators calling the gateway with an admin-scoped token. Attempting a cross-channel operation from a confined context returns a Channel access denied error.

message — Cross-Channel Messaging

The message tool supports 7 actionssend, reply, react, edit, delete, fetch, and attach. Comis dispatches each call to the right channel adapter based on channel_type. Not every action is supported on every platform (see the capability matrix below); the tool returns a structured error if you ask for something the channel cannot do. All actions require the channel_type parameter to specify which platform adapter handles the request. This is a required string identifying the channel type (e.g., telegram, discord, slack, whatsapp, signal, imessage, line, irc, email).

Quick Reference

ActionWhat It Does
sendSend a new message to a channel
replyReply to a specific message
reactAdd an emoji reaction
editEdit a previously sent message
deleteDelete a message
fetchRetrieve recent messages from a channel
attachSend a message with a file attachment

Actions

Sends a new message to a channel. From a trusted context (a scheduled/heartbeat task, or an operator using an admin-scoped gateway token) the agent can send to any channel it has access to. When handling an inbound user message, sends are confined to that conversation’s channel (see the channel-confinement note above).Parameters:
ParameterTypeRequiredDescription
actionstringYesMust be send
channel_typestringYesChannel type (e.g., telegram, discord, slack, whatsapp)
channel_idstringYesThe target channel identifier
textstringYesThe message content
buttonsarrayNoButton rows for interactive messages. Each inner array is one row of buttons with text, optional callback_data, url, and style (primary, secondary, danger, link).
cardsarrayNoRich card embeds. Renders as embeds on Discord, blocks on Slack, HTML on Telegram. Each card has optional title, description, image_url, color, and fields.
effectsarrayNoMessage delivery effects: spoiler (wraps text in spoiler) or silent (suppresses notification)
thread_replybooleanNoCreate or continue a thread from this message. Discord creates thread, Slack uses thread_ts.
Example — Send a notification:
action: send
channel_type: discord
channel_id: "general"
text: "The daily report is ready. Check the #reports channel for details."
Use send for proactive messages like notifications, alerts, and announcements. Cross-channel coordination (sending to a channel the agent is not currently conversing in) works from scheduled tasks and operator-initiated (admin) contexts; an agent answering an inbound message stays confined to that channel.
Replies to an existing message, creating a threaded response on platforms that support threading (like Discord and Slack). On platforms without threading, this sends a regular message.Parameters:
ParameterTypeRequiredDescription
actionstringYesMust be reply
channel_typestringYesChannel type (e.g., telegram, discord, slack, whatsapp)
channel_idstringYesThe channel containing the message
message_idstringYesThe ID of the message to reply to
textstringYesThe reply content
buttonsarrayNoButton rows for interactive messages (same format as send)
cardsarrayNoRich card embeds (same format as send)
effectsarrayNoMessage delivery effects: spoiler or silent
thread_replybooleanNoCreate or continue a thread from this message
Example — Reply to a user’s question:
action: reply
channel_type: slack
channel_id: "support"
message_id: "msg_abc123"
text: "Great question! Here's what I found..."
Adds an emoji reaction to an existing message. This is a lightweight way for agents to acknowledge messages without sending a full reply.Parameters:
ParameterTypeRequiredDescription
actionstringYesMust be react
channel_typestringYesChannel type (e.g., telegram, discord, slack, whatsapp)
channel_idstringYesThe channel containing the message
message_idstringYesThe ID of the message to react to
emojistringYesThe emoji to add. Provide the literal Unicode emoji character (e.g., the thumbs-up character) or a platform-recognized shortcode; per-platform translation is handled by the channel adapter.
Example — Acknowledge a request:
action: react
channel_type: telegram
channel_id: "requests"
message_id: "msg_def456"
emoji: "thumbsup"
Emoji names vary by platform. Discord uses custom emoji names, Telegram uses Unicode emoji, and Slack uses shortcodes like :thumbsup:. The agent handles the translation automatically.
Edits a message that the agent previously sent. Useful for updating status messages or correcting errors.Parameters:
ParameterTypeRequiredDescription
actionstringYesMust be edit
channel_typestringYesChannel type (e.g., telegram, discord, slack, whatsapp)
channel_idstringYesThe channel containing the message
message_idstringYesThe ID of the message to edit
textstringYesThe new message content
Not all platforms support message editing. Telegram supports editing within 48 hours. Discord supports editing with no time limit. Some platforms (like IRC) do not support editing at all. The tool will return an error if editing is not supported.
Deletes a message from a channel. The agent can only delete messages it has permission to delete — typically its own messages or, on platforms with moderation rights, other users’ messages.Parameters:
ParameterTypeRequiredDescription
actionstringYesMust be delete
channel_typestringYesChannel type (e.g., telegram, discord, slack, whatsapp)
channel_idstringYesThe channel containing the message
message_idstringYesThe ID of the message to delete
Platform permissions apply. On Discord, the bot needs “Manage Messages” permission to delete other users’ messages. On Telegram, the bot needs admin rights. Check your platform’s documentation for permission requirements. This is a destructive action that requires user confirmation via the _confirmed parameter.
Fetches recent messages from a channel. Useful when the agent needs to review recent conversation history or catch up on messages it may have missed.Parameters:
ParameterTypeRequiredDescription
actionstringYesMust be fetch
channel_typestringYesChannel type (e.g., telegram, discord, slack, whatsapp)
channel_idstringYesThe channel to fetch messages from
limitintegerNoMaximum number of messages to return (default: 20)
beforestringNoFetch messages before this message ID (for pagination)
Returns a list of messages including their IDs, authors, timestamps, and content.Example — Get the last 5 messages:
action: fetch
channel_type: discord
channel_id: "general"
limit: 5
Sends a message with a file attachment. The agent can attach images, documents, audio files, or any other file type supported by the target platform.Parameters:
ParameterTypeRequiredDescription
actionstringYesMust be attach
channel_typestringYesChannel type (e.g., telegram, discord, slack, whatsapp)
channel_idstringYesThe target channel
attachment_urlstringYesURL or workspace path of file to send: http://, https://, file://, or absolute path
attachment_typestringNoAttachment media type: image, file, audio, or video (default: file)
mime_typestringNoMIME type of attachment
file_namestringNoDisplay filename for the attachment
captionstringNoCaption text for the attachment
Example — Send a generated report:
action: attach
channel_type: telegram
channel_id: "reports"
attachment_url: "https://example.com/weekly-report.pdf"
attachment_type: file
file_name: "weekly-report.pdf"
caption: "Here's the weekly summary report."
File size limits vary by platform. Discord allows up to 25 MB (or 100 MB with Nitro). Telegram allows up to 50 MB for most files. Check your platform’s limits if sending large files.

Per-channel capability matrix

Channel adapters declare what they can do via a ChannelCapability schema, and the message tool checks support before dispatching. Asking for an unsupported action returns a structured error with errorKind: "platform" — it does not silently no-op.
ChannelSendReplyReactEditDeleteFetch HistoryAttachmentsStreaming methodMax chars
DiscordYesYesYesYesYesYesYesedit (500ms)2000
TelegramYesYesYes (limited emoji)YesYesNoYesedit (300ms)4096
SlackYesYes (thread_ts)Yes (shortnames)YesYesYesYesedit (400ms)4000
WhatsAppYesYes (quoted)Yes (Unicode)Yes (overwrite)Own onlyNoYesblock (600ms)65536
SignalYesYes (quoted)Yes (Unicode)NoYesNoYesblock (500ms)65536
iMessageYesNoNoNoNoYesYesnone20000
LINEYesYes (push)NoNoNoNoYesnone5000
IRCYesMention prefixNoNoNoNoNonone512
EmailYesYes (RFC 5322 headers)NoNoNoNoYesnone100000
Streaming methods:
  • edit — the agent posts a placeholder, then edits it in place as content streams in. Supported on Discord, Telegram, Slack.
  • block — the agent buffers chunks and emits complete blocks (no edit). Used by WhatsApp and Signal where edits are unreliable or unsupported.
  • none — no streaming; the agent waits for the full reply before sending.
The throttle column is the minimum delay between consecutive edits/blocks during streaming, configured per adapter to respect each platform’s rate limits.

Cross-Channel Messaging

The message tool works across all connected channels. The channel_type and channel_id parameters together identify which channel to target. Agents can send messages to channels they are not currently conversing in — this is a key capability for building notification systems, alert pipelines, and cross-channel coordination workflows. Example — mirror an alert to Discord and Email: A finance agent watching a market trigger needs to fan out the same alert to two channels at once. The agent makes two consecutive message calls with the same body but different targets:
# First call: high-priority Discord notification
action: send
channel_type: discord
channel_id: "ops-alerts"
text: "ALERT: NVDA crossed below 450 -- review position."

# Second call: email for permanent record
action: send
channel_type: email
channel_id: "trading-team@example.com"
text: "ALERT: NVDA crossed below 450 -- review position."
For a monitoring agent reacting to its own heartbeat check, the typical pattern is:
  1. Detect an issue through its heartbeat check.
  2. Send an alert to the #ops-alerts Discord channel using channel_type: discord.
  3. Send a summary to the Telegram admin group using channel_type: telegram.
  4. React with a warning emoji on the original message that triggered the check.
All of this happens through the same message tool with different channel_type and channel_id values.

notify_user — Proactive Notifications

The notify_user tool delivers proactive notifications outside the normal request-response flow. The daemon applies rate limiting, dedup, quiet-hours suppression, and channel-resolution guards before enqueueing the notification.
ParameterTypeRequiredDescription
messagestringYesNotification text to send to the user
prioritystringNoOne of low, normal (default), high, critical. critical bypasses quiet hours.
channel_typestringNoTarget channel type (e.g., telegram, discord). Omit for auto-resolution.
channel_idstringNoTarget channel/chat ID. Required when channel_type is specified.
Example — Critical alert that bypasses quiet hours:
message: "Production deploy failed -- rolling back."
priority: critical
Use notify_user for agent-initiated communication (alerts, reminders, task-completion notices) when you want platform-level guards. Use message (action: send) for direct messaging to a specific channel without the notification guard pipeline.

Channels Overview

Connect Discord, Telegram, Slack, and 5 more platforms

Sessions

Sub-agents, pipelines, and session management

Agent Tools Overview

Master reference table of all tools

Platform Actions

Moderation actions for Discord, Telegram, Slack, and WhatsApp