Your terminal is where Claude Code lives — but you're not always sitting at it. That's the frustration Anthropic just solved with Claude Code Channels, a research-preview feature that pipes messages from Telegram, Discord, and iMessage directly into a running session. The question is no longer whether to use it. It's which channel fits your workflow without opening a security hole.
This post compares the three official channels across architecture, UX, and risk. You'll learn which fits a solo developer, which fits a team, which fits a privacy-obsessed macOS user — and when you should skip all three and build your own webhook channel instead.
What Are Claude Code Channels?
Claude Code Channels are MCP servers that push events into an already-running Claude Code session, letting the agent react to messages, alerts, and webhooks while you're away from the terminal. Anthropic announced the feature on March 20, 2026, shipping Telegram and Discord first, with iMessage following about a week later.
The key architectural difference from a traditional MCP server: channels declare a claude/channel capability to push events into the session, rather than waiting for Claude to pull on demand. According to VentureBeat, Anthropic positioned the release as an "OpenClaw killer", wiping out an entire category of third-party wrappers (OpenClaw, claude-code-telegram, ccgram) that previously opened inbound ports or ran relay servers.
Three requirements before you start:
- Claude Code v2.1.80+ (v2.1.81+ for permission relay)
- A paid plan — Free tier is not supported (Pro, Max, Team, or Enterprise)
- Login via
claude.ai(API keys don't work) - Bun runtime — all three official plugins require it
Telegram vs Discord vs iMessage: The Architecture Gap
The three channels look identical from the outside but sit on radically different transport layers. That shapes everything — latency, privacy, features, failure modes.
Connection Mechanism
| Channel | Protocol | Where It Runs |
|---|---|---|
| Telegram | Bot API long polling | Plugin polls Telegram servers (no inbound port) |
| Discord | Gateway WebSocket | Persistent connection, Message Content Intent required |
| iMessage | chat.db SQLite polling + AppleScript | Fully local — nothing leaves the machine |
The gap that matters: Telegram and Discord route through external servers, while iMessage is self-contained on your Mac. That single fact decides latency, privacy posture, and whether the channel works offline.
Tools and Features
Discord ships 5 outbound tools (reply, react, edit_message, fetch_messages, download_attachment) — the richest toolkit. Telegram ships 3 (reply, react, edit_message). iMessage ships reply only because AppleScript cannot trigger tapbacks, edits, or thread replies (Apple's APIs are private).
Attachment handling also diverges:
- Telegram: 50MB/file, auto-downloaded to
~/.claude/channels/telegram/inbox/ - Discord: 25MB/file, up to 10 files per message, on-demand download (bandwidth efficient)
- iMessage: reads chat.db absolute paths directly — no size limit beyond macOS itself
Session Recovery
All three share one hard constraint: no message queue. If Claude Code isn't running, inbound messages are lost. But they differ on how well you can catch up afterward:
- Telegram: cannot re-fetch history. Bot API doesn't expose it.
- Discord:
fetch_messagesretrieves up to 100 recent messages - iMessage:
chat_messagesreads chat.db with full history and SQL search
If you care about "what did the bot miss while my laptop was asleep?" — iMessage wins, Discord is workable, Telegram is a black hole.
The Security Reality Check
Research preview means rough edges. Two vulnerabilities surfaced within a month of the iMessage launch, and both are worth understanding before an enterprise greenlights the channel.
Issue #1010 — the "SELF pollution" bug — caused iMessage permission prompts (including tool names, input previews, and 5-character approval codes) to be sent as SMS to unrelated contacts. A user setting up self-chat testing heard the notification sound firing repeatedly as prompts leaked outside the trusted set.
Issue #5009 documented a metadata-spoofing path: a specially crafted SMS could trigger arbitrary tool execution — the reporter's proof-of-concept generated Stripe API coupons without user consent.
According to Anthropic's own documentation, three principles should gate any production use:
- Gate by sender ID, not chat ID.
message.from.idis the trust boundary. Gating onmessage.chat.idmeans every member of a group chat can inject into your session — a textbook prompt injection vector. - Never mutate access control from received messages. Allowlist changes happen at the terminal only, blocking a prompt-injection attack that asks Claude to add its sender to the allowlist.
- Keep
IMESSAGE_ALLOW_SMS=false. Default value, but worth verifying. SMS sender metadata can be spoofed; iMessage between Apple IDs cannot.
In practice, I'd wait for v2.1.81+ security patches before approving iMessage organizationally. Telegram and Discord carry the normal bot-token risks (rotate quarterly) but don't have publicly reported exploits as of this writing.
Which Channel Fits Which Persona?
After walking through the architecture and security posture, the choice comes down to where you work, who else is involved, and how much setup you tolerate.
| Persona | First Choice | Why |
|---|---|---|
| Solo developer, mobile-first | Telegram | 5-minute setup, 50MB files, works cross-device |
| Startup CTO or PM | Discord | Guild channels = team channels, threads for context, on-call coverage |
| Backend engineer with CI/CD | Discord + custom webhook | Piping CI failures into an already-debugging session |
| Researcher on macOS | iMessage | Full history search via chat.db, zero external servers |
| Product owner or exec | Telegram | Minimum friction, familiar messaging UX |
| Compliance-sensitive org | Custom on-prem webhook | Nothing leaves your network |
The one-liner I keep coming back to: Mobile remote → Telegram. Team collaboration → Discord. macOS privacy → iMessage. Custom events (CI, monitoring) → your own webhook channel.
Three channels are complements, not substitutes.
Build Your Own: When Custom Channels Beat the Officials
The official plugins are the right default, but they're not the only path. Anthropic's Channels reference documents how to write a raw MCP server using @modelcontextprotocol/sdk in roughly 50 lines of TypeScript — Node, Bun, or Deno all work.
Use a custom channel when you need:
- CI/CD integration — Jenkins, GitHub Actions, or CircleCI posting build results
- Monitoring hooks — Sentry, Datadog, or PagerDuty routing alerts to Claude
- Internal tool bridges — Jira, ServiceNow, or an on-prem ticketing system
Team and Enterprise admins must add these to allowedChannelPlugins before users can install them. Raw MCP servers also require the --dangerously-load-development-channels flag, so they're gated by design against drive-by installs.
Frequently Asked Questions
What is a Claude Code Channel, exactly?
A Claude Code Channel is an MCP server that pushes external events — messages, alerts, webhooks — into a running Claude Code session so the agent can respond while you're away from the terminal. It uses the claude/channel capability and reverses the usual MCP pull model into a push.
Do I need a paid plan to use Channels?
Yes. Channels are not available on the Free plan. You need Pro, Max, Team, or Enterprise, and you must authenticate via claude.ai login — API key authentication isn't supported. Team and Enterprise admins also need to set channelsEnabled: true before users can activate channels.
Is iMessage Channel safe to use in production?
Not yet. Two security issues (#1010 and #5009) have been reported, including permission prompts leaking to unrelated contacts and metadata-spoofing paths to arbitrary tool execution. Wait for v2.1.81+ patches and verify IMESSAGE_ALLOW_SMS=false before approving organizationally.
What happens to messages if my computer is off?
They're lost. All three channels require Claude Code to be actively running — there's no message queue. Telegram cannot recover history at all, Discord can fetch up to 100 recent messages via fetch_messages, and iMessage preserves everything in chat.db and can replay it through chat_messages.
Can I combine multiple channels in one session?
Yes. Pass multiple plugins to the --channels flag, like claude --channels plugin:telegram@claude-plugins-official plugin:discord@claude-plugins-official. Many users run Telegram for mobile and Discord for team coordination simultaneously — the capabilities overlap but serve different contexts.
The Bottom Line
Claude Code Channels close the loop that made agentic coding tools feel tethered to a desk. The architecture choice — Bot API vs Gateway vs AppleScript — drives real tradeoffs in latency, privacy, and feature depth, and the research-preview label deserves to be taken seriously when iMessage permission prompts can leak over SMS.
Start with one channel. Telegram if you want the fastest path to "it works from my phone." Discord if your team is already there. iMessage only if you're on macOS, value local-first, and are willing to wait for the security patches to land.
Then layer a custom webhook channel for CI and monitoring. That's where Channels stop being a toy and become infrastructure.
For more AI trends and analysis, visit aboutcorelab.blogspot.com.