Telegram-мост для Claude Code в терминале: агент пишет тебе в Telegram, когда задача закончена, и принимает ответы из Telegram, пока ты отошел от терминала. Один бот, одна логика (scripts/tg.py).
Что получится после установки:
- Claude сможет отправлять тебе сообщения, файлы и скриншоты в Telegram.
- Ты сможешь отвечать Claude прямо в Telegram.
- Несколько Claude Code сессий смогут пользоваться одним ботом.
- Никакого сервера, демона и внешней базы. Только Telegram bot token и один Python-скрипт.
Нужно примерно 5 минут.
В Claude Code выполни:
/plugin marketplace add azalio/claude-telegram-skill
/plugin install telegram-bridge@azalio
Открой @BotFather в Telegram.
Отправь:
/newbot
BotFather попросит имя и username бота, потом выдаст token вида:
123456789:AA...
В терминале выполни:
mkdir -p ~/.claude/telegram
nano ~/.claude/telegram/config.jsonВставь туда JSON и замени PUT_YOUR_BOT_TOKEN_HERE на token от BotFather:
{
"token": "PUT_YOUR_BOT_TOKEN_HERE",
"chat_id": null,
"user_id": null,
"idle_mirror_secs": 600,
"always_listen": true
}Сохрани файл.
Закрой текущую Claude Code сессию и открой новую.
После старта плагин создаст удобную команду:
~/.claude/telegram/tgОткрой своего нового бота в Telegram и отправь ему любое сообщение, например:
/start
Это обязательно: Telegram не отдаст chat_id и user_id, пока ты сам не написал боту.
В терминале выполни:
~/.claude/telegram/tg setupДолжно появиться что-то вроде:
chat_id set to 123456789, user_id 123456789
Готово.
Проверь отправку:
~/.claude/telegram/tg send "test from Claude Code"Самый простой способ: просто проси Claude писать тебе в Telegram.
Примеры промптов:
Сделай задачу и напиши мне в Telegram, когда закончишь.
Запусти тесты, исправь ошибки и пришли результат в Telegram.
Если понадобится мой ответ, спроси меня в Telegram.
Сделай исследование, а итоговый markdown-файл отправь мне в Telegram.
Когда новая Claude Code сессия стартует, бот пришлет сообщение вида:
Сессия на связи: project-name
Чтобы написать именно этой сессии, отвечай в Telegram реплаем на это сообщение или на любое сообщение этой сессии.
Важно: обычное сообщение без reply не будет доставлено ни в какую сессию. Это сделано специально, чтобы один бот не отправил команду не тому Claude-процессу.
После установки доступна команда:
~/.claude/telegram/tg <command>Основные команды:
| Команда | Что делает |
|---|---|
send "text" |
Отправить текст в Telegram |
send - |
Прочитать текст из stdin и отправить |
file <path> [caption] |
Отправить файл |
photo <path> [caption] |
Отправить картинку |
setup |
Автоматически записать chat_id и user_id в конфиг |
listen [seconds] |
Ждать сообщение из Telegram для текущей сессии |
ask "text" [seconds] |
Отправить вопрос и ждать ответ |
drain |
Сбросить offset и очистить inbox |
Примеры:
~/.claude/telegram/tg send "Готово, тесты прошли"
~/.claude/telegram/tg file report.md "Отчет"
~/.claude/telegram/tg photo screenshot.png "Скриншот"Вся логика — один Python-скрипт scripts/tg.py (только стандартная библиотека). Claude Code подключается к нему через плагин и hooks из hooks/hooks.json.
Hooks подключены на события Claude Code:
SessionStart: создает launcher~/.claude/telegram/tgи объявляет сессию в Telegram.SessionEnd: завершает lease сессии; её listener и idle-mirror выходят самостоятельно.Stop: может отправить последнее сообщение в Telegram, если ты долго не отвечаешь в терминале.UserPromptSubmit: отменяет idle-mirror, когда ты вернулся в терминал.Notification: отправляет Telegram-уведомление, если агент ждет твоего ввода (только в режимеaway).
Inbound устроен через фоновый tg listen: у Claude Code есть настоящая неблокирующая фоновая задача, которая будит агента, когда приходит адресованное этой сессии сообщение. Listener получает отдельные session_id и lease generation; после SessionEnd он выходит с кодом 5 и не перезапускается.
Состояние хранится здесь:
~/.claude/telegram/
Там лежат config, offset, inbox, locks, session leases и routing map. В репозитории токен не хранится.
Плагин принимает входящие Telegram-сообщения только от user_id, который записан в ~/.claude/telegram/config.json.
Это значит:
- Если кто-то найдет твоего бота, он не сможет управлять Claude без твоего Telegram user id.
- Если у тебя несколько Claude Code сессий, сообщение доставляется только той сессии, на сообщение которой ты ответил reply.
- Сообщения без reply не угадываются и не рассылаются всем сессиям.
Никогда не коммить свой ~/.claude/telegram/config.json и не публикуй bot token.
Файл настроек:
~/.claude/telegram/config.json
Поля:
| Поле | Значение |
|---|---|
token |
Token от BotFather |
chat_id |
Telegram chat, куда отправлять сообщения. Заполняется через tg setup |
user_id |
Единственный Telegram user, от которого принимаются команды. Заполняется через tg setup |
idle_mirror_secs |
Через сколько секунд без ответа в терминале отправить последнее сообщение в Telegram. 600 = 10 минут, 0 = выключить |
always_listen |
true = каждая Claude Code сессия может слушать Telegram |
Попроси claude починить и сделай PR ;).
- Claude Code (plugins).
- Python 3.
- macOS или Linux. На Windows используй WSL.
- Telegram account и bot token от BotFather.
Python-зависимостей нет: используется только standard library.
.claude-plugin/plugin.json Plugin manifest (Claude Code)
.claude-plugin/marketplace.json Marketplace entry (Claude Code)
hooks/hooks.json Claude Code hooks
skills/telegram/SKILL.md Skill-инструкция для Claude
scripts/tg.py Вся логика Telegram bridge
config.example.json Пример config.json
tests/test_e2e.py E2E-тесты без token и сети
docs/architecture.md Техническая архитектура
python3 tests/test_e2e.py
claude plugin validate . --strict
claude --plugin-dir . -p "ping me on telegram when done" --bareCI запускает tests/test_e2e.py на push и pull request. Telegram API в тестах замокан, настоящий token не нужен.
MIT.