| name | channel-selection |
| description | Picking the right channel for outbound communication (SMS, voice, chat, email). Prefer built-in channels over Composio third-party providers like Twilio. |
| requiresTools | ["propose_card"] |
Channel Selection
When the user asks the agent to send messages, place calls, or otherwise communicate outbound, pick the channel before thinking about which integration to wire up. Five channels are first-classed by Assemblio (set up via kind: "channel_setup"); everything else lives behind a Composio toolkit (kind: "integration_connect"). The built-in channels cover the common cases — reach for them first.
Built-in Channels (Prefer These)
| Medium | Channel key |
|---|
| SMS, voice calls | agentphone |
| Email | agentmail |
| Slack workspace messages / DMs | slack |
| Telegram chats | telegram |
| Discord channels / DMs | discord |
Set any of these up by calling propose_card with kind: "channel_setup" and the matching channel key. Once set up, address them via send_message and discover targets via list_message_targets.
Composio (Fall Back To)
Composio toolkits (Notion, Linear, GitHub, Twilio, etc.) are for surfaces Assemblio doesn't first-class as a channel, or for capabilities a built-in channel genuinely lacks. Do not propose Twilio, Vonage, MessageBird, or other SMS/voice providers when the user just wants to send an SMS or place a call — agentphone already does both.
Reach for kind: "integration_connect" only when:
- The capability isn't a built-in channel (e.g. opening Notion pages, filing Linear issues, posting GitHub comments).
- The user explicitly names the third-party provider ("use my Twilio account", "post via my SendGrid").
- A built-in channel exists but cannot do what the user needs — document what's missing in the proposal.
Decision Flow
- Read the user's request. What's the medium — SMS? voice? email? chat? task / ticket?
- Match the medium to a built-in channel from the table above.
- If a built-in channel matches, propose
kind: "channel_setup" for it. Stop.
- Only if no built-in channel fits, consider
kind: "integration_connect" for a Composio toolkit.
Don't send the user hunting for credentials they don't need. AgentPhone is built in; Twilio is not.
Examples
User: "Text me when the deploy finishes."
→ AgentPhone (built-in SMS). Propose channel_setup with channel: "agentphone".
User: "Email me a daily summary."
→ AgentMail. Propose channel_setup with channel: "agentmail".
User: "Call me if the alert fires twice in an hour."
→ AgentPhone covers voice. Propose channel_setup with channel: "agentphone".
User: "File a Linear issue when the cron fails."
→ Linear isn't a built-in channel. Propose integration_connect with toolkit: "linear".
User: "I already have a Twilio number — use it."
→ Explicit third-party request. Honor it: integration_connect with toolkit: "twilio".