Перейти к содержанию

Удалённый доступ через Telegram

Koda CLI умеет работать через Telegram-бота. Вы можете отправлять запросы, получать ответы AI и управлять сессиями прямо из мессенджера — с телефона, планшета или любого устройства, где есть Telegram.

Экспериментальная функция

Данная функция находится в активной стадии тестирования и может быть нестабильной.

Удалённый доступ живёт, только пока запущен процесс CLI с этим токеном бота. Это полноценный способ работы: бот сам регистрирует команды, привязывает владельца, создаёт и сохраняет сессии.

Режим одного владельца

К одному боту привязывается только один Telegram-пользователь. Сообщения от других пользователей игнорируются.

Как это работает

  • CLI подключается к Telegram Bot API и опрашивает обновления (getUpdates).
  • Каждый чат или тема в Telegram соответствует отдельной удалённой сессии CLI.
  • Сессии и их история сохраняются между запусками для конкретного бота и проекта.
  • Ответы приходят в реальном времени: статус и текст обновляются по мере работы агента.

Требования

  • Koda CLI запущен в интерактивном режиме.
  • Создан Telegram-бот через @BotFather, получен его токен.
  • В CLI настроен токен бота (см. ниже).
  • Выполнена привязка владельца.

Настройка

Проще всего задать токен и включить доступ одной командой:

/telegram setup <bot-token>

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

Токен из переменной окружения

Токен можно задать через переменную окружения KODA_TELEGRAM_BOT_TOKEN (например, в env/.env проекта). В этом случае токен не сохраняется в настройках.

Токен в настройках проекта

Чтобы токен хранился в настройках проекта, используйте флаг --project:

/telegram setup --project <bot-token>

При смене токена текущая привязка владельца сбрасывается — владельца нужно привязать заново.

После настройки токена выполните команду:

/telegram link

CLI запросит данные бота у Telegram Bot API и покажет:

  • QR-код со ссылкой привязки;
  • текстовую ссылку вида https://t.me/<bot>?start=<nonce>;
  • запасной код для команды /bind <code> в боте.

Ссылка и код действуют ограниченное время (по умолчанию около 10 минут).

Чтобы привязать аккаунт:

  1. Откройте ссылку в Telegram (или отсканируйте QR).
  2. Нажмите Start в чате с ботом.
  3. Либо отправьте боту /bind <code>.

После привязки CLI сохраняет данные владельца: Telegram ID, username и отображаемое имя.

Если владелец уже привязан, замените его через /telegram relink, а отвязать владельца можно командой /telegram unlink (в CLI) или /unlink (в боте).

Команды CLI

Команда Действие
/telegram открыть мастер настройки, если токен или владелец не заданы
/telegram status показать статус и владельца
/telegram setup <bot-token> задать токен и включить доступ
/telegram enable включить доступ
/telegram disable выключить доступ
/telegram link показать QR и ссылку привязки владельца
/telegram relink сбросить владельца и начать новую привязку
/telegram unlink отвязать текущего владельца

У команды есть короткий алиас /tg.

Команда /telegram без аргументов открывает мастер настройки, если токен бота или владелец ещё не заданы. Если всё настроено, она показывает текущий статус.

Что показывает /telegram status

  • включён ли доступ;
  • состояние токена: задан ли он, источник (settings или KODA_TELEGRAM_BOT_TOKEN), маскированное значение;
  • привязан ли владелец и к кому;
  • режим работы (один владелец);
  • заметка, что сессии сохраняются между запусками для этого проекта и бота.

Создание сессий из Telegram

Чат с ботом привязывается к удалённой сессии автоматически при первом сообщении. Чтобы создать или выбрать сессию явно, используйте:

/new [label]

Сессии и их истории сохраняются локально в ~/.kodacli/telegram-remote/sessions/.

Файл хранилища привязан к паре «токен бота + проект». При следующем запуске CLI с тем же токеном и в том же проекте сессии восстанавливаются.

