Claude Code Channels
Plug Claude Code into messaging apps. Setup walkthroughs for Telegram, Discord, and iMessage plus the workflows that make them worth it.
Problem: You are on the train. Your laptop is at home grinding through a 40-minute build. It hits you that the test suite needed a flag you never set. Pick your poison: wait until you are back at the desk, or SSH in from the phone and fumble a terminal through a 6-inch screen.
Not a developer at all? Same trap, different shape. You are running a business with Claude Code wired up as your generalist helper: calendar, marketing drafts, task triage, spreadsheet updates, quick reports. Every request still starts with sitting down at the terminal. There is no way to message your assistant from the phone between meetings the way you would text a real EA.
Quick Win: Wire your Claude Code session to Telegram (or iMessage if you are on macOS) and message it from the phone the way you would text a coworker:
claude --channels plugin:telegram@claude-plugins-official
Fire off "add the --coverage flag to the test script in package.json" from Telegram. The message lands in Claude, the edit happens, and the reply comes back in the same chat. Your session keeps humming locally with full access to files, MCP servers, and project config.
What Channels Actually Is
Channels is a plugin-based Claude Code feature that pipes messages from Telegram, Discord, or iMessage straight into a live Claude Code session running on your own machine. The session handles each request against your local filesystem, MCP tools, and git, then replies through the same messaging app. Anthropic announced it on March 20, 2026 as a research preview. Telegram and Discord shipped first. iMessage support dropped a week later. The plugin shape means more platforms can join without new plumbing.
Under the hood the idea is simple. An MCP server bridges your Claude Code session to the messaging platform. A message to your bot on Telegram or Discord gets forwarded to Claude. Claude runs the request against your local environment (files, tools, git, everything), then replies back through the same channel.
Nothing here runs in the cloud. The session lives on your machine. The messaging app is the window into it, much like Remote Control uses claude.ai and the mobile app as a window into your local session. Same principle, different surface.
The original announcement on X pulled real traction, and the community read was clear: this pushes dev workflows toward async and mobile-first. The loudest request at launch was iMessage, and Anthropic shipped it inside a week.
Channels vs Remote Control vs Web Sessions
Three ways to reach a session from somewhere that is not your terminal now exist. Each one solves a different problem.
| Aspect | Channels | Remote Control | Web Sessions |
|---|---|---|---|
| Interface | Telegram, Discord, iMessage (messaging apps) | claude.ai/code, iOS app, Android app | claude.ai/code browser |
| Session location | Your machine (local) | Your machine (local) | Anthropic cloud |
| Setup | Install plugin, create bot, pair | claude remote-control (one command) | Open claude.ai/code |
| Best for | Async messages, mobile-first, team channels | Continuing terminal sessions from phone | Quick tasks without local setup |
| Local tools | Full access (filesystem, MCP, git) | Full access (filesystem, MCP, git) | Cloud sandbox only |
| Hackability | High (plugin architecture, build your own) | Low (fixed interface) | None |
| Notification style | Native app notifications (Telegram/Discord/iMessage) | Must open claude.ai or app | Must open claude.ai |
| Team collaboration | Discord guild channels for shared access | Single-user only | Single-user only |
Reach for Channels when: native mobile notifications matter, the work is async (fire off a request, check back later), or team-based access through Discord guild channels is what you need. Also reach for Channels when you want a hackable, extensible system you can bend to fit your workflow.
Reach for Remote Control when: you want the full claude.ai interface, rich formatting, file previews, and a chat UI that already feels familiar. Setup is one command instead of bot creation, and it plays nice with the Claude mobile app from minute one.
Thariq from the Claude Code team put it plainly in the announcement thread: "We want to give you a lot of different options in how you talk to Claude remotely. Channels is more focused on devs who want something hackable."
The Architecture Under Channels
The flow follows the MCP pattern that Claude Code already uses for tool extensions:
- Install a channel plugin (Telegram, Discord, or iMessage). Each runs as an MCP server.
- Launch Claude Code with the
--channelsflag. That activates the plugin. - The MCP server connects to the messaging platform (polling for Telegram, WebSocket for Discord).
- A message arrives, the server wraps it as a
<channel>event, and pushes it into your Claude Code session. - Claude runs the request against your full local environment.
- Claude replies via tools the MCP server exposes (
reply,react,edit_message).
Security has two layers. Every channel plugin keeps a sender allowlist. Only user IDs you have paired and approved can push a message in. Everything else drops silently. And --channels decides which servers are actually on for a given session. A config entry in .mcp.json is not enough to let a server push messages. It also has to be named in --channels.
Team and Enterprise plans add another gate. Org admins control channel availability through a channelsEnabled managed setting. Off by default. Has to be turned on on purpose.
One detail that bites people: hitting a permission prompt while you are away from the terminal pauses the session until you approve it locally. If full unattended operation is the goal, --dangerously-skip-permissions bypasses prompts. Use that only in environments you already trust.
Worth keeping in mind: Claude's replies travel through the messaging platform's servers. When you are working with proprietary code or sensitive credentials, be intentional about what you ask Claude to output through a channel. The fakechat localhost option (below) keeps every byte on your machine for the sensitive work.
Setting Up the Telegram Channel
Telegram setup runs about 5 minutes. You need Bun installed (the MCP server runs on Bun) and a Claude Code session signed in with a claude.ai account rather than an API key.
Step 1: Create a Telegram Bot
Open @BotFather on Telegram and send /newbot. BotFather asks two questions:
- Display name: Anything you like, spaces are fine (e.g., "My Dev Assistant")
- Username: A unique handle ending in
bot(e.g.,my_dev_assistant_bot)
BotFather answers with a token like 123456789:AAHfiqksKZ8.... Copy the whole thing, leading number and colon included.
Step 2: Install the Plugin
Start a Claude Code session and run:
/plugin install telegram@claude-plugins-official
Step 3: Configure the Token
/telegram:configure 123456789:AAHfiqksKZ8...
This writes TELEGRAM_BOT_TOKEN=... to .claude/channels/telegram/.env inside your project. You can also set the variable in your shell before launching Claude Code (shell wins).
Step 4: Relaunch with Channels On
Quit your session and restart with the channel flag:
claude --channels plugin:telegram@claude-plugins-official
Step 5: Pair Your Account
DM your bot on Telegram. The bot answers with a 6-character pairing code. Back in Claude Code:
/telegram:access pair <code>
Step 6: Lock It Down
Flip to allowlist mode so only your own account can talk to the bot:
/telegram:access policy allowlist
Done. Your next message to the bot runs through Claude directly.
Telegram-Specific Features
- Photos: Inbound photos get pulled to
~/.claude/channels/telegram/inbox/automatically. The assistant can read them straight from there. Send as "File" (long-press in Telegram) if you need the uncompressed original. - File attachments: The
replytool can send files back. Images render inline, other types ship as documents. Max 50MB per file. - Typing indicator: Telegram shows "botname is typing..." while Claude is working. Unexpectedly handy for telling whether Claude is still thinking or has stalled on a permission prompt.
- No message history: The Telegram Bot API does not expose history or search. Messages only arrive in real time. Anything sent while the session was down is gone.
Setting Up the Discord Channel
Discord takes a few more steps because an application has to exist in the Developer Portal first, and the bot has to be invited to a server. Budget around 10 minutes.
Step 1: Create a Discord Application
Head to the Discord Developer Portal and click New Application. Pick any name.
Step 2: Create the Bot and Grab a Token
Click Bot in the sidebar. Give the bot a username. Scroll up to Token and press Reset Token. Copy the token now (it shows once).
Step 3: Turn On Message Content Intent
Still in the Bot settings, scroll to Privileged Gateway Intents and enable Message Content Intent. Skip this and the bot receives messages with empty content.
Step 4: Invite the Bot to Your Server
Open OAuth2, then URL Generator. Pick the bot scope and enable these permissions:
- View Channels
- Send Messages
- Send Messages in Threads
- Read Message History
- Attach Files
- Add Reactions
Copy the generated URL, open it, and add the bot to your server.
Step 5: Install and Configure
Inside Claude Code:
/plugin install discord@claude-plugins-official
/discord:configure <your-bot-token>Step 6: Relaunch and Pair
claude --channels plugin:discord@claude-plugins-official
DM your bot on Discord. It replies with a pairing code. Back in Claude Code:
/discord:access pair <code>
/discord:access policy allowlistDiscord-Specific Features
- Message history: Discord's
fetch_messagestool can pull recent channel history (up to 100 messages per call, oldest-first). That is the real differentiator versus Telegram. If the session restarts, Claude can catch up on what it missed. - Attachment handling: Attachments are not pre-downloaded. The assistant sees metadata (name, type, size) and calls
download_attachmentwhen it actually needs the file. - Guild channels: Discord supports server/guild channels on top of DMs. That opens team collaboration where multiple people talk to Claude through one shared channel.
- Custom emoji reactions: The
reacttool supports both Unicode emoji and custom server emoji in<:name:id>format. - Threading: The
replytool acceptsreply_tofor native Discord threading. That keeps conversations organized when multiple people are pinging the same channel.
Setting Up the iMessage Channel
iMessage is the newest of the three, added after waves of community demand after the first Telegram and Discord release. The shape is very different: no bot token, no external service, no pairing code. The plugin reads the Messages database on your Mac directly and sends replies via AppleScript.
Important: iMessage requires macOS. The plugin reads ~/Library/Messages/chat.db and steers Messages.app through AppleScript. There is no Windows or Linux path.
Step 1: Grant Full Disk Access
The plugin has to read the Messages database. Open System Settings > Privacy & Security > Full Disk Access and switch it on for your terminal app (Terminal.app, iTerm2, Warp, whichever one runs Claude Code for you).
Step 2: Install the Plugin
Start a Claude Code session and run:
/plugin install imessage@claude-plugins-official
Step 3: Relaunch with Channels On
Quit your session and restart with the channel flag:
claude --channels plugin:imessage@claude-plugins-official
Step 4: Test with Self-Chat
Fastest sanity check: text yourself from any Apple device. Self-chat (messaging your own number) skips the access control entirely and works with zero extra setup.
Step 5: Approve the Automation Prompt
First time Claude sends a reply, macOS pops an Automation prompt asking whether your terminal app may control Messages.app. Click OK. One-time approval.
Step 6: Allow Other Senders
Out of the box, only self-chat works. To open the door to other people, add them by phone number or Apple ID:
/imessage:access allow +15551234567
/imessage:access allow AppleIDiMessage-Specific Features
- macOS native: No external service, no bot token, no developer portal. The plugin rides on your existing Messages setup.
- Self-chat works instantly: Texting yourself is the zero-config path. No pairing code, no allowlist entry.
- Identity detection from the Messages database: Instead of the pairing flow Telegram and Discord use, the iMessage plugin identifies senders by reading the Messages database. The handle stored in
chat.dbis how it knows who wrote what. - Add senders by handle: Phone numbers (
+15551234567) and Apple IDs both work with/imessage:access allow. - AppleScript-based replies: Outbound messages go through Messages.app via AppleScript, so replies show up as normal iMessages from your account.
Practical Use Cases
Watch Long-Running Tasks from the Phone
Kick off a heavy build, a big test run, or a multi-agent workflow at your desk. Walk away. When Claude finishes (or hits a wall), the notification pops on your phone through Telegram, Discord, or iMessage. Send the next instruction without touching a laptop.
Quick Fixes on the Move
Reviewing a PR on your phone and spotting a typo in a config file is the classic example. No need to save it for later. Message your bot: "Change the Redis port in docker-compose.yml from 6380 to 6379 and commit it." Claude makes the edit, commits, and confirms.
Team Collaboration via Discord
Spin up a Discord guild channel where your whole team can talk to one shared Claude Code session. Great for pair-debugging: one person describes the issue and Claude digs in with full access to the codebase. Everyone in the channel watches it happen.
Async Development Workflows
Channels plus scheduled tasks forms a strong async pattern. Schedule Claude to run the test suite every hour, pipe results through Telegram, and pause for your call if something breaks. You check in when it fits your day.
Your Telegram-Native Executive Assistant
Not every Claude Code setup is about code. If you have wired Claude up as a productivity helper with MCP connections to your calendar, email, CRM, or project management tools, Channels turns it into something much closer to a real EA. Ask "what's my priority list for today?" from Telegram while grabbing coffee. Have it draft a follow-up email to a client between meetings. Tell it to reshuffle your afternoon based on an urgent Slack thread. The mental model shifts from "sit at the terminal, type a command" to "text the assistant whenever something comes up."
CI/CD Notifications and Reactions
Pipe CI results into your session through a channel. When a build fails, Claude can read the logs, spot the cause, and either patch it right then or message you with a diagnosis. This goes past passive notifications because Claude already holds your full project context.
Building Your Own Channel
The plugin surface is not capped at the three official channels. Anthropic publishes a Channels reference for building custom ones. Any MCP server that speaks the channel protocol can push events into Claude Code.
During the research preview, --channels only accepts plugins from an Anthropic-maintained allowlist. To run a channel you are building yourself, use the --dangerously-load-development-channels flag. That lets you iterate on custom integrations without waiting for official blessing.
The fakechat plugin ships as a development demo. It runs a chat UI on localhost with no external dependencies, so you can test the full channel flow before wiring up a real platform:
/plugin install fakechat@claude-plugins-official
claude --channels plugin:fakechat@claude-plugins-officialOpen http://localhost:8787 and start typing. Messages land in your Claude Code session and replies show up in the browser.
Requirements and Limitations
Requirements
- Claude Code v2.1.80 or later
- Bun runtime installed (bun.sh)
- claude.ai authentication (Pro or Max plan). Console and API key auth are not supported.
- Team/Enterprise plans: admin has to turn channels on explicitly in managed settings
- iMessage channel: macOS only, with Full Disk Access granted to your terminal app
Current Limitations
This is a research preview. Rough edges come with the territory:
- The session has to stay up: Close the terminal or stop the
claudeprocess and the channel goes dark. Messages sent while the session was down are lost (Telegram) or queued until the bot is back (Discord, viafetch_messages). - Permission prompts block from afar: When Claude needs permission approval, it waits until you approve at the terminal. The
--dangerously-skip-permissionsflag works but carries the obvious risks. - Allowlisted plugins only: For the preview, only plugins from
claude-plugins-officialpass--channels. Custom channels need the development flag. - No persistent background mode: A terminal session still has to be open. Pairing this with
tmux,screen, or a background process is the current workaround. - Platform-specific gaps: Telegram has no message history API. Discord takes more setup steps. iMessage only runs on macOS and needs Full Disk Access. Every platform brings its own constraints.
Anthropic has described this as a feature "we'll be expanding more on." The plugin shape points at future platforms (Slack and WhatsApp have both come up) and the channel reference docs confirm that community-built channels are part of the plan.
Frequently Asked Questions
What is Claude Code Channels?
Channels is a plugin-based feature that connects Claude Code sessions to messaging apps like Telegram, Discord, and iMessage. You message the app, Claude runs the request against your local dev environment, and replies come back in the same chat. Code and tools never leave your machine.
Is Claude Code Channels free?
You need a claude.ai Pro or Max subscription. API key auth is not supported. The Telegram, Discord, and iMessage plugins themselves are free and open source.
What's the difference between Channels and Remote Control?
Remote Control puts the full claude.ai web interface on top of your local session. Channels does the same thing but with messaging apps (Telegram, Discord, iMessage) as the surface. Both sessions stay local. Remote Control is one command to stand up. Channels asks for more plugin setup in return for native notifications and a lot more room to hack.
Can I use Claude Code from my phone?
Yes, via three different paths. Remote Control plugs into the Claude mobile app. Channels plugs into Telegram, Discord, or iMessage. Web sessions at claude.ai/code run fully in the cloud. All three reach Claude Code from any device with a browser or the right app.
Which messaging apps work with Claude Code Channels?
Telegram, Discord, and iMessage are the three official platforms as of March 2026. The plugin shape was built for expansion, and the community has already floated Slack and WhatsApp. You can also build your own channel using the Channels reference.
Getting Started
If you are already comfortable with MCP servers and Claude Code plugins, this setup will feel like home. Pick the platform you live in most:
- Telegram for the fastest setup (5 minutes, no server invite required)
- Discord for message history, guild channels, or team collaboration
- iMessage if you are on macOS and want zero-config native messaging with no outside service
- Fakechat for testing the flow locally before committing to a real platform
Start with DM-only access and the allowlist policy. Once that feels solid, branch out into guild channels on Discord or group chats on Telegram for the broader use cases.
Channels mark a shift in how developers work with their coding environment. Instead of sitting at the terminal, you message it. Instead of waiting on a build, you get pinged. Instead of bouncing between phone and workstation, you work from wherever you happen to be.
The "code from your phone" promise has been floating around for years. Between Channels, Remote Control, and scheduled tasks, Claude Code is quietly turning it into a real thing, one interface at a time.
Stop configuring. Start building.
Claude Code Remote Control
Drive a local Claude Code terminal session from your phone, tablet, or browser. Setup, security model, and how Remote Control stacks up against OpenClaw.
Claude Code Scheduled Tasks
Desktop tasks for durable automation, CLI /loop for session polling, and the real patterns teams run against error logs, briefings, and PRs.