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 does | External systems push INTO your session | You control your session FROM another device |
| Context window | No effect on 1M context | May force compact |
| Permission relay | Yes (v2.1.81) | No |
| Independence | Fully standalone | Fully 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:
- Claude wants to run
rm -rf node_modules && pnpm install - A notification appears on your phone via Telegram
- You tap “Approve” from your couch
- 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-channelsflag - 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.