Overseer — пульт управления AI-агентами: продакшен за 28 дней

Собственный продукт RNM: одна панель, из которой видно и можно вести все сессии Claude Code и Codex на своих машинах — включая телефон в дороге. От первого коммита до работающего продакшена прошло 28 дней.

Просмотры: 0

Задача

AI-агент запускается на машине разработчика — с её базами, доступами, приватной сетью и настроенным окружением. Перенести эту работу в облако нельзя, а вести её можно только из терминала конкретного компьютера: чтобы узнать, чем занят агент на дев-боксе, нужно дойти до него по SSH, а вне рабочего места нет ни просмотра, ни возможности вмешаться. Нам нужна была одна панель на весь парк машин — при условии, что агенты и данные остаются там, где были.

История проекта

  1. Связь развёрнута наружу

    Демон сам открывает исходящее защищённое соединение к серверу, и по нему идут и команды, и файлы. Так подключается машина за NAT — без белого IP, проброса портов и обязательного VPN, которые раньше были условием работы.

  2. Источник правды остался на машине

    Сессии, переписка с агентом и файлы принадлежат демону, сервер держит только перестраиваемую проекцию. Поэтому панель не дорисовывает состояние: если машина недоступна, это видно честно, а после её ответа список чинится сам.

  3. Разрыв связи — норма, а не сбой

    У каждой команды стабильный идентификатор и явные стадии «принята» и «выполнена». Ноутбук закрыли, сеть отвалилась, демон обновился — после восстановления состояние сходится без потерянных и без задвоенных действий.

  4. Два агента, один интерфейс

    Claude Code и Codex различаются протоколом и возможностями, но наружу отдают одинаковые ход работы, статусы и метрики. Codex подключён через его нативный app-server — постоянный процесс вместо перезапуска на каждый ход.

Что сделали

  • Панель парка: какие машины на связи, где идёт работа, а какая ушла в офлайн
  • Работа с агентом в живом ходе: ответить на вопрос, остановить, поставить следующую задачу в очередь
  • Поддержка Claude Code и Codex через общий поток событий — добавление третьего агента не требует новой панели
  • Подключение машины за NAT по исходящему соединению, без белого IP и проброса портов
  • Клиент на iOS, Android, macOS, Windows и Linux из одной кодовой базы плюс веб-панель
  • Push ровно на одно событие: запущенный вами ход закончился, пока вы не смотрели на экран
  • Голосовой ввод задачи с телефона: запись уходит на наш сервер, ключ провайдера не попадает на устройство
  • Учёт токенов и стоимости по автору, проекту, модели и времени — видно, куда уходит бюджет на агентов

Продукт в работе

Экран парка машин Overseer со списком подключённых демонов
Вход в систему: оператор видит свой воркспейс и все машины парка — какие на связи, где идёт работа, а какая ушла в офлайн; отсюда открывается любая из них.
Рабочая сессия с AI-агентом в Overseer: проекты слева, ход агента справа
Работа с агентом: слева — проекты машины и их сессии, справа — ход целиком: какие команды агент выполнил, что выкатил и что оставил на человеке.
Overseer на телефоне: список машин и последние сессии с агентами
Тот же парк с телефона: видно, какие машины на связи и чем закончился последний ход агента на каждой — новую задачу можно поставить прямо отсюда.
Ход AI-агента в мобильном клиенте Overseer с полем ответа и выбором модели
Ответ агенту в дороге: оператор читает отчёт о выкатке, надиктовывает или пишет следующую задачу и выбирает агента и модель — не открывая ноутбук.

Результат

Overseer из идеи превратился в рабочий инструмент: на нём ведётся разработка и самого Overseer, и остальных проектов команды. За 28 дней — 97 выпущенных задач и 318 коммитов, веб-панель и клиент на пяти системах, поддержка двух агентов и работа с машинами за NAT. Это наш собственный продукт, поэтому историю видно целиком и её можно проверить по датам — и это тот же режим работы, который клиент получает по подписке: без дополнительных согласований и доплат по ходу дела.

28 днейот первого коммита до продакшена · наш замер
97задач выпущено за этот срок · наш замер
318коммитов в репозитории · наш замер
6площадок из одной кодовой базы

Стек

Node.jsReactTypeScriptFlutterPostgreSQLWebSocketDocker + Kamal

Хотите похожий проект?