---
name: roblox-playtest-loop
description: Use after making any gameplay change in Roblox Studio through the Studio MCP server. Playtests the change, reads the output log and fixes root causes before reporting it done.
---

# Playtest and fix loop

Code that compiles isn't done. A change is done when a playtest shows it working. This skill uses the tools from
Roblox's built-in Studio MCP server.

## The loop

1. **Target the right Studio.** Call `list_roblox_studios` and use the `studio_id` of the place the user means. If
   two places are open and it's unclear, ask.
2. **Make the change.** Use `multi_edit` for scripts, or `execute_luau` in Edit for instances.
3. **Start a playtest** with `start_stop_play`.
4. **Exercise the feature** with `character_navigation`, `user_keyboard_input` or `user_mouse_input`, or by running
   checks with `execute_luau` on the Server or Client datamodel.
5. **Read `get_console_output`.** Every red error has a script path and a line number. Read that line before
   guessing.
6. **Stop the playtest**, fix the cause, and go round again.
7. **Report what you verified:** what you did in the playtest, and the values or output that prove it works.

## Fix causes, not symptoms

Never "fix" an error by:
- wrapping the call in `pcall` to hide it
- adding `task.wait()` to dodge a timing issue
- adding `if x then` checks without asking why `x` is nil

Find where the bad value comes from and fix it there. Wait for the right thing (`WaitForChild`, an event, a
Promise), not for time.

## Where code runs

- `Script` in `ServerScriptService`: runs on the server.
- `LocalScript` in `StarterPlayerScripts`, `StarterGui` or the character: runs on that player's device.
- `ModuleScript`: runs wherever it is required from.

A script in the wrong container silently never runs. When nothing happens at all, check the container first.
