summer-engine 1.3.0 → 1.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/CHANGELOG.md +67 -0
  2. package/README.md +7 -2
  3. package/dist/bin/summer.js +24 -1
  4. package/dist/commands/doctor.js +44 -20
  5. package/dist/commands/setup.js +77 -6
  6. package/dist/commands/skills.js +5 -3
  7. package/dist/lib/format.d.ts +23 -0
  8. package/dist/lib/format.js +60 -0
  9. package/dist/lib/format.test.d.ts +1 -0
  10. package/dist/lib/format.test.js +36 -0
  11. package/dist/lib/skills-registry.d.ts +16 -0
  12. package/dist/lib/skills-registry.js +35 -0
  13. package/package.json +5 -3
  14. package/skills/_meta/skill-test/SKILL.md +1 -1
  15. package/skills/_shared/summer-folder.md +44 -0
  16. package/skills/_tests/specs/art-direction.md +115 -0
  17. package/skills/_tests/specs/audio-direction.md +123 -0
  18. package/skills/_tests/specs/brainstorm-game.md +99 -0
  19. package/skills/_tests/specs/debug.md +94 -0
  20. package/skills/_tests/specs/design-level.md +113 -0
  21. package/skills/_tests/specs/design-mechanic.md +112 -0
  22. package/skills/_tests/specs/design-npc.md +112 -0
  23. package/skills/_tests/specs/export-and-ship.md +114 -0
  24. package/skills/_tests/specs/fps-controller.md +5 -5
  25. package/skills/_tests/specs/play.md +88 -0
  26. package/skills/_tests/specs/setup-multiplayer.md +106 -0
  27. package/skills/_tests/specs/tune-performance.md +104 -0
  28. package/skills/_tests/specs/vfx.md +98 -0
  29. package/skills/ai-and-npcs/design-npc/SKILL.md +343 -0
  30. package/skills/asset-pipeline/asset-strategy/SKILL.md +1 -0
  31. package/skills/audio/audio-direction/SKILL.md +258 -0
  32. package/skills/catalog.yaml +13 -3
  33. package/skills/character-controllers/fps-controller/SKILL.md +1 -0
  34. package/skills/debugging/debug/SKILL.md +137 -0
  35. package/skills/deployment/export-and-ship/SKILL.md +300 -0
  36. package/skills/gameplay-mechanics/design-mechanic/SKILL.md +265 -0
  37. package/skills/level-design/design-level/SKILL.md +266 -0
  38. package/skills/multiplayer-and-networking/setup-multiplayer/SKILL.md +328 -0
  39. package/skills/performance/tune-performance/SKILL.md +219 -0
  40. package/skills/rendering-and-lighting/3d-lighting/SKILL.md +1 -0
  41. package/skills/rendering-and-lighting/art-direction/SKILL.md +284 -0
  42. package/skills/scene-and-project/brainstorm-game/SKILL.md +210 -0
  43. package/skills/scene-and-project/make-game/SKILL.md +1 -0
  44. package/skills/scene-and-project/play/SKILL.md +108 -0
  45. package/skills/scene-and-project/scene-composition/SKILL.md +1 -0
  46. package/skills/scripting-patterns/gdscript-patterns/SKILL.md +1 -0
  47. package/skills/ui-and-ux/ui-basics/SKILL.md +1 -0
  48. package/skills/visual-effects/vfx/SKILL.md +280 -0
