agent-news

Telegram-бот на Dart: по команде /news (или /news <тема>) запускает Claude Code для ресёрча и присылает выжимку в чат. Учебный проект для platformteam — архитектура и урок описаны в aidoc, страница practices/agent-news-bot.

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

Один под, один контейнер, три процесса:

  1. agent-news-bot (Dart, long polling) — слушает /news, спавнит claude как сабпроцесс.
  2. claude (Claude Code CLI) — делает ресёрч, в конце вызывает MCP-тул send_to_telegram.
  3. agent-news-mcp (Dart, stdio MCP-сервер) — спавнится самим claude, шлёт готовый текст в Telegram Bot API.

Подробности и диаграммы — в уроке aidoc.

Локальная разработка

cd bot && dart pub get && dart analyze
cd ../mcp_server && dart pub get && dart analyze

Сборка образа (контекст — корень репозитория):

docker build -f runner/Dockerfile -t agent-news:dev .

Переменные окружения

Переменная Обязательна Назначение
TELEGRAM_BOT_TOKEN да токен бота, используется и ботом, и MCP-сервером
ALLOWED_CHAT_IDS да список chat_id через запятую — кому отвечает бот
NEWS_PROMPT нет промпт по умолчанию для /news без темы
CLAUDE_TIMEOUT_SECONDS нет таймаут на ресёрч (по умолчанию 360)
MCP_CONFIG_PATH нет путь к mcp.json (по умолчанию /home/agent/claude-config/mcp.json)

Первичная авторизация Claude Code

Claude Code CLI использует OAuth-логин через Claude.ai (подписка, не API-ключ). После первого деплоя нужно один раз пройти логин внутри пода — иначе claude -p ... будет падать с ошибкой авторизации:

kubectl exec -it -n platformteam deploy/agent-news -- claude

CLI напечатает ссылку — открой её в браузере, авторизуйся. Токен сохранится в ~/.claude (persist через PVC agent-news-home, см. deploy/agent-news), так что после рестарта пода логин не слетит.

Деплой

Стандартный BearsDev CI/CD (см. bearsdev-systems/ai-agents/knowledge/cicd.md): git push.gitea/workflows/build.yaml собирает и пушит образ → бампит тег в deploy/agent-news.gitea/workflows/deploy.yaml применяет манифест в K3s.

Перед первым деплоем вручную (см. план и cicd.md):

  1. Создать deploy/agent-news репо с deployment.yaml + .gitea/workflows/deploy.yaml.
  2. kubectl apply -f pvc.yaml — PVC agent-news-home, один раз, не через CI.
  3. kubectl create secret generic agent-news-secrets -n platformteam --from-literal=TELEGRAM_BOT_TOKEN=... --from-literal=ALLOWED_CHAT_IDS=...
  4. После первого деплоя — авторизация Claude Code (см. выше).
Description
Telegram-бот: ресёрч новостей LLM-агентом
Readme 54 KiB
Languages
Dart 87.3%
Dockerfile 12.7%