> · 7 мин

Claude Code Channels — управляй сессией из Telegram и Discord, а лучше напиши свой канал

Claude Code Channels — управляй сессией из Telegram и Discord, а лучше напиши свой канал

Claude Code Channels — управляй сессией из Telegram и Discord, а лучше напиши свой канал

Запускаешь Claude Code в терминале, уходишь пить кофе, а потом пишешь ему с телефона в Telegram: «добавь тесты для auth модуля». Он читает сообщение, делает работу и отвечает обратно в мессенджер. Не в терминал — именно в Telegram.

TL;DR: Claude Code Channels — research preview фича, которая превращает Telegram и Discord в пульт управления терминальной сессией. Работает через MCP-плагины. Но интереснее встроенных каналов другое: любой MCP-сервер с capability claude/channel становится кастомным каналом, и CI-алерты или webhook с GitLab тоже могут лететь прямо в сессию.

Что это и зачем

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

Зачем это нужно, если есть Remote Control? Remote Control — это «веди сессию из браузера на телефоне». Channels — это «внешние системы сами пушат события в сессию». Разница принципиальная: Remote Control — ты рулишь; Channels — мир рулит, а Claude реагирует.

Практические сценарии:

  • Пишешь боту в Telegram с телефона — Claude кодит на десктопе и отвечает обратно
  • CI упал — webhook прилетает в сессию, Claude смотрит логи и чинит
  • Мониторинг словил аномалию — алерт улетает в канал, Claude анализирует
  • Коллега скинул PR-ссылку в Discord — Claude делает ревью

Настройка Telegram за 5 минут

Нужны: Claude Code v2.1.80+, Bun, аккаунт claude.ai (API-ключи не работают).

1. Создаёшь бота через @BotFather/newbot, даёшь имя, копируешь токен.

2. Ставишь плагин:

/plugin install telegram@claude-plugins-official

3. Конфигурируешь токен:

/telegram:configure <token>

Токен сохраняется в .claude/channels/telegram/.env. Можно вместо этого выставить TELEGRAM_BOT_TOKEN в shell-окружении.

4. Перезапускаешь с флагом --channels:

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

5. Паришь аккаунт — пишешь боту любое сообщение, получаешь 6-значный код, вводишь в Claude Code:

/telegram:access pair <code>
/telegram:access policy allowlist

Всё. Теперь твой Telegram-аккаунт в allowlist, и только ты можешь писать боту. Остальных бот молча игнорирует.

Для Discord — аналогично, только нужно ещё создать бота в Discord Developer Portal, включить Message Content Intent и пригласить бота на сервер с нужными permissions.

Что умеет Telegram-плагин

Три MCP-тула:

  • reply — отправить ответ, опционально с тредом (reply_to) и вложениями (до 50 МБ). Длинные сообщения автоматически нарезаются на чанки
  • react — поставить эмодзи-реакцию (👍 👎 ❤ 🔥 👀 и другие из фиксированного списка Telegram)
  • edit_message — отредактировать ранее отправленное сообщение

Входящие фотографии автоматически скачиваются в ~/.claude/channels/telegram/inbox/, и Claude видит их путь. Но Telegram сжимает картинки — если нужен оригинал, отправляй как файл (зажми → «Отправить без сжатия»).

Discord добавляет сверху: историю канала (до 100 сообщений) и скачивание вложений (до 25 МБ на файл). У Telegram бот видит только новые сообщения — историю Bot API не отдаёт.

Кастомный канал: webhook за 40 строк

Встроенные плагины — это начало. Но по-настоящему интересно то, что любой MCP-сервер с capability claude/channel становится каналом. Написать свой — буквально один файл на TypeScript.

Допустим, хочешь, чтобы пуши с GitLab CI прилетали в сессию Claude Code. Пишешь простой HTTP-приёмник:

#!/usr/bin/env bun
import { Server } from '@modelcontextprotocol/sdk/server/index.js'
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'

const mcp = new Server(
  { name: 'webhook', version: '0.0.1' },
  {
    capabilities: { experimental: { 'claude/channel': {} } },
    instructions: 'Events arrive as <channel source="webhook">. Read and act, no reply expected.',
  },
)

await mcp.connect(new StdioServerTransport())

Bun.serve({
  port: 8788,
  hostname: '127.0.0.1',
  async fetch(req) {
    const body = await req.text()
    await mcp.notification({
      method: 'notifications/claude/channel',
      params: {
        content: body,
        meta: { path: new URL(req.url).pathname, method: req.method },
      },
    })
    return new Response('ok')
  },
})

Регистрируешь в .mcp.json:

{
  "mcpServers": {
    "webhook": { "command": "bun", "args": ["./webhook.ts"] }
  }
}

Запускаешь с флагом разработки (кастомные каналы пока не в allowlist):

claude --dangerously-load-development-channels server:webhook

