◉CLAUDE LABJP
●2.1.301 — Adds the vim % motion, LaTeX math rendering in the VS Code panel, and a retry-watchdog limit for usage-limit waits (10/15)●2.1.299 — Conversations over 200K tokens left idle about 54 minutes get compacted; MCP allow rules now match only the server they name●SONNET 4.5 — Retires on the Claude API on 11/30, 45 days left. Migrate to Sonnet 5.5●WINDOWS — Reports say hooks break silently only on Japanese-locale Windows; check the character encoding first●FAST MODE — Opus 5.5 fast mode is out of research preview and no longer needs the beta header (10/15)●NEW — I Put a Ten-Line Promise File at the To…●2.1.301 — Adds the vim % motion, LaTeX math rendering in the VS Code panel, and a retry-watchdog limit for usage-limit waits (10/15)●2.1.299 — Conversations over 200K tokens left idle about 54 minutes get compacted; MCP allow rules now match only the server they name●SONNET 4.5 — Retires on the Claude API on 11/30, 45 days left. Migrate to Sonnet 5.5●WINDOWS — Reports say hooks break silently only on Japanese-locale Windows; check the character encoding first●FAST MODE — Opus 5.5 fast mode is out of research preview and no longer needs the beta header (10/15)●NEW — I Put a Ten-Line Promise File at the To…
Articles/Claude Code
⟐ Claude Code/2026-03-22Intermediate

Claude Code Channels: How to Control Your Coding Agent from Telegram and Discord

Claude Code Channels let you send messages from Telegram or Discord directly into a running session. Learn how to set up, configure, and use this powerful new feature for remote development.

Claude Code264ChannelsTelegramDiscord3MCP54plugins4remote development

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:

  1. You send a message to your bot on Telegram or Discord
  2. The channel plugin receives the message and delivers it to your Claude Code session as a <channel> event
  3. Claude Code interprets the message and executes the task using its full access to your filesystem, Git, and MCP tools
  4. The result is sent back through the channel's reply tool 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 claude

Setting 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-plugins

Step 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-official

Step 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 allowlist

That'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

  1. Click "New Application" in the Developer Portal
  2. In the Bot section, create a username and click "Reset Token" to copy it
  3. Under "Privileged Gateway Intents," enable Message Content Intent
  4. Go to OAuth2 → URL Generator, select the bot scope, and enable these permissions:
    • View Channels / Send Messages / Send Messages in Threads
    • Read Message History / Attach Files / Add Reactions
  5. 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 allowlist

Practical 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 --channels flag are active
  • Organization controls: Team and Enterprise plans give admins a channelsEnabled setting to control availability
# Manage the allowlist
/telegram:access policy allowlist  # Switch to allowlist mode
/telegram:access pair <code>       # Add a new user

If 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.

FeatureWhat It DoesBest For
Claude Code on the WebRuns tasks in a fresh cloud sandbox cloned from GitHubSelf-contained async work you check on later
Claude in SlackSpawns a web session from an @Claude mentionStarting tasks from team conversation context
Remote ControlDrive your local session from claude.ai or the mobile appSteering an in-progress session from your phone
ChannelsPush external events into your local sessionMessaging 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.

Share

Thank You for Reading

Claude Lab is ad-free, supported entirely by members like you. We publish practical guides daily with implementation code, benchmarks, and production-ready patterns. If you've found it useful, we'd love to have you on board.

  • ✦Copy-paste ready implementation code
  • ✦New advanced guides published daily
  • ✦$5/mo or $10 for lifetime access
View Membership →

If you found this article helpful, a small tip ($1.50) would mean a lot to us. Your support helps keep this site ad-free and covers server and hosting costs.

Related Articles

⟐ Claude Code2026-09-06
I counted 42 skills on my shelf, and four of them were just a note saying they had moved
Claude Code v2.1.261 added /skill-doctor. Before running it I counted my own skill shelf from the files, found four tombstones, and learned that the obvious awk one-liner for spotting duplicate plugin names quietly reports skills that are not duplicates at all.
⟐ Claude Code2026-09-04
The ~/.claude.json Rollback Is Fixed in v2.1.259. Putting Back What It Erased Is Still Your Job
Concurrent sessions used to silently roll back each other's ~/.claude.json changes. v2.1.259 fixed that, but nothing restores the trust settings and MCP servers you already lost. Here is how I find and rebuild them, with a small key-path diff script.
⟐ Claude Code2026-09-01
Once I passed a dozen MCP servers, I stopped trusting the startup list
Only some of the servers that say connection failed at startup are ones you can actually fix. Here is a probe that separates no-response, launch failure, and protocol rejection, measured across a 14-server fleet where sequential 22.03s became parallel 5.09s, and where trimming the deadline quietly turned healthy servers into failures.