Anthropic shipped Claude Code Channels on March 20, 2026 as a research preview. It lets you send messages from Telegram or Discord into a running Claude Code session on your local machine, and get replies back through the same chat. Your phone becomes a remote control for your coding agent.
I've spent years watching "remote access" features ship half-baked. Permission prompts that hang. Sessions that silently disconnect. Auth flows that work on the demo but break in production. So I went through the official docs at code.claude.com/docs/en/channels, cross-referenced with the plugin source on GitHub, and put together the guide I wish existed when I started.
What channels are (and what they're not)
A Channel is an MCP server that pushes events into your running Claude Code session. That's the key architectural difference from standard MCP, where Claude calls out to tools on demand. With Channels, external systems fire messages the moment they arrive, and Claude processes them with full project context.
Two modes exist. One-way channels forward events without expecting a reply (think CI failure notifications or monitoring alerts pushed into Claude's context). Two-way channels let Claude read the message and respond through the same platform. Telegram and Discord both run as two-way channels.
Here's what the message flow looks like:
Phone (Telegram/Discord)
-> Bot API (Telegram/Discord servers)
-> Local MCP plugin (Bun process on your machine, polling the Bot API)
-> Claude Code session (your terminal)
-> Claude executes work, calls reply tool
-> MCP plugin -> Bot API -> reply appears on your phone
No inbound ports get opened on your machine. No webhook endpoint exposed to the public internet. No reverse proxy. The plugin polls outbound. That's a meaningful security distinction from tools that require you to expose a localhost port.
One thing Channels is NOT: an always-on service. Close your terminal, and the channel goes dark. Messages sent while the session is down are lost. Telegram's Bot API provides no message history for bots, so there's no catch-up mechanism. If you need persistence, run Claude Code in a background process or persistent terminal like tmux or screen.
Prerequisites
Before you start, you need all of these. Not most. All.
- Claude Code v2.1.80 or later. Check with
claude --version. If you're below 2.1.80, update first. - A claude.ai login. Console and API key authentication are not supported during the research preview. You need an actual claude.ai account.
- Bun runtime installed. The channel plugins are Bun scripts. Run
bun --versionto verify. If it's not installed, grab it from bun.sh. - For Team/Enterprise orgs: An admin must explicitly enable channels in managed settings at claude.ai > Admin settings > Claude Code > Channels. Without this, the MCP server connects and its tools work, but channel messages won't arrive.
Setting up Telegram (the faster option)
I recommend starting with Telegram over Discord. Fewer steps, no developer portal, no gateway intents to configure. Five minutes, start to finish.
Step 1: Create a Telegram bot
Open BotFather in Telegram. Send /newbot. Pick a display name and a unique username ending in bot. Copy the token BotFather gives you.
Step 2: Install the plugin
In your Claude Code session:
/plugin marketplace add anthropics/claude-plugins-official
/plugin install telegram@claude-plugins-official
/reload-plugins
If the install command says the plugin isn't found, run /plugin marketplace update claude-plugins-official and retry.
Step 3: Configure your bot token
/telegram:configure YOUR_BOT_TOKEN_HERE
This saves the token to ~/.claude/channels/telegram/.env. You can also set TELEGRAM_BOT_TOKEN as an environment variable before launching Claude Code if you prefer.
Step 4: Restart with channels enabled
Exit Claude Code and restart:
claude --channels plugin:telegram@claude-plugins-official
Step 5: Pair your account
Open Telegram and send any message to your bot. It replies with a pairing code.
If your bot doesn't respond here, the most common cause is that Claude Code isn't running with the --channels flag from step 4. Go back and check.
In Claude Code, enter the pairing code:
/telegram:access pair YOUR_PAIRING_CODE
Then lock down access:
/telegram:access policy allowlist
This restricts the bot to your Telegram user ID only. Messages from anyone else get silently dropped.
Expected result: Send a message from Telegram. You'll see it appear in your Claude Code terminal as a <channel source="telegram"> event. Claude processes it, and the reply shows up in your Telegram chat. The bot shows a "typing..." indicator while Claude works, which is surprisingly useful for distinguishing between "Claude is still processing" and "Claude is stuck on a permission prompt."
File attachments work too. You can send images to Claude Code from Telegram (useful for sending debug screenshots of a mobile app), and Claude can send files back, with images rendering inline and other types sent as documents, up to 50MB per file.
Setting up Discord (more steps, same result)
Discord takes about ten minutes because you need to configure a bot application in the Developer Portal.
Step 1: Create a Discord application
Go to the Discord Developer Portal. Click New Application. Name it. In the Bot section, create a username, click Reset Token, and copy it.
Step 2: Enable Message Content Intent
In your bot's settings, scroll to Privileged Gateway Intents and enable Message Content Intent. Without this, the bot can't read message contents. This is the step people skip and then spend 20 minutes debugging why nothing works.
Step 3: Generate an invite URL
Go to OAuth2 > URL Generator. Select the bot scope. Enable these permissions: View Channels, Send Messages, Send Messages in Threads, Read Message History, Attach Files, Add Reactions. Open the generated URL to invite the bot to your server.
Step 4: Install and configure
/plugin install discord@claude-plugins-official
/reload-plugins
/discord:configure YOUR_BOT_TOKEN
Step 5: Restart and pair
claude --channels plugin:discord@claude-plugins-official
DM your bot on Discord. It sends a pairing code. Complete the link:
/discord:access pair YOUR_PAIRING_CODE
/discord:access policy allowlist
Same as Telegram, the pairing locks the bot to your Discord user ID.
Test locally first with fakechat
Before touching Telegram or Discord, you can validate the entire channel architecture using Fakechat, Anthropic's built-in demo channel that runs a chat UI on localhost.
/plugin install fakechat@claude-plugins-official
Exit and restart:
claude --channels plugin:fakechat@claude-plugins-official
Open http://localhost:8787 in your browser and type a message. It arrives in your Claude Code session as a channel event, Claude does the work, and the reply shows up in the browser. No tokens, no bot setup, no external services. Use this to confirm your Claude Code version and Bun installation are working before you add real platforms.
Running multiple channels
You can pass several plugins to --channels, space-separated:
claude --channels plugin:telegram@claude-plugins-official plugin:discord@claude-plugins-official
Both channels will be active in the same session.
Troubleshooting
These are the problems I've seen come up in practice.
Bot doesn't respond when you message it. Claude Code isn't running with --channels, or you restarted Claude Code without the flag. The bot is only live while the channel is active.
"Plugin not found in any marketplace." Run /plugin marketplace add anthropics/claude-plugins-official and then /plugin marketplace update claude-plugins-official. Retry the install.
Bun not found. The channel plugins require Bun. Install it from bun.sh and make sure bun --version returns something. On macOS, brew install oven-sh/bun/bun is the fastest path. On Linux, curl -fsSL https://bun.sh/install | bash.
Discord bot can see messages but doesn't reply. You forgot to enable Message Content Intent in the Developer Portal. Go back to your bot settings, enable it under Privileged Gateway Intents, and restart the channel.
Permission prompts pause the session. If Claude hits a permission prompt while you're away, the session hangs until you respond at the terminal. Channel plugins that declare the permission relay capability can forward these prompts to your phone so you can approve remotely. For unattended use, --dangerously-skip-permissions bypasses prompts entirely, but only use that in environments you trust.
Messages sent while the session was down are lost. This is by design. The Telegram Bot API doesn't store history for bots. If you need to not miss messages, keep the session running in a persistent terminal.
The security model
The allowlist-based pairing system is the right default. Only your specific user ID can push messages. Everyone else is silently dropped. No error message, no acknowledgment.
During the research preview, --channels only accepts plugins from Anthropic's maintained allowlist (the ones in claude-plugins-official). If you pass something that isn't approved, Claude Code starts normally but the channel doesn't register, and a startup notice tells you why. To test a custom channel you're building, use --dangerously-load-development-channels.
Be aware that anyone on your allowlist who can reply through the channel can also approve or deny tool use in your session if permission relay is enabled. Only allowlist people you trust with that authority.
Why this matters
Before Channels, Claude Code required you to sit at your terminal. A long refactor, a multi-file debugging session, a build running tests across the codebase: all of it demanded your physical presence. Step away and you'd miss permission prompts that paused everything.
OpenClaw proved the demand for phone-based AI agent control when it went viral in early 2026, as reported by VentureBeat. Channels is Anthropic's first-party answer to that same need, with a tighter security model and no external server requirement. The trade-off is that Channels only works with Claude Code (not arbitrary AI models), and it only supports Telegram and Discord during the research preview, while OpenClaw supports iMessage, WhatsApp, Slack, and more.
For developers already using Claude Code as their primary coding agent, Channels removes a real friction point. Kick off a refactor, go grab lunch, check progress from your phone, send a follow-up instruction without opening your laptop. That workflow didn't exist three days ago.
Sage Thornton covers developer tools and guides for The Daily Vibe.



