What Are Claude Code Channels? — Message Your AI Agent from Anywhere
On March 20, 2026, Anthropic launched Channels for Claude Code as a research preview. Channels let you push messages from Telegram or Discord directly into a running Claude Code session on your local machine. Your session processes each request with full filesystem, MCP, and Git access, then replies through the same messaging app.
Before Channels, working with Claude Code meant sitting at your terminal. Now you can fire off a Telegram message like "run the test suite and tell me what failed" while you're on the train, and Claude Code on your home machine picks it up, does the work, and sends back the results.
This isn't just a new UI — it's a fundamental shift from synchronous "ask-and-wait" to an asynchronous, autonomous partnership between developer and AI agent.
How Channels Work — MCP-Powered Plugin Architecture
Under the hood, Channels are built on Anthropic's open-source Model Context Protocol (MCP). Each channel runs as an MCP server plugin that bridges an external messaging service and your Claude Code session.
Here's the flow:
- You send a message to your bot on Telegram or Discord
- The channel plugin receives the message and delivers it to your Claude Code session as a
<channel>event - Claude Code interprets the message and executes the task using its full access to your filesystem, Git, and MCP tools
- The result is sent back through the channel's
replytool and appears in the same messaging app
One key thing to know: events only arrive while the session is open. For an always-on setup, run Claude Code in a background process or persistent terminal.
# Run Claude Code in the background with tmux
tmux new-session -d -s claude "claude --channels plugin:telegram@claude-plugins-official"
# Attach to check on the session
tmux attach -t claudeSetting Up the Telegram Channel
Step 1: Create a Telegram Bot
Open BotFather in Telegram and send /newbot. Give it a display name and a unique username ending in bot. BotFather will return an API token — save it for the next step.
Step 2: Install the Plugin
In your Claude Code session, run:
# Install the Telegram plugin
/plugin install telegram@claude-plugins-official
# If the marketplace isn't set up yet, add it first
/plugin marketplace add anthropics/claude-plugins-official
/plugin marketplace update claude-plugins-official
# Reload plugins to activate the configure command
/reload-pluginsStep 3: Configure Your Token
Pass the token from BotFather to the configure command:
/telegram:configure <your-bot-token>The token is saved to ~/.claude/channels/telegram/.env. Alternatively, you can set the TELEGRAM_BOT_TOKEN environment variable before launching Claude Code.
Step 4: Restart with Channels Enabled
Exit Claude Code and restart with the --channels flag:
claude --channels plugin:telegram@claude-plugins-officialStep 5: Pair Your Account
Send any message to your bot in Telegram. It replies with a pairing code. Back in Claude Code, complete the pairing:
# Pair with the code you received
/telegram:access pair <code>
# Lock access to your account only
/telegram:access policy allowlistThat's it — messages you send to your Telegram bot now arrive in your Claude Code session.
Setting Up the Discord Channel
For Discord, you'll create a bot through the Discord Developer Portal.
Step 1: Create and Configure the Discord Bot
- Click "New Application" in the Developer Portal
- In the Bot section, create a username and click "Reset Token" to copy it
- Under "Privileged Gateway Intents," enable Message Content Intent
- Go to OAuth2 → URL Generator, select the
botscope, and 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 2: Configure and Launch
# Install the Discord plugin
/plugin install discord@claude-plugins-official
# Configure your bot token
/discord:configure <your-bot-token>
# Start Claude Code with the Discord channel
claude --channels plugin:discord@claude-plugins-official
# Pair your account (DM the bot to get a pairing code)
/discord:access pair <code>
/discord:access policy allowlistPractical Use Cases
Channels really shine when you're away from your terminal. Here are some scenarios where they can transform your workflow.
Giving Instructions on the Go
Commuting and want to get a head start? Send a Telegram message like "add a dark mode toggle button to the navigation in src/components/Header.tsx" and Claude Code starts working on your local machine while you're on the bus.
Receiving CI/CD Events
By building a custom webhook receiver channel, you can have CI failure notifications delivered directly to your Claude Code session. Claude can then automatically analyze the error and attempt a fix. The Channels reference has a full walkthrough for building webhook receivers.
Async Team Collaboration
With a Discord channel bot, anyone on your team can mention the bot to ask questions about the codebase or request small fixes. This keeps the development flow going without blocking on anyone's availability.
Security Model — Allowlist-Based Access Control
Channels implement multiple layers of security:
- Sender allowlist: Each plugin maintains an allowlist of approved sender IDs. Messages from unknown IDs are silently dropped
- Pairing authentication: First-time connections require a pairing code verification
- Per-session activation: Only servers explicitly named in the
--channelsflag are active - Organization controls: Team and Enterprise plans give admins a
channelsEnabledsetting to control availability
# Manage the allowlist
/telegram:access policy allowlist # Switch to allowlist mode
/telegram:access pair <code> # Add a new userIf Claude hits a permission prompt while you're away from the terminal, the session pauses until you approve locally. The --dangerously-skip-permissions flag bypasses prompts for unattended use, but only use it in trusted environments.
How Channels Compare to Other Connection Methods
Claude Code offers several ways to interact from outside the terminal. Understanding when to use each one helps you pick the right tool.
| Feature | What It Does | Best For |
|---|---|---|
| Claude Code on the Web | Runs tasks in a fresh cloud sandbox cloned from GitHub | Self-contained async work you check on later |
| Claude in Slack | Spawns a web session from an @Claude mention | Starting tasks from team conversation context |
| Remote Control | Drive your local session from claude.ai or the mobile app | Steering an in-progress session from your phone |
| Channels | Push external events into your local session | Messaging app instructions and webhook reception |
The key difference: Remote Control is a "pull" model where you go check on your session, while Channels is a "push" model where events come to you.
Tips for Actually Using Channels from Your Phone
Once setup is done, the next question is how to phrase things so Channels feel good to use on a small screen away from your desk. As an indie developer juggling several apps at once, I reach for this feature most when I'm away from my machine and just want to leave a one-line instruction. Here are a few things that worked for me after living with it for a while.
Keep each message to a single task. Rather than typing out a long spec, a short instruction with the target file and the result you expect travels better on the move. Something like "add a dark mode toggle to Header.tsx, and just say a word when it works" was the grain size that felt comfortable to me.
For tasks with long output, ask for the conclusion first so you can keep reading on your phone. Receiving a full diff or a verbose log as-is leaves you scrolling until you're tired. A small addition like "summarize the changes in three lines, details later" makes the reply much easier to take in.
Whether you can send screenshots depends on the channel's permissions — Discord needs the Attach Files permission, while Telegram lets you attach images directly. Before I hit send, I take a breath to check the image hasn't captured a secret or a stray notification in the background.
When a message doesn't arrive, I calmly check just three things: is the session open (you can peek with tmux), did you launch with the --channels flag, and is your ID on the allowlist. In my own use, re-pairing alone fixed it more often than not.
One last note. When you hand off something heavy, keep an eye on the terminal for the first few minutes. It saves you from waiting on a reply that never comes because the session is quietly paused at a permission prompt.
Getting Started with Channels
Claude Code Channels open up a new paradigm for developer-AI collaboration. By turning everyday messaging apps into an interface for your local Claude Code session — complete with full filesystem and Git access — they make it possible to stay productive even when you're away from your desk.
Setup is straightforward: install Bun, create a bot, run a few commands, and you're ready to go. While Channels are still in research preview, getting familiar with them now means you'll be well-prepared when the feature reaches general availability.
We recommend starting with the fakechat demo to see how Channels work before setting up Telegram or Discord. Once you're comfortable, combine Channels with Hooks and Skills to build even more powerful automation workflows.