Рабочий день 10.10: AgentChat и HovAi
День точечных фиксов в AgentChat и HovAi: кнопки, иконки, фоновые задачи, модели и проверки на проде.
Фокус дня
Куда ушло внимание за день — по объёму переписки в AgentChat, 260 сообщений всего.
- AgentChat — 79%
- Платформа HovAi — 7%
- CodeRank — 6%
- SalesMachine — 4%
- Pilot — 2%
- PULSE — 1%
- Sentinel — 1%
AgentChat
AgentChat — это наш мобильный рабочий интерфейс для общения с AI-агентами и управления задачами. Сегодня вокруг него было больше всего движения: чинили поведение интерфейса, иконки, фоновые сценарии и то, как агент просыпается после долгих задач.
Сначала поправили быстрый выбор: сервис перезапустили, эндпоинт /api/focus-of-day стал отдавать Cache-Control: no-store и единый чип HovAi без дубля. Это закрывает проблему с устаревшей закэшированной версией на iOS Safari/PWA, из-за которой один и тот же чип мог показываться дважды. Потом отдельно разбирали сценарий, где агент после генерации видео или фото «замолкает»: выяснили, что в AgentChat уже есть рабочий механизм фоновых задач через watch-job.sh, data/watch/*.json, pollWatchJobs() и handlePrompt, но HovAi-агент его раньше просто не использовал. В итоге написали и протестировали скрипт ожидания результата генерации, чтобы задача не обрывалась вместе с текущим ходом.
Ещё в AgentChat правили визуальные вещи. Заменяли логотип приложения, отдельно меняли круглый значок в карточках сессий и обновляли иконку перезагрузки. Для перезапуска взяли Lucide Icons, а также поставили и проверили новый скилл tabler-icons с вендоренными SVG-иконками и скриптом докачки. После этого подтвердили, что иконка рестарта обновлена, а новый набор иконок реально установлен и валиден. В другой ветке убрали «Всё, начнём» из пустой новой сессии и заменили этот экран на логотип AgentChat, а для дубля на другом адресе отдельно проверили, где именно отдаются PWA-иконки.
Важный кусок дня — работа с модельным роутингом и поведением агента. В Router AI добавили две новые модели: Codex и Sol 6. Параллельно отдельно прогоняли разбор того, почему нельзя просто «перенести код» с Amsterdam на Moscow через автоматический деплой: классификатор в Claude Code блокирует рискованные действия с продакшн-хостом, поэтому такие шаги требуют явного ручного подтверждения через правильный канал, а не через обычный чат. Это не фича для пользователя, но это важный операционный контур, без которого AgentChat не доезжает до продовых изменений.
Рекомендация на завтра: закончить выравнивание UX вокруг AgentChat и не трогать лишний раз уже рабочие фоновые механизмы; полезнее добить сценарии, где агент должен сам просыпаться и уведомлять, чем расширять поверх уже закрытого флоу.
HovAi
HovAi — это наш AI-продукт для чата с моделями, генерации контента и связанных рабочих сценариев. Сегодня почти всё вокруг него было про точечные улучшения интерфейса, выбор моделей и проверку того, как оно ведёт себя на живом проде.
Сначала разобрали основную логику: верхняя модель в HovAi разговаривает и помогает собрать промпт, нижняя — генерирует картинку, видео или музыку. Уточнили, что простое сообщение вроде «привет» не должно само запускать генерацию, а генерация должна идти строго по кнопке и с понятным списанием. После этого сделали аудит плана и прошли по этапам реализации: обновили компоновку чата, убрали прыжки элементов, выровняли иконки, а также отдельно поправили нижнее меню, которое перекрывало кнопку генерации.
Было несколько точечных багфиксов. В одном месте нашли, что кнопка «Сгенерировать» уходит под композер из-за неправильного отступа снизу, и привязали padding-bottom к реальной высоте панели. В другом — кнопка генерации фото была перекрыта нижним меню, потому что у ленты снизу был жёсткий отступ 132px, не учитывающий фактическую высоту панели. Ещё отдельно поправили схему «выхода» из приложения: после нажатия «Выйти» и после удаления аккаунта теперь открывается стартовый экран с логотипом и текстом «Что создадим?», а не список диалогов. Это уже подтвердили внешним readback на hovai.ru.
Визуально HovAi тоже подчищали. В композере заменили плюс у трёх кнопок файла на скрепку, причём сделали это так, чтобы и на телефоне, и на десктопе элементы не прыгали. В нижнем меню уменьшили слишком большие иконки, выровняли микрофон и модели, чтобы они не съезжали при добавлении второй модели, и привели отображение к единому блоку. Отдельно сделали реферальный экран чуть живее: кнопка «Копировать» теперь на короткое время превращается в зелёный бейджик «✓ Скопировано» с анимацией, а потом возвращается назад.
По содержательной части тоже было движение. В HovAi собрали и запустили агента правок: по умолчанию предложили дешёвую модель deepseek/deepseek-v4-flash, ограничили правки только рамками проекта и зафиксировали потолок около 15 ₽ за одну просьбу. Параллельно занимались самим проектным контуром: восстановили откат версий проекта, где снимки раньше хранили только хеш и откат был невозможен, а потом добавили хранение самих файлов рядом с проектом и возврат к выбранной версии. Это уже выложено на бою, и у каждой новой версии файлы лежат отдельно от опубликованного сайта.
Рекомендация на завтра: продукту уже не нужны новые фичи, нужен трафик/пользователи. По коду видно, что сейчас важнее не плодить ещё один экран, а стабильно доводить существующие сценарии до предсказуемого поведения на проде.
Платформа HovAi
Платформа HovAi — это общий слой вокруг продукта: проекты, публикация, тарифы, рефералька и связанные сервисные части. Сегодня здесь было меньше работы, но она была очень прикладной.
Главное — разобрали, как вообще работают «Проекты» и зачем они нужны. Это отдельный конструктор сайтов/PWA внутри HovAi, который живёт рядом с основным AI-чатом и не смешивается с ним. По мере обсуждения уточнили экономику: публикация проекта бесплатна до определённого момента, но если проект реально потребляет CPU, RAM и диск на наших серверах, цена должна отражать эту нагрузку и необходимость докупать мощности.
Потом зашли в тарифную логику. Обсудили стоимость хранения и мощности для больших объёмов — не как абстрактные «5 ГБ за 100 рублей», а как цену ресурсов на сервере в Амстердаме и Москве, где проект реально крутится и потребляет инфраструктуру. Это не просто маркетинговая цифра, а часть рабочей модели платформы, где публикация и хостинг должны быть связаны с реальной себестоимостью. Ещё отдельно подтвердили, что для проекта уже есть рабочие механизмы публикации и внешнего readback, так что слой платформы не находится в черновике — он уже живёт на проде.
Рекомендация на завтра: продолжать не «добавлять про запас», а дооформлять экономику и границы платных ресурсов, чтобы платформа не выглядела набором разрозненных экранов.
CodeRank
CodeRank — это наш отдельный продукт для подготовки и проверки решений, с живым демо и закрытым контуром сдачи. Сегодня он был не самым шумным, но по нему тоже было несколько полезных шагов.
Сначала проверили статус плана и подтвердили, что по утверждённому списку всё закрыто: MVP, тесты, валидация, презентационная заготовка и демо-поддомен уже были готовы. Потом отдельно прогнали визуальный аудит по скриншотам и поправили мобильную часть: убрали проблемы со статус-баром, настроили safe-area сверху, заменили сырой текст трудности на визуальные шкалы и улучшили пустые состояния. После этого сделали внешний readback на coderank.olehov.com и подтвердили, что сервис живой, а стили и статусы отдаются корректно.
Ещё был шаг по сдаче репозитория: добавили deploy key с правом write, дождались появления коммита на GitHub и подтвердили, что репозиторий действительно обновился. Это уже не просто локальная разработка, а нормальный проход от кода к публичной сдаче. Отдельно отмечу, что презентацию в итоге делать не стали — её специально вынесли из обязательных задач, чтобы не тратить время на лишнее.
Рекомендация на завтра: код уже достаточно собран, дальше важнее не раздувать фичи, а держать чистым процесс сдачи и не ломать то, что уже подтверждено на проде.
SalesMachine
SalesMachine — это наш контур холодных рассылок и работы с лидами. Сегодня здесь был короткий, но очень прикладной цикл: собрать, отправить, проверить фактом.
Сначала собрали пачку из 15 писем для второй холодной волны на сегодня и не отправляли её, пока не было команды. Потом Олег дал прямое «Отправляй», и рассылку запустили. Дальше уже не верили в лог отправителя на слово, а сверяли именно журнал писем: сначала увидели 2 из 15 подтверждённых отправок, потом дождались всех 15 и перепроверили, что каждой клинике ушла одна строка со статусом sent, без дублей и пересечений с предыдущими волнами.
После отправки отдельно проверили ящик: в Входящих, Спаме, Архиве и Корзине писем от этих 15 клиник не оказалось. Это полезная практическая проверка, потому что она показывает не только факт отправки, но и отсутствие мгновенных ответов или возвратов в проверяемых папках. Карточку в календаре тоже обновили по факту, чтобы она не врала про статус кампании.
Рекомендация на завтра: продолжать работать только от журнала писем и входящих, а не от формального лога отправки — это уже показало, что реальная валидация тут важнее красивого статуса.
Коротко по остальному
PULSE — починили регрессию в музыке: обработчик error перестал реагировать на штатный MEDIA_ERR_ABORTED при смене .src, из-за чего плейлист больше не обрывается раньше времени.
Sentinel — прогнали ежедневные таймеры и отдельно разбирали падение opencode-model-failover с 203/EXEC; штатные тики до этого были зелёные, а новый сбой оказался отдельной системной проблемой запуска Python.
Pilot — обновили память по регистрации: сохранили отчество и дефолты для форм, чтобы в следующий раз не переспрашивать про категорийные поля.
Итог дня
День получился очень прикладным: много мелких, но важных фиксов в AgentChat и HovAi, причём почти всё проверяли на живом проде, а не «по ощущению». Самая заметная линия — мы не столько добавляли новые большие функции, сколько доводили уже существующие сценарии до нормального поведения: кнопки не перекрываются, иконки не скачут, фоны просыпаются, а продовые проверки подтверждают результат. В таком режиме день выглядит не громким, но очень рабочим — и именно за счёт этого продукты становятся устойчивее.
Куда идти дальше
Если хочется посмотреть, как мы дальше доводим такие сценарии до рабочего вида, можно открыть AgentChat или заглянуть в HovAi и посмотреть, как устроен продуктовый контур целиком.
CTA: если вам нужен такой же спокойный и прикладной разбор продукта, разработки и продовых правок, посмотрите AgentChat — там видно, как мы собираем рабочий интерфейс для AI-агентов и доводим его до стабильного поведения на проде.
Рассылка новых статей
Новые статьи — на email. Push приходит в приложение Blog. Telegram-рассылка отключена.
Чтобы получать статьи на email, сначала привяжите email в личном кабинете.
Уведомления в приложении: blog.olehov.com → колокольчик.
Получайте новые статьи и разборы
Подпишитесь через email — без спама, только новые материалы.