Godot Plugin Skill
Control Godot 4.x Editor through 30 built-in tools. Supports 80+ node types.
First-Time Setup
If godot_execute tool is not available, install the gateway extension:
# From skill directory
./scripts/install-extension.sh
# Restart gateway
openclaw gateway restart
The extension files are in extension/ directory.
Quick Reference
Core Tools
| Category |
Key Tools |
| Scene |
scene.create, scene.getCurrent, scene.open, scene.save |
| Node |
node.find, node.create, node.delete, node.getData |
| Transform |
transform.setPosition, transform.setRotation, transform.setScale |
| Debug |
debug.tree, debug.screenshot, console.getLogs |
| Input |
input.keyPress, input.mouseClick, input.actionPress |
| Editor |
editor.play, editor.stop, editor.getState |
Common Workflows
1. Scene Creation
Use godot_execute tool:
godot_execute(tool="scene.create", parameters={rootType: "Node2D", name: "Level1"})
godot_execute(tool="node.create", parameters={type: "CharacterBody2D", name: "Player"})
godot_execute(tool="scene.save")
2. Find & Modify Nodes
godot_execute(tool="node.find", parameters={name: "Player"})
godot_execute(tool="node.getData", parameters={path: "Player"})
godot_execute(tool="transform.setPosition", parameters={path: "Player", x: 100, y: 200})
3. Game Testing with Input
godot_execute(tool="editor.play")
godot_execute(tool="input.keyPress", parameters={key: "W"})
godot_execute(tool="input.actionPress", parameters={action: "jump"})
godot_execute(tool="debug.screenshot")
godot_execute(tool="editor.stop")
4. Check Logs
godot_execute(tool="console.getLogs", parameters={limit: 50})
godot_execute(tool="console.getLogs", parameters={type: "error", limit: 20})
Tool Categories
Console (2 tools)
console.getLogs - Get logs from Godot log file {limit: 100, type: "error"|"warning"|""}
console.clear - Placeholder (logs can't be cleared programmatically)
Scene (5 tools)
scene.getCurrent - Get current scene info
scene.list - List all .tscn/.scn files
scene.open - Open scene by path
scene.save - Save current scene
scene.create - Create new scene {rootType: "Node2D"|"Node3D"|"Control", name: "SceneName"}
Node (6 tools)
node.find - Find by name, type, or group
node.create - Create node (80+ types: CSGBox3D, MeshInstance3D, ColorRect, etc.)
node.delete - Delete node by path
node.getData - Get node info, children, transform
node.getProperty - Get property value
node.setProperty - Set property value (Vector2/3 auto-converted)
Transform (3 tools)
transform.setPosition - Set position {x, y} or {x, y, z}
transform.setRotation - Set rotation (degrees)
transform.setScale - Set scale
Editor (4 tools)
editor.play - Play current or custom scene
editor.stop - Stop playing
editor.pause - Toggle pause
editor.getState - Get playing state, version, project name
Debug (3 tools)
debug.screenshot - Capture viewport
debug.tree - Get scene tree as text
debug.log - Print message
Input (7 tools) - For Game Testing
input.keyPress - Press and release key {key: "W"}
input.keyDown - Hold key down
input.keyUp - Release key
input.mouseClick - Click at position {x, y, button: "left"|"right"|"middle"}
input.mouseMove - Move mouse to position {x, y}
input.actionPress - Press input action {action: "jump"}
input.actionRelease - Release input action
Script (2 tools)
script.list - List .gd files
script.read - Read script content
Resource (1 tool)
resource.list - List files by extension
Supported Keys for Input
A-Z, 0-9, SPACE, ENTER, ESCAPE, TAB, BACKSPACE, DELETE
UP, DOWN, LEFT, RIGHT
SHIFT, CTRL, ALT
F1-F12
Node Types for Creation
| Type |
Description |
Node2D |
2D spatial |
Node3D |
3D spatial |
Sprite2D |
2D sprite |
CharacterBody2D |
2D character |
CharacterBody3D |
3D character |
RigidBody2D/3D |
Physics body |
Area2D/3D |
Trigger area |
Camera2D/3D |
Camera |
Label, Button |
UI elements |
Tips
Input Simulation
- Only works during Play mode
- Use
input.actionPress for mapped actions (from Input Map)
- Use
input.keyPress for direct key simulation
Finding Nodes
node.find {name: "Player"} # By name substring
node.find {type: "Sprite2D"} # By exact type
node.find {group: "enemies"} # By group
Vector Properties
node.setProperty auto-converts dictionaries to Vector2/Vector3:
{path: "Cam", property: "zoom", value: {x: 2, y: 2}} # → Vector2(2, 2)
Console Logs
console.getLogs {limit: 50} # Last 50 lines
console.getLogs {type: "error"} # Errors only
console.getLogs {type: "warning"} # Warnings only
🔐 Security: Model Invocation Setting
When publishing to ClawHub, you can configure disableModelInvocation:
| Setting |
AI Auto-Invoke |
User Explicit Request |
false (default) |
✅ Allowed |
✅ Allowed |
true |
❌ Blocked |
✅ Allowed |
Recommendation: true
Reason: During Godot development, it's useful for AI to autonomously perform supporting tasks like checking scene tree, taking screenshots, and inspecting nodes.
When to use true: For sensitive tools (payments, deletions, message sending, etc.)
1---2name: godot-plugin3description: Control Godot Editor via OpenClaw Godot Plugin. Use for Godot game development tasks including scene management, node manipulation, input simulation, debugging, and editor control. Triggers on Godot-related requests like inspecting scenes, creating nodes, taking screenshots, testing gameplay, or controlling the editor.4---5
6# Godot Plugin Skill
7
8Control Godot 4.x Editor through 30 built-in tools. Supports 80+ node types.
9
10## First-Time Setup
11
12If `godot_execute` tool is not available, install the gateway extension:
13
14```bash
15# From skill directory
16./scripts/install-extension.sh
17
18# Restart gateway
19openclaw gateway restart
20```
21
22The extension files are in `extension/` directory.
23
24## Quick Reference
25
26### Core Tools
27
28| Category | Key Tools |
29|----------|-----------|
30| **Scene** | `scene.create`, `scene.getCurrent`, `scene.open`, `scene.save` |
31| **Node** | `node.find`, `node.create`, `node.delete`, `node.getData` |
32| **Transform** | `transform.setPosition`, `transform.setRotation`, `transform.setScale` |
33| **Debug** | `debug.tree`, `debug.screenshot`, `console.getLogs` |
34| **Input** | `input.keyPress`, `input.mouseClick`, `input.actionPress` |
35| **Editor** | `editor.play`, `editor.stop`, `editor.getState` |
36
37## Common Workflows
38
39### 1. Scene Creation
40
41Use `godot_execute` tool:
42- `godot_execute(tool="scene.create", parameters={rootType: "Node2D", name: "Level1"})`
43- `godot_execute(tool="node.create", parameters={type: "CharacterBody2D", name: "Player"})`
44- `godot_execute(tool="scene.save")`
45
46### 2. Find & Modify Nodes
47
48- `godot_execute(tool="node.find", parameters={name: "Player"})`
49- `godot_execute(tool="node.getData", parameters={path: "Player"})`
50- `godot_execute(tool="transform.setPosition", parameters={path: "Player", x: 100, y: 200})`
51
52### 3. Game Testing with Input
53
54- `godot_execute(tool="editor.play")`
55- `godot_execute(tool="input.keyPress", parameters={key: "W"})`
56- `godot_execute(tool="input.actionPress", parameters={action: "jump"})`
57- `godot_execute(tool="debug.screenshot")`
58- `godot_execute(tool="editor.stop")`
59
60### 4. Check Logs
61
62- `godot_execute(tool="console.getLogs", parameters={limit: 50})`
63- `godot_execute(tool="console.getLogs", parameters={type: "error", limit: 20})`
64
65## Tool Categories
66
67### Console (2 tools)
68- `console.getLogs` - Get logs from Godot log file {limit: 100, type: "error"|"warning"|""}
69- `console.clear` - Placeholder (logs can't be cleared programmatically)
70
71### Scene (5 tools)
72- `scene.getCurrent` - Get current scene info
73- `scene.list` - List all .tscn/.scn files
74- `scene.open` - Open scene by path
75- `scene.save` - Save current scene
76- `scene.create` - Create new scene {rootType: "Node2D"|"Node3D"|"Control", name: "SceneName"}
77
78### Node (6 tools)
79- `node.find` - Find by name, type, or group
80- `node.create` - Create node (80+ types: CSGBox3D, MeshInstance3D, ColorRect, etc.)
81- `node.delete` - Delete node by path
82- `node.getData` - Get node info, children, transform
83- `node.getProperty` - Get property value
84- `node.setProperty` - Set property value (Vector2/3 auto-converted)
85
86### Transform (3 tools)
87- `transform.setPosition` - Set position {x, y} or {x, y, z}
88- `transform.setRotation` - Set rotation (degrees)
89- `transform.setScale` - Set scale
90
91### Editor (4 tools)
92- `editor.play` - Play current or custom scene
93- `editor.stop` - Stop playing
94- `editor.pause` - Toggle pause
95- `editor.getState` - Get playing state, version, project name
96
97### Debug (3 tools)
98- `debug.screenshot` - Capture viewport
99- `debug.tree` - Get scene tree as text
100- `debug.log` - Print message
101
102### Input (7 tools) - For Game Testing
103- `input.keyPress` - Press and release key {key: "W"}
104- `input.keyDown` - Hold key down
105- `input.keyUp` - Release key
106- `input.mouseClick` - Click at position {x, y, button: "left"|"right"|"middle"}
107- `input.mouseMove` - Move mouse to position {x, y}
108- `input.actionPress` - Press input action {action: "jump"}
109- `input.actionRelease` - Release input action
110
111### Script (2 tools)
112- `script.list` - List .gd files
113- `script.read` - Read script content
114
115### Resource (1 tool)
116- `resource.list` - List files by extension
117
118## Supported Keys for Input
119
120```
121A-Z, 0-9, SPACE, ENTER, ESCAPE, TAB, BACKSPACE, DELETE
122UP, DOWN, LEFT, RIGHT
123SHIFT, CTRL, ALT
124F1-F12
125```
126
127## Node Types for Creation
128
129| Type | Description |
130|------|-------------|
131| `Node2D` | 2D spatial |
132| `Node3D` | 3D spatial |
133| `Sprite2D` | 2D sprite |
134| `CharacterBody2D` | 2D character |
135| `CharacterBody3D` | 3D character |
136| `RigidBody2D/3D` | Physics body |
137| `Area2D/3D` | Trigger area |
138| `Camera2D/3D` | Camera |
139| `Label`, `Button` | UI elements |
140
141## Tips
142
143### Input Simulation
144- Only works during **Play mode**
145- Use `input.actionPress` for mapped actions (from Input Map)
146- Use `input.keyPress` for direct key simulation
147
148### Finding Nodes
149```
150node.find {name: "Player"} # By name substring
151node.find {type: "Sprite2D"} # By exact type
152node.find {group: "enemies"} # By group
153```
154
155### Vector Properties
156`node.setProperty` auto-converts dictionaries to Vector2/Vector3:
157```
158{path: "Cam", property: "zoom", value: {x: 2, y: 2}} # → Vector2(2, 2)
159```
160
161### Console Logs
162```
163console.getLogs {limit: 50} # Last 50 lines
164console.getLogs {type: "error"} # Errors only
165console.getLogs {type: "warning"} # Warnings only
166```
167
168## 🔐 Security: Model Invocation Setting
169
170When publishing to ClawHub, you can configure `disableModelInvocation`:
171
172| Setting | AI Auto-Invoke | User Explicit Request |
173|---------|---------------|----------------------|
174| `false` (default) | ✅ Allowed | ✅ Allowed |
175| `true` | ❌ Blocked | ✅ Allowed |
176
177### Recommendation: **`true`**
178
179**Reason:** During Godot development, it's useful for AI to autonomously perform supporting tasks like checking scene tree, taking screenshots, and inspecting nodes.
180
181**When to use `true`:** For sensitive tools (payments, deletions, message sending, etc.)