Files
agent-news/README.md
matt2dev cb2041fc56 Scope down to local Docker testing, drop Gitea/K3s plumbing for now
This is a pilot project — running it via docker compose locally is enough
for now. Deploy/CI can come back once the project is greenlit for real use.

Also fixes claude invocation: add --strict-mcp-config (verified against
the actual installed claude-code CLI --help) so only agent-news' own MCP
server is loaded, not whatever else might be discoverable in the environment.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-21 20:48:30 +03:00

65 lines
2.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# agent-news
Telegram-бот на Dart: по команде `/news` (или `/news <тема>`) запускает Claude Code
для ресёрча и присылает выжимку в чат. Тестовый/учебный проект — пока гоняем локально
в Docker, без деплоя в кластер.
## Как это работает
Один контейнер, три процесса:
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.
## Запуск локально
```bash
cp .env.example .env
# заполнить TELEGRAM_BOT_TOKEN и ALLOWED_CHAT_IDS (через запятую)
docker compose up -d --build
```
`~/.claude` (авторизация Claude Code) хранится в именованном volume `claude-home`
переживает пересборку и рестарт контейнера.
### Первичная авторизация Claude Code
Claude Code CLI использует OAuth-логин через Claude.ai (подписка, не API-ключ). Один раз
после первого запуска нужно зайти в контейнер и залогиниться:
```bash
docker compose exec agent-news claude
```
CLI напечатает ссылку — открой её в браузере, авторизуйся. Токен сохранится в
`~/.claude` на volume, так что после `docker compose restart` логин не слетит.
### Проверка
Напиши боту `/news` (или `/news <тема>`) из чата с id из `ALLOWED_CHAT_IDS` — бот
ответит "ищу…", а через 1-3 минуты Claude сам пришлёт выжимку через `send_to_telegram`.
```bash
docker compose logs -f agent-news
```
## Локальная разработка (без Docker)
```bash
cd bot && dart pub get && dart analyze
cd ../mcp_server && dart pub get && dart analyze
```
## Переменные окружения
| Переменная | Обязательна | Назначение |
|---|---|---|
| `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`) |