сайт в бете
нашли баг? напишите
левин. записаться
← все статьи
Исследование 2026-09-28

Реле, агент и человек в одной комнате: как устроен пилот на Buzz

Реле переехало с моего десктопа на VPS и поселилось за уже работающий nginx, агент поднят там же отдельной службой. Разбираю по шагам, как собран пилот Buzz и почему все решения получились максимально скучными.

Л
Проект Левин
автор

На словах пилот простой: общий канал, в нём рядом человек и агент. Агент при этом живёт на своей машине и держится там сам, без запущенного десктопа. Дальше начинается инженерия, и вся она про то, куда что поселить.

Три участника

  • Реле — точка сбора, через которую участники находят друг друга.
  • Агент — Claude Code, подключённый к каналу через ACP-мост. Работает на подписке claude.ai, отдельный API-ключ тут не участвует.
  • Человек — я. И друг, которого я позвал проверить главный сценарий: каждый приводит своего агента со своим харнессом и своей базой знаний.

Реле съехало с моего компьютера

Сначала реле жило на десктопе. Работает это ровно до момента, когда компьютер нужно выключить или перезагрузить — канал сразу теряет точку сбора.

Теперь реле стоит на VPS NeonMailer (64.188.57.113) и снаружи доступно по wss://64-188-57-113.sslip.io. Трафик закрыт настоящим сертификатом, самоподписанных костылей нет.

Почему не отдельный Caddy на 80/443

Порты заняты. Их держит контейнер neonmailer-nginx-1, который обслуживает два боевых домена — neonmailer.neon.boutique и zadrotometr.ru. Порт 3000 занят самим NeonMailer.

Снести и поставить своё — плохая идея, домены боевые. Поэтому реле подселено за существующий nginx отдельным виртуальным хостом. Что это дало:

  • один TLS-терминатор на весь сервер;
  • один certbot, который уже умеет продлевать сертификаты;
  • чужие конфиги остались нетронутыми: поломка реле не утащит за собой домены.

Скучное решение, зато сервер после него выглядит так же, как выглядел до.

Почему sslip.io

Свой домен — это DNS-запись и ожидание распространения. Ждать не хотелось. 64-188-57-113.sslip.io резолвится в 64.188.57.113 сразу, без единой настройки, и сертификат на это имя выписывается штатно. Для пилота хватает. Переехать на нормальное имя можно потом, когда схема устоится.

Агент на сервере, рядом с реле

На том же VPS поднята служба buzz-acp. Она держит агента по проекту /opt/steam-psycho — это репозиторий ragastar/steam-psycho, сайт zadrotometr.ru. В канал агент приходит полноправным участником.

Перед запуском я проверил, что сервер к этому готов:

Проверка Результат
claude auth status loggedIn: true, подписка claude.ai
node / npm v20.20.1 / 10.8.2

Важная деталь: агент работает на той же подписке, что и мой обычный Claude Code. Мост ACP разговаривает с CLI, поэтому ключ API заводить не пришлось.

Что было до этого

Пилот начался с чтения чужого кода:

  • upstream block/buzz подтянут до 69107dc3b — 104 коммита за неделю, проект движется быстро;
  • разбор архитектуры лёг в ИССЛЕДОВАНИЕ.md внутри чекаута buzz;
  • инфраструктура вынесена в приватный репозиторий ragastar/buzz-lab;
  • попутно вылечен Docker Desktop: осиротевший сокет userAnalyticsOtlpHttp.sock лечится переименованием %LOCALAPPDATA%\Docker\run.

Последний пункт к Buzz отношения не имеет, но час он у меня забрал честно.

Что стоит учесть, если повторяете

  • Сначала посмотрите, кто держит 80, 443 и 3000. Выбор схемы с TLS зависит именно от этого, остальное вторично.
  • Реле должно переживать перезагрузку сервера, поэтому его место — в службе, не в терминале по ssh.
  • Имя от sslip.io привязано к IP. Сменится адрес — сменится имя, и сертификат придётся выписывать заново.

Что проверяет этот пилот

Гипотеза одна: агент живёт на своей машине, со своим окружением и своим контекстом, и приходит в общий канал как участник. Если схема держится у меня, то же самое собирается у друзей — каждый приносит агента, настроенного под свои задачи, и они встречаются в одном канале.

Дальше по плану — позвать друга в канал и посмотреть, как ведут себя рядом два агента с разными базами знаний. Об этом напишу, когда проверю руками.

теги #buzz#реле#acp#vps#nginx#claude code

один разговор — и поймём, чем я могу помочь.

В эпоху ИИ человеку нужен человек. Сяду рядом и доведу до результата — встреча длится столько, сколько нужно. Без скрипта продаж и пакетов «за 999 000 ₽». Если пойму, что помочь не смогу, — скажу сразу.