1. Собираем всё вместе
Всё нужное у Тёмы уже на руках. Игра собрана и проверена по списку — настоящие шахматы на chess.js, все семь пунктов держатся. Метки для агента заложены. Playwright он попробовал под руководством Лёхи. Теперь — собрать всё вместе начисто и своими руками: посадить агента за доску и наконец сыграть.
Напомним, что за игра вышла — вот она, стартовая расстановка, чёрные сверху, белые снизу:
a b c d e f g h
8 ♜ ♞ ♝ ♛ ♚ ♝ ♞ ♜ ← чёрные (за них будет играть агент)
7 ♟ ♟ ♟ ♟ ♟ ♟ ♟ ♟
6 · · · · · · · ·
5 · · · · · · · ·
4 · · · · · · · ·
3 · · · · · · · ·
2 ♙ ♙ ♙ ♙ ♙ ♙ ♙ ♙
1 ♖ ♘ ♗ ♕ ♔ ♗ ♘ ♖ ← белые (за них играет Тёма)
Ход: белые [ Новая партия ]
За белых сядет он, за чёрных — агент. А на доске, невидимо для глаза, живут те самые метки: data-turn — чей ход, data-game-over — кончилась ли партия. Их-то агент и будет читать.
2. Шаг 1 — подключаем Playwright к проекту
Первым делом — браузер к агенту. Тёма подключает Playwright одной командой, как учил Лёха, и не забывает перезапустить сессию:
claude mcp add playwright -- npx -y @playwright/mcp@latest
claude mcp list # проверить: playwright → ✓ Connected
claude # заново запустить агента в папке проекта
Тёма ждёт строчку playwright → ✓ Connected. Появилась — браузер подключён, у агента есть руки. Не появилась бы — первым делом проверил бы команду и что перезапустил сессию (в прошлый раз он на этом и споткнулся — забыл выйти-зайти). Уже в свежей сессии заглядывает, что подключение дало:
/mcp # у playwright видны инструменты: открыть страницу, клик, ввод, скриншот
В списке у playwright — инструменты браузера: открыть, кликнуть, ввести, снять скриншот. Всё, рука на месте.
3. Шаг 2 — Тёма садится играть против агента
Тёма набирает агенту короткое — за кого играть и по какой метке следить за очередью:
Через Playwright открой мою игру game.html.
Ты играешь за чёрных. Следи за data-turn на доске: как только там "b" —
делай ход чёрными и жди снова. Играем, пока не встанет data-game-over.
Жмёт Enter — и на экране само открывается окно браузера, то самое, playwrightовское. В нём его доска, фигуры на местах. Тёма подсаживается ближе — играть-то будет он, за белых, вот прямо сейчас, живьём.
Двигает белую пешку e2–e4. Ход переходит к чёрным. Короткая пауза — та, когда ещё не ясно, сработает или зависнет. А потом в окне курсор сам оживает: подъезжает к чёрной пешке, подхватывает, ведёт на e7–e5, отпускает. Метка data-turn снова стала "w" — очередь Тёмы.
— Опа, — вырывается у него. — Он мне ответил!
Он двигает коня. Агент — своего. Тёма подаётся к экрану, забыв про чай, и гоняет партию как настоящий поединок: его ход — ответ соперника, его ход — ответ. Курсор чёрных ходит сам, без единого касания с его стороны, будто напротив и правда кто-то сидит. Соперник из воздуха — ровно та картинка, что он утром себе нарисовал. Пару раз агент ходит слабовато, подставляется — не гроссмейстер, что уж, — но ходит сам, по правилам, честно дожидаясь своей очереди по метке.
Партия катится к развязке. Тёма загоняет чёрного короля в угол и ставит мат — chess.js тут же его и признаёт, внизу выскакивает «Мат, победили белые», на доске встаёт data-game-over="true". Агент, увидев метку, останавливается: партия окончена.
— Я выиграл! — Тёма откидывается. И тут же спохватывается: — Хотя погоди. Я ж не с компом играл в готовую игрушку. Я в свою игру играл — против агента, который сам за доской сидел. У меня соперник появился. Из ничего.
Всё прошлое было про «я сделал»: я собрал змейку, выкатил лендинг, притащил землетрясения. А это — впервые про то, что рядом кто-то есть. Не человек, не бот, зашитый в игру заранее, а его агент — сел за вторую сторону и играл.
4. Шаг 3 — а теперь пусть играет сам с собой
Одной партии Тёме мало. И тут его пробивает мысль пожаднее:
— Слушай, а если я вообще уйду? Пусть он играет за обоих — и белыми, и чёрными, — а я просто посмотрю, чем кончится.
Он и включает то, что с утра вписал в постановку отдельной строкой, — /goal:
/goal на доске появился атрибут data-game-over="true"
Играй за обе стороны по очереди — и белыми, и чёрными, по правилам,
пока партия не закончится.
— Ну давай, доиграй сам, — бросает он и отходит к чайнику, нарочно не глядя на экран. На полпути всё-таки тянет обернуться — вдруг агент запутается, кто есть кто, и встанет. Тёма заставляет себя не оборачиваться. Доверил — значит доверил.
Пока он возится с кружкой, в окне сама собой идёт партия: белая фигура пошла, чёрная ответила, снова белая — курсор мечется между сторонами, играя сам с собой. После каждого хода агент сверяется с /goal: встал data-game-over или ещё нет. Тёма возвращается с чаем — а на доске уже мат, внизу «Мат, победили белые», и агент остановился сам. Партия сыгралась целиком, без него. Когда надоест держать режим, снимаешь его:
/goal clear
Тёма отхлёбывает чай и смотрит на доску, доигранную без единого его касания.
— Я вообще ушёл — а он сам всю партию откатал, — проговаривает он, будто пробуя на язык. Уже не «я собрал игру» и даже не «я сыграл против агента», а вот это: загадал условие, ушёл, вернулся — готово. Значит, можно поставить цель и уйти. Доверил не ходы по одному, а весь результат — и он справился.
Что он заодно отдал агенту право самому решать, когда партия закончена — и даже не смотрел, как тот это решает, — Тёма не взвешивает. «Поставил и ушёл» — чистая суперсила, весь разговор. Лёхина утренняя оговорка про «условие взял готовым» в голове не всплывает: слишком хорошо всё прошло, чтоб сейчас искать подвох.
5. Шаг 4 — та же рука по опубликованному лендингу
Разогнавшись, Тёма вспоминает слова Лёхи про общий браузер — и ему любопытно. Раз агент уже умеет ходить по страницам, почему бы не глянуть ту, что он давно выкатил наружу. Просит по-быстрому пройтись по его лендингу из пятого уровня:
Через Playwright открой мой лендинг по ссылке [URL с L05] и пришли скриншот
главного экрана.
Агент открывает лендинг, проходит по короткому сценарию, возвращает скриншот прямо в чат: на месте, работает. Ничего эффектного — обычная страница. Но Тёма ловит, в чём фокус: та же рука, что играла в шахматы, легла на совсем другую страницу. И легла бы на любую.
— О, так это не только под игрушки, — соображает он вслух. Той же рукой можно по-быстрому заглянуть в то, что уже выложено наружу — открыть, пробежать, вернуть скриншот: на месте, живое. Удобно. Но дальше «удобно» он мысль не тянет — день слишком победный, чтоб копать.
6. Что теперь умеет агент
Тёма не выдерживает — ловит Олега у кофемашины и разворачивает к экрану ноутбука.
— Дядь Олег, глянь. Помнишь, ты утром хмыкал, мол, соперника-то нет? Есть теперь. Я целую партию сыграл — против него. — Он тычет в доску. — А потом вообще ушёл чай пить, а он за обе стороны сам доиграл. Вот скрин, вот мат.
Олег смотрит на доигранную доску, на «Мат, победили белые», щурится.
— То есть он и играл, он и мат себе поставил, он и объявил, кто выиграл, — медленно перечисляет Олег. — Ну ты подумай. Скоро эта твоя машина и зарплату себе сама выпишет. Сама поработала, сама себя похвалила, сама премию начислила.
— Вот именно, Олег. Сама играет, сама объявляет, — Тёма ухмыляется, пропустив занозу мимо ушей. Для него это ровно тот комплимент, который он сегодня и заслужил. А что Олег утром спрашивал «а проверишь ли ты, честно ли она играет» — так это давно вылетело из головы.
Шахматы уходят в галерею новым экспонатом — первая игра, в которую у него наконец есть с кем сыграть.
Вечером опять оживает Артём2036.
И всё. К чему клонит — ни слова.
Тёма усмехается экрану.
— Да куда хочу, туда и заведу, — отвечает он не чату, а себе.
Очередная подколка из этого мутного чата с собой из будущего. Не предупреждение же. День был чистой победой, и уносит он из него ровно одно: можно поставить цель и уйти. Тёма гасит чат и больше в него не лезет.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