2.8 KiB
Клавдий (Claudio) — эксплуатация
Расположение
| Item | Value |
|---|---|
| Repo | ~/Developer/balda/ (один код с Валерой) |
| 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 |
Запуск / рестарт
cd ~/Docker/claudio-agent
docker-compose restart # без пересборки
docker-compose build && docker-compose up -d # после изменений в коде
Архитектура получения сообщений
Клавдий — outgoing webhook bot (bot_type=3). Zulip отправляет webhook только для @mention и DM.
Для получения всех сообщений в теме — Events API polling:
- Подписан на все публичные стримы при старте
- После @mention создаётся сессия; последующие сообщения без @mention обрабатываются
Отличие от Валеры
- Провайдер:
claude(claude-sonnet-4-6) через Claude Proxy (контейнер, порт 3457) - Порт webhook: 8092 (у Валеры 8091)
- База: отдельная SQLite (NATS embedded)
Проблемы и решения
Валера отвечал вместо Клавдия на @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
Нужен /start owner=<token> в DM. Токен генерируется при первом старте и пишется в лог: docker logs claudio-agent-claudio-1 | grep -i owner