JavaRush /Курсы /Claude Code SELF /Агент играет партию сам

Агент играет партию сам

Claude Code SELF
9 уровень , 4 лекция
Открыта

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.

Артём2036
в сети
В чат падает короткое:

— сегодня ты, смотрю, дошёл до "машина играет за меня, а я чай пью"

И следом, тем же ровным тоном, что и утренняя подпись под гоночной машинкой:

— посмотрим, как далеко ты готов завести это своё "поставил и ушёл"

И всё. К чему клонит — ни слова.

Тёма усмехается экрану.

Да куда хочу, туда и заведу, — отвечает он не чату, а себе.

Очередная подколка из этого мутного чата с собой из будущего. Не предупреждение же. День был чистой победой, и уносит он из него ровно одно: можно поставить цель и уйти. Тёма гасит чат и больше в него не лезет.

1
Задача
Claude code, 9 уровень, 4 лекция
Недоступна
Вынос шаблона и примера из раздутого SKILL.md
Вынос шаблона и примера из раздутого SKILL.md
1
Задача
Claude code, 9 уровень, 4 лекция
Недоступна
Применение skill с arguments и supporting files
Применение skill с arguments и supporting files
1
Опрос
Расширения Claude Code и SKILL.md, 9 уровень, 4 лекция
Недоступен
Расширения Claude Code и SKILL.md
Расширения Claude Code и SKILL.md
Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