Skip to main content
skill Claude Code CX Codex Cursor GitHub Copilot

game-automation — Claude Code skill: what it does, how to install

Launches games, captures GPU-rendered windows, and simulates mouse and keyboard input. Helps an agent verify mods directly inside a running game on Windows and WSL.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add rehan-remade/universal-modder --skill game-automation -a claude-code
Open on GitHub

What game-automation does

The skill provides the um win CLI tools for Windows and WSL. The agent can launch titles via Steam app IDs or directly from executables, enforce a fixed client window size, and read frames through Windows.Graphics.Capture. This prevents the blank frames caused by standard GDI capture on GPU-rendered games.

Window driving runs through WinDrive.ps1 or the um.win Python module. It handles client-area mouse clicks, relative mouse movements for FPS cameras, virtual key holds, and scanmode on for DirectInput titles. For deeper test loops, the skill recommends using in-game console commands or an internal JSON-lines bridge on 127.0.0.1.

Each um win drive call spins up PowerShell and takes one to two seconds. Group timed action sequences into a single call instead of invoking them one by one. If Windows Auto HDR is enabled on SDR games, screenshots turn out washed out, so disable it in the Windows graphics settings during capture.

What it helps with

  • capture GPU-rendered game windows without getting a black screen
  • launch games via Steam or direct executables at a fixed window size
  • automate mouse clicks and virtual key presses inside game menus
  • kill hanging crash reporter processes using exact process IDs

Example prompts for the agent

  • Launch Terraria via Steam app ID 105600 in windowed mode and take a scaled screenshot
  • List active game processes with um win ps and kill the lingering crash handler PID
  • Focus the game window, wait for idle, and press Enter to open the dev console

How to install game-automation

1Skills CLI (Vercel)

npx skills add rehan-remade/universal-modder --skill game-automation -a claude-code

2Manually: put the files in place

~/.claude/skills/game-automation/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/game-automation/

From the same set7

The whole set →

Similar

mantis-reproduce official google Generates and executes crash reproducers in isolated sandboxes to verify security flaws. It helps confirm findings before patching. Claude Code CX Codex Cursor +1 1,500installs mantis-researcher official google Audits production source code against workspace/plan.json. It inspects target files for boundary checks, missing sanitization, and interface violations without modifying the codebase. Claude Code CX Codex Cursor +1 1,500installs react18-dep-compatibility official github Checks minimum dependency versions for React 18.3.1 and React 19. Use it during React upgrades and when resolving peer dependency conflicts. GitHub Copilot 764installs react18-batching-patterns official github Diagnoses and fixes React 18 automatic batching bugs in class components. Useful when upgrading from React 17 breaks state assertions or async flows. GitHub Copilot 754installs qa-test-planner softaworks Turns a feature description into a test plan, manual test cases, a regression suite or a bug report. Fires only when you name it: qa-test-planner. Claude Code CX Codex Cursor +1 4,300installs cost-benchmark ruvnet Runs corpus benchmarks to evaluate booster performance and compare spend against Gemini or Claude baselines. Generates verifiable cost tables before releases. Claude Code CX Codex Cursor +1 679installs improve-codebase-architecture Matt Pocock This skill scans a codebase for architectural friction, then builds a visual HTML report with refactoring candidates. Use it before a deeper architecture review. Claude Code 1,163,035installs design-taste-frontend Leonxlnx This skill directs the design of public pages and work screens, then checks the result in a browser through screenshots. Use it when an interface feels generic or unfinished. Claude Code CX Codex Cursor +1 673,100installs

Questions about game-automation

How to install game-automation in Claude Code?

Run npx skills add rehan-remade/universal-modder --skill game-automation -a claude-code.

What does the game-automation skill do?

It lets an agent launch games, capture clean window frames via GPU capture, send mouse and keyboard input, and inspect logs to test mods automatically.

Why does gfxcapture matter for game automation?

GPU-rendered games produce black frames when captured with standard GDI methods. The skill relies on Windows.Graphics.Capture through gfxcapture to read true frame buffers even if other windows overlap the game.

Source text

