A channel is the edge adapter between a platform and your agent. Every inbound message — whether it originates from a Slack mention, a Telegram webhook, an SMS, or a plain HTTP request — passes through a channel before the agent ever sees it. Channels are also responsible for sending responses back to the right surface. A channel does three things:Documentation Index
Fetch the complete documentation index at: https://mintlify.com/vercel/eve/llms.txt
Use this file to discover all available pages before exploring further.
- Normalizes input — converts platform-specific payloads (Slack event JSON, TwiML transcripts, GitHub webhook bodies) into a user message the agent can process.
- Owns the
continuationToken— holds the resume handle that links an incoming request to an existing conversation on that surface. - Decides delivery — determines how, where, and whether a response goes back to the platform (inline reply, threaded post, SMS, ephemeral DM, etc.).
Where channels live
Channel files live underagent/channels/ in the root agent. The file stem is the channel id: agent/channels/intake.ts is addressed as intake. Export the channel as the module’s default export. Local subagents do not declare channels.
Only the root agent declares channels. Local subagents inherit the parent
agent’s channel context automatically.
Scaffolding a channel
Scaffold a channel file witheve channels add (interactive), or pass a platform kind directly:
The eve HTTP channel (default)
The eve channel is the framework’s built-in HTTP session API. It is what the terminal UI,useEveAgent, and curl all communicate with when starting sessions, sending messages, and streaming events. It is enabled by default — even when agent/channels/eve.ts does not exist.
Add agent/channels/eve.ts only when you need to override the defaults, most often the route auth policy:
agent/channels/eve.ts
Custom channels
When eve doesn’t ship a channel for your surface, build one withdefineChannel from eve/channels. A custom channel declares route handlers (GET, POST, PUT, PATCH, DELETE, WS), an events map, and a send call inside a handler to start or resume a session.
See Custom Channels for the full walkthrough, including WebSocket routes, cross-channel hand-off, channel metadata, continuation tokens, and file uploads.
Which channel should I use?
| You want… | Use |
|---|---|
| A web app / browser chat UI | eve channel + useEveAgent |
Local tooling, SDK clients, curl | eve channel (default) |
| Slack mentions, DMs, buttons | Slack |
| Discord slash commands, components | Discord |
| Microsoft Teams messages + Adaptive Cards | Teams |
| Telegram bot messages | Telegram |
| SMS or speech-transcribed phone calls | Twilio |
| GitHub @mentions, PR review with checkout | GitHub |
| Linear issue delegation and Agent Sessions | Linear channel |
| Anything else (internal webhook, WebSocket) | Custom channel (defineChannel) |
Security and compliance
Each channel has its own provider terms, data flow, auth model, and user-consent expectations. Before sending non-public, sensitive, regulated, or production data through a channel, confirm that the channel provider and your configured scopes, signature checks, route auth, and delivery behavior are appropriate for your use case. Where an eve agent communicates with people, you may be required to disclose that they are interacting with an automated AI system. eve does not add this disclosure automatically — configure it in your instructions and/or channel responses.Platform Channels
Slack, Discord, Teams, Telegram, Twilio, GitHub, and the built-in eve HTTP channel — all covered with setup code and environment variables.
Custom Channels
Build a channel for any surface using
defineChannel, with WebSocket support, cross-channel hand-off, metadata, and file uploads.