tips · · 7 min read

Claude Code Channels: Approve Dangerous Operations from Your Phone

The --channels flag lets you route permission prompts to Telegram. Here's how to reclaim dangerous mode without losing control.

If you use Claude Code for real work, you’ve probably set this in your settings.json:

"skipDangerousModePermissionPrompt": true

It makes sense. Getting asked “Are you sure you want to run pnpm build?” for the hundredth time is maddening. But it also means Claude can delete files, force-push to Git, run arbitrary shell commands, and modify your infrastructure --- all without asking.

There’s now a better option.

Channels: External Systems Meet Your Session

Claude Code v2.1.80 introduced --channels --- a way for MCP servers to push messages into your active session. v2.1.81 added the critical piece: permission relay. Channel servers that declare the permission capability can forward tool approval prompts to your phone.

The result: Claude asks before doing something dangerous, but the prompt goes to your Telegram instead of blocking your terminal.

What Channels Are (and Aren’t)

Channels are often confused with Remote Control. They’re completely separate features:

Channels (--channels)Remote Control
What it doesExternal systems push INTO your sessionYou control your session FROM another device
Context windowNo effect on 1M contextMay force compact
Permission relayYes (v2.1.81)No
IndependenceFully standaloneFully standalone

This distinction matters. If you’re using the 1M context window (Opus with extended context), Remote Control may force a context reduction. Channels don’t touch your context at all --- they’re a transport mechanism, not a session bridge.

Setting It Up

Step 1: Create a Telegram Bot

Open Telegram, find @BotFather, and send /newbot. Pick a name and username. BotFather gives you a token like 123456789:AAH....

Step 2: Configure the Token

/telegram:configure <your-token>

This saves the token to ~/.claude/channels/telegram/.env with proper permissions (chmod 600).

Step 3: Start with Channels

--channels is a startup flag, not a runtime toggle:

claude --channels plugin:telegram@claude-plugins-official

Step 4: Pair Your Account

DM your bot on Telegram. It replies with a 6-character pairing code. Back in Claude Code:

/telegram:access pair <code>

Step 5: Lock It Down

Once paired, switch from pairing mode to allowlist:

/telegram:access policy allowlist

Now only your Telegram account can reach the bot. No one else can trigger pairing codes.

Step 6: Make It Your Default

Add a shell function to ~/.zshrc:

cc() { claude --channels plugin:telegram@claude-plugins-official "$@"; }

Now cc replaces claude as your default command, with Telegram always active:

cc                              # new session with channels
cc --resume "my-project"        # resume with channels
cc -p "quick question"          # print mode with channels

The Security Model

With channels + permission relay, you can re-enable permission prompts (skipDangerousModePermissionPrompt: false) while keeping the workflow smooth:

  1. Claude wants to run rm -rf node_modules && pnpm install
  2. A notification appears on your phone via Telegram
  3. You tap “Approve” from your couch
  4. The command executes

This is strictly better than either extreme:

  • Skip all prompts: Fast but blind. You don’t know what’s happening.
  • Approve everything locally: Safe but tedious. You’re chained to the terminal.
  • Approve via Telegram: You maintain oversight without friction.

Beyond Permission Relay

Channels aren’t just for approvals. The core capability is bidirectional messaging between external systems and your Claude session:

  • DM your bot from Telegram to send a message into your active session
  • Receive notifications when Claude completes a long-running task
  • React to external events --- CI failures, monitoring alerts, deployment status

The infrastructure potential is significant. Imagine a custom channel server on your homelab that:

  • Watches Forgejo for failed CI builds and pushes them into your session
  • Monitors service health and alerts you through Claude
  • Receives webhook events from GitHub, PagerDuty, or Slack

This approximates what Cursor calls “automations” --- event-driven AI agents --- using Claude Code’s channel system and your own infrastructure.

Current Limitations

Channels are in research preview (as of March 2026):

  • Only allowlisted channel plugins work (Telegram, Discord, Fakechat)
  • Custom channels require the --dangerously-load-development-channels flag
  • Enterprise/Team organizations must explicitly enable channels
  • The protocol contract may change based on feedback

For personal use, these limitations are minor. The Telegram plugin works well, the setup takes 5 minutes, and the security improvement over blanket permission skipping is immediate.


Channels were introduced in Claude Code v2.1.80. Permission relay was added in v2.1.81. The Telegram plugin is part of the official Claude plugins marketplace.