SKILL.md · MIT
---
name: game-automation
description: Launch, see and drive a real game so an agent can test its own mods. Covers launching via Steam or the exe, windowed mode at a fixed size, screenshots of the game window (GPU-safe capture), clicking and typing into menus, holding keys, relative mouse, crash-reporter cleanup, killing by PID, reading logs, scripted test scenes, and an in-game JSON bridge that lets an agent observe and act. Windows-first (also from WSL), with notes for Linux and macOS. Use when a mod must be verified in game, when navigating menus automatically, or when building a repeatable test or demo scene.
---

# Game automation: the agent's hands and eyes

The real game is the oracle. The loop is launch → navigate → set up the scene → act → **screenshot and read
logs** → decide. Build it once per game, then every change you make can be checked in a minute.

## Windows (native or from WSL): `um win`
```bash
um win setup                                   # once: PowerShell tools + an ffmpeg with gfxcapture, picks NVENC/AMF/QSV/x264
um win ps                                      # windowed processes: pid, name, title
um win launch --steam 105600                   # or: um win launch "C:\Games\Foo\Foo.exe" -- -windowed
um win shot --exe Terraria.exe shot.png --scale 0.33   # full frame + a 1/3 copy that's cheap to look at
um win drive --proc Terraria "focus" "click 640 360" "key 0x1B" "type hello" "hold 0x44 1500"
um win drive --proc Terraria "hold 0x20 150" "sleep 200" "hold 0x20 150"   # sleep <ms> pauses between steps
um win drive --proc Terraria idle              # seconds since the user last touched mouse/keyboard (does not wait)
um win kill <pid>                              # exact PID only
um win reg get "HKCU\Software\..."             # registry (reg set backs the key up first)
```
From Python (for longer scripts), `from um.win import Drive, shot, Recorder`, then `d = Drive("AoE2DE_s")`,
`d.focus()`, `d.click(x, y)`, `d.key("0x0D")`.

**WinDrive commands** (`um/ps1/WinDrive.ps1`; stdin protocol, one reply per line). Coordinates are in
the game window's **client area**.
- Mouse: `move x y`, `click x y [right]`, `mdown`/`mup`, `drag x0 y0 x1 y1`, `rel dx dy` (FPS cameras /
  raw input), `wheel 120`.
- Keyboard: `key <vk> [tap|down|up]`, `hold <vk> <ms>`, `type <text>`, `scanmode on` (DirectInput /
  raw-input games that ignore virtual-key events).
- Window: `focus`, `rect`, `size <w> <h>` (sets the client size), `title`, `fg`, `idle`, `untop`.
- Timing: `sleep <ms>` waits between steps in one call. Each `um win drive` call starts PowerShell (1-2 s),
  so put timed combos in one call.
- Virtual-key codes: Esc 0x1B, Enter 0x0D, Space 0x20, W/A/S/D 0x57/0x41/0x53/0x44, F1 0x70, Shift 0x10,
  Ctrl 0x11, arrows 0x25-0x28.

**Rules of the road**
- **Never focus a game with an online mode while the human is typing.** It happened with GTA V: the agent
  focused GTA to click Story Mode, the human's keystrokes hit GTA's landing page, and GTA warned about
  "accessing GTA Online servers with an altered version". ScriptHookV blocked it; don't rely on that.
  Check `idle`, ask the human to click, and launch with the anti-cheat off so online can't start. See
  `knowledge/techniques/driving-real-games-safely.md`.
- **Input only goes to the game.** WinDrive refuses to send while another app is in the foreground. The one
  exception is when nothing is and the cursor is over the game, which windowed games cause by dropping the
  foreground on clicks.
- **The user may be at the PC.** If `idle` is under a minute, ask before driving, and keep sessions short.
  Unattended runs are fine once the user says so.
- **Screenshots cost tokens.** Look at `--scale 0.33` copies. Multiply coordinates back ×3 for clicks, and
  keep a table of menu click points in MODLOG.md, measured once.
