От няньки к CEO: автономный стек разработки в Docker-песочницах

JavaScript Mastery 13,9 тыс. 2 ч 58 мин 28 мин 06.11.2026
Главное

Один неосторожный ИИ-агент с прямым доступом к хост-машине способен уничтожить продакшен-базу данных за секунды — инцидент со стартапом на Replit наглядно доказал фатальность неконтролируемого кодинга. Решение проблемы кроется не в ручной проверке каждого шага, а в архитектурной изоляции агентов внутри MicroVM-песочниц Docker Sandboxes, где деструктивные действия становятся физически невозможными. Сквозной запуск SaaS Askwell подтверждает: когда ключи изолированы, а пул-реквесты инспектирует CodeRabbit, инженер превращается из нервной няньки в настоящего CEO, не подтвердившего вручную ни единой терминальной команды за весь финальный билд.

🤖 Архитектура автономных ИИ-агентов: изоляция через Docker Sandboxes 0:00

Опасность неограниченного доступа и концепция «корпоративного ноутбука» 0:14

Управление несколькими автономными разработчиками на базе искусственного интеллекта быстро превращается в полноценную рутину . Каждому агенту постоянно требуется подтверждение команд, установка пакетов или разрешение конфликтов при одновременной правке одного файла . Попытка упростить процесс и выдать агентам полные привилегии создает колоссальные риски . Модель, запущенная на локальной машине разработчика, наследует права текущего пользователя: SSH-ключи, боевые токены из .env-файлов и прямой доступ к базам данных .

В индустрии уже зафиксированы тяжелые инциденты: агент платформы Replit удалил производственную базу данных стартапа прямо во время код-фриза , а консольный ассистент Google Gemini CLI при попытке переместить проект стёр исходные файлы и выдал покаянную фразу: «I have failed you completely and catastrophically» . В Claude Code флаг полной автономии показательно назван --dangerously-skip-permissions . Отказ от него возвращает микроменеджмент, при котором разработчик перестает вчитываться в диффы и слепо жмет подтверждение .

Решением проблемы стала открытая система оркестрации JSM Headquarters (JSM HQ), созданная Эдрианом Тварогом . Вместо прямого доступа к операционной системе хоста используется метафора «корпоративного ноутбука» . Когда в компанию нанимают сотрудника, ему не передают личный компьютер руководителя со всеми сохраненными паролями . Ему выдают изолированную рабочую станцию с доступом только к необходимым сервисам, которую при фатальной ошибке можно мгновенно стереть без ущерба для основной системы .

Настройка изоляции с Docker SBX: сетевые политики и проксирование секретов 6:29

Для практической реализации изоляции задействуется бесплатный CLI-инструмент Docker Sandboxes (sbx) . Каждое рабочее место в системе разворачивается внутри полноценной MicroVM, а не обычного контейнера . В отличие от контейнеров, делящих ядро с хост-системой и способных получить контроль над Docker-сокетом, MicroVM функционирует как самостоятельный изолированный компьютер .

Архитектура безопасности строится на трех строгих барьерах:

Архитектура SaaS-сервиса Askwell и протокол общей памяти команды 11:31

В качестве полигона для мультиагентной разработки выбран SaaS-продукт Askwell — виджет базы знаний для сайтов . Клиент загружает документацию, вставляет одну строчку скрипта на свой ресурс и получает публичный чат-бот, отвечающий строго по загруженным материалам без галлюцинаций .

Технологический стек проекта распределен между специализированными сервисами:

Ключевая уязвимость агентов заключается в отсутствии долговременной памяти между сессиями . Чтобы синхронизировать агентов, проект инициализируется тремя обязательными Markdown-файлами . Файл docs/project.md содержит требования, спецификации API и модели данных . В docs/plan.md зафиксирован жесткий порядок фаз (от фазы 0 с инфраструктурой до фазы 6 с запуском), составленный человеком . Наконец, CLAUDE.md регламентирует правила командного взаимодействия: форматирование кода, принципы коммитов и требование «одна задача — один Pull Request» . Центром синхронизации становится репозиторий GitHub: агенты не видят окружения друг друга и общаются исключительно через ветки и пулл-реквесты .

Развёртывание JSM HQ: виртуальный офис, роли и распределение ресурсов 16:19

Запуск оркестратора выполняется пакетным менеджером через команду npx @therealjsmastery/jsmhq . В браузере открывается интерактивный пиксельный виртуальный офис , где за каждым рабочим столом закреплен конкретный агент со своим терминалом и песочницей .

В процессе онбординга конфигурируется иерархия команды . Лид-инженером назначается агент Michael . Его задача — декомпозировать фазы плана, ставить задачи на канбан-доске и отвечать на технические вопросы, но ему категорически запрещено писать код самого приложения . Роли разработчиков передаются агентам Dwight и Jim, работающим под управлением Claude Code . Им предписано реализовывать назначенные таски в dev-окружении Supabase без права деплоя на прод .

