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 автоматизации подождать стабильной версии, для экспериментов и личных проектов — ставить сейчас.
Как попробовать
- Обнови Claude Code до v2.1.80+:
npm update -g @anthropic-ai/claude-code - Установи Bun:
curl -fsSL https://bun.sh/install | bash - Установи плагин:
/plugin install telegram@claude-plugins-official - Создай бота в @BotFather, сконфигурируй токен:
/telegram:configure <token> - Запусти с каналом:
claude --channels plugin:telegram@claude-plugins-official— и пиши боту с телефона
Документация по Channels | Reference для кастомных каналов | Исходники плагинов