Agent skill
playtesting
Install this agent skill to your Project
npx add-skill https://github.com/majiayu000/claude-skill-registry/tree/main/skills/data/playtesting
SKILL.md
name: playtesting description: Headed playtesting workflow for Godot projects, focused on HPV runs with MCP, runtime eval teleporting, and efficient logging. Trigger any time the Godot-tools extension is used, anytime the Godot MCP is used, whenever Playtester role is use. Use when you need to validate quest flow, UI playability, or record HPV findings in PLAYTESTING_ROADMAP.md.
Playtesting HPV Skill
Use this skill to run headed playability validation (HPV) quickly with MCP while keeping calls and tokens low. Teleport-assisted flow is the default unless a full walk is requested.
How You "See" the Game State
You have complete visibility into the game - you are NOT "blind."
Vision Tools Available
| Tool | What It Shows | How To Use |
|---|---|---|
| get_runtime_scene_structure | Full scene tree with positions, visibility, properties | Primary vision tool |
| Debugger Variables panel | All runtime variables (flags, inventory, positions) | For detailed inspection |
| Runtime eval patterns | Direct access to specific nodes/values | For quick access/teleport |
Example: Seeing Player Position
get_runtime_scene_structure
# Returns: World/Player: position=[384, 96], visible=true
Example: Seeing NPC Positions
get_runtime_scene_structure
# Returns: World/NPCs/Hermes: position=[400, 100], visible=true
# Returns: World/NPCs/Aeetes: position=[512, 96], visible=true
Example: Checking Quest State
Method 1: Debugger (easiest)
- Press F5 to start debugging
- Set breakpoint anywhere
- Check Variables panel →
quest_flagsdictionary
Method 2: MCP (when game running)
get_runtime_scene_structure
# Look for: World/GameState → quest_flags in properties
Navigation
Option 1: Teleport (fastest for HPV testing)
get_tree().root.get_child(3).get_node("Player").set_global_position(Vector2(384, 96))
Option 2: Walk (for movement testing)
simulate_action_tap --action ui_up
# Verify position with: get_runtime_scene_structure
Key Point: get_runtime_scene_structure IS your vision - it shows every node's position, visibility, and properties in real-time. Use it to know where things are and navigate efficiently.
Minimal Workflow
- Run project headed (MCP).
- Get runtime scene structure once.
- Identify the active scene root (world or location).
- If
DialogueBoxis visible, clear it (playerinteractis ignored while dialogue is open). - Teleport to target, interact, and advance dialogue with batched inputs.
- Verify state (DialogueBox text, marker visibility, flags).
- Log findings in PLAYTESTING_ROADMAP.md.
MCP Verification Checklist
Before starting HPV playtesting, always verify MCP is working:
# Step 1: Run health check
powershell -ExecutionPolicy Bypass -File scripts/mcp-health-check.ps1
# Step 2: If not healthy, run recovery
powershell -ExecutionPolicy Bypass -File .claude/skills/mcp-recovery/scripts/recover.ps1
# Step 3: Start game (see Agent-Specific Commands below)
# Step 4: Verify connection (see Agent-Specific Commands below)
Health Check Status:
healthy→ Proceed with playtestingdegraded→ Follow recommendations, then recheckdown→ Run recovery script
For automated recovery: Use /mcp-recover skill or see HPV_GUIDE.md for manual procedures.
Agent-Specific MCP Commands
IMPORTANT: Different agent types use DIFFERENT commands for MCP access.
For IDE Extension Agents (Cursor, VS Code)
Use the PowerShell wrapper for all MCP CLI commands:
# Start game
powershell -Command "scripts/mcp-wrapper.ps1 -McpCommand 'run_project --headed'"
# Verify connection
powershell -Command "scripts/mcp-wrapper.ps1 -McpCommand 'get_runtime_scene_structure' -Quiet"
# Get scene structure
powershell -Command "scripts/mcp-wrapper.ps1 -McpCommand 'get_runtime_scene_structure' -Quiet"
# Simulate input
powershell -Command "scripts/mcp-wrapper.ps1 -McpCommand 'simulate_action_tap --action ui_accept'"
# Execute editor script
powershell -Command "scripts/mcp-wrapper.ps1 -McpCommand 'execute_editor_script --code GameState.new_game()'"
See: docs/agent-instructions/tools/mcp-wrapper-usage.md
For Terminal Agents (RooCode, GPT Codex)
Use direct npx CLI commands:
# Start game
npx -y godot-mcp-cli@latest run_project --headed
# Verify connection
npx -y godot-mcp-cli@latest get_runtime_scene_structure
For Desktop Agents
Use native MCP tools (mcp__godot__*) directly.
DO NOT use PowerShell wrapper (you have native access).
Efficiency Rules (Core)
- Batch inputs with 400-800 ms waits, then verify once.
- Cache node paths early; avoid repeated scene tree dumps.
- Gate actions on state checks (DialogueBox visible, marker visible, flags).
- Prefer teleporting to targets unless a full walk is required.
- Reminder:
_unhandled_inputexits early whenDialogueBox.visible == true, sointeractwon't fire until dialogue is closed.
Teleport Pattern (Expression-Only)
Use method calls in eval (no var or assignment). Examples:
-
Find world by name when available: get_tree().root.find_child("World", true, false)
-
Teleport the player (replace WORLD_INDEX if needed): get_tree().root.get_child(WORLD_INDEX).get_node("Player").set_global_position(Vector2(384, 64))
-
Trigger a quest area: get_tree().root.get_child(WORLD_INDEX).get_node("QuestTriggers/Quest10")._on_body_entered(get_tree().root.get_child(WORLD_INDEX).get_node("Player"))
-
Read dialogue text: get_tree().root.get_child(WORLD_INDEX).get_node("UI/DialogueBox/Panel/Text").text
Logging Checklist
- Scope (quest range, shortcuts used, minigames skipped or not)
- What worked and what failed
- Any blockers and repro steps
- Next steps for the next playtester
MCP CLI Access (IMPORTANT)
See "Agent-Specific MCP Commands" section above for your agent type.
Quick reference:
- IDE Extension agents → Use PowerShell wrapper (
scripts/mcp-wrapper.ps1) - Terminal agents → Use direct npx CLI
- Desktop agents → Use native MCP tools
Do NOT look for mcp__godot__* tools if you're an IDE extension agent - they don't exist in your environment. Use the PowerShell wrapper instead.
MCP Command Quick Reference
Game Control
For IDE Extension Agents (PowerShell wrapper):
powershell -Command "scripts/mcp-wrapper.ps1 -McpCommand 'run_project --headed'"
powershell -Command "scripts/mcp-wrapper.ps1 -McpCommand 'stop_running_project' -Quiet"
powershell -Command "scripts/mcp-wrapper.ps1 -McpCommand 'get_runtime_scene_structure' -Quiet"
powershell -Command "scripts/mcp-wrapper.ps1 -McpCommand 'simulate_action_tap --action ui_accept'"
For Terminal Agents (direct npx):
npx -y godot-mcp-cli@latest run_project --headed # Start game
npx -y godot-mcp-cli@latest stop_running_project # Stop game
npx -y godot-mcp-cli@latest get_runtime_scene_structure # Inspect live scene
npx -y godot-mcp-cli@latest simulate_action_tap --action "ui_accept" # Press button
Input Actions (Common)
ui_accept- Confirm/advance dialogue (A button / Enter)ui_cancel- Cancel/skip cutscene (B button / Esc)ui_up/ui_down/ui_left/ui_right- Movement/navigationinteract- Interact with objects (E key)
Runtime Eval Patterns
# Get world (typically index 3 or 4 - check with get_runtime_scene_structure)
get_tree().root.get_child(WORLD_INDEX)
# Set quest flag
GameState.set_flag("quest_2_active", true)
# Check flag
GameState.get_flag("quest_2_active")
# Give item
GameState.add_item("herb_id", 1)
# Teleport player
get_tree().root.get_child(WORLD_INDEX).get_node("Player").set_global_position(Vector2(x, y))
# Read dialogue text
get_tree().root.get_child(WORLD_INDEX).get_node("UI/DialogueBox/Panel/Text").text
# Trigger quest manually
get_tree().root.get_child(WORLD_INDEX).get_node("QuestTriggers/Quest2")._on_body_entered(get_tree().root.get_child(WORLD_INDEX).get_node("Player"))
Common Node Paths (Circe's Garden)
World Structure
- World:
get_tree().root.get_child(3)orget_child(4)- verify with get_runtime_scene_structure - Player:
World/Player - UI:
World/UI - DialogueBox:
World/UI/DialogueBox - Dialogue Text:
World/UI/DialogueBox/Panel/Text - Choices Container:
World/UI/DialogueBox/Panel/Choices
Quest Triggers
World/QuestTriggers/Quest0throughWorld/QuestTriggers/Quest11World/QuestTriggers/Epilogue
NPCs (Common)
World/NPCs/HermesWorld/NPCs/AeetesWorld/NPCs/CirceWorld/NPCs/DaedalusWorld/NPCs/Scylla
Interaction Points
- House Door:
World/Interactables/HouseDoor - Boat:
World/Interactables/Boat - Note:
World/Interactables/AeetesNote
Quest Flags Reference
Progression Flags
prologue_complete- Prologue finishedmet_hermes- Hermes first interactionquest_N_active- Quest N startedquest_N_complete- Quest N finished
Story State
scylla_petrified- Bad ending achievedending_witch- Witch ending chosenending_healer- Healer ending chosengame_complete- Game finishedfree_play_unlocked- Post-game unlocked
Item Flags
has_herb_id- Herb identification itemhas_sap- Extracted saphas_calming_draught- Crafted calming draughthas_reversal_elixir- Crafted reversal elixirhas_binding_ward- Crafted binding wardpetrification_potion- Final quest item
Minigame Skip Flags (For Testing)
Set these via eval to skip minigames during HPV:
quest_1_complete- Skip herb ID minigamequest_2_complete- Skip sap extractionquest_4_complete- Skip farmingquest_5_complete- Skip calming draught craftingquest_6_complete- Skip reversal elixir craftingquest_7_complete- Skip binding ward craftingquest_8_complete- Skip final crafting
In This Repo
- Log in docs/playtesting/PLAYTESTING_ROADMAP.md
- HPV uses MCP or manual playthrough; avoid headless tests for playability
- Minigames are typically skipped unless explicitly requested
- Godot 4.5.1, project at
C:/Users/Sam/Documents/GitHub/v2_heras_garden/
Didn't find tool you were looking for?