Каждому агенту выделяются гарантированные вычислительные мощности . На машине разработчика с 16 ГБ оперативной памяти под каждую MicroVM резервируется конфигурация из 4 процессорных ядер и 4 ГБ RAM . Если агенту требуется выполнить внешнее действие (зарегистрировать аккаунт или выпустить API-ключ), интерфейс JSM HQ формирует запись в разделе Action Items с пошаговой инструкцией для человека .

🏢 Развёртывание виртуального офиса и параллельный конвейер разработки 25:25

Архитектура JSMHQ: запуск песочниц в Docker и калибровка разрешений 25:25

Интерфейс JSMHQ («Офис») автоматически обнаруживает специализированные навыки и протоколы контекста (MCP) для выбранного стека: восемь навыков для Clerk, два для биллинга Clerk, а также нативные инструменты Supabase, PostHog и ArcJet . Наличие MCP избавляет разработчика от рутинной настройки в панелях управления сервисов — агенты взаимодействуют с API напрямую . По умолчанию контейнеры полностью изолированы от сети, поэтому доступ к сторонним ресурсам настраивается точечно . Вместо небезопасной маски * правила белого списка применяются сразу к трём песочницам . В конфигурации каждого агента задаются переменные окружения и ключи доступа к LLM-провайдерам (Anthropic, OpenAI, Google) , однако аутентификацию можно упростить через команду claude login в терминале песочницы .

В глобальных настройках проект получает имя AsQwell , а шрифт интерфейса можно сменить с пиксельного Pixelify Sans на Inter или Mono . Визуализация процессов в стиле пиксель-арт помогает мозгу связывать логические задачи с конкретными исполнителями, заменяя десятки открытых терминалов . Вся конфигурация команды (Майкл, Дуайт, Джим) и будущий план сохраняются в локальную папку .jsmhq , которую необходимо зафиксировать в Git перед стартом .

По нажатию кнопки «Start Team» платформа клонирует репозиторий для каждого агента и разворачивает три изолированные песочницы Docker с помощью утилиты sbx . В терминальном дашборде sbx отображается статус каждого контейнера и статистика сетевых запросов . Для агентов активируется режим «Bypass permissions» : внутри защищённой среды Docker полный доступ к выполнению команд безопасен и исключает постоянные ручные подтверждения . Авторизация через подписку Claude привязывается поочерёдно к терминалам Джима , Дуайта и Майкла . Параметр вычислительного усилия (effort) для разработчиков фиксируется на уровне medium, а для лид-агента Майкла поднимается до high, так как именно он отвечает за декомпозицию и планирование . В качестве автоматического рецензента пул-реквестов подключается CodeRabbit .

Фаза 0: каркас монорепозитория, код-ревью Майкла и интеграция с Vercel 34:47

Старт разработке даёт команда Майклу: спланировать «Фазу 0» в рамках единой задачи . Проанализировав проект, тимлид предлагает внедрить GitHub Actions CI с проверками типов, линтингом и тестами, что получает одобрение пользователя . Майкл передаёт первую задачу — создание монорепозитория, приложения Next.js и заглушки виджета — Дуайту . На этом этапе занят только один разработчик, так как фундамент проекта не предполагает параллельных правок .

В процессе работы агентов дашборд формирует списки действий (Action Items) для человека . Пока Дуайт собирает проект, Майкл выступает строгим ревьюером: он одобряет проделанную работу, но требует удалить блок исключений минимального возраста релизов из настроек pnpm-workspace, закрывая уязвимость перед свежими вредоносными пакетами .

Для превью-сборок создаётся проект в Vercel с привязкой к директории apps/web . Первоначальный пул-реквест мержится через командный режим шелла Майкла . При возникновении ошибки отклонения пуша на стороне GitHub проблема решается на хост-машине через команду gh auth refresh . Для обхода автоматической защиты Vercel генерируется секрет VERCEL_AUTOMATION_BYPASS_SECRET , который прописывается в переменных песочниц Дуайта и Джима с последующим перезапуском терминалов .

Параллельная разработка в Фазе 1: разделение потоков между Дуайтом и Джимом 43:48

Финальный шаг нулевой фазы — проверка деплоя . Дуайт запрашивает сетевой доступ к доменам Vercel и исправляет ошибку сборки, подтвердив указание директории apps/web . После мержа пул-реквеста #4 превью AsQwell становится доступным по ссылке , а Фаза 0 объявляется завершённой .

Майкл мгновенно переходит к планированию Фазы 1, разделяя разработку на два полностью независимых параллельных потока :

Такое разделение изолирует изменения и гарантирует, что агенты не перезапишут код друг друга . Перед генерацией задач Майкл уточняет бизнес-параметры: базовая стоимость SaaS-подписки устанавливается на уровне $19 в месяц , а черновик текста для лендинга поручается составить Джиму . На доске появляются восемь задач, первые из которых — A1 и B1 — синхронно уходят в работу . Для продолжения пайплайна разработчику остаётся подготовить и передать агентам ключи от панелей Supabase и Clerk .

⚙️ Инфраструктура, безопасность и первый код: от Clerk и Supabase до ревью в Code Rabbit 50:30

Настройка контуров аутентификации и Supabase MCP 50:30

Полноценная работа автономных разработчиков невозможна без инфраструктурных сервисов. Первым шагом в проекте AskWell становится настройка системы аутентификации в Clerk . В панели сервиса создаётся потребительское приложение с авторизацией через почту и Google , после чего ключи вручную копируются и прописываются в переменных окружения (.env) в песочницах Двайта и Джима . Аналогичные переменные добавляются в Vercel с ограничением только для контуров Preview и Development . Главное правило архитектуры — секреты продакшена ни при каких обстоятельствах не должны попадать внутрь песочниц . После обновления переменных песочницы агентов перезапускаются , чтобы они подхватили новые настройки .

Следующим этапом создаётся изолированная база данных в Supabase под названием askwell-dev в ближайшем регионе . Для обучающих и тестовых сценариев достаточно бесплатного тарифа Supabase , но в продакшене автор рекомендует переходить на Supabase Pro ради подневных бэкапов и механизма бранчевания (branching), когда под каждый пулреквест создаётся персональная ветка базы данных .

Взаимодействие агентов с базой строится через протокол MCP (Model Context Protocol) . Модель настраивается через шлюз Docker MCP Gateway: администратор подключает Supabase MCP в настройках штаб-квартиры JSM HQ , генерирует MCP-ссылку из панели Supabase с идентификатором проекта , проходит браузерную авторизацию организации и передаёт права доступа Двайту и Джиму .

# Переменные окружения базы данных для песочниц:
NEXT_PUBLIC_SUPABASE_URL=...
NEXT_PUBLIC_SUPABASE_ANON_KEY=...
SUPABASE_SECRET_KEY=...

После добавления ключей NEXT_PUBLIC_SUPABASE_URL, публичного ключа и сервисного SUPABASE_SECRET_KEY [55:35, 56:14] контейнеры агентов повторно перезапускаются , а задача в интерфейсе Майкла отмечается выполненной .

Интеграция Code Rabbit и автономный цикл PR-ревью 57:50

Когда Двайт и Джим завершают базовые задачи фазы Foundation (A1 и B1), проект переходит к этапу рецензирования кода . Чтобы исключить слепые слияния, к репозиторию AskWell на GitHub подключается сервис автоматического ИИ-ревью Code Rabbit [58:04, 58:30]. Инструмент умеет формировать саммари изменений, строить диаграммы последовательностей и валидировать архитектуру .

Поскольку пулреквесты A1 и B1 были открыты до интеграции Code Rabbit , автор отправляет Майклу естественное указание: попросить подчиненных сделать небольшие коммиты в свои ветки для триггера повторной проверки . Майкл моментально рассылает агентам вызовы через внутренний API , Двайт и Джим бегут к рабочим столам и обновляют ветки .

В интерфейсе Code Rabbit запускается анимация анализа . Вскоре PR #6 успешно проходит проверку, появляется в списке Action Items и сливается автором в основную ветку . Следом за ним закрывается и A1, после чего Майкл без участия человека назначает Двайту задачу A2, а Джиму — B3, точно осознавая граф зависимостей .

Автономность агентов наглядно проявляется при разборе PR #4 от Джима :

Критическая миграция базы данных и запуск превью-интерфейса 1:04:11

Центральным событием первого этапа становится пулреквест A3, за который отвечает Двайт . Это критически важная для безопасности архитектурная миграция: она создаёт семь таблиц и настраивает политики Row Level Security (RLS) для изоляции данных клиентов [1:04:25, 1:11:13]. В ходе работы Двайт сталкивается с барьером прав и пишет Майклу служебное сообщение: для выполнения задачи ему требуется модифицировать два не включенных в изначальный скоуп файла (packages/db/package.json и общие зависимости воркспейса) . Майкл подтверждает запрос, снимая блокировку .

Параллельно в ветке превью на Vercel уже доступен рабочий интерфейс AskWell — сервис виджета умного чата поддержки на основе документации [1:06:23, 1:06:36]. Заметив, что в тёмной теме полоса прокрутки осталась белой , автор не вторгается в песочницу Джима напрямую, а формулирует задачу руководителю: «Майкл, поручи Джиму покрасить скроллбар в темный цвет» . Майкл принимает задачу в очередь . Джим вносит правку из одного файла по дизайн-токенам, тестирует отображение в Chromium и Firefox и отправляет PR #6, который сразу же аппрувится . Одновременно автору приходится разрешить сетевой доступ агентов к поддомену *.client.protect.clerk.com с помощью маски [1:10:07, 1:10:21].

