Отдал рой ИИ-агентов книге Джесси Шелла — и они поймали меня на вранье
Отдал рою ИИ-агентов книгу Джесси Шелла и реальный рекламный кейс — и рой поймал не баг игры, а дыру в самой методологии: нарисованную цифру, которая выходила наружу как настоящее рекламное обещание.
TL;DR
Я собрал open-source скилл, который прогоняет дизайн игры по линзам Джесси Шелла силами роя ИИ-субагентов — стадия за стадией, с проверкой после каждого шага. Проверил его не на учебном примере, а на реальном рекламном кейсе для CFO и CTO. На финише выяснилось, что «сэкономленная» цифра внутри игры была нарисованной, и чинить пришлось не игру, а сам инструмент.
Раздал агентам книгу и рекламный кейс
В начале лета у меня на столе лежали две вещи: книга Джесси Шелла «The Art of Game Design» и бриф на рекламную мини-игру для CFO и CTO — про то, как свести «зоопарк» корпоративных ИИ-подписок в один счёт. Я открыл Claude Code, скопировал обе вещи в контекст и запустил команду /design-game. Дальше вести диалог с методологией предстояло не мне, а десяти ИИ-субагентам.
Первые минуты я честно ждал вежливого театра: рой пролистает книгу по диагонали, накидает случайных вопросов и вернёт готовую игру с видом, будто там была настоящая экспертиза. Вместо этого первый же артефакт — карточка управляющей идеи нулевой стадии — вернулся встречным вопросом: в чём именно боль CFO, а не абстрактного игрока за монитором. Пришлось остановиться и подумать самому, прежде чем рой двинулся дальше.
Ставки тут были не абстрактные: это реальный рекламный бриф, а не выдуманный пример для статьи. Если рой соберёт красивую, но нечестную игру, платить за это доверием будет не агент, а тот, кто покажет её реальным CFO и CTO.
Я рассчитывал получить рабочую мини-игру. Получил ещё и урок о том, где именно золотой стандарт геймдизайна недооценивает рекламу.
Зачем вообще туда пошёл
Линзы Шелла — это близко к золотому стандарту методологии: в README у меня по памяти было написано «около сотни линз», а когда я построчно посчитал файлы в индексе — вышло ровно 91. Каждая линза — это набор фокус-вопросов, через которые смотришь на игру под одним конкретным углом. Прогнать полный дизайн через девяносто с лишним линз руками тяжело, и первую половину неизбежно забудешь к концу работы.
Тут сразу закрою вопрос, который иначе будет висеть до конца текста. Я не геймдизайнер. Предметную экспертизу в этой истории несут сами линзы Шелла — моя часть работы была в другом: собрать оркестрацию, которая проводит агентов через методологию по порядку, а не сборником случайных вопросов.
До автоматизации я честно попробовал прогнать несколько линз руками, на бумаге, просто чтобы понять, каково это. Хватило минут двадцати: к линзе номер восемь я уже забыл, что отвечал на пятую, и начал придумывать ответы, лишь бы двигаться дальше. Этот честный личный провал и убедил меня, что тут нужна не сила воли, а дисциплина процесса — то, что оркестрация умеет держать, а память человека к вечеру уже нет.
Это как раз то, что я умею — выстраивать Claude Code, субагентов, skills и MCP-серверы так, чтобы они держали дисциплину там, где человек теряет её к третьей линзе из девяноста одной. Дальше я и пошёл собирать не игру, а инструмент, который проектирует игры.
Что получилось (коротко про устройство)
Скилл называется schell-lens-deck, репозиторий публичный, лицензия MIT, работает в трёх ИИ-кодинг-инструментах — Claude Code, Cursor от версии 2.4 и Antigravity 2.0. Внутри — оркестратор и десять субагентов, и это не абстрактный числитель: у каждого своя узкая зона ответственности. gd-concept держит тетраду концепта, gd-mechanics и gd-balance спорят между собой про цифры, gd-experience следит за интерфейсом, gd-narrative можно пропустить для рекламной мини, gd-playtest гоняет зонды, gd-release собирает финальный пакет. Отдельно gd-prototyper и gd-builder вдвоём строят и запускают веб-зонды, а gd-keeper — тот самый ревизор, что перечитывает всё после каждой стадии. По восьми стадиям это выглядит так:
0 → Сердце опыта1 → Концепт2 → Механики3 → Баланс4 → Опыт и интерфейс5 → Нарратив (можно пропустить)6 → Плейтест7 → Релиз
Смотреть, как один субагент за другим кладёт в чат файл нового артефакта, было по-своему завораживающе — будто наблюдаешь конвейер, только вместо деталей передают контекст и решения предыдущей стадии.
Стержень держит управляющая идея — формулируется на нулевой стадии и живёт в шапке каждого артефакта. Всё, что её не усиливает, — кандидат на вырез, и это не метафора: это буквально пункт чек-листа у одного из субагентов.
Самая полезная деталь — правило петли. После КАЖДОЙ стадии отдельный субагент перечитывает все предыдущие артефакты и ищет дрейф от управляющей идеи или внутренние противоречия. Ответы на линзы копятся в живом журнале и могут подолгу висеть открытыми — это честнее, чем закрывать всё разом для галочки.
Правило петли — не абстракция, оно ловит реальные вещи. В журнале консистентности реального прогона накопилось четыре записи ревизии, включая финальный проход сразу по всем восьми стадиям. Одна из ловель была вообще не про баланс: на стадии опыта агент заметил пробел — нигде не прописано, как игрок узнаёт про свайп в портал. Это единственное действие в игре, которое не тап, и визуально на тап оно не похоже совсем. Туториала в брифе не было. Пришлось возвращаться и добавлять подсказку прямо в первый заход — реальный дизайн-вопрос, который я сам поймал бы в лучшем случае на живом плейтесте, а не за столом с брифом.
Для рискованных вопросов есть прото-зонды — одноразовые пробы под один конкретный вопрос, без привязанности к результату. Лестница форм простая: сначала таблица-симуляция, потом бумага или ASCII-прикидка. И только если нужно почувствовать руками — веб-прототип на TypeScript и Phaser, который агент сам собирает и гоняет через Playwright прямо в чате.
Смысл лестницы простой: чем дешевле способ ответить на рискованный вопрос, тем меньше жалко выбросить пробу, если гипотеза не подтвердится. Веб-прототип собирают только тогда, когда таблица и бумага уже не могут ответить на вопрос «а чувствуется ли это вообще».
Кто выбирает линзу и кто держит руль
Девяносто одна линза — это не список, который агент читает по порядку сверху вниз. В индексе линзы размечены по двум осям — категория (баланс, повествование, экономика и так далее) и уровень риска, — и агент вытаскивает нужную по симптому, а не по масштабу проекта. Шатает баланс — идёт линза про Challenge, утекает управляющая идея — идёт линза Unification.
Отдельно зашит «застрял-режим»: когда дизайнер (то есть я) явно буксует и не может сформулировать, что не так, агент подбирает линзу именно по этому симптому, а не по позиции в индексе. Мне это несколько раз буквально спасало вечер — я честно не знал, какая из девяноста одной линзы описывает моё раздражение от конкретной механики, а агент подбирал ровно ту.
Застрял-режим сработал у меня и на этом кейсе. Когда я не мог сформулировать, почему деление гидр казалось то честным, то бесячим, агент не полез в общий индекс. Сразу предложил линзу Fairness — ровно ту, что описывает разницу между «сложно» и «нечестно». Готового ответа она не дала, статус остался открытым до живого плейтеста, но вопрос сформулировала точнее, чем я сам.
Руль при этом держу я, не агент. У скилла три режима автономии — co-design, assisted и auto, — переключаемых в любой точке процесса. В co-design агент предлагает варианты и ждёт решения на каждой развилке, в auto — идёт вперёд сам и отчитывается пачкой уже сделанного. Ставки в дизайне делает дизайнер, а агент в этой схеме — спарринг-партнёр, а не автопилот, который просто едет, пока ты занят другим.
На стадии баланса я специально переключился в assisted — не потому что не доверял агенту, а потому что хотел сам прожить, как гидра ощущается на экране, прежде чем соглашаться на цифры. На стадии релиза, наоборот, отдал управление в auto: там уже нечего решать творчески, только собрать пакет файлов по шаблону.
Две технические детали, которые упрощают жизнь, а не украшают процесс. Рассуждение агента ложится в Markdown, а замеры зондов и статусы линз — в JSON: одно читается человеком, другое — следующим прогоном скрипта. И весь набор файлов почти без правок переезжает между инструментами — тот же .claude/agents/ открывает и Cursor, и Antigravity, просто под своим раннером.
Как это вообще собиралось
Сам скилл я строил не водопадом, а диалогом с самим собой и агентами. Сначала неделя ушла на архитектуру: не садился писать промпты субагентам, пока не появилась спека — что именно проверяет каждая стадия и как выглядит правило петли. Потом собрал контентное ядро: перенёс девяносто одну линзу в машинный индекс, расписал шаблоны артефактов, и только после этого начал собирать самих субагентов и адаптеры под три инструмента.
Застревал я здесь, а не в игре. Дольше всего провозился с адаптером под Cursor — там свой формат чтения .claude/agents/, и первые прогоны как будто не видели половину промпта. Ничего драматичного, обычный вечер на дебаг конфига. Второй раз тонул на границе между «эта линза для геймдизайна вообще» и «эта деталь — только про мой конкретный дог-фуд-кейс»: хотелось тащить частные подробности кейса прямо в общий скилл. На второй итерации я развёл их по разным папкам — специфику кейса вынес отдельно от скилла, а в сам инструмент ушли только общие уроки.
Это скучная часть истории, зато честная: инструмент для чужой методологии не рождается из одного гениального промпта. Он собирается слоями, и большая часть времени уходит не на «умную» часть, а на то, чтобы дисциплина методологии не расползлась по промптам. Ни один из этих вечеров не попал бы в красивый кейс без дог-фуда на реальном брифе. Без него так и осталась бы просто аккуратная архитектура на бумаге.
Дог-фуд: отдал агентам рекламный кейс
Тестовый пример я искать не стал — сразу отдал рою реальный рекламный бриф. Игра называлась «Укроти зоопарк подписок»: рекламная мини для CFO и CTO, промо ИИ-платформы для консолидации корпоративных ИИ-подписок в один счёт. Механика простая — тапаешь монстров-подписки, они исчезают.
Кроме одной группы — гидр, которые при тапе делятся на двух новых спустя примерно 800 миллисекунд. Фон при этом сам плодит новые подписки, ускоряясь примерно в 0,74 раза каждые 3,5 секунды. Единственное действие, которое НЕ тап, — свайп в портал: он разом консолидирует всех монстров, экран затихает, и появляется счётчик экономии.
Вся механика строилась вокруг одной эмоции — управляемая паника, которая разрешается одним чистым действием. Для рекламы это ключевое: зритель должен физически почувствовать перегруз от «зоопарка» подписок, прежде чем увидит, как легко его свернуть в одну платформу.
Первый прогон, probe-01, проверял самую очевидную гипотезу — что подписки спавнятся только из отделов компании, по одной на отдел. Логично же: именно так «зоопарк» и живёт в голове у CFO. Агент собрал зонд, прогнал его через Playwright — и вернул неприятную новость: перегруз, ради которого всё затевалось, вообще не наступал. Тапаешь себе спокойно, монстров становится меньше, а не больше.
Признаюсь, в этот момент я хотел просто подправить цифры спавна и двигаться дальше — жалко было выбрасывать первую версию. Агент вместо этого честно зафиксировал зонд как провалившийся и предложил пересобрать сам двигатель роста, а не подкрутить параметр. Это ровно тот «продуктивный провал» из методологии Шелла: проверка убила гипотезу раньше, чем я потратил неделю на полировку нерабочей механики.
Probe-02 проверял новый двигатель — деление гидр плюс фоновый спавн с эскалацией, баланс которого лёг на простую формулу N·(1−2·HR), где HR — доля гидр в толпе монстров. По его итогу линза Challenge закрылась уже на стадии баланса: движок наконец давал то самое ощущение «не вывожу», без которого вся реклама была бы фальшивой. Тут я выдохнул — почувствовал именно ту нужную панику, которую и должен вызывать зоопарк подписок.
Probe-03 собрал полный играбельный прогон — от старта через нарастание и пик до свайпа в портал и чистого экрана результата. Игра первый раз прошла от начала до конца сама, без моих подпорок, и это было приятно. Не потому что я всё сделал правильно, а потому что рой довёл идею до рабочего состояния через два прежних провала.
Показательная деталь для тех, кто скептически относится к автоматизации плейтеста: даже после трёх зондов две линзы остались открытыми. Честно ли ощущается гидра или бесит, и даёт ли свайп катарсис. Автоматический прогон через Playwright замыкает механическую петлю зонда, но на вопрос «зашло или нет» отвечает только живой человек за монитором.
Число, которое не выдержало проверки
На финальном экране игра считала «сэкономленную» сумму — количество монстров умножить на условную цену подписки. Число выглядело убедительно, ровно так, как и должна выглядеть цифра в рекламе для CFO. Я даже мысленно похвалил результат — красивая круглая сумма, ровно то, что просится на слайд. Проблема всплыла, когда я перечитал код игровой логики уже без эйфории от готовой дуги.
Прямо в коде цена одного монстра — 1 500 ₽ — была помечена комментарием: это цена одной B2C-подписки вроде ChatGPT или Midjourney, а не цена места в рекламируемой платформе. Число внутри игры было настоящим игровым артефактом, а не защитимой цифрой. Для CFO нарисованная экономия убивает именно то доверие, ради которого реклама и делается.
Не баг, а дыра не в том слое
Разбираться в причине пришлось не с игрой, а с самой методологией. Первая реакция была — списать на кейс: мол, зря вообще посчитали денежную цифру внутри игровой механики. Но чем дольше я в этом сидел, тем яснее становилось: дыра не в конкретной формуле, а в наборе линз, который я скормил агентам не читая критически. Скилл честно применил линзу ценности внутри игры (Endogenous Value) к числу, которое вытекает наружу как реальное рекламное обещание. Линзы Шелла спроектированы play-centric: для чистой игры это верное правило, для рекламной мини — нет.
Если бы я тестировал скилл только на нейтральном примере — скажем, головоломке без денег на кону, — эта дыра осталась бы незамеченной ещё надолго. Endogenous Value отлично работает, когда цифра живёт только внутри игры. Рекламный кейс поставил под давление именно то место, где методология Шелла принимает это как данность.
Ирония в том, что я выбрал этот кейс не ради поиска дыр, а из лени — не хотелось выдумывать игрушечный пример с нуля, раз под рукой лежал реальный бриф. Дыру в методологии я нашёл случайно, потому что взял давление настоящей задачи вместо вежливого учебного примера.
Чинили инструмент, а не эту одну игру. Добавили детект типа игры в брифе, правило честности в управляющей идее и новую линзу — Honest Claim: любое число, которое выходит наружу, обязано иметь источник или явную пометку «иллюстративно». Теперь нарушение этого правила ловится на той же стадии, где раньше проходило незамеченным.
Заодно развели два разных числа. Сама игра — это прочувствованная эмоция плюс иллюстративное число с дисклеймером. А для реальной цифры — отдельная форма-калькулятор на настоящих вводных: я сверил её напрямую с реальным прайсом сервиса (43–333 ₽ за человека в месяц), и цифры совпали. Урок закрепили не только в этом проекте — новая линза ушла в общую библиотеку, правило легло в спецификацию, а запись осталась в журнале уроков со статусом «внедрён».
Что бы я проверил в любом ИИ-инструменте с числами наружу
Из этого одного разбора я вынес короткий чек-лист — не только про игры, про любой ИИ-инструмент, который выводит цифру наружу:
- Откуда цифра — из реальных вводных или из внутренней механики продукта?
- Если из механики — есть ли явная пометка «иллюстративно» рядом с числом?
- Кто ловит нарушение правила — только человек, или инструмент тоже?
- Разведены ли эмоция (демо, игра, презентация) и защитимая цифра (форма, расчёт, отчёт)?
Мораль
Ценность этого теста была не в том, получилась ли игра — она в итоге получилась играбельной, с полной дугой от старта до результата. Ценность была в другом: стал ли инструмент умнее после одного реального прогона. Один дог-фуд на живом кейсе нашёл системный пробел — и мы починили скилл, а не одну мини-игру.
Мне лично этот урок дался не сразу. Пришлось признать, что рой поймал ровно то, что я как человек с цифрами должен был заметить сам ещё на этапе брифа. Но именно для этого и нужен второй набор глаз, пусть даже искусственных: не чтобы не думать самому, а чтобы поймать то, что пропустил в спешке.
Не знаю заранее, прогоню ли я скилл ещё через один рекламный кейс в этом году — но теперь буду делать это осознанно, а не как проверку для галочки перед релизом. Дог-фуд оказался не разовой процедурой, а способом содержать инструмент в рабочем состоянии.
Если работаешь с ИИ-инструментом, который выдаёт наружу хоть одну цифру, — прогони его через свой рекламный кейс раньше, чем через десятый учебный пример. Дыры такого рода не находятся на синтетике, только под реальным давлением настоящей задачи.
Забрать скилл
Скилл открытый, MIT, работает в Claude Code, Cursor и Antigravity — репозиторий github.com/Goryuchnick/schell-lens-deck. Локальная папка при установке должна называться gamedesign — репозиторий называется иначе, и пути внутри скилла резолвятся именно от этого имени.
P.S. Если хочется не собирать такую оркестрацию самому, а сразу получить рабочий инструмент под свою задачу — пишите в личку в Telegram, обсудим.