# agent-news Telegram-бот на Dart: по команде `/news` (или `/news <тема>`) запускает Claude Code для ресёрча и присылает выжимку в чат. Учебный проект для platformteam — архитектура и урок описаны в [aidoc](https://aidoc.platformteam.tech), страница `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. ## Локальная разработка ```bash cd bot && dart pub get && dart analyze cd ../mcp_server && dart pub get && dart analyze ``` Сборка образа (контекст — корень репозитория): ```bash 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 ...` будет падать с ошибкой авторизации: ```bash 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 (см. выше).