Claude Code on Telegram, Discord or iMessage

Claude Code reaches Telegram, Discord and iMessage through channels, a research preview: install the official plugin, add a bot token for Telegram or Discord, restart with claude --channels and pair your account. Messages only arrive while that session stays open on your computer.

Contents

Claude Code on Telegram, Discord or iMessage runs through channels, a research preview from Anthropic. Setup is the official plugin, a bot token, a restart with claude --channels plugin:telegram@claude-plugins-official and a pairing code from the bot. Claude keeps working on your own computer, and a message gets through only while that session is open.

What a channel is#

A channel is an MCP server that pushes events into a Claude Code session that's already running. Anthropic's channels docs call two-way channels "like a chat bridge". You message your bot, Claude reads it in the session, does the work against your real files, and answers through a reply tool. Channels arrived in Claude Code 2.1.80 and the permission relay in 2.1.81 (changelog).

  • The reply doesn't show in your terminal. There you see the inbound message, a tool call and a confirmation like "sent"; the text itself lands in Telegram.
  • claude --help lists neither --channels nor --dangerously-load-development-channels during the preview, though both work.
  • Telegram's Bot API has no message history, so the bot only sees messages as they arrive. If Claude needs earlier context, it asks you to paste it (Telegram plugin README).

What you need first#

  • Bun, because each channel plugin is a Bun script. Check with bun --version; the Telegram README installs it with curl -fsSL https://bun.sh/install | bash.
  • A claude.ai account, or a Console API key since Claude Code 2.1.128. Channels don't work on Amazon Bedrock, Google Cloud or Microsoft Foundry.
  • On claude.ai Team and Enterprise, an Owner's say-so. Channels stay blocked until an Owner turns them on in Organization settings › Claude Code › Channels, or sets channelsEnabled: true in managed settings. Pro and Max users without an organization skip these admin checks.

Set up Claude Code on Telegram#

  1. BotFather (@BotFather in Telegram) takes /newbot, then asks for a display name and a username ending in bot, say my_assistant_bot, which becomes t.me/my_assistant_bot. Its last message holds a token shaped like 123456789:AAHf...; copy all of it, digits and colon included.
  2. Start claude and run /plugin install telegram@claude-plugins-official. Choose the user scope so the plugin is there in every project. If Claude Code says the marketplace isn't found, add it with /plugin marketplace add anthropics/claude-plugins-official and install again.
  3. /telegram:configure <token> writes one line, TELEGRAM_BOT_TOKEN=..., to ~/.claude/channels/telegram/.env. A variable of that name in your shell overrides the file.
  4. Quit and start again with claude --channels plugin:telegram@claude-plugins-official. The plugin's server won't connect without that flag.
  5. DM the bot. It answers "Pairing required" with a 6-character code and the exact command to paste, /telegram:access pair <code>. The code lasts an hour. A second DM gets one "Still pending" reminder and after that the bot says nothing.
  6. Once you've paired, the bot sends "Paired! Say hi to Claude." Then run /telegram:access policy allowlist: under the default pairing policy every stranger who finds the bot gets a code back, and under allowlist they get silence.

What the plugin keeps on disk and does after that:

  • Your numeric user ID and the policy sit in ~/.claude/channels/telegram/access.json. The plugin re-reads it on every message, so a change needs no restart.
  • /status sent to the bot answers "Paired as @yourname".
  • While Claude works, Telegram shows the bot as typing.
  • Photos go to ~/.claude/channels/telegram/inbox/ and Claude gets the path. Telegram compresses them, so for the original send it as a file (long-press › Send as File).

Claude Code on Discord#

Discord has three extra steps before the plugin, because a bot there can only DM people it shares a server with.

  1. Developer Portal: New Application, then the Bot tab. Set a username and press Reset Token. Discord shows that token once.
  2. On the same tab, under Privileged Gateway Intents, switch on Message Content Intent. Without it your messages reach the bot with empty content.
  3. OAuth2 › URL Generator: tick the bot scope, then View Channels, Send Messages, Send Messages in Threads, Read Message History, Attach Files and Add Reactions. Open the generated URL and add the bot to a server you're in.
  4. Back in Claude Code: /plugin install discord@claude-plugins-official, /discord:configure <token> (it writes DISCORD_BOT_TOKEN to ~/.claude/channels/discord/.env), and a restart with claude --channels plugin:discord@claude-plugins-official.
  5. DM the bot, paste the /discord:access pair <code> line it sends back into Claude Code, then set /discord:access policy allowlist.

Make it a private server, since anyone in it can DM the bot. The plugin's access guide also says to turn off Public Bot on the Bot tab (it's on by default); then only your account can install the bot anywhere. Server channels stay off until you add one with /discord:access group add <channel ID>, copied with Developer Mode on via right-click › Copy Channel ID. In those channels the bot answers only when it's mentioned or replied to, unless you pass --no-mention.

Claude Code on iMessage#

iMessage needs a Mac and no bot. The plugin polls ~/Library/Messages/chat.db once a second and sends replies with osascript, through Messages.

  1. Give your terminal Full Disk Access. macOS asks the first time the plugin reads the database, naming whichever app launched Bun (Terminal, iTerm, Ghostty or your IDE). If you missed it, add that app in System Settings › Privacy & Security › Full Disk Access. Without it, the server stops with authorization denied.
  2. Run /plugin install imessage@claude-plugins-official, then restart with claude --channels plugin:imessage@claude-plugins-official. If /imessage:configure tab-completes, the plugin loaded.
  3. Text yourself from any device signed in to your Apple ID. Self-chat passes with no pairing. The first reply makes macOS ask whether your terminal may control Messages: click OK.
  • Each reply ends in "Sent by Claude" unless you set IMESSAGE_APPEND_SIGNATURE=false.
  • Other people stay out until you add them with /imessage:access allow +15551234567 or their Apple ID email.
  • SMS is off by default, because SMS sender IDs can be spoofed: a forged text from your own number would skip the gate. IMESSAGE_ALLOW_SMS=true turns it on.
  • Texts that arrived before the session started aren't replayed.