Команды бота

Бот показывает меню команд в Telegram, когда доступ активен.

Команда Действие
/start показать приветствие, привязать аккаунт из ссылки
/bind <code> привязать аккаунт кодом (без QR/ссылки)
/help показать справку
/new [label] создать или выбрать удалённую сессию
/model [name] показать или сменить модель
/status показать модель, cwd, git-ветку, busy/idle и uptime
/stats показать статистику текущей сессии
/compress сжать контекст текущей сессии
/revert [checkpoint] восстановить состояние из checkpoint
/delete закрыть активную удалённую сессию для этого чата
/stop остановить активный prompt
/cancelqueue отменить очередь prompt
/commit [message] запустить автокоммит
/unlink отвязать Telegram-владельца от CLI

Команда /start <code> подтверждает ссылку привязки, созданную в CLI.

Отправка запросов

Просто отправьте боту текстовое сообщение — оно станет запросом агента. Фото тоже поддерживаются: отправьте изображение с подписью, и подпись станет запросом, а фото — контекстом. Если подписи нет, используется стандартный запрос «Проанализируйте изображение».

Роль субагента можно запустить явно: начните сообщение меткой @agent:<имя> — например, @agent:reviewer проверь диф. Роль запустится до обращения к модели, а остальной текст сообщения станет её задачей.

Ответы приходят в реальном времени:

  • статус обработки обновляется в сообщении (queued, running, ожидает подтверждения и т.д.);
  • длинные ответы разбиваются на части до 4096 символов (лимит Telegram).

Если сессия уже занята, новые запросы попадают в очередь (максимум 3), отменить её можно командой /cancelqueue.

Подтверждение действий

Когда инструменту нужно подтверждение, бот показывает сообщение с деталями запроса и кнопками:

  • Разрешить — разрешить один раз;
  • Всегда — разрешить на всю сессию;
  • Отклонить — отменить действие.

У каждой кнопки есть одноразовый токен, поэтому просроченные или повторные нажатия игнорируются. Пока выполнение ожидает подтверждения, бот показывает статус «ожидает подтверждения».

Уведомления о локальных запросах

Когда запрос отправляется из самого CLI (не из Telegram), бот может уведомить владельца о ходе работы. Это настраивается параметром notifyOn:

Значение Поведение
finish уведомление только о завершении: успех, отмена, ошибка
confirmation уведомление о завершении и об ожидании подтверждения действия
off уведомления выключены

Значение по умолчанию — confirmation.

Ограничения

  • Один бот — один владелец.
  • Сессии живут только пока запущен CLI с этим токеном и в этом проекте.
  • Поддерживаются только текстовые сообщения и фото; другие типы сообщений отклоняются.
  • Длина одного сообщения ограничена 4096 символами.
  • Если текущая модель не поддерживает изображения, фото не обработается — переключите модель через /model.
  • Один и тот же токен не может использоваться двумя CLI одновременно: лок-файл блокирует повторный запуск.

Безопасность и данные

  • Токен бота можно задать через переменную окружения KODA_TELEGRAM_BOT_TOKEN, чтобы не хранить его в настройках.
  • В статусе токен маскируется, а в логах скрывается (redact).
  • Сессии и их история хранятся локально, права на файлы — 0600.
  • Лок токена предотвращает одновременное использование одного бота двумя процессами.

Устранение проблем

Проблема Что проверить
Бот не отвечает Проверьте, что CLI запущен, доступ включён, токен валиден
«Токен занят» Завершите другой Koda CLI с этим токеном или задайте отдельного бота
Привязка не проходит Откройте /telegram link заново — ссылка и код действуют ограниченное время
Сообщения от других пользователей Проверьте, что привязан именно ваш аккаунт (/telegram status)
Фото не обрабатывается Переключите модель на поддерживающую изображения (/model)
Сессии не восстанавливаются Запустите CLI в том же проекте и с тем же токеном