Claude Code Channels: управляем AI-агентом из Telegram и Discord

20 марта Anthropic выкатила фичу, которая реально меняет подход к работе с AI-ассистентом. Claude Code теперь можно писать прямо из Telegram или Discord — и он ответит. Не через какой-нибудь костыльный бот а прямо в вашу рабочую сессию, где открыт проект, загружены файлы и сохранен весь контекст.

Фича называется Channels, пока в research preview. Но работает уже сейчас — если знать как настроить.

Что такое Channels и зачем они нужны

Вот представьте: вы на совещании, а CI упал. Или сидите в кафе и вдруг вспомнили что забыли дописать тест. Раньше надо было тащиться к ноутбуку, открывать терминал, запускать Claude Code. Теперь — достаете телефон, пишете боту в Telegram: «Посмотри, почему упали тесты в api/users.test.ts», и Claude разбирается. Прямо на вашей машине, с доступом к реальным файлам проекта.

Channel — это MCP-сервер, который пушит сообщения в уже запущенную сессию Claude Code. Ключевое слово тут: уже запущенную. Не новый облачный инстанс а ваш живой терминал с вашим проектом.

Channels работают только пока сессия Claude Code открыта. Закрыли терминал — бот перестает отвечать. Для фоновой работы надо держать сессию в tmux, screen или чём-то аналогичном.

Что умеет делать Claude через каналы

По сути всё то же самое что и в обычной сессии, но триггером служит ваше сообщение из мессенджера:

  • Читать и редактировать файлы проекта
  • Запускать команды
  • Отвечать вам обратно в тот же чат
  • Отправлять файлы и скриншоты (в Telegram — фото с превью, в Discord — аттачи до 25 МБ)
  • Реагировать эмодзи на сообщения (да, Claude может поставить вам огонечек 🔥)

В терминале видно что пришло сообщение и что Claude вызвал инструмент reply. Сам текст ответа появляется в мессенджере.

Реакция сообщества

Фича вызвала ажиотаж. Вот что писали в X (Twitter) через несколько часов после релиза:

@WaveTheoryAI: «Написать агенту с телефона, чтобы он пофиксил баг, пока ты на совещании — это реально другой уровень developer experience»

@0xprotovox: «Уже 3 месяца гоняю Claude Code с телефона через Telegram. Шиплю full-stack фичи, фикшу баги, деплою серверы — все с мобилки. Теперь это просто стало офицальным»

@PaulBaier: «Как нетехнарь, вложил 100+ часов в свой проект на выделеном MacBook Pro. Мой персональный AI Daily Briefing тянет рабочую почту, календарь, HubSpot, список задач и даже баланс банковского счета»

Были и скептики. @jasonnewton написал что фича работает нестабильно и ему удалось запустить ее только один раз. @prayag_sonar справедливо заметил, что проект OpenClaw уже давно делает похожее — и даже больше, с поддержкой iMessage, Slack и WhatsApp причем без привязки к активной сессии.

Короче, фича сырая (research preview не просто так), но потенциал огромный. Кто раньше настроит — тот раньше получит суперсилу.

Что нужно перед стартом

Убедитесь что у вас есть:

  • Claude Code v2.1.80+ — проверьте версию командой claude --version
  • Аккаунт claude.ai — API-ключи и Console не поддерживаются
  • Bun — плагины каналов работают на нем. Проверьте: bun --version. Если нет — curl -fsSL https://bun.sh/install | bash
  • Подписка Pro или Max — для индивидуальных пользователей каналы доступны по умолчанию
  • Team/Enterprise — админ должен явно включить channelsEnabled в настройках организции

Настройка Telegram: пошаговый гайд

Самый популярный вариант для русскоязычных разработчиков, разберем максимально подробно.

Шаг 1. Создаем бота через BotFather

Открываем @BotFather в Telegram. Отправляем /newbot.

BotFather спросит две вещи:

  • Name — отображаемое имя (любое, можно с пробелами)
  • Username — уникальный хэндл, обязательно заканчивается на bot (например, my_claude_assistant_bot)

В ответ придет токен вида 123456789:AAHfiqksKZ8... — копируем целиком, включая число и двоеточие перед ним.

Шаг 2. Устанавливаем плагин

Запускаем Claude Code и выполняем:

/plugin install telegram@claude-plugins-official

Если Claude Code говорит что плагин не найден, обновите маркетплейс:

/plugin marketplace update claude-plugins-official

Или добавьте его впервые:

/plugin marketplace add anthropics/claude-plugins-official

После установки выполните /reload-plugins чтобы активировать команду конфигурации.

Шаг 3. Передаем токен

/telegram:configure 123456789:AAHfiqksKZ8...

