# Клавдий (Claudio) — эксплуатация ## Расположение | Item | Value | |------|-------| | Repo | `~/Developer/balda/` (один код с Валерой) | | Ветка | `main` | | Compose | `~/Docker/claudio-agent/docker-compose.yaml` → контейнер `claudio-agent-claudio-1` | | Config | `~/Docker/claudio-agent/.config/balda/config.yaml` | | Env | `~/Docker/claudio-agent/.env` | | Dockerfile | `~/Docker/claudio-agent/Dockerfile.claudio` | | Образ | `claudio-agent-claudio` (тагается как `balda-agent-valera` для Валеры) | ## Запуск / рестарт ```bash cd ~/Docker/claudio-agent docker-compose restart # без пересборки docker-compose up -d # пересоздать контейнер # Rebuild после изменений в коде: cd ~/Docker/claudio-agent && docker-compose build docker tag claudio-agent-claudio:latest balda-agent-valera:latest cd ~/Docker/claudio-agent && docker-compose up -d cd ~/Docker/balda-agent && docker-compose up -d ``` > Валера и Клавдий — **один код и один образ** (`claudio-agent-claudio` → `balda-agent-valera`). Разница только в конфиге, `.env` и порте webhook (8091 vs 8092). Сборка всегда из `~/Docker/claudio-agent/`. ## Архитектура получения сообщений Клавдий — **outgoing webhook bot** (bot_type=3). Zulip отправляет webhook только для @mention и DM. ## Отличие от Валеры - **Провайдер**: `claude` (claude-sonnet-4-6) через Claude Proxy (контейнер, порт 3457) - **Порт webhook**: 8092 (у Валеры 8091) - **База**: отдельная SQLite (NATS embedded) ## MCP Obsidian — конфиг Аналогично Валере — URL обязательно с `/sse`: ```yaml runtime: mcp_servers: obsidian: type: sse url: http://obsidian-mcp:3101/sse name: obsidian ``` ## Проблемы и решения ### Валера отвечал вместо Клавдия на @mention **Причина**: у Валеры в `allowed_owners` был `admin@zulip.local` (реальный email юзера), а у Клавдия — `amartemyanov@duckduckgo.com` (не совпадает). `isAllowedOwner` возвращал false. **Решение**: добавлен `admin@zulip.local` в allowed_owners Клавдия. ### Валера отвечал на @mention других ботов (через Events API) **Причина**: оба бота подписаны на Events API с `all_public_streams=true`. Когда кто-то писал `@Клавдий`, Валера получал это сообщение через Events API и, имея активную сессию в том же треде, отвечал. **Решение**: пропатчен `zulip_handler.go` — добавлена проверка `extractOtherMention()`: если сообщение со стрима содержит @mention другого бота, игнорировать. ### При первом запуске не отвечает на @mention Если после запуска не отвечает на @mention — проверить в config.yaml `allowed_owners`: ```yaml zulip: allowed_owners: - admin@zulip.local ``` Owner'ы прописаны в config.yaml статически, команда `/start owner=` не нужна. При необходимости — пересоздать контейнер: `docker-compose up -d`