Claude Code OSU! AI UI automation guide | AiManual
AiManual Logo Ai / Manual.
18 Май 2026 Гайд

Claude Code играет в OSU!: руководство по AI-взаимодействию с UI для автоматизации игр

Научитесь использовать Claude Code для автоматизации игры OSU! через AI UI взаимодействие. Пошаговое руководство с примерами, кодом и разбором ошибок.

Вы серьёзно? Claude Code будет кликать кружочки?

Да, я тоже сперва подумал: "Ну, очередная игрушка для AI-евангелистов". Но когда я увидел, как Claude Code (на тот момент ещё Claude 3.5 Sonnet с поддержкой computer use) пытается попасть по первому кружку OSU! и проваливается — я понял, что это идеальный полигон. Не для того, чтобы хайпануть, а чтобы проверить фундаментальные ограничения AI UI-взаимодействия под давлением времени. OSU! — это не просто кликер. Это ритм-игра с суб-100ms окнами для реакции. Если AI может сыграть хотя бы простую карту, значит он способен управлять любым интерфейсом в реальном времени. Спойлер: может, но не сразу.

Предупреждение: Автоматизация OSU! нарушает правила игры. Не используйте этот гайд для читерства в рейтинговых матчах. Это исследование, а не способ набить pp. Вы предупреждены.

Почему OSU! — идеальный тест для AI-автоматизации

Давайте разберёмся, с чем мы имеем дело. OSU! требует от игрока:

  • Распознавания объектов — на экране появляются круги, слайдеры, спиннеры. AI должен понять, где они и когда.
  • Точного тайминга — клик по кругу раньше или позже на 30ms — miss. Для LLM с latency >500ms это вызов.
  • Симуляции ввода — нужно эмулировать мышь и клавиатуру с минимальной задержкой.
  • Адаптивности — карты меняются, скорость разная. AI не может заучить последовательность.

Звучит как треш для LLM, правда? Но именно тут появляется Claude Code с возможностью computer use (начиная с версии 0.4.7, но на май 2026 уже 0.6.3 с улучшенным vision и контролем задержек). Я построил пайплайн, который превращает Claude Code из кодера в геймера. И нет, это не скрипт, тупо кликающий по пикселям — это именно AI-агент, который "смотрит" на экран и решает, что делать.

Архитектура: как AI вообще может видеть и кликать

Весь фокус в том, что Claude Code (через Claude API) получает скриншоты экрана и может возвращать команды для мыши/клавиатуры. Но в реальном времени так не работает — слишком долго. Поэтому мы строим гибридную систему:

  1. Claude Code управляет высокоуровневой логикой: "какую карту выбрать", "начать игру", "остановиться если проигрываешь".
  2. Локальный агент (на Python) захватывает скриншоты, быстро находит объекты (через opencv или ml), и передаёт временные метки Claude для принятия решений.
  3. На основе ответа Claude — симуляция кликов через PyAutoGUI или direct input.

Почему так? Чистый end-to-end computer use с Claude слишком медленный (latency ~1-2 секунды). Чтобы играть в OSU!, нужно решение с предсказанием. Claude Code выступает как "мозг", который планирует действия, а локальный рантайм выполняет быстрое распознавание.

Кстати, если вы ещё не знакомы с основами использования Claude Code, рекомендую сначала прочитать полный гайд по горячим клавишам Claude Code — без них вы будете тратить кучу времени на повторяющиеся действия.

Пошаговый план: от установки до первого клика

1 Настройка окружения для Claude Code

У вас уже должен быть установлен Claude Code. Если нет — npm install -g @anthropic-ai/claude-code. Версия на май 2026 — 0.6.3, обязательно обновитесь: claude update.

Дополнительно устанавливаем Python 3.11+, opencv-python, mss (для быстрых скриншотов), pyautogui и pydirectinput (для симуляции ввода в играх).

pip install opencv-python mss pyautogui pydirectinput
claude init my-osu-bot
cd my-osu-bot

2 Создаём агента захвата экрана

Мы не можем передавать каждый скриншот Claude — будет дорого и медленно. Поэтому локальный агент делает скриншоты каждые 16ms (60 FPS), находит круги через цветовую сегментацию (синие круги на чёрном фоне — easy), и собирает их координаты + временные метки.

import mss
import cv2
import numpy as np

sct = mss.mss()
monitor = sct.monitors[1]  # главный монитор

def capture_and_detect():
    img = sct.grab(monitor)
    frame = np.array(img)
    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
    # Синий цвет кругов OSU!
    lower_blue = np.array([100, 150, 0], dtype=np.uint8)
    upper_blue = np.array([140, 255, 255], dtype=np.uint8)
    mask = cv2.inRange(hsv, lower_blue, upper_blue)
    contours, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    circles = []
    for cnt in contours:
        (x, y), radius = cv2.minEnclosingCircle(cnt)
        if radius > 10:
            circles.append((int(x), int(y), int(radius), time.time()))
    return circles

Этот код бежит в бесконечном цикле, складывает найденные круги в очередь с временем появления. Claude Code будет получать не все скриншоты, а только агрегированные данные за последние 100ms.