Токен сохранится в ~/.claude/channels/telegram/.env. Можно также задать переменную TELEGRAM_BOT_TOKEN в окружении шелла — она имеет приоритет.

Шаг 4. Перезапускаем с флагом каналов

Выходим из Claude Code и запускаем заново:

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

Без --channels бот не подключится. Это осознанное решение — каналы включаются явно на каждую сессию.

Шаг 5. Привязка аккаунта (pairing)

Открываем Telegram, пишем что угодно нашему боту. Бот ответит 6-символьным кодом привязки.

Если бот молчит — проверьте что Claude Code запущен именно с --channels.

Возвращаемся в Claude Code:

/telegram:access pair <код>

Всё, следующее сообщение боту уже дойдет до Claude.

Шаг 6. Закрываем доступ

По умолчанию бот в режиме pairing — любой человек который найдет вашего бота, получит код привязки. Это нужно только для первичной настройки. После привязки переключаем политику:

/telegram:access policy allowlist

Теперь только ваш аккаунт (по numeric ID) может отправлять сообщения.

Узнать свой числовой Telegram ID можно через бота @userinfobot.

Что умеет Telegram-канал

ИнструментЧто делаетreplyОтправляет сообщение в чат. Поддерживаетreply_toдля тредов иfilesдля вложений. Картинки (jpg/png/gif/webp) отправляются с превью, остальное — как документы. Лимит 50 МБ на файлreactСтавит реакцию-эмодзи на сообщение. Только из фиксированого списка Telegramedit_messageРедактирует ранее отправленное ботом сообщение. Удобно для паттерна «Работаю...» -> результат

Бот автоматически показывает «печатает...» в Telegram пока Claude обрабатывает запрос.

У Telegram Bot API нет доступа к истории сообщений и поиску. Бот видит только сообщения которые приходят в реальном времени. Фото скачиваются сразу при получении в ~/.claude/channels/telegram/inbox/, потому что потом их уже не достать.

Настройка Discord: пошаговый гайд

Discord-канал чуть сложнее в настройке из-за необходимости создавать приложение через Developer Portal, но зато дает больше возможностей — историю сообщений и загрузку вложений.

Шаг 1. Создаем приложение и бота

Идем в Discord Developer Portal, жмем New Application, даем имя.

В боковом меню переходим в Bot, задаем юзернейм.

Прокручиваем до Privileged Gateway Intents и включаем Message Content Intent — без этого бот получает сообщения с пустым содержимым.

Шаг 2. Генерируем токен

На той же странице Bot нажимаем Reset Token. Копируем — он показвается один раз.

Шаг 3. Приглашаем бота на сервер

Discord не позволяет DM боту если вы не на одном сервере с ним.

Переходим в OAuth2 -> URL Generator. Выбираем scope: bot. В Bot Permissions включаем:

  • View Channels
  • Send Messages
  • Send Messages in Threads
  • Read Message History
  • Attach Files
  • Add Reactions

Integration type: Guild Install. Копируем сгенерированный URL, открываем его и добавляем бота на свой сервер.

Для DM-режима формально нужно 0 разрешений. Но лучше включить все сразу — пригодится когда захотите использовать бота в каналах сервера.

Шаг 4. Устанавливаем плагин

/plugin install discord@claude-plugins-official

Шаг 5. Передаем токен

/discord:configure MTIz...

Сохраняется в ~/.claude/channels/discord/.env.

