Telegram-бот для Claude Code: AI-ассистент в кармане

Как я сделал Telegram-бота с Claude Code на старом ноутбуке: голосовые сообщения, картинки, интеграции с TickTick, Strava, Gmail через MCP. Полная инструкция по настройке.
Я пробовал разные варианты. Подключался к серверу по SSH с телефона и запускал Claude Code в tmux-сессии — работать с терминалом с мобильного оказалось отдельным видом мучений. Мелкий шрифт, неудобный ввод, случайные нажатия. Пробовал встроенную функцию claude remote-control — она позволяет продолжить локальную сессию с телефона через claude.ai или мобильное приложение Claude. Звучит идеально, но на практике пока сыровато: сессии периодически зависают, а когда хочешь переключиться на новую задачу — нет удобного способа почистить контекст и начать заново. В общем, ни один из этих подходов для повседневного мобильного использования не годился.
В итоге всё получилось сделать по-другому — через Telegram-бота. Теперь у меня полноценный Claude Code в кармане — с доступом ко всем файлам, проектам, заметкам и внешним сервисам. С голосовыми сообщениями и картинками. Работает 24/7 на старом ноутбуке в углу комнаты. Как я это сделал — ниже.
Идея: старый ноутбук как персональный сервер
У меня был лишний ноутбук, который не понадобился жене — она купила себе MacBook, на котором я, кстати, собираю билды для Timetracker под iOS. Я поставил на него Linux и превратил в домашний сервер — он просто стоит в углу с закрытой крышкой и работает. Настроил Syncthing — утилиту для синхронизации файлов между устройствами. Теперь ноутбук-сервер синхронизирован с моим основным рабочим компьютером и телефоном.
Что синхронизируется:
- Заметки — Obsidian vault, доступен и на телефоне, и на рабочем компе, и на сервере
- Все проекты — персональные и рабочие, с кодом и конфигами
- Документы — сканы, важные файлы
- Бег — план тренировок, история пробежек, заметки по подготовке к забегам
- CLAUDE.md файлы — инструкции для Claude в каждом проекте
- И куча всего остального — секреты, конфиги, рабочие материалы
Пункт про CLAUDE.md — ключевой. В каждом моём проекте лежит такой файл с описанием: что это за проект, как его собирать, как деплоить, какие есть особенности. Claude Code автоматически подхватывает эти файлы. А значит, бот в Telegram тоже их видит — и знает контекст каждого проекта без лишних объяснений.
Кроме того, в домашней директории лежит глобальный CLAUDE.md с информацией обо мне: семья, документы, предпочтения, структура папок. Claude знает, где что лежит, и может найти нужный файл без подсказок. Причём этот файл можно редактировать прямо через бота — сказал «запомни, что всё, что относится к бегу лежит в папке Running», и Claude сам обновит свои инструкции. В следующий раз объяснять не придётся.
Архитектура
Цепочка выглядит так:
Телеграм-бот принимает сообщение, передаёт его в Claude Code через Agent SDK. Claude CLI запускается как отдельный процесс с нужными флагами: стриминг JSON-ответов, подключение MCP-серверов, ограничение количества шагов. Claude выполняет задачу — читает файлы, запускает команды, обращается к внешним сервисам — и возвращает результат обратно в Telegram.
Сессии сохраняются в SQLite. Это значит, что диалог можно продолжить — Claude помнит предыдущий контекст.
MCP-серверы: подключение внешних сервисов
Через MCP (Model Context Protocol) к боту подключены внешние сервисы:
- TickTick — менеджер задач. Claude может создавать, просматривать и редактировать задачи
- Strava — данные о пробежках. Claude анализирует тренировки и даёт советы. Как я это настраивал — рассказывал отдельно
- Gmail — чтение почты, создание черновиков писем
- Google Calendar — просмотр расписания, создание и редактирование событий
- Context7 — доступ к актуальной документации библиотек
Конфигурация хранится в mcp-servers.json рядом с ботом. Добавить новый сервис — дело пяти минут.
В планах добавить ещё какой-нибудь Playwright, чтобы можно было выполнять ещё и действия в браузере при необходимости. Пока просто таких задач нее возникало. Но в теории и это будет организовать не супер сложно.
Установка
Бот основан на open-source проекте claude-code-telegram. Установка через uv:
uv tool install git+https://github.com/RichardAtCT/claude-code-telegramДальше нужно создать Telegram-бота через @BotFather и получить токен. Узнать свой Telegram user ID можно через @userinfobot.
Вся конфигурация — в файле .env:
# Telegram
TELEGRAM_BOT_TOKEN=ваш_токен_от_BotFather
TELEGRAM_BOT_USERNAME=имя_бота
ALLOWED_USERS=ваш_telegram_id
# Безопасность
APPROVED_DIRECTORY=/home/username # песочница для файловых операций
# API ключи
ANTHROPIC_API_KEY=ваш_ключ_anthropic
OPENAI_API_KEY=ваш_ключ_openai # для распознавания голоса
# Заметки
NOTES_DIRECTORY=/path/to/obsidian/vault
# MCP
ENABLE_MCP=trueЗапуск как systemd-сервис
Чтобы бот работал постоянно и перезапускался при падении, я настроил его как systemd user service.
Файл ~/.config/systemd/user/claude-telegram-bot.service:
[Unit]
Description=Claude Code Telegram Bot
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
WorkingDirectory=/home/username/.config/claude-telegram-bot
ExecStart=/home/username/.local/bin/claude-telegram-bot
Restart=on-failure
RestartSec=10
[Install]
WantedBy=default.targetВключаем и запускаем:
systemctl --user enable claude-telegram-bot
systemctl --user start claude-telegram-botТеперь бот стартует автоматически при загрузке системы и перезапускается, если что-то пошло не так.
Доработка: голосовые сообщения
Из коробки бот не понимал голосовые сообщения. А это самый естественный способ общения с телефона — особенно на ходу, когда печатать неудобно.
Я добавил поддержку голоса: бот скачивает аудиофайл (.ogg) из Telegram, отправляет его в OpenAI Whisper API для распознавания речи, а полученный текст передаёт в Claude как обычный промпт.
Whisper распознаёт отлично — и русский, и английский. Стоит копейки: минута аудио обходится в $0.006. За месяц активного использования набегает меньше доллара.
Доработка: работа с картинками
Второе ограничение — бот не умел работать с изображениями. Ни принимать, ни отправлять.
Приём картинок. Теперь, когда отправляешь фото боту, он скачивает его, сохраняет во временный файл и передаёт Claude через инструмент Read. Claude — мультимодальная модель, он понимает изображения. Можно сфотографировать документ, чек, скриншот ошибки — и попросить разобраться.
Отправка картинок. Когда Claude в процессе работы читает файл с изображением (например, ищет скан документа в заметках), бот перехватывает путь к файлу и автоматически отправляет картинку в Telegram. Не нужно просить «отправь мне файл» — если Claude прочитал картинку, она придёт сама.
Работа с заметками
На телефоне у меня Obsidian с теми же заметками, что синхронизируются на сервер. Бот имеет доступ к этой же папке. Это открывает кучу сценариев:
- Попросить найти что-то в заметках — Claude ищет по файлам
- Сохранить новую заметку голосом
- Отправить фото и попросить сохранить в заметки — изображение копируется в
attachments/с автоматическим именем по таймстампу, а ссылка оформляется в формате Obsidian:![[attachments/img_20260307_143022.jpg]] - Попросить найти картинку в заметках — бот найдёт и отправит прямо в чат
Реальные сценарии: «не думай, куда»
Главная ценность этой связки — не нужно думать о маршрутизации информации. Просто говоришь, что нужно, а Claude сам решает, куда это положить.
Мысль о проекте на ходу. Голосом: «В Timetracker нужно добавить экспорт в CSV». Claude знает про этот проект (есть CLAUDE.md), открывает файл заметок или TODO проекта и дописывает туда. Мне не нужно помнить, где у какого проекта какой файл.
Быстрая задача. «Напомни завтра помыть машину». Claude создаёт задачу в TickTick с нужной датой. Не нужно открывать приложение, выбирать список, ставить дату — одна фраза.
Рабочая заметка. «Запиши: на созвоне обсудили, что API v2 выкатываем в четверг». Claude сохраняет в Obsidian в нужную папку (Work/...) — он знает структуру.
Запрос информации. «Когда у меня перелёт в Новосибирск?» — Claude ищет в календаре информацию о рейсе и отвечает. «Какой у меня адрес?» — находит и говорит.
Анализ тренировки. После пробежки: «Как тебе моя сегодняшняя тренировка?» — Claude обращается к Strava, получает данные и даёт анализ. Можно тут же попросить скорректировать план будущих пробежек и сохранить.
Расписание на день. «Что у меня сегодня?» — Claude проверяет задачи в TickTick, включая просроченные, и выдаёт сводку.
Безопасность
Несколько важных моментов:
- Whitelist по Telegram ID. Только указанные пользователи могут общаться с ботом. Все остальные сообщения игнорируются
- Sandbox.
APPROVED_DIRECTORYограничивает файловые операции указанной директорией. Claude не может выйти за её пределы - Фильтрация инструментов. Можно ограничить список доступных Claude инструментов
- Аудит. Все обращения и действия логируются
Подводные камни
Память. Бот с Claude CLI и MCP-серверами потребляет около 1.4 ГБ оперативки. Ноутбук с 8 ГБ у меня справляется, но учитывайте это.
Таймауты. Длинные операции (большие файлы, сложные запросы) могут упираться в таймауты Telegram. Бот отправляет промежуточные статусы, но иногда приходится подождать.
Syncthing-конфликты. Если файл редактируется одновременно на двух устройствах, Syncthing создаёт конфликтную копию. Решается правильной настройкой .stignore и пониманием, что сервер — это read-write нода, а не просто зеркало.
CLAUDE.md — суперсила. Если вы уже используете Claude Code и ведёте CLAUDE.md в проектах — бот автоматически подхватывает весь этот контекст. Если не ведёте — это повод начать.
Итог
Вся эта связка — старый ноутбук + Linux + Syncthing + Telegram-бот + Claude Code — превращает AI-ассистента из инструмента «за рабочим столом» в инструмент «всегда с собой». Главное преимущество — не нужно думать о маршрутизации информации. Заметка, задача, инструкция к проекту, запрос документа — всё через одну точку входа. Claude знает структуру файлов, знает контекст проектов, знает, где что лежит. Просто говоришь — он делает.
Если у вас есть лишний компьютер, Claude Code и пара вечеров — попробуйте. Необязательно даже иметь физическую машину — такой сетап можно поднять и на VPS в облаке, главное, чтобы там крутился Linux и был установлен Claude Code. Это один из тех случаев, когда результат сильно превосходит затраченные усилия.