@@ -0,0 +1,258 @@
1
+ ---
2
+ name: audio-direction
3
+ description: Use when defining the sonic identity — music style, instruments, SFX vocabulary, dynamic music plan. Outputs an audio bible at `.summer/audio-bible.md`. Trigger on "audio direction", "audio bible", "music style", "sound design", "what should it sound like", "dynamic music".
4
+ license: MIT
5
+ compatibility: [Cursor, Claude Code, Windsurf, Codex]
6
+ category: audio
7
+ user-invocable: true
8
+ allowed-tools: Read Grep Glob Write Edit summer_get_project_context summer_get_scene_tree summer_inspect_node summer_add_node summer_project_setting summer_generate_audio
9
+ paths: [".summer/**", "project.godot", "**/*.tscn", "audio/**"]
10
+ ---
11
+
12
+ # /audio-direction — Define the Sonic Identity
13
+
14
+ ## Overview
15
+
16
+ Most indie games sound like a single library used flat. The same generic "swoosh" for menu, jump, pickup, hit. That's not audio direction — that's audio absence. This skill builds an audio bible that names the music style, the SFX vocabulary, the dynamic music plan, and the spatial / mix rules. Writes to `.summer/audio-bible.md` and configures the audio bus layout in the project so the rest of the work has a real foundation.
17
+
18
+ **Core principle:** SFX needs a *vocabulary*, not a *library*. Eight named SFX classes with consistent character beat 80 random library hits.
19
+
20
+ ## Steps
21
+
22
+ ### 1. Open with three references
23
+
24
+ Ask exactly this:
25
+
26
+ > Three reference tracks, games, or films for the music. What instruments matter? And what's the SFX vibe — chunky, clean, synthetic, or organic?
27
+
28
+ Three is the minimum. One or two collapses into a clone. References are the highest-signal input — listen carefully.
29
+
30
+ If they freeze, offer four axes (not titles):
31
+
32
+ > Pick the closest: a) orchestral + cinematic (Hollow Knight, Journey), b) lo-fi electronic + ambient (Disco Elysium, Outer Wilds), c) chiptune / synth (Hyper Light Drifter, Celeste), d) acoustic / folk (Sable, A Short Hike).
33
+
34
+ ### 2. Read the brief and art bible if they exist
35
+
36
+ ```
37
+ Read .summer/GameSoul.md
38
+ Read .summer/art-bible.md
39
+ ```
40
+
41
+ Audio must rhyme with the visuals. Quote it back:
42
+
43
+ > Art bible says "soft, hand-warmed, golden-hour, painterly". That rhymes with acoustic / folk / lo-fi over orchestral or aggressive synth. Confirming.
44
+
45
+ If the brief says "horror", that constrains the music style harder than the user's references will. Name the constraint.
46
+
47
+ ### 3. Pin the music style
48
+
49
+ Force one primary style. Sub-styles can blend, but a primary is required.
50
+
51
+ | Style | Anchor instruments | Pairs with | Avoid |
52
+ |---|---|---|---|
53
+ | Orchestral cinematic | Strings, brass, choir | Story-led, fantasy | Casual / cozy |
54
+ | Acoustic / folk | Guitar, piano, hand percussion | Cozy, narrative | Action / horror |
55
+ | Lo-fi electronic | Vintage synth pad, tape sat, light beat | Atmospheric, indie | Combat-heavy |
56
+ | Chiptune / synthwave | 8-bit / 16-bit chips, FM synth | Retro, platformer | Realism |
57
+ | Industrial / metal | Distorted bass, percussion-led | Horror, action | Cozy |
58
+ | Ambient drone | Pads, no drums, slow movement | Walking sim, horror | Action |
59
+ | Jazz / fusion | Live instruments, improv | Stylish, narrative | Generic action |
60
+ | Tracker / hyperpop | Glitchy, dense, modern | Esoteric, indie | Mass appeal |
61
+
62
+ Ask:
63
+
64
+ > One primary style. Which?
65
+
66
+ ### 4. Define tempo + key range
67
+
68
+ Concrete numbers, not "varies".
69
+
70
+ ```
71
+ Tempo range: 80–110 BPM (slow side; combat would push 120+)
72
+ Key center: D minor (warm but melancholic)
73
+ Modulation rule: combat tracks shift to D dorian, calm tracks to D natural minor
74
+ Time signature: 4/4 default; 6/8 for emotional cues
75
+ ```
76
+
77
+ ### 5. Build the SFX vocabulary
78
+
79
+ Eight named classes. Each class has a *character*, not a single sound.
80
+
81
+ | Class | Character | Examples in this game | DON'T |
82
+ |---|---|---|---|
83
+ | **UI** | Soft, woody, short (60-100ms) | Menu hover, button click, tab switch | No bell tones, no synth blips |
84
+ | **Pickup positive** | Warm, ascending interval (major third), 200-400ms | Coin, key, heal | No pure sine "ding" |
85
+ | **Pickup neutral** | Brief tactile, no melodic component | Note, breadcrumb, lore item | No ascending pitch (reads as reward) |
86
+ | **Negative / damage** | Punchy low-mid, slight detune | Player hit, enemy hit, fall damage | No long reverb tail |
87
+ | **Movement / footstep** | Material-aware (wood / stone / grass) | Walk, run, jump, land | No same sample for all surfaces |
88
+ | **Attack / action** | Front-loaded transient, short body | Swing, parry, dash | No layered orchestral hit |
89
+ | **Ambient layer** | Continuous, low presence | Wind, room tone, distant waves | No looping melody |
90
+ | **Stinger / event** | Distinctive, rare, melodic | Boss intro, level clear, story beat | No reuse for normal events |
91
+
92
+ Ask:
93
+
94
+ > Eight classes above. Adjust any character / examples / DON'Ts?
95
+
96
+ ### 6. Define the dynamic music plan
97
+
98
+ Static music = one track loops forever in a level. Boring. Dynamic music = layers swell with player state. Pick a model.
99
+
100
+ | Model | How it works | Cost | Best for |
101
+ |---|---|---|---|
102
+ | **Layered stems** | One bar / multiple instrument layers; combat adds drum stem, calm removes it | Medium (need stems authored) | Most games |
103
+ | **Vertical re-orchestration** | Same melody, different instrumentation per state | High (composer-led) | Story-led / boss-heavy |
104
+ | **Horizontal sequencing** | Different tracks for different states, crossfade | Low (just author 3-5 full tracks) | Vertical slice scope |
105
+ | **Procedural / generative** | Generate from rules in real-time | High dev cost | Special-case |
106
+
107
+ Pick one. State the state machine:
108
+
109
+ ```
110
+ States:
111
+ CALM — exploration, low intensity
112
+ TENSION — enemies aware but not engaged
113
+ COMBAT — engaged
114
+ VICTORY — encounter cleared (4-second sting → return to CALM)
115
+
116
+ Transitions:
117
+ CALM → TENSION when an enemy detects the player (2s crossfade)
118
+ TENSION → COMBAT when first damage exchanged (instant drum stem)
119
+ COMBAT → VICTORY when last enemy dies (drum stem cuts, brass swell)
120
+ VICTORY → CALM after 4s
121
+
122
+ Rules:
123
+ No state stays > 90s without variation (loop with bar-1 randomization)
124
+ Volume ducking: dialogue active → music -6dB
125
+ Boss music is its own track; ignores normal state machine
126
+ ```
127
+
128
+ ### 7. Define the spatial + mix rules
129
+
130
+ | Rule | Value |
131
+ |---|---|
132
+ | 3D attenuation curve | Inverse-square (default), max distance 25m |
133
+ | Reverb buses | 1 small (interior), 1 large (cave / hall), 1 outdoor |
134
+ | HRTF for player | ON (headphone-friendly directional cues) |
135
+ | Master ceiling | -1 dBTP (true peak, no clipping on consoles) |
136
+ | Music vs SFX vs UI mix | -8 dB / 0 dB / -3 dB (SFX is loudest) |
137
+ | Footstep rolloff | Cuts at 4m for player; cuts at 10m for NPC (player needs them, distant NPCs are noise) |
138
+ | Compression | Light bus compression on master (2:1, slow attack, 100ms release) |
139
+
140
+ ### 8. Configure the audio bus layout
141
+
142
+ Real audio in Godot needs a bus layout. Default Godot has Master only — configure the buses now.
143
+
144
+ **Preferred (Summer MCP):** Buses are typically in `default_bus_layout.tres`. Modify project setting:
145
+
146
+ ```
147
+ summer_project_setting(key="audio/buses/default_bus_layout", value="res://audio/default_bus_layout.tres")
148
+ ```
149
+
150
+ Ask the user:
151
+
152
+ > May I create `audio/default_bus_layout.tres` with these buses: Master / Music / SFX / UI / Voice / Ambient / Reverb_Small / Reverb_Large / Reverb_Outdoor?
153
+
154
+ On yes, write the `.tres` directly via `Write` (it's plain Godot resource format the host can produce):
155
+
156
+ ```
157
+ Write audio/default_bus_layout.tres
158
+ ```
159
+
160
+ **Fallback (no MCP):** Print the `.tres` for the user to paste, plus the `project.godot` line.
161
+
162
+ ### 9. Save the audio bible
163
+
164
+ Always write the bible. Path: `.summer/audio-bible.md`.
165
+
166
+ ```markdown
167
+ # Audio Bible — <Game Name>
168
+
169
+ **References:** <3 specific tracks / games / films>
170
+ **Style:** <one of the 8 above>
171
+ **Tempo / key:** 80–110 BPM, D minor, 4/4
172
+
173
+ ## SFX Vocabulary
174
+ | Class | Character | Examples | DON'T |
175
+ |---|---|---|---|
176
+ | UI | Soft, woody, 60-100ms | hover, click | bell tones |
177
+ | Pickup positive | Warm major-third, 200-400ms | coin, heal | pure sine |
178
+ | ... | ... | ... | ... |
179
+
180
+ ## Dynamic Music Plan
181
+ **Model:** Layered stems
182
+ **States:** CALM / TENSION / COMBAT / VICTORY
183
+ **Transitions:** ...
184
+ **Rules:** ...
185
+
186
+ ## Spatial + Mix
187
+ - 3D attenuation: inverse-square, 25m
188
+ - Reverb buses: small / large / outdoor
189
+ - HRTF: ON
190
+ - Master ceiling: -1 dBTP
191
+ - Mix bus: Music -8 dB, SFX 0 dB, UI -3 dB
192
+ - Footstep rolloff: 4m player / 10m NPC
193
+
194
+ ## Bus Layout
195
+ Master → Music, SFX (→ Reverb_Small / Large / Outdoor), UI, Voice, Ambient
196
+ ```
197
+
198
+ Ask:
199
+
200
+ > May I create `.summer/audio-bible.md` with this bible?
201
+
202
+ ### 10. Optional — generate first SFX seeds
203
+
204
+ If the user wants to start generating, propose 3-5 SFX seeds aligned with the vocabulary. These are starting points, not finals.
205
+
206
+ ```
207
+ summer_generate_audio(prompt="soft woody UI click, 80ms, no reverb, neutral pitch", duration=0.1)
208
+ summer_generate_audio(prompt="warm major-third coin pickup, 300ms, light reverb", duration=0.3)
209
+ summer_generate_audio(prompt="punchy low-mid player damage hit, slight detune, 200ms, no tail", duration=0.2)
210
+ ```
211
+
212
+ Ask first:
213
+
214
+ > May I generate first-pass SFX seeds for UI, pickup, and damage classes? They're starting points, not finals.
215
+
216
+ ### 11. Route to the next step
217
+
218
+ End with:
219
+
220
+ > Bible saved. Next:
221
+ > - `/summer:design-mechanic` to wire SFX cues into specific mechanics.
222
+ > - `/summer:vfx` if you haven't paired audio with visual effect cues yet.
223
+ > - Author or generate the calm music track first; it's the longest-running and sets the room tone.
224
+
225
+ ## Common mistakes
226
+
227
+ | Mistake | Fix |
228
+ |---|---|
229
+ | Single reference for music | Three minimum. Listen for the *common* element across them. |
230
+ | "Library" instead of "vocabulary" | A bag of free SFX with no shared character feels random. Eight named classes with character notes. |
231
+ | Same SFX for all events | If pickup-coin and pickup-key sound identical, the player learns nothing from audio. |
232
+ | No dynamic music plan | Static loops bore in 90s. Pick a model (layered / vertical / horizontal / procedural). |
233
+ | Music louder than SFX | Players need SFX for gameplay; music is mood. Default mix is -8 dB music vs 0 dB SFX. |
234
+ | No reverb buses | "Send" architecture (rooms route to a small/large/outdoor reverb bus) is mandatory or your mix sounds dry-then-wet inconsistently. |
235
+ | Pure sine "ding" for pickup | Reads as cheap mobile game. Use a major-third interval with character. |
236
+ | Same footstep sample for all surfaces | Material-aware footsteps are 80% of the perceived audio quality. |
237
+ | No master ceiling / true peak | Audio clips on console builds without `-1 dBTP` ceiling. Always set it. |
238
+ | Calling SetResourceProperty on inline sub_resources | Silent fail. See `_shared/mcp-tools-reference.md` § Trap. |
239
+
240
+ ## Collaborative protocol
241
+
242
+ This skill writes one bible (`.summer/audio-bible.md`), creates a bus layout (`audio/default_bus_layout.tres`), modifies `project.godot`, and may generate audio (metered). Always ask before writing or generating. See `_shared/collaborative-protocol.md`.
243
+
244
+ ## Want a working starter?
245
+
246
+ No template — this is a workflow that produces the bible the rest of the project obeys. After the bible exists, the bus layout is set up and any subsequent audio work (footstep system, dynamic music) reads from it.
247
+
248
+ ## See also
249
+
250
+ - `_shared/collaborative-protocol.md`
251
+ - `_shared/godot-version.md` — Godot 4.5 audio API notes
252
+ - `_shared/mcp-tools-reference.md`
253
+ - `scene-and-project/brainstorm-game/SKILL.md` — produces the brief that anchors the bible
254
+ - `rendering-and-lighting/art-direction/SKILL.md` — the visual counterpart; audio must rhyme with it
255
+ - `audio/audio-bus-setup/SKILL.md` (NEXT) — implements the bus layout in detail
256
+ - `audio/3d-spatial-audio/SKILL.md` (NEXT) — spatial attenuation patterns
257
+ - `audio/footstep-systems/SKILL.md` (NEXT) — material-aware footstep impl
258
+ - `audio/dynamic-music-stingers/SKILL.md` (LATER) — implements the dynamic music plan
@@ -138,6 +138,13 @@ skills:
138
138
  public: true
139
139
  recommended: true
140
140
  last-tested: 2026-05-05
141
+ - name: play
142
+ category: scene-and-project
143
+ status: HAVE
144
+ public: true
145
+ recommended: true
146
+ user-invocable: true
147
+ last-tested: 2026-05-05
141
148
  - name: make-game
142
149
  category: scene-and-project
143
150
  status: HAVE
@@ -600,11 +607,14 @@ skills:
600
607
  public: true
601
608
 
602
609
  # ── debugging ──
603
- - name: debugger-basics
610
+ - name: debug
604
611
  category: debugging
605
- status: NEXT
612
+ status: HAVE
606
613
  public: true
607
- - name: error-triage-via-summer-mcp
614
+ recommended: true
615
+ user-invocable: true
616
+ last-tested: 2026-05-05
617
+ - name: debugger-basics
608
618
  category: debugging
609
619
  status: NEXT
610
620
  public: true
@@ -4,6 +4,7 @@ description: First-person character controller with WASD movement, mouse look, j
4
4
  license: MIT
5
5
  compatibility: [Cursor, Claude Code, Windsurf, Codex]
6
6
  category: character-controllers
7
+ user-invocable: false
7
8
  template-id: template-3d-fps
8
9
  allowed-tools: Read Grep summer_add_node summer_set_prop summer_set_resource_property summer_input_map_bind summer_save_scene summer_get_script_errors
9
10
  paths: ["**/*.gd", "**/*.tscn"]
@@ -0,0 +1,137 @@
1
+ ---
2
+ name: debug
3
+ description: Use when the user reports their game is broken, crashing, behaving unexpectedly, or says "debug", "fix", "something's wrong", or "it's not working". Triages the bug end-to-end via Summer Engine's diagnostic tools (console, debugger errors, script errors), locates the offending code, proposes a fix, and verifies the fix.
4
+ license: MIT
5
+ compatibility: [Cursor, Claude Code, Windsurf, Codex]
6
+ category: debugging
7
+ user-invocable: true
8
+ allowed-tools: Read Grep Glob Edit summer_get_console summer_get_debugger_errors summer_get_script_errors summer_get_diagnostics summer_clear_console summer_play summer_stop summer_is_running summer_get_scene_tree summer_inspect_node
9
+ paths: ["**/*.gd", "**/*.tscn", "**/*.cs"]
10
+ ---
11
+
12
+ # /debug — Triage and Fix a Bug
13
+
14
+ ## Overview
15
+
16
+ A bug in a Godot/Summer game can hide in three places: scripts (GDScript/C# compile or runtime errors), the engine console (printed messages, warnings), or the scene/resource state (wrong property, missing collider, broken signal connection). This skill walks all three before guessing.
17
+
18
+ **Core principle:** read what the engine actually saw, not what the code looks like it does.
19
+
20
+ ## Steps
21
+
22
+ ### 1. Get the user's description first
23
+
24
+ Ask one short question:
25
+
26
+ > What's happening? Briefly: when does it go wrong, and what do you expect vs. what you see?
27
+
28
+ Wait for the answer before doing anything else. Don't start grepping code yet — the user's words narrow the search 10x.
29
+
30
+ ### 2. Read the engine's actual error state
31
+
32
+ Always do this in order. Each tool answers a different question.
33
+
34
+ **Preferred (Summer MCP):**
35
+
36
+ ```
37
+ summer_get_script_errors # Compile errors? (cheapest, do first)
38
+ summer_get_console # Print() output, warnings, info
39
+ summer_get_debugger_errors # Runtime errors with stack traces
40
+ summer_get_diagnostics # Aggregated count + summary
41
+ ```
42
+
43
+ If the bug is reproducible only at runtime and the engine isn't currently playing:
44
+
45
+ ```
46
+ summer_clear_console # Clean slate
47
+ summer_play # Run it
48
+ # (let the user reproduce the bug)
49
+ summer_get_debugger_errors # Now read what blew up
50
+ summer_stop # When done
51
+ ```
52
+
53
+ **Fallback (no MCP — engine isn't connected):**
54
+
55
+ Ask the user to copy-paste the engine's Output panel and Debugger errors. Inspect manually.
56
+
57
+ ### 3. Locate the offending code
58
+
59
+ For each error, follow the stack trace to the file + line. Use host file tools:
60
+
61
+ ```
62
+ Read <file>:<line-near-error>
63
+ ```
64
+
65
+ Read 20–40 lines around the error site. Don't open the whole file unless you need to — context budget matters.
66
+
67
+ If the error mentions a node path (e.g. `./World/Player/Camera`), inspect it:
68
+
69
+ ```
70
+ summer_inspect_node "./World/Player/Camera"
71
+ ```
72
+
73
+ ### 4. Form a hypothesis and propose the fix
74
+
75
+ State it in one sentence:
76
+
77
+ > The error happens because <root cause>. The fix is <one-line summary>.
78
+
79
+ Then ask:
80
+
81
+ > May I edit `<file>` to <do exactly this>?
82
+
83
+ Don't guess at multiple fixes at once. Pick one. If wrong, the next iteration is cheap.
84
+
85
+ ### 5. Apply the fix
86
+
87
+ On user yes, edit the file with host tools (`Edit`/`Write`). Single focused change.
88
+
89
+ ### 6. Verify
90
+
91
+ Re-run the relevant check:
92
+
93
+ ```
94
+ summer_get_script_errors # If it was a compile error
95
+ summer_play → summer_get_debugger_errors → summer_stop # If runtime
96
+ ```
97
+
98
+ Report:
99
+
100
+ > Fixed. <One-line description of what changed.>
101
+
102
+ If still broken: go back to step 4 with the new error state. State explicitly that the first hypothesis was wrong.
103
+
104
+ ## Common bug patterns and how to spot them
105
+
106
+ | Symptom | Likely cause | First check |
107
+ |---|---|---|
108
+ | `Invalid set index 'X' (on base: Nil)` | Node path resolved to null | `summer_inspect_node` the path |
109
+ | `Identifier not declared` (script error) | Missing `class_name` or wrong scope | `summer_get_script_errors` |
110
+ | Game runs but sprite doesn't appear | Node added but not visible (transform / parent / layer) | `summer_get_scene_tree` + inspect parent |
111
+ | Signal handler never fires | Connection not made, or connected to wrong instance | `summer_inspect_node` of emitter, check connections |
112
+ | Player falls through floor | CollisionShape3D has no shape, or shape is inline sub_resource | `summer_inspect_resource` on the CollisionShape |
113
+ | Mouse capture stuck | `Input.set_mouse_mode` not paired with release on focus loss | `summer_get_console` for warnings |
114
+ | Game hangs on start | Infinite loop in `_ready()` or `_process()` | `summer_get_debugger_errors` after a forced stop |
115
+
116
+ ## Anti-patterns (don't do these)
117
+
118
+ - **Don't** start by reading the user's whole codebase. The error tells you where to look.
119
+ - **Don't** propose a sweeping refactor for a single bug. One file, one change, verify.
120
+ - **Don't** call `summer_set_resource_property` on an inline `sub_resource` — it silently fails. See `_shared/mcp-tools-reference.md` § "Trap".
121
+ - **Don't** call `summer_play` without `summer_clear_console` first if you want clean output to read.
122
+ - **Don't** skip the user's description in step 1. "What were you trying to do" beats "what does the code do" 9/10 times.
123
+
124
+ ## Collaborative protocol
125
+
126
+ This skill writes files. Always ask before each edit step. See `_shared/collaborative-protocol.md`.
127
+
128
+ ## Want a working starter?
129
+
130
+ No template — this is a workflow, not a project scaffold. It works against any Godot/Summer project that has Summer MCP wired up.
131
+
132
+ ## See also
133
+
134
+ - `_shared/mcp-tools-reference.md` — full tool list
135
+ - `_shared/godot-version.md` — engine version + LLM cutoff risks
136
+ - `scripting-patterns/gdscript-patterns/SKILL.md` — what good GDScript looks like
137
+ - `scene-and-project/play/SKILL.md` — running the game