Чтобы запустить несколько ботов на одной машине (разные токены, разные allowlist'ы), задайте переменную DISCORD_STATE_DIR на разные директории для каждого инстанса.

Шаг 6. Перезапуск с каналом

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

Шаг 7. Привязка

Пишем DM боту в Discord, получаем код, в Claude Code:

/discord:access pair <код>

И блокируем:

/discord:access policy allowlist

Что умеет Discord-канал (сверх Telegram)

ИнструментЧто делаетreplyОтправляет сообщение. Файлы-вложения — до 10 штук, до 25 МБ каждыйreactРеакция эмодзи. Поддерживает и unicode и кастомные эмодзи сервера (<:name:id>)edit_messageРедактирование своих сообщенийfetch_messagesЗагружает историю канала (до 100 сообщений за вызов, от старых к новым)download_attachmentСкачивает вложения по message ID в~/.claude/channels/discord/inbox/

В отличие от Telegram, Discord-канал имеет доступ к истории. Claude может попросить «а что писали выше?» и реально посмотреть. В Telegram он может только попросить вас скопировать или пересказать — такое вот ограничение.

Грабли, на которые мы уже наступили

Как по мне, это самое ценное — реальный опыт настройки а не красивая теория из доков. Три вещи, которые стоит знать до того как вы потратите час на отладку.

--channels — не опция а обязательное условие. Без этого флага MCP-сервер запускается, polling работает, бот даже может отправлять сообщения. Но входящие сообщения не доставляются в сессию. Сервер тупо съедает updates и выбрасывает их в пустоту. Визуально все выглядит рабочим — бот онлайн, Telegram показывает «доставлено» — но Claude ничего не видит. Это не баг а архитектура: флаг --channels включает механизм доставки событий внутрь сессии.

Один бот = один терминал. Telegram API разрешает только одного потребителя getUpdates (long polling) на токен бота. Если у вас открыто два терминала Claude Code с одним и тем же ботом — второй молча перехватит polling и первый перестанет получать сообщения. Никаких ошибок не будет, просто тишина. Это описано в issue #37640 на GitHub.

Если вы работаете с несколькими проектами, отключите Telegram-плагин глобально ("telegram@claude-plugins-official": false в ~/.claude/settings.json) и включайте его только в конкретном проекте через локальный .claude/settings.json. Так вы гарантируете что polling не утечёт в другую сессию.

Если бот молчит после настройки — первым делом убедитесь что нет другой сессии Claude Code с тем же плагином. Закройте все лишние терминалы и перезапустите с --channels. В 90% случаев проблема именно в этом.

Несколько каналов одновременно

Можно подключить и Telegram и Discord (и другие каналы) к одной сессии:

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

Каналы перечисляются через пробел.

Фоновая работа

Каналы работают только пока сессия жива. Для «всегда на связи» запускаем Claude Code в tmux:

tmux new-session -d -s claude 'claude --channels plugin:telegram@claude-plugins-official'

Теперь можно закрыть терминал, уехать на встречу — бот продолжает работать.

Если Claude натыкается на промпт с запросом разрешения (permission prompt) пока вас нет у терминала, сессия паузится. Канальные серверы с поддержкой permission relay могут переслать вам этот запрос и получить одобрение удаленно. Для полностью автономной работы есть --dangerously-skip-permissions но честно говоря, используйте его только в доверенных окружениях.

Безопасность

Anthropic подошли к безопасности аккуратно:

  • Allowlist отправителей — только привязанные ID могут отправлять сообщения, все остальные молча игнорируются
  • Явное включение — присутствие MCP-сервера в .mcp.json недостаточно; канал надо ещё указать в --channels
  • Enterprise-контроль — Team и Enterprise планы по умолчанию отключают каналы, админ включает явно
  • Permission relay — человек из allowlist может одобрять или отклонять запросы разрешений Claude. Добавляйте в allowlist только тех кому доверяете

Channels vs другие способы взаимодейсвия

ФичаЧто делаетДля чего подходитClaude Code на вебеЗапускает задачу в свежем облачном sandboxДелегировать самодостаточную задачуClaude в SlackСоздает веб-сессию из @ClaudeЗапускать задачи из контекста командного чатаСтандартный MCP-серверClaude сам запрашивает данныеДать Claude доступ к чтению из внешних системRemote ControlУправляем локальной сессией из claude.ai или приложенияРулить текущей сессией удаленноChannelsВнешние события пушатся в сессиюЧат-мост, вебхуки CI/CD, алерты

Каналы заполняют конкретную нишу: реактивное взаимодействие, когда внешний мир стучится к Claude. Упал CI, пришел вебхук, вы написали из кафе — все это «внешнее событие» которое нужно доставить в сессию.

Что может пойти не так

Фича в research preview, так что стоит быть готовым:

  • Нестабильность. @jasonnewton из Twitter прямо написал: «Extremely flaky. Only managed to work once.» С первого раза может не завестись
  • Привязка к активной сессии. Закрыли терминал — бот умер. Фундаментальное ограничение текущей архитектуры
  • Только Telegram и Discord. Slack, WhatsApp, iMessage — пока нет. Хотя Anthropic обещают возможность создавать кастомные каналы
  • Только allowlisted плагины. Пока --channels принимает только плагины из списка Anthropic. Для кастомных есть --dangerously-load-development-channels
  • Требует claude.ai. API-ключи и Console не поддерживаются

Что дальше

Anthropic явно движется к модели где AI-агент — не утилита которую запускаешь руками, а сервис который всегда на связи. Channels — первый шаг. Remote Control (управление из браузера и мобильного приложения), Scheduled Tasks (по расписанию) и возможность писать свои каналы — части одной головоломки.

@kayintveen в Twitter точно подметил разницу: Claude Code Channels — реактивная модель (вы пишете агенту, он реагирует), а проекты вроде OpenClaw — проактивная (агент сам инициирует действия). Скорее всего будущее за комбинацией обоих подходов.

А пока — попробуйте настроить Telegram-бота. Даже в текущем сыром виде это меняет ощущение от разработки: терминал переезжает в карман и на мой взгляд, обратно уже не возвращается.

Полезные ссылки:

2
Начать дискуссию