| name | channel-selection |
| description | Picking the right built-in channel for outbound communication (SMS, voice, chat, email). |
| 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 any lower-level provider. The edge first-classes a small set of channels through kind: "channel_setup". Reach for those before suggesting custom webhook/API work.
Built-in Channels (Prefer These)
| Medium | Channel key |
|---|
| SMS, voice calls | agentphone |
| Email | agentmail |
| Slack workspace messages / DMs | slack |
| Telegram chats | telegram |
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.
Fallbacks
If no built-in channel fits, use the API channel or a custom webhook/workflow depending on the direction of traffic. 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.
Use a fallback only when:
- The capability isn't a built-in channel.
- The user explicitly names a 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, suggest API/custom webhook/workflow setup and explain the missing built-in surface.
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. Suggest a workflow/API integration rather than a channel setup card.
User: "I already have a Twilio number — use it."
→ Explicit third-party request. Explain that AgentPhone is the built-in path; custom provider support would need a custom webhook/API workflow.