- **Why gfxcapture:** GPU-rendered games come out black with GDI capture. gfxcapture (Windows.Graphics.Capture)
  grabs one window's real frames, even when covered. It can't capture minimized windows.
- **HDR displays:** with Windows Auto HDR on for an SDR game, captures come out washed out (2-3x brighter,
  cyan-shifted), so colours can't be judged. `um win shot`/`record` warn when it's on; turn it off for the game
  while capturing (Settings > System > Display > Graphics > the game > Auto HDR), and back on after if the user wants.

## Make the window predictable
- **Windowed mode at a fixed client size.** Every game hides this setting somewhere:
  - an ini (`[/Script/Engine.GameUserSettings]` in UE `GameUserSettings.ini`, Unity's
    `Screenmanager Fullscreen mode` / `Resolution` registry values under `HKCU\Software\<company>\<product>`);
  - a launch flag (`-windowed -w 1920 -h 1080`, Unity `-screen-fullscreen 0 -screen-width 1920 -screen-height 1080`,
    Source `-sw -w 1920 -h 1080`);
  - or the game's own registry (AoE2: `Mode Display` 0 + `Windowed Width/Height`).
  - `um win drive --proc X "size 1920 1080"` also resizes most windowed games.
- **Skip intros:** launch flags (`-skipintro`, `-nosplash`, Unity `-popupwindow`), or delete/rename intro
  videos in a **copy** of the game.
- **Jump straight in:** loader flags (tModLoader `-skipselect Player:World`), a save made for testing,
  scenario auto-load, a dev console command.
- **Background throttling:** many games throttle or pause unfocused. Find the setting (Terraria:
  `Main.instance.InactiveSleepTime = TimeSpan.Zero`; Unity: `Application.runInBackground = true`; UE:
  `t.IdleWhenNotForeground 0`).

## Better than clicking: a scripted scene or a bridge
- **Chat or console commands in your mod** give items, spawn enemies and teleport. They make tests one line
  (`/arsenal`, `/mothership`).
- **Test scenes:** a mod-side timeline (spawn waves at frame N, fire at N+30), a scenario with triggers
  (AoE2 via AoE2ScenarioParser), a dedicated test world with a pristine backup.
- **Agent bridge:** a JSON-lines socket inside the mod on `127.0.0.1` (see
  `examples/terraria-tmodloader/reference/AgentBridge.cs`).
  - Commands like `observe` (menu options or world state as text), `click <id>`, `controls`, `step`.
  - Handle every request on the game's main thread after an update, so replies are consistent.
  - Read menus generically from the UI tree, so the agent sees what a player would. Leave destructive
    buttons (delete) out.
  - An agent can then play without pixels at all.
- **Out-of-process backend:** keep the in-game part thin and put the brains outside (HTTP/file-drop). That
  pattern scales to AI NPCs and cross-game mashups.

## Crashes and cleanup
- **Crash reporters** (BugSplat `BsSndRpt64.exe`, `CrashReportClient.exe`, `UnityCrashHandler64.exe`) can
  linger and make Steam say "already running". `um win ps` to spot them, `um win kill <pid>` to clear
  them.
- Never `pkill -f` or wildcard `taskkill /IM`. The pattern can match your own shell or other apps.
- After a crash, read the loader or game log first (the mod-any-game skill lists them), then the Windows
  Event Viewer (Application log) for native crashes.

## Linux and macOS
- **Linux (X11):** `xdotool search --name "Game" windowactivate --sync key Escape`, `xdotool mousemove
  --window $W 640 360 click 1`. Screenshots: `import -window $(xdotool search --name Game) shot.png`, or
  ffmpeg `x11grab`.
- **Linux (Wayland):** ydotool + `grim`. Proton games are Windows games under Wine: launch options
  (`WINEDLLOVERRIDES`, `PROTON_LOG=1`) go in Steam.
- **macOS:** `screencapture -l <windowid> shot.png` (window id via `GetWindowID` or AppleScript),
  `osascript` / `cliclick` for input. Input and screen recording need Accessibility and Screen Recording
  permission for the terminal.

© rehan-remade · MIT · rehan-remade/universal-modder

See also

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor