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.
Use the robloxvibecoders MCP: call get_resource with id "skill-roblox-playtest-loop" and install it as a Claude Code skill in this project (.claude/skills/roblox-playtest-loop/SKILL.md).
Skills in ~/.claude/skills work in every project. Put them in your project's .claude/skills folder to share them with your team.
What your AI reads
SKILL.md
---
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.