3 Интеграция с Claude Vision через промпт

Теперь самое интересное. Мы даём Claude Code задание: "Ты играешь в OSU!. Вот координаты кругов, которые появились за последние 100ms. Определи, в какой кружок нужно кликнуть сейчас, и какую клавишу нажать (левый клик или клавиша Z/X). Время появления круга — round_start_time. Текущее время — now. Если разница больше 200ms, значит круг просрочен, пропусти его." В Claude Code это выглядит как system prompt в файле .claude/settings.json. Подробнее о настройке окружения читайте в статье Рабочий процесс создателя Claude Code. А для более тонкого контроля советую изучить 10 скрытых настроек, которые превратят его в полноценный отдел автоматизации.

4 Симуляция ввода

Когда Claude Code возвращает решение (координаты и действие), локальный агент выполняет клик. Для игр pyautogui не подходит — игры часто игнорируют его события. Используем pydirectinput, который эмулирует DirectInput, а не Windows message queue.

import pydirectinput
import time

def click_at(x, y, button='left'):
    pydirectinput.moveTo(x, y)
    pydirectinput.click(button=button)
    time.sleep(0.001)  # минимальная задержка

def press_key(key):
    pydirectinput.keyDown(key)
    time.sleep(0.001)
    pydirectinput.keyUp(key)

5 Запускаем и тестируем

Запускаем OSU! в оконном режиме (1920x1080), ставим самую простую карту. Claude Code запускает свой агент, и мы смотрим, промахивается ли он. Спойлер: первая попытка будет провальной. Мы ещё не учитывали, что координаты скриншота могут не совпадать с игровыми из-за scaling. Придётся калибровать. Но это нормально.

Подводные камни: как я потратил 3 дня на 2% точности

Давайте честно: первая версия бота набирала 2% точности на самой лёгкой карте. Вот что пошло не так:

  • Мискалибрование координат. OSU! использует scaling при оконном режиме. Решение: захватывать изображение прямо из процесса через BitBlt, а не через mss (mss даёт скриншот всего монитора, но координаты мыши могут быть в других единицах).
  • Латентность Claude API. Даже с быстрым vision (Claude 4 Sonnet) время ответа — 800-1500ms. Для OSU! это вечность. Решение: мы не ждём ответ от Claude на каждый кадр. Claude планирует стратегию на следующие 200ms, а локальный агент выполняет клики по расписанию. Если возникает новый круг — локальный агент может сам принять решение на основе правил (например, кликнуть по ближайшему кругу). Так Claude управляет только сложными ситуациями.
  • Античит и защита от автоматизации. OSU! не банит за автоматизацию в оффлайне, но если делать это в мультиплеере — рискуете. Я тестировал только в solo режиме с отключенным интернетом.
  • Перегрузка Claude Context. Если передавать все координаты каждого круга, контекст быстро забивается. Пришлось ограничить историю последними 5 событиями.

Типичная ошибка: Думать, что Claude Code сам разберётся с real-time gaming. Он — инструмент для кода, а не для гейминга. Вам придётся написать слой на Python/TypeScript, который будет буферизировать события и выдавать их дозированно. Если хотите избежать катастроф — почитайте 5 правил контроля Claude Code в production. Там описаны механизмы изоляции, которые спасут ваш продакшн от разрывов.

Результаты: что получилось и что пошло не так

После 3 дней итераций и ~$50 на API (да, это дорого) я получил бота, который стабильно проходит карты сложностью до 2 звёзд с точностью 85-90%. На 3-звёздочных картах точность падает до 40% — Claude не успевает обрабатывать поток событий. Вывод: Claude Code отлично справляется с медленными играми (пошаговые стратегии, симуляторы), но для быстрых ритм-игр нужна дополнительная локальная логика.

К слову, похожий подход используется в проекте civStation — VLM-система для Civilization VI. Там AI управляет игрой через голос, но принцип тот же: компьютерное зрение + LLM для принятия решений. А если вам интересен другой пример генерации игр AI-агентами, гляньте битву код-агентов.

Что дальше? Игры, где AI уже стоит попробовать

OSU! — лишь тестовый стенд. Технологию можно применить к:

  • Пошаговые тактики (XCOM, Fire Emblem) — Claude Code отлично справляется, так как нет дедлайнов.
  • Стратегии реального времени (StarCraft II) — нужно больше локальной автоматики, но возможно.
  • Графические интерфейсы — автоматизация тестирования UI, заполнение форм, навигация по сложным приложениям.

Кстати, если вы думаете, что Claude Code может быть опасен в руках неопытного — вы правы. Я уже писал о том, как внутренние паттерны нейронной активности Claude приводят к неожиданным эффектам в статье 171 эмоция Claude. Но в рамках этой задачи AI не выходил за рамки — он просто пытался кликнуть по кружочкам, порой с нечеловеческим упорством.

Хотите попробовать сами? Скачайте мой скрипт (ссылка в профиле) или соберите свой на основе описанного. Только не забудьте отключить интернет у OSU!, чтобы не получить бан. И помните: Claude Code — это не читерский инструмент, а исследовательский. Используйте с умом.

Подписаться на канал