Keep the session open#

Events only arrive while the session runs. If the terminal closes, the laptop sleeps or you log out, nothing on your computer is reading the chat. Anthropic's advice is to run Claude in a background process or a persistent terminal. With tmux on a machine that stays awake, that's tmux new -s bot, the --channels command inside it, then Ctrl-b d to detach and tmux attach -t bot to look in later. Our guide to Claude Code on an always-on machine covers the box, the headless sign-in and tmux.

Two dialogs never reach your phone: project trust and MCP server consent only show in the local terminal. So start the session once in a folder you've already trusted.

Who can approve tool use from the chat#

All three official plugins declare the permission relay. When Claude wants to run Bash, Write or Edit and needs your yes, the prompt opens in the terminal and goes to the chat at the same time, and Claude Code applies whichever answer comes first. Telegram and Discord send it to every allowlisted account, with Allow, Deny and See more buttons. iMessage sends it only to your own self-chat, where you reply yes or no followed by the five-letter code in the prompt.

So on Telegram and Discord the allowlist is a security setting as well as a spam filter. The security section of the channels docs ends on exactly that: "Anyone who can reply through the channel can approve or deny tool use in your session, so only allowlist senders you trust with that authority." Keep the list to yourself unless you'd hand that person your keyboard.

If prompts pile up, decide in advance what Claude may do without asking. Our permission rules guide has a starter set of allow and deny rules, and the docs name --dangerously-skip-permissions for unattended use, with the warning to run it only in environments you trust.

Channels vs Remote Control vs cloud sessions#

Channels Remote Control Cloud sessions
Where Claude runs Your computer Your computer Anthropic's cloud, cloned from GitHub
You talk to it from Telegram, Discord, iMessage The Claude app or claude.ai/code claude.ai/code, the Claude app, the desktop app, claude --cloud
Sign-in claude.ai or Console API key Pro, Max, Team or Enterprise; no API keys Pro, Max, Team; Enterprise with eligible seats
Laptop asleep Messages don't arrive Reconnects when it wakes Keeps running
Status Research preview Available Available

Sources: channels, Remote Control and cloud sessions docs, read 24 October 2026.

Channels suit you if Telegram, Discord or Messages is open all day anyway. Remote Control puts the whole session on your phone, tool output included; How to run Claude Code from your phone sets it up next to SSH and the other options. A cloud session is the one that keeps going with your computer off.

How Shuriken does it#

Shuriken has no Telegram, Discord or iMessage bridge. You reach its chats through its own app, on your computers and in a phone browser.

On a phone that's the web app at app.shuriken.sh, in any browser, and it adds to the home screen. It shows every chat on every computer and server you've added, for Claude Code, Codex, Gemini CLI and 64 more agents, where a channel shows one session per bot. You answer questions and approvals there, queue the next message while an agent works, and dictate instead of typing. What travels between your devices is end-to-end encrypted, and the agents and your code stay on your machines.

It has two limits:

  • The web app's pushes cover account alerts only, such as a device going offline or a source that needs signing in again. A push when a chat needs you comes with the native iOS and Android apps, planned for November 2026 (what the phone can do today).
  • Like every option on this page, it needs the computer running the agent to be on.

Being told when an agent is done, with a Stop hook and ntfy or with Remote Control's push, is set up step by step in Claude Code notifications on your phone.

If you'd rather follow every agent from one place than keep a bot per session, download Shuriken.

Sources

  1. Claude Code docs: Push events into a running session with channels (accessed 24 October 2026)
  2. Claude Code docs: Channels reference (accessed 24 October 2026)
  3. Claude Code docs: Remote Control (accessed 24 October 2026)
  4. Claude Code docs: Use Claude Code in the cloud (accessed 24 October 2026)
  5. Claude Code changelog (accessed 24 October 2026)
  6. claude-plugins-official: Telegram plugin (accessed 24 October 2026)
  7. claude-plugins-official: Discord plugin (accessed 25 October 2026)
  8. claude-plugins-official: Discord plugin access guide (accessed 24 October 2026)
  9. claude-plugins-official: iMessage plugin (accessed 24 October 2026)

Frequently asked questions

Does the Claude Code Telegram plugin work with an API key?

Yes, with a Claude Console API key since Claude Code 2.1.128. Console organizations that deploy managed settings must set channelsEnabled to true. Channels don't work on Amazon Bedrock, Google Cloud or Microsoft Foundry.

Why doesn't my Telegram bot answer?

The bot can only reply while Claude Code is running with the --channels flag. Check that the session is open, that you restarted it after installing the plugin, and on a Team or Enterprise plan that an Owner has turned channels on.

Can I approve Claude Code's tool use from Telegram?

Yes. The official Telegram, Discord and iMessage plugins relay prompts for tools such as Bash, Write and Edit: Telegram and Discord send Allow, Deny and See more buttons to every allowlisted account, and iMessage asks only in your self-chat, where you reply yes or no with a five-letter code. Whichever answer arrives first, terminal or chat, wins.

Why is --channels not in claude --help?

Anthropic hides --channels and --dangerously-load-development-channels from the help output while channels are a research preview. The flags still work.

Does Shuriken connect to Telegram or Discord?

No. Shuriken has no Telegram, Discord or iMessage bridge. You reach its chats from the web app at app.shuriken.sh in any phone browser, across every computer and server you've added.

Free tools