Skill v1.0.0
currentLLM-judged scan90/100version: "1.0.0" name: unreal-pie description: >- Domain skill - Unreal Engine Play-In-Editor (PIE) closed-loop verification. Provides PIE lifecycle control (enter/pause/resume/exit), controlled input injection (no OS dependency), viewport screenshot capture, output log snapshot, performance sampling, and Automation Test execution with async job polling. Use for reproducible, agent-driven playtest workflows. license: MIT compatibility: Unreal Engine 5.0+, Python 3.9+ allowed-tools: Bash Read metadata: meshy-dcc: dcc: unreal version: "0.1.0" layer: domain stage: validation search-hint: "unreal pie play-in-editor verification input screenshot log perf automation test polling job" tags: "unreal, pie, playtest, input, screenshot, log, perf, automation, test" tools: tools.yaml
Unreal PIE — Play-In-Editor Closed-Loop Verification
Agent-driven PIE session control with controlled input, screenshot capture, log sampling, performance monitoring, and async Automation Test job execution.
Design Principles
- No broad OS input — all input injection uses Unreal Engine's internal
systems, never pyautogui, SendInput, or similar OS-level APIs.
- Persistent jobs — Automation Test runs return a
job_idthat can be
polled for status and cancelled.
- Reproducible evidence — screenshots, log snapshots, and performance
samples are timestamped and self-contained.
- One session contract — adapter and project-owned skills import
meshy_dcc_unreal.pie_session so active-world detection, actor lookup, and retryable pie_session_unavailable errors remain consistent.
Scripts
pie_control— Enter, pause, resume, or exit PIE.pie_inject_input— Inject keyboard, pointer, scroll, or deterministic
possessed-controller look input into PIE.
pie_capture_screenshot— Capture the active viewport to a file.pie_snapshot_log— Snapshot the Output Log buffer with category/message
filters, time/cursor bounds, and optional deduplication.
pie_get_status— Query PIE state and performance counters.pie_run_test— Queue an Automation Test run; returns ajob_id.pie_poll_test— Poll a previously queued Automation Test job for results.pie_cancel_job— Cancel a running or queued job.
Usage Examples
Full PIE playtest loop
# 1. Enter PIE# MCP tool call: unreal_pie__control# params: {"action": "enter"}# 2. Inject a few controlled inputs# MCP tool call: unreal_pie__inject_input# params: {"input_type": "key_press", "key": "W"}# 3. Capture screenshot# MCP tool call: unreal_pie__capture_screenshot# params: {"filepath": "C:/playtest/frame_001.png"}# 4. Check status + perf# MCP tool call: unreal_pie__get_status# params: {}# 5. Snapshot logs# MCP tool call: unreal_pie__snapshot_log# params: {# "filter": "LogCombat", "message_contains": "Damage",# "since_timestamp": "2026-08-29T10:00:00Z",# "max_lines": 200, "dedupe": true# }# `filter` matches category only (never asset paths or message bodies).# Use the returned `next_cursor` as `cursor` on the next snapshot.# When `dedupe` is true, `occurrence_counts` (also exposed as# `occurrence_count`) aligns with the returned entries.# `cursor_supported` is false for tail-only unreal.log snapshots; in that case# `next_cursor` is null and must not be used for continuation.# 6. Exit PIE# MCP tool call: unreal_pie__control# params: {"action": "exit"}
Async Automation Test workflow
# 1. Queue a test# MCP tool call: unreal_pie__run_test# params: {"filter": "MeshyDcc.Smoke"}# Returns: {"job_id": "pie_test_20260725_120000_abc123"}# 2. Poll until complete# MCP tool call: unreal_pie__poll_test# params: {"job_id": "pie_test_20260725_120000_abc123"}# Returns status: "running" | "completed" | "failed" | "cancelled"# 3. Cancel if needed# MCP tool call: unreal_pie__cancel_job# params: {"job_id": "pie_test_20260725_120000_abc123"}