[Поток проверок миграции A3]:

1. Внутренний аудит Майкла (проверка версии Postgres) <a class="ts" data-seconds="4157" href="#t=4157" title="Смотреть с 1:09:17" aria-label="Смотреть с 1:09:17"><svg viewBox="0 0 24 24" width="14" height="14" fill="currentColor" aria-hidden="true"><path d="M8 5v14l11-7z"/></svg></a>
2. Рецензирование Code Rabbit (Change Stack: RLS, типы, функции) [1:11:53, 1:12:08]
3. Автоматический прогон тестов: 87/87 pass на движке PGLite <a class="ts" data-seconds="4354" href="#t=4354" title="Смотреть с 1:12:34" aria-label="Смотреть с 1:12:34"><svg viewBox="0 0 24 24" width="14" height="14" fill="currentColor" aria-hidden="true"><path d="M8 5v14l11-7z"/></svg></a>

После исправления мелких правок и успешного прогона 87 тестов на встроенном эмуляторе PGLite , PR #5 принимается . Двайт накатывает миграцию на базу askwell-dev и переходит к задаче A4 — созданию строгого клиента createOwnerClient с проверкой JWT токенов Clerk для Supabase RLS [1:14:43, 1:15:25], открывая фронтендеру Джиму дорогу к разработке клиентского дашборда B4 .

🤖 Делегирование тимлиду, строгий код-ревью и масштабирование памяти агентов 1:15:39

Завершение фундаментального этапа и передача слияния PR агенту-тимлиду 1:15:39

Перед закрытием первого этапа разработки потребовалось настроить синхронизацию Row Level Security (RLS) в Supabase, чтобы неавторизованные пользователи не получали доступ к данным . Для этого интеграция сторонней аутентификации Clerk была активирована прямо в консоли Supabase через ввод домена Clerk в разделе Third-Party Auth . В этот момент агент Дуайт подготовил задачу A4 в виде PR #7, а Джим параллельно разрабатывал интерфейсную часть в ветке B4 . Автоматический процесс ревью был отправлен в очередь сервиса CodeRabbit .

Архитектурный план проекта строится на базе файлов в директории docs, где описаны все этапы . Завершающаяся фаза 1 (Foundation) заложила основу всей базы данных, миграций pgvector и базового UI с тарифами . Параллельная работа агентов шла по двум изолированным веткам (Lane A вел Дуайт, Lane B — Джим), причем ключевое преимущество оркестратора проявилось в управляемом ожидании: Джим автоматически ждал слияния архитектуры Дуайта перед интеграцией собственного кода .

Чтобы исключить рутинный ручной аппрув пулреквестов, в настройках оркестратора JSMHQ был включен параметр «Lead can merge» . Автор в шутку сравнил эту автономию с сериалом «Разделение» (Severance), где рабочая субличность изолирована внутри офиса . Майкл получил инструкцию сливать ветки сразу, как только CodeRabbit проведет проверку и разработчики исправят замечания .

Майкл моментально проверил PR #7 и провел слияние . После небольшой заминки со статусом предпросмотра Vercel, для которого потребовалось вручную передать URL ветки в чат оркестратора , Майкл запросил ссылку на релизный билд main для финальной валидации . Джим выполнил автотесты на живом окружении Vercel: стартовая страница с шестью блоками и регистрация тестового пользователя через Google в Clerk отработали корректно, открыв пустой дашборд приложения AsQwell .

Старт Фазы 2: внедрение темной темы и обнаружение уязвимости через CodeRabbit 1:27:54

Следующим шагом стал запуск второй фазы — создание сущности проектов и встраиваемого виджета . Майкл начал декомпозицию задач . Во время планирования автор скорректировал требования, отправив агенту запрос на темную тему, несмотря на то что в изначальном project.md значилась светлая палитра . Майкл уточнил поведение интерфейса: было решено опираться на настройки операционной системы с возможностью ручного переключения, применив тему к дашборду, экрану входа и посадочной странице .

Для работы локального и тестового окружения оркестратор сгенерировал action item:

После распределения задач Дуайт и Джим открыли новые ветки . В процессе ревью одного из PR статус проверки впервые загорелся красным . CodeRabbit обнаружил критическую уязвимость в роуте /api/widget/config: публичный эндпоинт был оставлен без лимита запросов (rate limit), что грозило атаками на базу данных через валидные и невалидные ключи . Проблема была отложена агентами в комментариях на третью фазу, но ревьюер заблокировал мерж до внедрения защиты через платформу безопасности Arkjet . Агентам пришлось оперативно внести исправления в логику эндпоинта .

Преодоление лимитов памяти, приемка виджета и контуры Фазы 3 1:35:38

Во время прогона сквозных тестов Playwright возникла проблема с нехваткой вычислительных ресурсов: запуск тестов Дуайта потребовал 3,4 ГБ оперативной памяти при базовом ограничении песочницы в 4 ГБ . Во избежание падений конфигурацию виртуальных машин перераспределили в меню Sandbox Resources:

Дуайт также запросил доступ к внешним хостам Vercel Live и доменам защиты Clerk для авторизации фиктивных пользователей в Playwright . CodeRabbit принял внесенные правки по валидации и подтвердил готовность PR . В тестовой сборке Vercel заработал переключатель между темной, светлой и системной темами, а также появилась возможность создания проектов (например, тестового «docs site») с получением скрипта для встраивания виджета .

После завершения всех задач второй фазы контейнеры были пересозданы с новым лимитом памяти 7-7-2 ГБ . Майкл немедленно приступил к планированию третьей фазы . В ней предстоит реализовать загрузку документов (PDF, TXT, MD) в хранилище Supabase Storage, их чанкинг, генерацию векторных эмбеддингов с ключом OpenAI, а также задействовать интеграцию с Arkjet для защиты от prompt injection и перегрузки роутов .

🛡️ Фаза 3: Интеграция базы знаний, защита от инъекций и автономный дебаг 1:40:41

Архитектура Phase 3: разделение задач между агентами и защита Arcjet 1:40:41

Третья фаза разработки сервиса AskWell целиком посвящена связке базы знаний и клиентского чат-бота . Архитектор Майкл сразу запросил конфигурацию языковых моделей: для векторизации утвердили модель text-embedding-3-small , а для генерации ответов выбрали компактную GPT-4o mini (в проекте обозначенную как gpt-5-mini), обеспечивающую баланс качества и низкой цены за запрос . Логику работы пайплайна зафиксировали жестко: если подходящий чанк в базе документов не найден, бот пропускает обращение к нейросети и возвращает сухое «I don’t know», экономя бюджет . Канбан-доску фазы разделили на две параллельные линии: Дуайт взял на себя управление базой знаний (задачи A1–A4), а Джиму ушли задачи по интеграции публичного чата (B1–B5) . Когда Джим остался в режиме ожидания со статусом ready, Майкл самостоятельно отправил ему директиву начать спринт .

Для работы приложения потребовалось выпустить два внешних сервисных ключа :

Секреты OpenAI были продублированы в песочницы обоих разработчиков, тогда как ключ Arcjet передали исключительно в среду Джима , после чего обе переменные прописали в Vercel для сред Preview и Development . Чтобы новые параметры вступили в силу, контейнеры агентов пришлось перезагрузить с сохранением сессий .

К ревью кода подключился бот CodeRabbit, потребовавший проверить целостность индексов эмбеддингов перед выдачей векторов . Поскольку после перезапуска Майкл временно отключил автоматический мерж, автор явно разрешил ему повторно сливать пул-реквесты самостоятельно для ускорения пайплайна . Роль Arcjet в проекте оказалась ключевой: публичный виджет доступен любому посетителю, поэтому сервис выполняет сразу две защитные функции . Он жестко ограничивает частоту обращений (rate limit) до 20 сообщений в минуту , блокируя спам-скрипты, и инспектирует каждый входящий текст на попытки промпт-инъекций до того, как запрос уйдет в LLM .

Тестирование загрузки документов и автономный дебаг через Vercel API 1:48:53

После завершения основных задач спринта Майкл и Дуайт сформировали список action items для автора . Майкл потребовал активировать опцию Fluid Compute в панели Vercel: обработка и нарезка крупных PDF-файлов может занимать до 300 секунд , тогда как стандартный лимит бесплатного тарифа Hobby ограничен 60 секундами, что чревато тайм-аутами . В свою очередь Дуайт запросил верификацию пользовательского сценария в preview-деплое PR24 . Поскольку в изолированной песочнице агента нет ни встроенного браузера, ни тестового профиля, проверка UI легла на человека .

Интерфейс базы знаний предусматривает два способа наполнения: ввод сырого текста до 50 000 символов либо загрузку документа весом до 10 МБ с ограничением до трех источников на бесплатном тарифе . Для теста был сгенерирован 7-страничный PDF-файл справки интернет-магазина Northfold, содержащий правила доставки, возвратов и тарифную сетку . Первая попытка загрузки завершилась ошибкой gateway timeout .

Лог ошибки передали Майклу , и тот оперативно создал тикет для Дуайта . Расследование Дуайта показало: проблема крылась не в архитектуре кода, а во временной деградации инфраструктуры хранилища Supabase с 18:41 до 18:45 . Файл успешно попал в бакет, но сервис не отправил подтверждающий ответ .

Чтобы исключить зависимость от ручной передачи логов, Дуайту выпустили персональный токен Vercel с правами read-only на проект ASQL со сроком 7 дней . Получив токен в переменные окружения песочницы, Дуайт обрел возможность самостоятельно опрашивать логи деплоев Vercel и локализовывать сбои . Вскоре выявилась еще одна оплошность: в preview-ветке отсутствовала переменная OPENAI_API_KEY . После ее корректной привязки документ Northfold без сбоев прошел этапы чанкинга и векторизации, отобразившись в Supabase Storage со статусом Ready .

Стресс-тест чат-виджета на промпт-инъекции и старт Phase 4 с PostHog MCP 1:59:18

Работоспособность сгенерированного виджета протестировали с помощью тестовой HTML-страницы, полученной от Майкла . Встроенный чат безупречно ответил на фактические вопросы из загруженного PDF: подтвердил срок доставки в Канаду за 3–5 рабочих дней и напомнил, что магазин принимает только один промокод на заказ . На вопрос об упаковке подарков, отсутствовавший в документе, система честно вернула ответ о нехватке данных .

Следом бот подвергли стресс-тестированию на уязвимости:

Успешное закрытие третьего спринта открыло путь к Фазе 4, сфокусированной на истории диалогов, трейсинге затрат на LLM и продуктовой аналитике через PostHog . Майкл спланировал структуру задач, уточнив базовые параметры: лимит отображения установили на отметке 50 последних переписок с динамической подгрузкой архива .

Для глубокой настройки аналитических воронок применили концепцию PostHog Self-Driving: агент Джим самостоятельно подключает официальный PostHog MCP-сервер внутри своего окружения и строит дашборды . Для запуска мастера автор воспользовался возможностью прямого перехода в физическую директорию Джима на хост-машине через VS Code . В JSMHQ каждый агент обладает изолированной копией репозитория, что гарантирует сохранность кодовой базы . Открыв терминал внутри песочницы Джима, автор запустил интерактивную утилиту команды npx posthog-wizard для конфигурирования Next.js App Router .

📊 Сквозная аналитика: PostHog, агентный надзор и подготовка биллинга 2:05:50

Интеграция PostHog: автоматический визард, MCP и синхронизация баз данных 2:05:50

Настройка аналитической инфраструктуры началась с перехода в каталог apps/web, где CLI-визард PostHog корректно распознал Next.js в качестве основного веб-фреймворка . Процесс автоматической инициализации избавляет от необходимости вручную прописывать трекеры событий и занимает около восьми минут . За это время утилита сканирует кодовую базу, находит внешние сервисы данных и конфигурирует клиентские идентификаторы .

Инструмент автоматически распознал три ключевых источника данных проекта: аутентификацию Clerk, модели OpenAI и базу данных Supabase . После завершения базового сценария визард предоставил доступ к серверу PostHog MCP, поддерживающему Claude Code, Cursor и VS Code . Для полноценной синхронизации потребовалось вручную сконфигурировать вебхуки и секретные ключи:

Визард также активировал веб-аналитику, тепловые карты кликов и запись сессий пользователей без необходимости подключать разрозненные сторонние библиотеки .

Агентная оркестрация: трейсинг LLM и деплой на Vercel 2:18:46

После настройки инфраструктуры управление вновь перешло к команде виртуальных разработчиков. В песочнице Дуайта накопилось 45 запросов к Clerk MCP, которые были пакетно одобрены для разблокировки зависимых задач . Менеджер Майкл делегировал Джиму ревью сгенерированного кода, поручив агенту добавить кастомные события и трассировку искусственного интеллекта .

При настройке трейсинга ответов бота возник вопрос конфиденциальности: сохранять ли в PostHog только метаданные (модель, токены, задержку и стоимость) или логировать полный текст сообщений . С учетом того, что виджет предназначен для публичной службы поддержки, было решено записывать диалоги целиком — это критически упрощает отладку некорректных ответов модели .

Чтобы агент смог завершить работу с аналитикой, сгенерированные PostHog ключи из локального файла apps/web/.env были скопированы в переменные окружения Джима . После перезапуска песочницы агент успешно подхватил сессию , проверил репозиторий на утечки секретов и отправил пул-реквест на проверку боту CodeRabbit . При этом Майкл попытался сразу переключить Дуайта на проектирование пятой фазы, но был принудительно остановлен до полного закрытия текущего этапа .

Финальным шагом интеграции стал перенос ключей PostHog в Vercel для сред preview и development . После ручного перезапуска деплоя ветки PR #34 тестовый стенд получил доступ ко всем аналитическим переменным .

Верификация Фазы 4 и запуск Clerk Billing 2:24:18

Тестирование развернутой сборки подтвердило полную работоспособность защитных и аналитических механизмов приложения AskQwell. Встроенные правила ArcJet продемонстрировали надежную фильтрацию:

В интерфейсе приложения заработал раздел диалогов (Conversations), позволяющий владельцам документации просматривать реальные обращения пользователей к боту для выявления пробелов в базе знаний . Внутри PostHog уже зафиксировалась 10-минутная тестовая сессия виртуального агента . Посредством MCP Джим самостоятельно построил сквозную воронку конверсии на 14 дней — от посещения лендинга и регистрации до копирования сниппета виджета и взаимодействия с чатом , . Кроме того, панель управления отобразила суточный график затрат на вызовы LLM .

Убедившись в стабильности продукта, команда приступила к Фазе 5 — монетизации и кастомизации . Архитектура монетизации предполагает ограничение бесплатного плана одним проектом, в то время как Pro-подписка открывает выбор цветовых схем виджета, настройку анимаций и отключение фирменного бейджа . В панели Clerk был активирован модуль подписок для физических лиц в тестовом режиме . Для корректного приема вебхуков на защищенных preview-стендах Vercel маршрутизацию настроили через параметр обхода заголовков bypass-per-apps , после чего Майкл приступил к генерации задач на верстку платежной страницы .

🚀 Монетизация, защита и запуск: от биллинга Clerk до обсервабилити в PostHog 2:30:58

Автономный цикл код-ревью CodeRabbit и интеграция биллинга Clerk 2:30:58

Пятая фаза разработки посвящена разграничению тарифов Free и Pro, а также сквозному подключению платежей . Поскольку API сервиса Clerk позволяет читать тарифные сетки, но не создавать их программно , конфигурацию плана приходится задавать вручную в дашборде. В панели Clerk создается тариф Pro стоимостью 19 долларов в месяц с ежемесячным расчетным периодом и отключенным триалом , чтобы мотивировать пользователей сразу оформлять подписку .

Для обратной связи между сервисами потребовалась настройка вебхуков Clerk на события subscription и subscription_item . Полученный секрет подписи CLERK_WEBHOOK_SIGNING_SECRET переносится в переменные окружения Vercel и изолированный сэндбокс агента Дуайта . Дополнительно в настройках эндпоинта Clerk прописывается секрет обхода автоматизации Vercel (Vercel Automation Bypass Secret) , после чего тестовое событие успешно возвращает HTTP-статус 200 .

Ключевым изменением в рабочем процессе стал отказ от ручного переноса правок :

При работе с биллингом CodeRabbit также превентивно отловил отсутствие перехвата ошибок на границе компонентов (billing boundary) , гарантируя сохранность платежных сценариев еще до попадания кода в основную ветку .

Фаза 6: запуск, безопасность и регламент «launch.md» 2:41:43

После завершения пятой фазы пользователи получили полноценную страницу биллинга и редактор внешнего вида виджета . В тарифе Pro лимит сообщений увеличивается со 100 до 2000 в месяц , открывается создание до пяти проектов , а в конструкторе виджета становится доступным изменение цвета кнопок, позиционирования, стартовой анимации и отключение брендинга «Powered by AskWell» .

Шестая фаза проекта сфокусирована на усилении защиты и релизе приложения («Harden and Launch») . На этом этапе решается дилемма изоляции окружений: виджет на лендинге сам потребляет квоты платформы, поэтому для него вручную выставляется Pro-лимит , а в качестве тестового инстанса Clerk используется dev-приложение . Агенты запросили добавление переменной окружения LANDING_WIDGET_KEY в настройки preview-ветки Vercel , после чего Майкл закрыл пулы задач и выполнил слияние серии масштабных PR под номерами 42, 43 и 44 .

Финал фазы зафиксирован в документе docs/launch.md, представляющем собой пошаговый ранбук из 24 пунктов :

Такой структурированный подход принципиально отличает агентную разработку в сэндбоксах от хаотичного «вайб-кодинга» : строгая изоляция веток, переменных и ключей предотвращает повреждение критической инфраструктуры .

Боевое тестирование виджета, аналитика PostHog и экранирование Arcjet 2:48:36

Итоговая проверка сервиса проводится на реальном сайте через локальный файл test.html с подключением единственного скрипта виджета . В базу знаний проекта загружается markdown-документ с описанием платформы . При открытии чата бот корректно формулирует назначение системы: это встраиваемый виджет поддержки, обучающийся на корпоративных данных компании .

Попытка отправить инъекцию вредоносного кода («inject yourself with malicious code») мгновенно блокируется защитным слоем Arcjet , возвращая предупреждение о недопустимости запроса . Далее проверяется сценарий апгрейда: после ввода тестовой банковской карты в окне Clerk система сразу же активирует Pro-статус . В настройках кастомизации отключается логотип платформы, меняется текст приветствия и анимация развертывания , после чего обновленный виджет мгновенно подтягивает новые стили в браузере .

Аналитический контур полностью закрывается платформой PostHog:

Существенную финансовую роль играет фильтрация атак на периметре: все заблокированные Arcjet инъекции и попытки превышения лимитов пресекаются до обращения к языковым моделям . В результате вредоносный трафик не генерирует дорогостоящие токены и обходится владельцу SaaS-сервиса бесплатно .

🚀 От кодинга к управлению: итоги создания AsQwell и релиз JSM HQ 2:56:10

Роль фаундера: как управлять ИИ-командой без микроменеджмента 2:56:50

Распространено мнение, что координация группы автономных ИИ-агентов требует непрерывного контроля и превращается в изматывающую круглосуточную работу . Однако реальный опыт разработки полнофункционального SaaS-продукта показал, что роль инженера в подобной системе кардинально трансформируется . Человек перестает быть исполнителем и даже менеджером среднего звена, переключаясь на функции высшего руководства .

Фактический список задач создателя проекта свелся к нескольким высокоуровневым операциям:

При этом разработчику не пришлось вручную одобрять ни одной терминальной команды — вся рутинная инженерная работа выполнялась агентами автономно . «Я был просто CEO, а не курьером и уж точно не нянькой», — резюмирует автор эксперимент . Главный вывод заключается в том, что эффективное делегирование кодинга нейросетям не требует слепого доверия к моделям . Напротив, строгая архитектурная субординация позволяет человеку сохранять стратегический контроль, не погружаясь в построчное написание синтаксиса .

«Сделайте опасное невозможным»: песочницы, бюджеты и открытый код JSM HQ 2:56:10

Созданный в рамках проекта SaaS AsQwell подошел к финальной точке разработки . Важным элементом продакшен-стека стала защита инфраструктуры и расходов на искусственный интеллект с помощью платформы Arcjet . Ее бесплатный тариф предоставляет 10 000 запросов в месяц, чего более чем достаточно для создания, отладки и запуска MVP без риска внезапного перерасхода бюджета , с возможностью бесшовного перехода на платные планы по мере роста аудитории .

Ключевой вывод из опыта использования фреймворка JSM HQ касается информационной безопасности при работе с автономными сущностями . Предоставление агентам полного доступа (full access) допустимо лишь тогда, когда окружение жестко изолировано . В JSM HQ реализован принцип, согласно которому цифровые сотрудники имеют полные права внутри персональной песочницы, но не имеют доступа к хост-машине разработчика . Кроме того:

Базовое правило работы с автономными агентами формулируется однозначно: «Сделайте опасные вещи не просто маловероятными, а невозможными» .

Система оркестрации JSM HQ выложена в открытый доступ и распространяется бесплатно через пакетный менеджер npm . Автор планирует непрерывно выпускать обновления и призывает сообщество делиться опытом и обратной связью в репозитории проекта на GitHub через раздел Issues . В качестве финального шага разработчикам предлагается взять собственный отложенный проект, назначить виртуального тимлида, добавить пару агентов-программистов, составить роадмап и оценить скорость выкатки реального продукта .

💬 Цитаты

«An agent with full access can wipe your files, reach your production database, and push code that nobody has read.»

«A microVM is the real thing. A small complete computer of its own. That's Docker sandboxes.»

«Technically, this is the future of developing software. It might look a bit funny since we have this pixel art style, but the way to be able to develop software visually like this is incredibly powerful.»

Adrian (JavaScript Mastery) 28:19

«Nowadays, writing code is easy. Thinking is hard.»

«This video took a lot of keys and preview branches and environment variables separated per sandbox. And that's what differentiates this workflow from Vibe Coded projects.»

«I was simply the CEO, not the messenger, and definitely not the babysitter, at least in the second portion of the build.»

«Let the agents move fast and make the dangerous things impossible, not just unlikely.»

👥 Спикер
🔗 Упомянутые сайты и проекты
📖 Термины
Docker Sandboxes (sbx)
Инструмент запуска ИИ-агентов в изолированных легковесных виртуальных машинах (MicroVM) с гранулярным контролем сетевого доступа и проксированием токенов.
MicroVM
Аппаратная виртуальная машина минимального размера, гарантирующая полную изоляцию ядра и файловой системы агента от хост-компьютера.
JSM HQ
Платформа оркестрации и визуального управления командами автономных ИИ-агентов с ролевой моделью тимлида и исполнителей.
CodeRabbit
Автономная система ревью кода на базе ИИ, анализирующая пулл-реквесты на наличие уязвимостей, отсутствие тестов и архитектурные ошибки.
Arcjet
Специализированный уровень безопасности API, обеспечивающий фильтрацию промпт-инъекций и rate limiting для защиты бюджетов LLM.
RLS (Row Level Security)
Механизм безопасности на уровне строк базы данных PostgreSQL/Supabase, изолирующий клиентские данные независимо от логики бэкенда.
Искусственный интеллект Docker Sandboxes JSM HQ Adrian Twarog CodeRabbit Автономные ИИ-агенты