И теперь curl -X POST localhost:8788 -d "build failed on main" прилетает в сессию как:

<channel source="webhook" path="/" method="POST">build failed on main</channel>

Claude читает, идёт смотреть логи, чинит. Если нужен ответ обратно — добавляешь reply тул через стандартные MCP ListToolsRequestSchema и CallToolRequestSchema. Полный пример двустороннего канала — в документации.

Что можно навернуть поверх:

  • GitLab/GitHub webhook → Claude делает ревью каждого PR автоматически
  • Prometheus alertmanager → Claude анализирует алерт и предлагает фикс
  • Slack → пишешь в канал, Claude отвечает (когда Anthropic добавит в allowlist или ты опубликуешь плагин в marketplace)
  • Собственный чат-бот на сайте → fakechat-демо показывает, как это сделать на localhost

Подводные камни

Сообщения теряются при закрытой сессии. Events only arrive while the session is open — написано мелким шрифтом в документации. Написал боту, пока терминал закрыт? Сообщение ушло в пустоту. Telegram Bot API не хранит очередь для оффлайн-ботов. Для «always-on» нужно держать Claude Code в фоновом процессе или persistent terminal — и молиться, что WebSocket не отвалится, потому что по отзывам Remote Control «is buggy as hell, the websocket keeps disconnecting».

Уведомления могут не доходить. На GitHub уже есть issue #36431: Telegram-плагин получает сообщение (показывает «typing...»), вызывает mcp.notification(), но в сессии Claude Code ничего не появляется. Баг воспроизводится стабильно — outbound работает, inbound нет. Workaround пока не найден.

Только claude.ai, без API-ключей. Console и API key authentication не поддерживаются. Если ты работаешь через API напрямую или через сторонний прокси — каналы для тебя недоступны. Для Team/Enterprise план нужно, чтобы админ вручную включил channelsEnabled в managed settings.

Кастомные каналы живут за --dangerously-load-development-channels. Во время research preview кастомные MCP-серверы не попадают в allowlist автоматически. Каждый запуск — через флаг с говорящим названием. Чтобы попасть в allowlist, нужно опубликовать плагин в marketplace и пройти security review у Anthropic.

Permission prompts блокируют удалённую работу. Если Claude наткнётся на действие, требующее подтверждения — сессия замрёт, пока ты не подойдёшь к терминалу и не нажмёшь accept. Альтернатива: --dangerously-skip-permissions, но это полный автопилот без ограничений — на свой страх и риск.

Альтернативы

  • OpenClaw — open-source агент с 216K+ звёздами, который работает через iMessage, Slack, Telegram, WhatsApp, Discord. Умеет больше, чем Channels: email, календарь, умный дом, автономные задачи. Но у OpenClaw была CVE-2026-25253 — one-click RCE через WebSocket token exfiltration, и с тех пор сообщество раскололось на форки (NanoClaw и другие). Channels проще и безопаснее, но функционально беднее.

  • Claude Code Remote Control — не конкурент, а дополнение. Remote Control открывает веб-интерфейс сессии в браузере на телефоне. Channels — это push-модель: внешние системы сами шлют события. Можно использовать оба одновременно.

  • Codex CLI subagents — у OpenAI аналогичной фичи для мессенджеров нет. Codex субагенты работают только внутри терминала. Для удалённого управления OpenAI предлагает ChatGPT Desktop, но это другая архитектура — нет MCP-моста и нет push-событий.

Вердикт

Если тебе нужно писать Claude Code с телефона и ты на claude.ai Pro/Max — ставь Telegram-плагин, это реально работает (когда не натыкаешься на баг с доставкой уведомлений). Если строишь CI/CD pipeline или мониторинг-бота — кастомный webhook-канал на 40 строках кода решает задачу, которую раньше приходилось костылить через scheduled tasks и cron.

Но это research preview, и это чувствуется. Потеря сообщений при закрытой сессии, баги с inbound-уведомлениями, привязка только к claude.ai — всё это нужно учитывать. Для production-ready автоматизации подождать стабильной версии, для экспериментов и личных проектов — ставить сейчас.

Как попробовать

  1. Обнови Claude Code до v2.1.80+: npm update -g @anthropic-ai/claude-code
  2. Установи Bun: curl -fsSL https://bun.sh/install | bash
  3. Установи плагин: /plugin install telegram@claude-plugins-official
  4. Создай бота в @BotFather, сконфигурируй токен: /telegram:configure <token>
  5. Запусти с каналом: claude --channels plugin:telegram@claude-plugins-official — и пиши боту с телефона

Документация по Channels | Reference для кастомных каналов | Исходники плагинов

$ ls ./related/

Похожие статьи

subscribe.sh

$ cat /dev/blog/updates

> Свежие заметки о программировании,

> DevOps и AI — прямо в мессенджер

./subscribe