Gemini CLI Subagents. Часть 2

Что такое субагенты?
Субагенты - специализированные агенты-эксперты, работающие параллельно с основной сессией. Главный агент выступает оркестратором: делегирует сложные, объемные задачи нужному агенту, сохраняя основной контекст чистым и быстрым.
| Уровень | Компонент | Роль | Контекст |
|---|---|---|---|
| Главный агент | Gemini CLI (основная сессия, где мы вызывали в консоле gemini) | Оркестратор: принимает решения, делегирует, собирает результаты | Общий, накопительный |
| Субагент | Специалист (generalist, codebase_navigator и др.) | Исполнитель: выполняет изолированную задачу, возвращает резюме | Изолированный, свежий |
Ключевые преимущества
- Изолированный контекст - каждый субагент имеет собственное окно контекста, что предотвращает «загрязнение» основной сессии промежуточными шагами.
- Специализированные инструменты - каждый субагент получает только нужный набор tools, MCP-серверов и системных инструкций.
- Компактные результаты - сотни вызовов инструментов внутри субагента возвращаются главному агенту одним сжатым ответом.
- Параллельное выполнение - несколько субагентов или экземпляров одного агента работают одновременно, существенно сокращая общее время задачи.
Встроенные субагенты
Gemini CLI поставляется с четырьмя встроенными субагентами. Три из них активны по умолчанию. Давайте их рассмотрим:
| Субагент | Назначение | Когда использовать | Статус |
|---|---|---|---|
| generalist | Универсальный агент, наследует все инструменты и настройки главного агента. Копия основного агента в изолированном контексте. | Многофайловые рефакторинги, команды с большим выводом, действие-ориентированные исследования | Включен |
| cli-help | Эксперт по самому Gemini CLI: команды, конфигурация, документация. Имеет прямой доступ к документам проекта. | "Как настроить прокси?", "Что делает команда /rewind?" | Включен |
| codebase-investigator | Специалист по анализу кодовой базы: архитектурное картирование, поиск первопричин багов, анализ системных зависимостей. | "Как работает система авторизации?", "Нарисуй граф зависимостей класса X." | Включен |
| browser-agent | Автоматизация браузера через accessibility tree: навигация, заполнение форм, клики, извлечение данных. Использует Chrome DevTools MCP. | "Перейди на example.com и заполни контактную форму", "Извлеки таблицу цен с этой страницы" | Отключено |
Синтаксис @agent и команда /agents
Gemini CLI автоматически направляет задачу к наиболее подходящему субагенту, анализируя описание задачи и описание зарегистрированных агентов, вмешательство пользователя не требуется.
Но используя символ @ перед именем субагента, можно явно указать исполнителя CLI, добавив системную заметку, которая немедленно активирует нужный субагент. Рассмотрим примеры:
@codebase_investigatorпострой путь авторизации - задача отправляетсяcodebase_investigator, после выполнения главный агент получает сжатый отчет@frontend-specialistсделай ревью кода и посмотри какие улучшения можно сделать - кастомный субагент, который анализирует UI, возвращает только стратегические рекомендации главному агенту.
Давайте теперь рассмотрим команду /agents. Эту команду мы можем запускать внутри сессии, чтобы посмотреть все зарегистрированные субагенты - встроенные и пользовательские. Здесь же можно включать, отключать и переконфигурировать агентов на лету без редактирования файлов.
/agents- открыть интерактивный список всех субагентов сессии.@<имя агента> <задача>- явно делегировать задачу указанному субагенту.agents (disable)- отключить конкретный субагент в текущей сессии.
Конфигурация в settings.json
В файле settings.json можно управлять глобальными настройками агентов. Основные параметры агентов:
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
| enableAgents | boolean | true | Глобальное включение/отключение всех субагентов |
| agents.overrides | object | - | Переопределение конфигурации конкретного агента (модель, max_turns и др.) |
| modelConfigs.overrides | object | - | Целевые настройки модели для субагентов (overrideScope) |
| skills.enabled | boolean | true | Включение Agent Skills |
Примеры конфигурации:
// Отключить все субагенты
{ "enableAgents": false }
// Включить browser_agent
{
"agents": {
"overrides": {
"browser_agent": { "enabled": true }
}
}
}
// Переопределить модель для codebase_investigator
{
"agents": {
"overrides": {
"codebase_investigator": {
"model": "gemini-3.1-flash",
"max_turns": 50
}
}
}
}
Параллельное выполнение
Gemini CLI поддерживает запуск нескольких субагентов или нескольких экземпляров одного субагента одновременно. Это кардинально сокращает время выполнения сложных многокомпонентных задач.
Как запустить параллельное выполнение? Все очень прост - есть несколько способов:
- явный запрос "Запусти frontend-specialist для каждого компонента параллельно".
- Описание задачи с несколькими независимыми компонентами автоматически инициирует параллельный запуск агентов
Но стоит обратить внимание - параллельные агенты, редактирующие один и тот же файл, могут перезаписывать изменения друг друга. Используйте параллелизм для задач с четкими и не пересекающимися зонами ответственности. Также стоит заметить, что параллельный запуск агентов быстрее исчерпывает лимиты запросов API, так как запросы отправляются одновременно.
Создание кастомных субагентов
Для создания субагентов необходимо создать md-файл с yaml-заголовком. Расположить их можно в разных местах:
- Пользователь
~/.gemini/agents/*.md- все проекты пользователя, личные workflow-агенты. - Проект
.gemini/agents/*.md- текущий репозиторий - Расширение
/agents/*.md- конкретное расширение CLI.
Формат файла очень просто, но нужно корректно его заполнить, иначе Gemini не сможет прочесть информацию о субагенте.
--- (пример: .gemini/agents/frontend-specialist.md)
name: frontend-specialist
description: Frontend specialist in building high-performance,
accessible, and scalable web applications.
tools:
- read_file
- grep_search
- glob
- list_directory
- web_fetch
- google_web_search
model: inherit # наследует модель главного агента
temperature: 0.7 # опционально, 0.0-2.0
max_turns: 30 # макс. ходов, по умолчанию 30
timeout_mins: 10 # макс. время выполнения (мин)
---
You are a Senior Frontend Specialist and UI/UX Architect.
Your role is strictly to analyze, report areas of improvement,
and make strategic suggestions. Do not fix it yourself.
Обязательные поля - это name и description.
Совет. Чтобы субагент стал доступным сразу, достаточно создать .md-файл в нужной папке. Перезапуск CLI не нужен - агентный реестр обновляется автоматически.
Советы и ограничения
Рекомендации:
- Держите главного агента сфокусированным на общей цели и принятии решений - не поручайте ему тяжёлую исполнительную работу.
- Используйте
@agent syntaxдля предсказуемого поведения - не полагайтесь только на автомаршрутизацию. - Для задач с большим объёмом вывода (тесты, команды) всегда используйте
@generalist. - Храните командные субагенты в .gemini/agents/ репозитория - они попадают в git и доступны всей команде.
- Для лёгких задач укажите модель flash в YAML, чтобы экономить квоту.
- Ограничивайте инструменты субагента только нужными - это повышает надёжность и снижает риск нежелательных действий.
- Используйте tools: [read_file, grep_search] для агентов-аналитиков, чтобы запретить им вносить изменения.
- Расположение
~/.gemini/agents/позволяет использовать личных агентов во всех проектах.
Известные ограничения:
- Параллельные агенты, редактирующие один файл, могут вызвать конфликты - разграничивайте зоны ответственности.
- Параллельное выполнение умножает расход API-квоты (N агентов = N параллельных потоков).
- Субагенты не могут создавать собственных субагентов - только главный агент является оркестратором.
- browser_agent требует Chrome 144+ и является экспериментальным - возможны нестабильности.
- Каждый субагент имеет лимит max_turns (по умолчанию 30) и timeout_mins (по умолчанию 10 мин).
- Агентный реестр загружается при старте сессии - файлы агентов, добавленные во время сессии, могут потребовать перезапуска.
Создание браузерной игры с Gemini CLI + Subagents
Давайте после огромной теории перейдем к практике. Gemini CLI позволяет оркестрировать команду специализированных AI-агентов для сложных задач - каждый субагент работает в изолированном контекстном окне и получает только нужные инструменты. Это идеальный проект для обучения, потому что игра требует работы с несколькими специализациями: дизайн, логика, тестирование, безопасность.
Что будем делать - изометрическая 2D-ферма на HTML5 Canvas с системами:
- Посадка/полив/сбор урожая (пшеница, морковь, кукуруза, томаты).
- Животные (курица → яйца, корова → молоко, овца → шерсть).
- Магазин: продажа урожая, покупка семян/животных.
- Погода и время суток, влияющие на рост.
- Инвентарь и деньги игрока.
Шаг 1 - Структура проекта
Создадим директорию, где у нас будет располагаться наш код.
mkdir pixel-farm && cd pixel-farm
Структура нашего проекта будет выглядеть следующим образом.
pixel-farm/
├── GEMINI.md
├── index.html
├── game.js
├── style.css
└── .gemini/
├── settings.json
└── agents/
├── world_builder.md
├── game_mechanics.md
├── ui_designer.md
├── economy_designer.md
└── qa_tester.md
Шаг 2 - GEMINI.md (контекст проекта)
Заполним контекст проекта - добавим описание нашей игры, какой стек мы будем использовать, ограничения среды, архитектуру и definition of done - что мы должны получить в итоге. Это системный промпт для всего проекта.
# Pixel Farm — Браузерная игра-ферма
## Описание
Изометрическая 2D-ферма на HTML5 Canvas. Игрок управляет фермой:
сажает культуры, поливает, собирает урожай, продаёт в магазине,
покупает животных, ухаживает за ними, собирает ресурсы.
## Стек технологий
- Чистый HTML5 Canvas (без фреймворков)
- Vanilla JavaScript ES6+
- CSS3 с custom properties
- requestAnimationFrame game loop
## Ограничения среды
- Только статические файлы (index.html + style.css + game.js)
- NO localStorage / sessionStorage — только in-memory состояние
- NO alert / confirm / prompt — только HTML UI оверлеи
- Все внешние шрифты через Google Fonts CDN
## Архитектура игры
### Игровой мир
- Изометрическая сетка 12×10 клеток
- Тайл-система: пустая земля / вспаханная грядка / засаженная / спелая
- Система времени: день/ночь (1 игровой день = 60 секунд реального времени)
- Погода: солнечно (рост ×1) / облачно (рост ×0.8) / дождь (рост ×1.5, не нужен полив)
### Культуры
- Пшеница: рост 2 мин, цена продажи 5 монет, семена 2 монеты
- Морковь: рост 3 мин, цена 10 монет, семена 3 монеты
- Кукуруза: рост 5 мин, цена 20 монет, семена 7 монет
- Томаты: рост 8 мин, цена 35 монет, семена 12 монет
### Животные
- Курица: даёт яйцо каждые 2 мин, покупка 50 монет
- Корова: даёт молоко каждые 5 мин, покупка 150 монет
- Овца: даёт шерсть каждые 7 мин, покупка 120 монет
### Инвентарь и магазин
- Инвентарь: слоты для каждого типа ресурса + количество
- Магазин: вкладки "Продать" и "Купить"
## Стиль визуала
- Пиксель-арт стиль (ImageSmoothingEnabled = false)
- Тёплая цветовая палитра: зелёный (#4a7c59), коричневый (#8b5e3c), небесный (#87ceeb)
- Изометрические тайлы рисуются через Canvas API (ромбы, не прямоугольники)
- Акцентный цвет для UI: #f4a261 (оранжевый)
## Управление
- Левый клик: выбрать клетку / применить активный инструмент
- Правый клик: убрать посев (если не спелый)
- Колесо мыши / пинч: зум (масштаб 0.5 - 2.0)
- Перетаскивание ПКМ: панорама камеры
- UI кнопки: выбор инструмента, открытие магазина, инвентаря
## Definition of Done
- [ ] Можно вспахать, засеять, полить, собрать урожай для всех 4 культур
- [ ] Можно купить животных, кликать по ним для сбора ресурсов
- [ ] Магазин открывается, работают продажа и покупка
- [ ] Инвентарь обновляется в реальном времени
- [ ] День/ночь цикл виден (изменение цвета неба, освещения)
- [ ] Погода меняется раз в 3 минуты, влияет на рост
- [ ] Начальный капитал: 200 монет, 5 пшеничных семян
И добавим настройки в settings.json - включаем browser_agent (по умолчанию выключен) и задаём параметры субагентов:
{
"agents": {
"overrides": {
"browser_agent": {
"enabled": true
},
"codebase_investigator": {
"enabled": true
}
},
"browser": {
"sessionMode": "isolated",
"headless": false,
"maxActionsPerTask": 120,
"confirmSensitiveActions": false
}
},
"model": "gemini-3.1-pro",
"sandbox": false,
"autoAccept": false
}
Шаг 3 - Создание субагентов
Переходим к самому интересному. На этом шаге мы создадим субагенто, которые будут отвечать за разный функционал и т.д. Каждый субагент - это .md файл с YAML frontmatter. Тело файла становится системным промптом агента.
- World Builder - субагент который будет отвечать за отрисовку игрового мира он должен вызываться для всех задач отрисовки.
- Game mechanics - отвечает за логику игры и ее механизмы.
- UI Designer - занимается отрисовкой интерфейса
- Economy Designer - отвечает за экономику игры
- QA Tester - специалист по тестированию, будет тестировать игровой цикл в браузере.
Рассмотрим содержание каждого агента. Обратите внимание на то, что у каждого агента разные модели - где-то можно использовать простую flash, а где-то уже нужна pro, temperature и max_turns.
Агент 1 - World Builder - .gemini/agents/world_builder.md
---
name: world_builder
description: >
Специалист по рисованию игрового мира на HTML5 Canvas. Вызывай этого агента
для всех задач отрисовки: изометрическая сетка, тайлы земли, деревья,
здания фермы, анимации растений, эффект дня/ночи, погодные эффекты (дождь,
облака). Примеры: "нарисуй изометрическую сетку 12x10", "добавь анимацию дождя",
"реализуй смену освещения день/ночь через Canvas overlay".
kind: local
tools:
- read_file
- write_file
model: gemini-3.1-pro
temperature: 0.3
max_turns: 25
---
Ты — ведущий разработчик графики HTML5 Canvas игр, специализирующийся
на изометрических 2D-фермах в пиксель-арт стиле.
Твои обязанности:
1. Рисовать изометрическую сетку (ромбы, не прямоугольники) через Canvas 2D API
2. Реализовывать систему тайлов: пустая земля / вспаханная / засаженная / спелая
3. Рисовать культуры на разных стадиях роста (4 стадии: росток, молодой, взрослый, спелый)
4. Рисовать животных (курица, корова, овца) как пиксель-арт фигуры через ctx.fillRect
5. Реализовывать эффект дня/ночи: накладной полупрозрачный overlay меняет цвет от
rgba(255,200,50,0) днём до rgba(0,0,40,0.6) ночью
6. Анимацию дождя: массив капель со случайными координатами, падают сверху вниз
7. Отрисовку зданий фермы: сарай, курятник, загон — простые изометрические формы
Правила рисования изометрии:
- Центр тайла (col, row) → экранные координаты:
screenX = offsetX + (col - row) * (TILE_W / 2)
screenY = offsetY + (col + row) * (TILE_H / 2)
- TILE_W = 64, TILE_H = 32 (соотношение 2:1 для изометрии)
- Сортировка отрисовки по (col + row) для правильного перекрытия
Технические правила:
- ctx.imageSmoothingEnabled = false всегда
- Все цвета берутся из CSS custom properties через getComputedStyle
- Не используй внешние изображения — только Canvas 2D API (fillRect, arc, путь bezierCurve)
- Каждая функция рисования принимает (ctx, x, y, options) и ничего не возвращает
Пиши полный, рабочий код без заглушек и TODO.
Агент 2 - Game mechanics - .gemini/agents/game_mechanics.md
---
name: game_mechanics
description: >
Специалист по игровой логике и механикам. Вызывай для: системы роста культур,
системы животных и производства ресурсов, инструментов (лопата, лейка, серп,
руки), системы времени и погоды, game loop, обработки кликов по тайлам,
state machine игрока. Примеры: "реализуй систему роста культур с учётом полива
и погоды", "добавь инструмент лейка — полив замедляет засыхание", "сделай так,
чтобы животные давали ресурсы по таймеру".
kind: local
tools:
- read_file
- write_file
- run_shell_command
model: gemini-3.1-pro
temperature: 0.2
max_turns: 30
---
Ты — ведущий разработчик игровой логики, специализирующийся на
farm simulation играх (Stardew Valley, Harvest Moon стиль).
Твои обязанности:
### Система культур
- Каждая клетка: { state: 'empty'|'tilled'|'planted'|'watered'|'ready', crop: null|CropType, growthTimer: 0, growthRequired: seconds, watered: boolean }
- Рост только при watered=true ИЛИ погода=rain
- Каждый tick (1 игровая секунда): growthTimer += dt * weatherMultiplier * (watered ? 1 : 0)
- Если growthTimer >= growthRequired → state = 'ready'
- Полив сбрасывается каждый игровой день (не каждый реальный тик)
### Система животных
- Каждое животное: { type, x, y, productTimer: 0, productInterval: seconds, hasProduct: boolean, happiness: 100 }
- productTimer увеличивается каждый тик
- Если productTimer >= productInterval → hasProduct = true (иконка сбора появляется)
- Клик на животное с hasProduct=true → добавить ресурс в инвентарь, сбросить таймер
### Инструменты
- 🪓 Лопата (hoe): вспахать пустую клетку → tilled
- 🌱 Посев (seed): засадить tilled клетку выбранными семенами → planted
- 💧 Лейка (watering_can): полить planted/watered клетку → watered = true
- 🌾 Серп (sickle): собрать ready клетку → добавить в инвентарь, клетка → tilled
- 👋 Руки (hands): взаимодействовать с животными
### Время и погода
- Игровой день = 60 реальных секунд
- Время суток: hour = (realTime / 60) * 24 → от 0 до 23
- Рабочее время: 6:00 - 22:00
- Погода меняется каждые 3 минуты реального времени:
вероятности: sunny=50%, cloudy=30%, rainy=20%
weatherMultiplier: sunny=1.0, cloudy=0.8, rainy=1.5
### GameState объект
```javascript
const GameState = {
money: 200,
day: 1,
hour: 8,
weather: 'sunny',
tool: 'hoe',
selectedSeed: 'wheat',
inventory: { wheat: 0, carrot: 0, corn: 0, tomato: 0, egg: 0, milk: 0, wool: 0 },
seeds: { wheat: 5, carrot: 0, corn: 0, tomato: 0 },
grid: [], // 12x10 массив клеток
animals: [],
camera: { x: 0, y: 0, zoom: 1.0 }
};
Правила кода:
- ES6+, только const/let, стрелочные функции
- Весь state в GameState, никаких глобальных переменных
- update(dt) и render(ctx) чётко разделены
- Комментарии только на русском
Пиши полный рабочий код, без заглушек.
Агент 3 - UI Designer - .gemini/agents/ui_designer.md
---
name: ui_designer
description: >
Специалист по интерфейсу игровой фермы. Вызывай для: панели инструментов,
окна магазина (покупка/продажа), окна инвентаря, HUD с деньгами/временем/погодой,
тултипов на тайлах, уведомлений о сборе ресурсов, кнопки паузы, туториала.
Примеры: "создай панель инструментов с 5 иконками снизу экрана",
"сделай модальное окно магазина с вкладками Купить/Продать",
"добавь всплывающий тултип при наведении на клетку с информацией о росте".
kind: local
tools:
- read_file
- write_file
model: gemini-3.1-pro
temperature: 0.5
max_turns: 20
---
Ты — ведущий UI/UX дизайнер браузерных игр, специализирующийся на
farm simulation интерфейсах.
Твои компоненты:
### 1. HUD (всегда виден)
- Левый верхний угол: деньги 💰, день, время (12-часовой формат), погода (emoji)
- Правый верхний угол: кнопка магазина 🏪, кнопка инвентаря 🎒, кнопка паузы ⏸
- Нижняя панель: 5 инструментов в горячей панели, выбранное семя
### 2. Магазин (модальное окно)
- Тёмный backdrop blur overlay
- Две вкладки: "Купить семена" и "Продать урожай"
- Купить: карточки семян с иконкой, названием, ценой, кнопкой +1/-1/+10
- Продать: список ресурсов с количеством в инвентаре, ценой за единицу, кнопкой "Продать всё"
- Кнопка закрытия ×
### 3. Инвентарь (модальное окно)
- Сетка слотов (3×4): иконка ресурса, название, количество
- Подсвечивать непустые слоты
### 4. Тултип тайла
- Появляется при наведении на засеянную клетку
- Показывает: культура, стадия роста (прогресс-бар), нужен полив (да/нет)
### 5. Уведомления
- Всплывают в правом нижнем углу
- "+5 Пшеница собрана!" с иконкой и зелёным фоном
- Анимация: появление снизу, исчезновение через 2 секунды
### CSS правила
Используй CSS custom properties:
```css
:root {
--color-bg: #2d5016;
--color-surface: rgba(20, 12, 5, 0.88);
--color-border: rgba(244, 162, 97, 0.35);
--color-accent: #f4a261;
--color-text: #fef3e2;
--color-text-muted: #c9a97a;
--color-money: #ffd700;
--color-success: #52b788;
--font-body: 'Press Start 2P', monospace;
--font-ui: 'Inter', sans-serif;
}
Все модальные окна: backdrop-filter: blur(4px), border-radius: 12px,
border: 1px solid var(--color-border).
Кнопки: solid background с var(--color-accent), hover: brightness(1.15),
active: scale(0.96). Никаких градиентных кнопок.
Пиши полный HTML + CSS + JS код. Без заглушек.
Агент 4 - Economy Designer - .gemini/agents/economy_designer.md
---
name: economy_designer
description: >
Специалист по экономической системе и балансу фермы. Вызывай для:
расчёта цен и баланса (не слишком лёгкий / не слишком сложный старт),
системы достижений и разблокировок, прогрессии игрока (уровни фермы),
ивентов (рыночные колебания цен), системы рецептов (комбинировать ресурсы).
Примеры: "рассчитай баланс так, чтобы первый животный можно было купить
через 10 минут игры", "добавь ежедневные квесты с наградами",
"реализуй случайные рыночные события раз в 5 минут".
kind: local
tools:
- read_file
- write_file
model: gemini-3.1-flash
temperature: 0.4
max_turns: 15
---
Ты — ведущий геймдизайнер экономических систем, специализирующийся
на балансировке farm simulation игр.
Твои задачи:
### Таблица цен и баланс
Первая курица (50 монет) должна быть достижима за ~8-10 минут:
- 5 пшеничных грядок × 5 монет × ~3 урожая за 6 мин = ~75 монет
- Итого: через 6-8 мин у игрока должно быть 50+ монет
### Система прогрессии (уровни фермы)
- Уровень 1 (старт): 12 грядок, 1 животное-слот
- Уровень 2 (200 монет): +6 грядок, +1 животное-слот
- Уровень 3 (500 монет): +6 грядок, +2 животное-слота, открывается томат
- Уровень 4 (1500 монет): амбар (x2 к вместимости инвентаря), открывается кукуруза
### Ежедневные квесты (меняются каждый игровой день)
Один квест из пула:
- "Собери 10 единиц пшеницы" → награда 25 монет
- "Накорми 3 животных" → награда 40 монет
- "Продай на 50 монет за день" → награда 30 монет
- "Посади 5 новых грядок" → награда 20 монет
### Рыночные события (каждые 5 реальных минут)
Случайный ивент из списка:
- "Высокий спрос на морковь!" — цена продажи ×1.5 на 2 мин
- "Ярмарка семян" — цена семян -30% на 2 мин
- "Неурожай у соседей" — все цены продажи +20% на 3 мин
- "Дождь закончился" — без изменений (просто уведомление)
Пиши полный JS-код балансировки. Все числа обоснованы расчётом.
Агент 5 - QA Tester - .gemini/agents/qa_tester.md
---
name: qa_tester
description: >
Автоматический QA-тестировщик браузерной фермы. Вызывай для полного
тестирования игрового цикла в браузере: открыть игру, проверить все механики
(посев, полив, сбор, магазин, животные), сделать скриншоты каждого экрана,
задокументировать баги с точным описанием. Пример: "@qa_tester проведи
полное регрессионное тестирование всех игровых механик и сохрани скриншоты".
kind: local
tools:
- read_file
- write_file
model: gemini-3.1-flash
temperature: 0.1
max_turns: 40
---
Ты — старший QA-инженер специализирующийся на farm simulation играх.
## Протокол тестирования (выполнять в этом порядке):
### Блок 1: Начальный экран
1. Открыть index.html
2. Скриншот → ./qa/01_initial.png
3. Проверить: HUD виден, деньги=200, день=1, есть изометрическая сетка
### Блок 2: Механика земледелия
4. Выбрать инструмент "Лопата"
5. Кликнуть на 3 клетки — должны вспахаться (цвет должен измениться)
6. Скриншот → ./qa/02_tilled.png
7. Выбрать "Посев", кликнуть на вспаханную клетку
8. Скриншот → ./qa/03_planted.png
9. Выбрать "Лейка", полить посеянную клетку
10. Скриншот → ./qa/04_watered.png
11. Проверить через render_game_to_text: у клетки watered=true
### Блок 3: Магазин
12. Кликнуть кнопку магазина
13. Скриншот → ./qa/05_shop.png
14. Перейти на вкладку "Продать" — проверить наличие списка
15. Перейти на "Купить семена" — проверить карточки
16. Закрыть магазин
### Блок 4: Животные
17. В магазине купить курицу (если денег достаточно) ИЛИ проверить наличие в загоне
18. Скриншот → ./qa/06_animals.png
19. Проверить через render_game_to_text: animal.hasProduct меняется со временем
### Блок 5: Время и погода
20. Проверить через advanceTime(30000): день/ночь overlay меняется
21. Скриншот ночного режима → ./qa/07_night.png
22. Проверить смену погоды
### Блок 6: Мобильная версия
23. Изменить viewport на 375px
24. Скриншот → ./qa/08_mobile.png
25. Проверить: панель инструментов видна, кнопки нажимаемы (минимум 44px)
## Формат отчёта:
- ✅ ПРОЙДЕНО / ❌ ПРОВАЛЕНО / ⚠️ ЗАМЕЧАНИЕ
- Для каждого блока: результат + имя скриншота + описание проблемы (если есть)
- В конце: ИТОГО пройдено X/Y тестов, топ-3 критических бага
Шаг 4
После того как все агенты созданы, можно переходить к оркестрации и запуску самого Gemini.
Запуск
cd pixel-farm
gemini
Первый промпт - инициализация проекта
/plan
Создай базовую структуру браузерной фермы согласно GEMINI.md.
Создай файлы index.html, style.css, game.js.
В index.html подключи шрифт 'Press Start 2P' и 'Inter' из Google Fonts,
холст canvas на весь экран, и все CSS переменные для цветовой схемы фермы.
В game.js создай GameState объект и пустой game loop через requestAnimationFrame.
Убедись, что игра открывается в браузере без ошибок в консоли.
Здесь мы используем команду /plan, которая включает режим планирования перед большой задачей
Промпт 2 - делегируем мир агенту
@world_builder Прочитай текущий game.js и реализуй:
1. Функцию drawIsometricGrid(ctx, grid, camera) — рисует 12x10 изометрическую сетку
с тайлами земли (пустая / вспаханная / засеянная / спелая)
2. Функции drawCrop(ctx, x, y, cropType, stage) для всех 4 культур (4 стадии роста)
3. Функции drawAnimal(ctx, x, y, type, hasProduct) для курицы, коровы, овцы
4. Функцию drawDayNightOverlay(ctx, hour) — полупрозрачный overlay меняет цвет
от прозрачного днём до тёмно-синего rgba(0,0,40,0.6) в полночь
5. Функцию drawRainEffect(ctx, rainDrops) — анимация дождя
Запиши все функции в game.js, не удаляй существующий код.
Промпт 3 - механики фермы
@game_mechanics Прочитай текущий game.js и реализуй полную игровую логику:
1. Инициализацию GameState.grid (12x10 пустых клеток) в функции initGame()
2. Функцию update(dt) с полными системами:
- Рост культур (с учётом watered и погоды)
- Таймеры животных (производство яиц/молока/шерсти)
- Система времени: hour увеличивается, день меняется каждые 60 секунд
- Смена погоды каждые 180 секунд
3. Функцию handleTileClick(col, row) — применяет активный инструмент к клетке
4. Функцию handleAnimalClick(animal) — собирает ресурс если hasProduct=true
5. window.render_game_to_text() — возвращает JSON состояния для тестирования
6. window.advanceTime(ms) — детерминированный шаг времени для тестов
Интегрируй с существующим render loop.
Промпт 4 - UI магазина и инвентаря
@ui_designer Прочитай index.html и game.js, затем создай полный UI фермы:
1. HTML-разметку в index.html:
- div#hud: деньги, день, время, погода (левый верх), кнопки магазин/инвентарь/пауза (правый верх)
- div#toolbar: панель 5 инструментов снизу с горячими клавишами 1-5
- div#shop-modal: модальное окно магазина с двумя вкладками
- div#inventory-modal: модальное окно инвентаря
- div#notifications: контейнер для уведомлений
2. Полный CSS в style.css для всех компонентов
3. JavaScript функции в game.js:
- updateHUD() — обновляет деньги/время/погоду в реальном времени
- openShop() / closeShop() — открытие/закрытие магазина
- renderShopBuy() / renderShopSell() — наполнение магазина данными
- buySeeds(type, count) — покупка семян с проверкой денег
- sellResource(type) — продажа всех ресурсов типа
- showNotification(text, type) — анимированное уведомление
Промпт 5 - экономика и баланс
@economy_designer Прочитай GEMINI.md и текущий game.js.
Реализуй:
1. Систему прогрессии (4 уровня фермы) — функция checkLevelUp()
2. Ежедневные квесты — объект DailyQuest с generateQuest(), updateQuest(action), claimReward()
3. Рыночные события — массив MARKET_EVENTS, функция triggerMarketEvent() вызывается
каждые 5 минут реального времени, показывает уведомление через showNotification()
4. Проверь и скорректируй числа баланса в CROPS и ANIMALS объектах так,
чтобы первую курицу можно было купить за 8-10 минут игры при активной игре.
Добавь всё в game.js, не удаляя существующий код.
Промпт 6 - параллельное финальное тестирование
Запусти параллельно:
1. @qa_tester Открой index.html и выполни полный протокол тестирования
из 8 блоков. Создай папку ./qa/ и сохрани все скриншоты.
Составь итоговый отчёт.
2. Одновременно проверь game.js на наличие:
- Использования localStorage или sessionStorage (ЗАПРЕЩЕНО)
- Вызовов alert(), confirm(), prompt() (ЗАПРЕЩЕНО)
- Жёстко прописанных пиксельных значений вне CSS-переменных
- Утечек памяти: requestAnimationFrame без cancelAnimationFrame
Выведи список найденных проблем с номерами строк.
Промпт 7 - Исправление по отчету QA
Прочитай отчёт QA из последнего ответа и скриншоты в ./qa/.
Исправь все баги с пометкой ❌ ПРОВАЛЕНО.
После исправления каждого бага опиши что именно было сломано
и как ты это починил.
Особое внимание: если @qa_tester сообщил о проблемах с
изометрической сеткой или кликами по тайлам — исправь в первую очередь.
Промпт 8 - Финальная полировка
Выполни финальную полировку игры:
1. Добавь звуковые эффекты через Web Audio API (не файлы, а процедурные):
- Клик по земле (низкий удар): freq=80, duration=0.15, type='sine'
- Сбор урожая (приятный звон): freq=523, duration=0.2, type='triangle'
- Покупка в магазине (монетный звук): freq=880, duration=0.1, type='square'
- Уведомление (мягкий pip): freq=660, duration=0.08, type='sine'
2. Добавь анимацию сбора урожая: частицы летят вверх при клике серпом
(используй ParticlePool паттерн из архитектуры)
3. Добавь подсветку клетки при наведении: тайл под курсором подсвечивается
rgba(255,255,255,0.2)
4. Проверь что игра работает на мобильном: добавь touch события для
панели инструментов и клика по тайлу
Смотрим результат работы агентов:


Основную механику агенты сделали, дальше можно добавить пиксельные картинки, чтобы это выглядело всё красивее, а не выглядело набором голых пикселей, как сейчас. После базовой версии можно добавить дополнительные субагенты:
fisherman.md- система рыбалки (пруд, удочка, разные виды рыб).craft_system.md- рецепты крафта (молоко + пшеница = хлеб, цена × 3).npc_trader.md- NPC-торговцы приходят раз в день с уникальными предложениями.save_system.md- экспорт состояния в JSON и импорт через текстовое поле (обход запрета localStorage).
Финальный результат:


и мои 14 агентов, которые это сделали:
pixel-farm/.gemini/agents/
├── world_builder.md 🎨 Изометрия, тайлы, день/ночь
├── game_mechanics.md ⚙️ Логика культур, животных, времени
├── ui_designer.md 🖥️ HUD, магазин, инвентарь
├── economy_designer.md 💰 Баланс, квесты, рыночные ивенты
├── qa_tester.md 🧪 Браузерное тестирование
├── craft_system.md 🔨 Рецепты и верстак
├── npc_trader.md 🧔 Торговцы и диалоги
├── save_system.md 💾 Base64 + URL hash сохранение
├── audio_engineer.md 🔊 Процедурный звук
├── performance_optimizer.md ⚡ 60fps, offscreen canvas
├── content_expander.md 🎣 Рыбалка, шахта, сезоны
├── building_system.md 🏗️ Build Mode, постройки, снос
├── decoration_system.md 🌸 Декорации, Beauty Score
└── upgrade_system.md ⬆️ Тиры зданий, Tech Tree, достижения
Вывод
Субагенты меняют сам подход к работе с агентом: главный агент перестаёт быть «универсальным работником» и становится дирижёром, который распределяет работу между узкими специалистами - у каждого свой чистый контекст, свой набор инструментов и свой системный промпт.
Главное правило на практике: чем точнее описаны description и tools агента, тем предсказуемее автоматическая маршрутизация. А хорошо настроенная команда субагентов в .gemini/agents/ со временем превращается в полноценную проектную инфраструктуру, которую можно версионировать и развивать вместе с кодом.
Не забываем, что для коротких правок и линейных вопросов лишняя оркестрация только замедлит работу и съест квоту API.