Channels: message your running Claude Code session from Telegram, Discord or iMessage
TL;DR
Channels push chat messages, alerts and webhooks into a Claude Code session open on your machine; Claude works and replies through the same channel. Telegram takes a few steps, but anyone on the allowlist can effectively command your machine.
You're at a café and remember you need Claude to check a bug in the repo on your machine at home. Or CI just failed at midnight and you want Claude, which already has a session open on exactly that code, to look right away. Channels let you push messages, alerts and webhooks into a running Claude Code session. Claude reads the event, works on your machine, then replies through the same channel. The research preview ships with Telegram, Discord and iMessage.
How do channels differ from similar features?
| Feature | How it works | Good for |
|---|---|---|
| Channels | Events from outside sources are pushed into an open local session | A chat bridge from your phone, receiving CI/alert webhooks |
| Remote Control | You drive the local session from claude.ai or the Claude app | Steering a running session away from your desk |
| Claude in Slack | An @Claude mention spawns a new cloud session | Starting work from team conversations |
| Regular MCP | Claude queries on demand; nothing is pushed in | Reading data when needed |
Setting up Telegram
- Open BotFather in Telegram, send
/newbot, name it, copy the token. - In Claude Code:
/plugin install telegram@claude-plugins-official(choose user scope). - Save the token:
/telegram:configure <token>. - Restart with the channel:
claude --channels plugin:telegram@claude-plugins-official. - Send the bot any message, get a pairing code, then run
/telegram:access pair <code>. - Lock down access:
/telegram:access policy allowlist.
Channel plugins are Bun scripts, so you need Bun installed. To try it quickly without any account, use the fakechat demo plugin (a chat UI at localhost:8787).
Discord and iMessage
- Discord: create a bot in the Developer Portal, enable Message Content Intent, invite it to your server with view/send permissions, then install the
discordplugin and pair the same way. - iMessage: macOS only; it reads the Messages database directly, so your terminal needs Full Disk Access. Texting yourself reaches Claude immediately; add others with
/imessage:access allow.
Security
- Each channel has a sender allowlist; IDs not on it are silently dropped.
- Being in
.mcp.jsonisn't enough: the server must be named in--channelsfor each session. - If a channel supports permission relay, anyone who can message through it can approve or deny Claude's actions. Only allowlist people you trust with that authority.
- Team/Enterprise: blocked by default; an Owner must enable
channelsEnabled, and can restrict plugins withallowedChannelPlugins.
Risks and caveats
- Events only arrive while the session is open: for always-on availability, run Claude in a background process or persistent terminal.
- The session pauses on a permission prompt when you're not at the machine. Don't rush to
--dangerously-skip-permissionsto "run unattended"; only use it in trusted environments. - A compromised Telegram/Discord account = a controlled machine: enable two-factor authentication on your chat accounts.
- Not available on Bedrock, Vertex or Foundry; the
--channelssyntax may change during the preview.
How to apply it
- Dev: Use Telegram as a lightweight remote: ask Claude about the repo at home and get the answer right in the chat.
- Tech Lead: Build a webhook channel that receives CI results or error alerts, so the Claude session with the right codebase open investigates immediately.
- PM/Admin: For organisations, only enable approved plugins via
allowedChannelPluginsand set rules on who can be added to allowlists.
Sources & references
- Push events into a running session with channels — Claude Code Docs