Agent skill
uloop-record-input
Record keyboard and mouse input during PlayMode into a JSON file. Use when you need to: (1) Capture human gameplay input for later replay, (2) Record input sequences for E2E testing, (3) Save input for bug reproduction.
Install this agent skill to your Project
npx add-skill https://github.com/hatayama/unity-cli-loop/tree/main/.claude/skills/uloop-record-input
SKILL.md
uloop record-input
Record keyboard and mouse input during PlayMode frame-by-frame into a JSON file. Captures key presses, mouse movement, clicks, and scroll events via Input System device state diffing.
Usage
# Start recording
uloop record-input --action Start
# Start recording with key filter
uloop record-input --action Start --keys "W,A,S,D,Space"
# Stop recording and save
uloop record-input --action Stop
# Stop and save to specific path
uloop record-input --action Stop --output-path scripts/my-play.json
Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
--action |
enum | Start |
Start - begin recording, Stop - stop and save |
--output-path |
string | auto | Save path. Auto-generates under .uloop/outputs/InputRecordings/ |
--keys |
string | "" |
Comma-separated key filter. Empty = all common game keys |
Design Guidelines for Deterministic Replay
Replay injects input frame-by-frame, so the game must produce identical results given identical input on each run. The following patterns break determinism and must be avoided in replay-targeted code:
| Avoid | Use Instead | Why |
|---|---|---|
Time.deltaTime for movement |
Fixed per-frame constant (e.g. MOVE_SPEED = 0.1f) |
deltaTime varies between runs even at the same target frame rate |
Random.Range() / UnityEngine.Random |
Seeded random (new System.Random(fixedSeed)) or remove randomness |
Different random sequence each run |
Rigidbody / Physics simulation |
Kinematic movement via Transform.Translate |
Physics is non-deterministic across runs |
WaitForSeconds(n) in coroutines |
WaitForEndOfFrame or frame counting |
Real-time waits depend on frame timing |
Time.time / Time.realtimeSinceStartup |
Frame counter (Time.frameCount - startFrame) |
Time values drift between runs |
FindObjectsOfType without sort |
FindObjectsByType(FindObjectsSortMode.InstanceID) |
Iteration order is non-deterministic |
async/await with Task.Delay |
Frame-based waiting | Real-time delays are non-deterministic |
Set Application.targetFrameRate = 60 (or your target) to reduce frame timing variance. See InputReplayVerificationController for a complete example of deterministic game logic.
Prerequisites
- Unity must be in PlayMode
- Input System package must be installed (
com.unity.inputsystem) - Active Input Handling must be set to
Input System Package (New)orBothin Player Settings
Output
Returns JSON with:
Success: Whether the operation succeededMessage: Status messageOutputPath: Path to saved recording (Stop only)TotalFrames: Number of frames recorded (Stop only)DurationSeconds: Recording duration in seconds (Stop only)
Recommended Agent Skills
Expand your agent's capabilities with these related and highly-rated skills.
uloop-simulate-mouse-ui
Simulate mouse click, long-press, and drag on PlayMode UI elements via EventSystem screen coordinates. Use when you need to: (1) Click buttons or interactive UI elements during PlayMode testing, (2) Drag UI elements from one position to another, (3) Hold a drag at a position for inspection before releasing, (4) Long-press UI elements that respond to sustained pointer-down. For game logic that reads Input System (e.g. WasPressedThisFrame), use simulate-mouse-input instead.
uloop-execute-menu-item
Execute Unity Editor menu commands programmatically. Use when you need to: (1) Trigger menu commands like save, build, or refresh, (2) Automate editor actions via menu paths, (3) Run custom menu items defined in project scripts.
uloop-find-game-objects
Find GameObjects in the active scene by various criteria. Use when you need to: (1) Search for objects by name, regex, or path, (2) Find objects with specific components, tags, or layers, (3) Get currently selected GameObjects in Unity Editor. Returns matching GameObjects with hierarchy paths and components.
uloop-simulate-keyboard
Simulate keyboard key input in PlayMode via Input System. Use when you need to: (1) Press game control keys like WASD, Space, or Shift during PlayMode, (2) Hold keys down for continuous movement or actions, (3) Combine multiple held keys for complex input like Shift+W for sprint.
uloop-run-tests
Execute Unity Test Runner and get detailed results. Use when you need to: (1) Run EditMode or PlayMode unit tests, (2) Verify code changes pass all tests, (3) Diagnose test failures with error messages and stack traces. Auto-saves NUnit XML results on failure.
uloop-control-play-mode
Control Unity Editor play mode (play/stop/pause). Use when you need to: (1) Start play mode to test game behavior, (2) Stop play mode to return to edit mode, (3) Pause play mode for frame-by-frame inspection.
Didn't find tool you were looking for?