Environment
Окружение Grok Build
Изолированный Linux-sandbox, в котором агент собирает и запускает приложение. Пользователь видит результат через live preview в веб-клиенте Grok — без shell, SSH и локальной установки.
- OS
- Linux (container)
- Runtime
- Node.js 22
- Workspace
- /workspace
- Preview
- 0.0.0.0:8080
- Deploy target
- Vercel (nitro preset)
- Язык UI стека
- TypeScript + React 19
Два мира
- Агент
- Пишет код, запускает команды, поднимает сервер, проверяет UI через Playwright
- Пользователь
- Общается в чате Grok и смотрит live preview — без доступа к sandbox
- Мост
- Preview-proxy находит сервер на :8080 и стримит UI в клиент
- Успех = приложение слушает 0.0.0.0:8080, реально рендерится, dev-сервер остаётся запущенным.
- Пользователю не нужны localhost, порты, npm install или скриншоты «с вашей стороны».
startup.sh и hibernate
- Файл
- /workspace/startup.sh — контракт revive
- Идемпотентность
- Если :8080 уже жив — exit 0; иначе поднять npm run dev
- Non-blocking
- Долгие процессы — в background, скрипт быстро возвращается
- Sandbox может уйти в hibernate и вернуться. Платформа снова запускает startup.sh.
- Агент обязан держать файл в синхроне со способом старта приложения.
Стек приложения
- Framework
- TanStack Start + Router + Query + Table
- UI
- React 19, Tailwind v4, Radix / shadcn-паттерны
- State / forms
- zustand, zod, react-hook-form
- Charts / UX
- recharts, sonner, cmdk, vaul, lucide
- Bundler
- Vite 8, nitro (только на build → Vercel)
- DB
- Neon Postgres или PGLite fallback
- Auth
- Better Auth + Grok broker (Google, X)
- 3D-движки (three, Phaser и т.п.) не предустановлены — ставятся npm при нужде (см. building-games / threejs).
- Deps в package.json + node_modules уже есть; npm install — только для новых пакетов.
Данные и auth
- DB dual-mode
- DATABASE_URL → Neon; иначе PGLite в preview
- Доступ
- getSql() из @/lib/db — только server / createServerFn
- Миграции
- migrations/*.sql — на deploy и в PGLite на старте
- Auth
- Opt-in: не для каждого лендинга; real OAuth в preview
- Per-user данные: authMiddleware + scope по context.userId. Никогда не доверять client-sent user id.
- VITE_AUTH_ENABLED=false отключает sign-in. .env агент не создаёт.
QA и качество
- Browser smoke
- Playwright + scripts/browser-smoke.mjs
- Скриншоты
- Только /workspace/screenshots/
- Mobile
- ~390×844, без горизонтального overflow
- Production
- npm run build + typecheck; проверить built output
- HTTP 200 недостаточно: страница должна иметь видимый контент и чистый console.
- Частый blank-deploy: MIME text/html на JS modules — битые asset paths.
Ограничения
- Можно
- npm install JS-пакетов, Playwright Chromium, pure browser
- Нельзя
- apt/yum, системные компиляторы, OS-level libs
- Сеть
- Есть для npm registry, web tools, Imagine
- Мультиплеер server
- Нет dedicated game server; P2P mesh — через skill
Команды npm
npm run devDev-сервер на 0.0.0.0:8080 (live preview)npm run buildProduction build + миграции (Vercel target)npm run typechecktsc --noEmitnpm run previewРаздать built output на :8080node scripts/browser-smoke.mjs …Скриншот + smoke загрузки страницы
Workflow агента
- 1
Триаж
Build-запрос / vague app / greeting / вопрос — не каждый message = scaffold.
- 2
Skills
Открыть design-ui для UI; building-games (+ controls, sprites/maps) для игр.
- 3
Реализация
Рабочий продукт, не wireframe. State, навигация, empty states.
- 4
startup.sh + dev
Поднять :8080, оставить процесс живым для preview.
- 5
Verify render
Browser: видимый контент + нет uncaught errors. Mobile viewport.
- 6
Production build
build/typecheck; убедиться, что built output тоже рендерится.
Связанные разделы
Окружение задаёт рамки; tools — действия; skills — как делать хорошо.