summer-engine 1.5.0 → 2.0.0

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 (56) hide show
  1. package/.claude-plugin/plugin.json +18 -10
  2. package/.codex-plugin/plugin.json +36 -8
  3. package/.cursor-plugin/plugin.json +19 -11
  4. package/.opencode/INSTALL.md +69 -0
  5. package/.opencode/plugins/summer.js +9 -4
  6. package/CHANGELOG.md +31 -1
  7. package/README.md +268 -86
  8. package/dist/bin/summer.js +0 -0
  9. package/dist/commands/assets.d.ts +2 -0
  10. package/dist/commands/assets.js +189 -0
  11. package/dist/commands/create.js +55 -17
  12. package/dist/commands/debug.d.ts +2 -0
  13. package/dist/commands/debug.js +127 -0
  14. package/dist/commands/list.js +24 -5
  15. package/dist/commands/project.d.ts +2 -0
  16. package/dist/commands/project.js +170 -0
  17. package/dist/commands/scene.d.ts +2 -0
  18. package/dist/commands/scene.js +290 -0
  19. package/dist/lib/banner.js +2 -2
  20. package/dist/lib/log-filters.d.ts +53 -0
  21. package/dist/lib/log-filters.js +130 -0
  22. package/dist/lib/plugin-manifests.test.d.ts +1 -0
  23. package/dist/lib/plugin-manifests.test.js +134 -0
  24. package/dist/lib/remote-templates.d.ts +25 -0
  25. package/dist/lib/remote-templates.js +86 -0
  26. package/dist/lib/skills-registry.d.ts +17 -1
  27. package/dist/lib/skills-registry.js +23 -1
  28. package/dist/lib/telemetry.d.ts +13 -0
  29. package/dist/lib/telemetry.js +63 -0
  30. package/dist/lib/with-engine.d.ts +14 -0
  31. package/dist/lib/with-engine.js +109 -0
  32. package/dist/mcp/tools/asset-tools.js +12 -13
  33. package/dist/mcp/tools/debug-tools.js +32 -9
  34. package/dist/mcp/tools/with-engine.js +4 -0
  35. package/gemini-extension.json +2 -2
  36. package/hooks/pre-commit-doctor.sh +0 -0
  37. package/hooks/run-hook.cmd +0 -0
  38. package/hooks/session-start.sh +0 -0
  39. package/marketplace.json +2 -2
  40. package/package.json +3 -3
  41. package/skills/README.md +1 -1
  42. package/skills/_meta/skill-create/SKILL.md +1 -1
  43. package/skills/_meta/skill-improve/SKILL.md +1 -1
  44. package/skills/_meta/skill-test/SKILL.md +1 -1
  45. package/skills/_meta/using-summer/SKILL.md +130 -0
  46. package/skills/asset-pipeline/asset-strategy/SKILL.md +1 -1
  47. package/skills/catalog.yaml +17 -2
  48. package/skills/character-controllers/fps-controller/SKILL.md +1 -1
  49. package/skills/debugging/debug/SKILL.md +102 -82
  50. package/skills/rendering-and-lighting/3d-lighting/SKILL.md +1 -1
  51. package/skills/scene-and-project/browse-templates/SKILL.md +105 -0
  52. package/skills/scene-and-project/make-game/SKILL.md +159 -346
  53. package/skills/scene-and-project/new-project/SKILL.md +106 -0
  54. package/skills/scene-and-project/scene-composition/SKILL.md +1 -1
  55. package/skills/scripting-patterns/gdscript-patterns/SKILL.md +1 -1
  56. package/skills/ui-and-ux/ui-basics/SKILL.md +1 -1
@@ -0,0 +1,130 @@
1
+ ---
2
+ name: using-summer
3
+ description: Use when starting any conversation in a Summer Engine project — establishes how to find and use Summer skills and the summer-engine MCP, requiring Skill tool invocation before ANY response including clarifying questions.
4
+ license: MIT
5
+ compatibility: [Cursor, Claude Code, Codex, Windsurf, Gemini, OpenCode, Factory, Copilot]
6
+ category: _meta
7
+ user-invocable: false
8
+ ---
9
+
10
+ <SUBAGENT-STOP>
11
+ If you were dispatched as a subagent to execute a specific task, skip this skill. The parent agent has already loaded it.
12
+ </SUBAGENT-STOP>
13
+
14
+ <EXTREMELY-IMPORTANT>
15
+ If you think there is even a 1% chance a Summer skill might apply to what you are doing, you ABSOLUTELY MUST invoke the skill.
16
+
17
+ IF A SKILL APPLIES TO YOUR TASK, YOU DO NOT HAVE A CHOICE. YOU MUST USE IT.
18
+
19
+ This is not negotiable. This is not optional. You cannot rationalize your way out of this.
20
+ </EXTREMELY-IMPORTANT>
21
+
22
+ ## Instruction Priority
23
+
24
+ Summer skills override default model behavior, but **user instructions always win**:
25
+
26
+ 1. **User's explicit instructions** (CLAUDE.md, GEMINI.md, AGENTS.md, direct requests) — highest priority.
27
+ 2. **Summer skills** — override default agent behavior where they conflict.
28
+ 3. **Default system prompt** — lowest priority.
29
+
30
+ If `CLAUDE.md` says "skip the brainstorm, just build it" and a skill says "always brainstorm first" — follow the user. The user is in control.
31
+
32
+ ## What Summer Is
33
+
34
+ **Summer Engine** is an AI-native game engine — editor, scene graph, asset pipeline, and runtime are all instrumented for programmatic control by AI agents. **Summer** (this skill set + MCP server) is how your coding agent talks to it.
35
+
36
+ Two layers:
37
+
38
+ - **Skills** — discipline guides that fire on specific situations: brainstorming a game, designing a mechanic, building an FPS controller, debugging a crash, shipping a build. Each one is a SKILL.md you load via the Skill tool.
39
+ - **MCP tools** — `summer_*` tools that talk to the running Summer Engine on `localhost:6550`. Scene mutation (`summer_add_node`, `summer_set_prop`), inspection (`summer_get_scene_tree`, `summer_inspect_node`), play/diagnostics (`summer_play`, `summer_get_diagnostics`), asset import/generation (`summer_import_from_url`, `summer_generate_3d`), and 30+ more.
40
+
41
+ **Scripting language:** Summer Engine is compatible with Godot 4.5. You can write game code in either:
42
+
43
+ - **GDScript** (`.gd`) — the default. Best supported by Summer skills (see `summer:gdscript-patterns`). Use this unless the user has explicitly chosen C#.
44
+ - **C#** (`.cs`) — fully supported by the engine. There is no `summer:csharp-patterns` skill yet — when writing C#, use the Godot 4.5 C# API from first principles. The patterns are different (different lifecycle method names, different signal API, different export attributes), so don't blindly translate GDScript idioms. Confirm with the user that they want C# before producing it; switching languages mid-project is painful.
45
+
46
+ Scenes are always `.tscn`/`.scn`. Resources are always `.tres`/`.res`. Drive the engine through `summer_*` tools — do not hand-edit `.tscn` files; the editor holds in-memory state that diverges from disk.
47
+
48
+ The engine must be running for MCP tools that touch scenes or diagnostics. If it isn't, the tool returns an error pointing the user at `summer run`.
49
+
50
+ ## How to Access Skills
51
+
52
+ **Claude Code / Cursor / Codex / Copilot CLI:** Use the `Skill` tool. When you invoke a skill, its content loads — follow it directly. Never use `Read` on a skill file.
53
+
54
+ **Gemini CLI:** Use `activate_skill`.
55
+
56
+ **OpenCode:** Skills are auto-discovered from the registered directory; load via OpenCode's native skill mechanism.
57
+
58
+ ## The Rule
59
+
60
+ **Invoke the relevant skill BEFORE any response or action.** Even a 1% chance a skill might apply means you check. If the loaded skill turns out not to fit, you don't have to follow it — but you do have to load it first to know.
61
+
62
+ ```
63
+ User message arrives.
64
+ │
65
+ ├── Does any Summer skill match? ── No ──▶ Respond directly.
66
+ │ │
67
+ │ Yes
68
+ │ │
69
+ ├── Invoke the Skill tool.
70
+ ├── Announce: "Using summer:<skill> to <purpose>."
71
+ ├── If the skill has a checklist, create a todo per item.
72
+ └── Follow the skill exactly.
73
+ ```
74
+
75
+ ## Red Flags (You Are Rationalizing — Stop)
76
+
77
+ These thoughts mean STOP. Check skills first.
78
+
79
+ | Thought | Reality |
80
+ |---|---|
81
+ | "This is just a quick fix" | Quick fixes break games. Check the skill. |
82
+ | "I know how to add a node, I'll just call the MCP" | The skill encodes the order of operations. Check it. |
83
+ | "The user just wants me to start" | Most "just build it" requests still benefit from the brainstorm-game skill. Offer it. |
84
+ | "I can read the .tscn file directly" | `summer_get_scene_tree` and `summer_inspect_node` are authoritative. Files lag the editor's in-memory state. |
85
+ | "I'll skip the soul file" | `.summer/GameSoul.md` is what every other skill reads. Honor it. |
86
+ | "I don't need to brainstorm — they said FPS" | Even with the genre named, brainstorm-game scopes mechanics, art direction, and the cut list. Skip only if explicitly told to. |
87
+ | "I'll write the GDScript myself, no skill" | `gdscript-patterns` encodes idioms that Claude/Codex/Cursor regularly get wrong (signal connection, type hints, `_ready` vs `_process`). |
88
+ | "The engine isn't running, I'll just edit files" | Editing scene files directly while the engine is running silently overwrites in-memory state. Check the skill. |
89
+ | "I remember this skill" | Skills evolve. Re-read the current version. |
90
+
91
+ ## Skill Priority
92
+
93
+ When multiple Summer skills could apply, run them in this order:
94
+
95
+ 1. **Process skills first** — `brainstorm-game`, `debug`, `play`. These determine HOW to approach the task.
96
+ 2. **Discipline skills second** — `gdscript-patterns`, `scene-composition`, `art-direction`, `audio-direction`. These shape the content.
97
+ 3. **Build skills third** — `fps-controller`, `design-mechanic`, `design-level`, `setup-multiplayer`. These produce the artifacts.
98
+
99
+ > "I want to make a game" → `brainstorm-game` first, then build skills.
100
+ > "Fix this crash" → `debug` first, then domain skills.
101
+ > "Add an FPS controller" → check `scene-composition` first, then `fps-controller`.
102
+
103
+ ## Skill Types
104
+
105
+ - **Rigid skills** (`debug`, `gdscript-patterns`): follow exactly. Don't adapt away the discipline.
106
+ - **Flexible skills** (`art-direction`, `design-mechanic`): adapt the principles to the project.
107
+
108
+ The skill itself tells you which. Default to rigid when unsure.
109
+
110
+ ## When the Engine Isn't Running
111
+
112
+ If an MCP tool returns "Summer Engine is not running":
113
+
114
+ 1. Tell the user: `summer run` to start it (or open Summer Engine and load the project).
115
+ 2. While waiting, do non-MCP work — read code, plan the next steps, draft GDScript.
116
+ 3. Retry the tool. The MCP server lazy-reconnects on the next call.
117
+
118
+ Do NOT fall back to editing `.tscn` files directly. The engine reads them on disk but holds in-memory state that diverges, and saving from the editor will overwrite your file edits.
119
+
120
+ ## When the User Hasn't Set Up Summer
121
+
122
+ If skills aren't found or the MCP server fails to start:
123
+
124
+ 1. Check whether `summer` is on PATH: `which summer` / `where summer`.
125
+ 2. If not, point them at: `npm install -g summer-engine` then `summer setup <agent> --yes`.
126
+ 3. If `summer doctor` is available, run it: `summer doctor` reports auth, engine, port, and skill state.
127
+
128
+ ## User Instructions Trump Everything
129
+
130
+ A direct user instruction ("skip the brainstorm", "just write the code", "don't use the MCP, edit files") overrides this skill. Surface the trade-off in one sentence ("Skipping brainstorm — heads up, scope creep is the most common reason game projects die.") and proceed as instructed.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: asset-strategy
3
- description: Decision guide for how to create different game asset types — generated 3D, library search, AI textures, or primitives. Use when planning asset creation, picking an asset pipeline, or writing image-to-3D prompts. Trigger on "assets", "3D models", "textures", "art pipeline".
3
+ description: Use when planning asset creation, picking an asset pipeline, or writing image-to-3D prompts — decision guide for whether to generate 3D, search the library, generate AI textures, or use primitives. Includes prompt templates for the AI image-to-3D pipeline. Trigger on "assets", "3D models", "textures", "art pipeline", "make a model", "generate asset".
4
4
  license: MIT
5
5
  compatibility: [Cursor, Claude Code, Windsurf, Codex]
6
6
  category: asset-pipeline
@@ -146,6 +146,20 @@ skills:
146
146
  recommended: true
147
147
  user-invocable: true
148
148
  last-tested: 2026-05-05
149
+ - name: new-project
150
+ category: scene-and-project
151
+ status: HAVE
152
+ public: true
153
+ recommended: true
154
+ user-invocable: true
155
+ last-tested: 2026-05-09
156
+ - name: browse-templates
157
+ category: scene-and-project
158
+ status: HAVE
159
+ public: true
160
+ recommended: true
161
+ user-invocable: true
162
+ last-tested: 2026-05-09
149
163
  - name: scene-composition
150
164
  category: scene-and-project
151
165
  status: HAVE
@@ -163,8 +177,9 @@ skills:
163
177
  category: scene-and-project
164
178
  status: HAVE
165
179
  public: true
166
- recommended: false
167
- last-tested: 2026-05-05
180
+ recommended: true
181
+ user-invocable: true
182
+ last-tested: 2026-05-09
168
183
  - name: godot-project-conventions
169
184
  category: scene-and-project
170
185
  status: NEXT
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: fps-controller
3
- description: First-person character controller with WASD, mouse look, jump, coyote time, jump buffering, air control, and external-velocity handling. Use when building an FPS, first-person movement, or a 3D character that walks, jumps, and gets shoved around. Trigger on "FPS", "first-person", "WASD", "character controller", "mouse look".
3
+ description: Use when building an FPS, first-person movement, or a 3D character that walks, jumps, and reacts to external forces — production-quality first-person controller with WASD, mouse look, jump, coyote time, jump buffering, air control, and external-velocity handling. Trigger on "FPS", "first-person", "WASD", "character controller", "mouse look", "player movement", "jump".
4
4
  license: MIT
5
5
  compatibility: [Cursor, Claude Code, Windsurf, Codex]
6
6
  category: character-controllers
@@ -1,137 +1,157 @@
1
1
  ---
2
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.
3
+ description: Use when the user reports a bug, crash, error, or unexpected behavior in a Godot/Summer project, before making any code or scene changes — runs a disciplined script-errors → console → debugger → hypothesis → fix → verify loop. Trigger on "debug", "crash", "error", "broken", "not working", "freezes", "wrong".
4
4
  license: MIT
5
- compatibility: [Cursor, Claude Code, Windsurf, Codex]
5
+ compatibility: [Cursor, Claude Code, Codex, Windsurf, Gemini, OpenCode]
6
6
  category: debugging
7
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"]
8
+ allowed-tools: Read Edit Grep summer_get_diagnostics summer_get_script_errors summer_get_console summer_clear_console summer_get_debugger_errors summer_play summer_stop summer_is_running summer_inspect_node summer_inspect_resource summer_get_scene_tree
9
+ paths: ["**/*.gd", "**/*.cs", "**/*.tscn", "**/*.tres", "project.godot"]
10
10
  ---
11
11
 
12
- # /debug — Triage and Fix a Bug
12
+ # /debug — Triage and Fix a Bug End-to-End
13
13
 
14
- ## Overview
14
+ The disciplined debugging loop for Godot/Summer projects. Read the error before guessing. Form a hypothesis before editing. Verify the fix before declaring victory. Never grep the codebase before reading the actual error.
15
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.
16
+ **Core principle:** The debugger already knows what's wrong. Your job is to listen to it before doing anything else.
17
17
 
18
- **Core principle:** read what the engine actually saw, not what the code looks like it does.
18
+ ## When to use this skill
19
19
 
20
- ## Steps
20
+ - The user says "it crashes", "it broke", "throws an error", "doesn't work", "freezes", "wrong behavior".
21
+ - The user pastes a stack trace.
22
+ - A previous build or test step failed and the user wants to fix it.
21
23
 
22
- ### 1. Get the user's description first
24
+ ## When NOT to use this skill
23
25
 
24
- Ask one short question:
26
+ - The user is asking how to *prevent* a class of bug — that's a design question. Use the relevant discipline skill (`gdscript-patterns`, `scene-composition`).
27
+ - The user is asking for a feature with a known unfinished spec — that's `make-game` territory.
28
+ - The bug is in a non-Godot file the host agent can debug natively (CI config, npm scripts) — use the host's debugger.
25
29
 
26
- > What's happening? Briefly: when does it go wrong, and what do you expect vs. what you see?
30
+ ## The Loop
27
31
 
28
- Wait for the answer before doing anything else. Don't start grepping code yet — the user's words narrow the search 10x.
32
+ ```
33
+ Listen → Diagnose → Hypothesize → Propose → Fix → Verify
34
+ ```
29
35
 
30
- ### 2. Read the engine's actual error state
36
+ Do not skip steps. Do not loop back to "Hypothesize" without re-running the cheap diagnostic.
31
37
 
32
- Always do this in order. Each tool answers a different question.
38
+ ### 1. Listen
33
39
 
34
- **Preferred (Summer MCP):**
40
+ Ask the user **one** focused question and wait for the answer:
35
41
 
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
+ > What's happening, and when does it happen?
42
43
 
43
- If the bug is reproducible only at runtime and the engine isn't currently playing:
44
+ If they already gave a clear symptom in the request, skip the question.
45
+ If they say "something's broken", that one question is your only call until they reply. Don't run tools yet.
44
46
 
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
- ```
47
+ ### 2. Diagnose — cheapest tool first
52
48
 
53
- **Fallback (no MCP — engine isn't connected):**
49
+ In strict order. Stop at the first one that returns useful signal.
54
50
 
55
- Ask the user to copy-paste the engine's Output panel and Debugger errors. Inspect manually.
51
+ | Order | Tool | When |
52
+ |---|---|---|
53
+ | 1 | `summer_get_script_errors` | Always start here. Catches GDScript parse errors, missing identifiers, signature mismatches. Cheapest, no side effects. |
54
+ | 2 | `summer_get_diagnostics` | Aggregate console + debugger error counts. One call, broad picture. |
55
+ | 3 | `summer_get_console` | Read the editor Output panel — print statements, warnings, errors that didn't crash. |
56
+ | 4 | `summer_get_debugger_errors` | Runtime errors caught by the debugger. Use AFTER `summer_play` for runtime-only bugs. |
56
57
 
57
- ### 3. Locate the offending code
58
+ **If `summer_get_script_errors` is clean and the user says it crashes only when running:** it's a runtime bug. Go to step 2b.
58
59
 
59
- For each error, follow the stack trace to the file + line. Use host file tools:
60
+ ### 2b. Runtime-only bugs
60
61
 
61
62
  ```
62
- Read <file>:<line-near-error>
63
+ summer_clear_console
64
+ summer_play
65
+ ─▶ ASK USER: "Reproduce the bug now."
66
+ (wait for confirmation)
67
+ summer_get_debugger_errors
68
+ summer_stop
63
69
  ```
64
70
 
65
- Read 20–40 lines around the error site. Don't open the whole file unless you need to — context budget matters.
71
+ Do not skip the "reproduce now" prompt. Auto-running and grabbing whatever's in the buffer leads you to chase ghosts from previous sessions.
66
72
 
67
- If the error mentions a node path (e.g. `./World/Player/Camera`), inspect it:
73
+ ### 2c. MCP unavailable (engine not running, or no Summer install)
68
74
 
69
- ```
70
- summer_inspect_node "./World/Player/Camera"
71
- ```
75
+ If `summer_get_script_errors` returns "Summer Engine is not running" or the tool isn't available:
72
76
 
73
- ### 4. Form a hypothesis and propose the fix
77
+ 1. Ask the user to copy-paste the Output panel and the Debugger panel from the Godot editor.
78
+ 2. Reason over the pasted text exactly as you would over MCP output.
79
+ 3. Continue with the rest of the loop unchanged.
74
80
 
75
- State it in one sentence:
81
+ Do NOT loop on MCP retry. Do NOT pretend the engine will come back. Use the fallback the moment it fails once.
76
82
 
77
- > The error happens because <root cause>. The fix is <one-line summary>.
83
+ ### 3. Hypothesize — one specific theory
78
84
 
79
- Then ask:
85
+ State exactly one hypothesis, in one sentence, naming the file and line.
80
86
 
81
- > May I edit `<file>` to <do exactly this>?
87
+ > **Good:** "Typo at `scripts/player.gd:14` — `GRAVTY` should be `GRAVITY`."
88
+ > **Bad:** "Could be a typo, missing import, or wrong scope."
82
89
 
83
- Don't guess at multiple fixes at once. Pick one. If wrong, the next iteration is cheap.
90
+ If you have multiple plausible theories, pick the highest-prior-probability one. The user can correct you if you're wrong; chasing all three at once wastes their time.
84
91
 
85
- ### 5. Apply the fix
92
+ **Verify the hypothesis without editing.** If the error mentions a missing node, call `summer_inspect_node` to confirm. If it's a missing resource, `summer_inspect_resource`. If it's a scene-graph issue, `summer_get_scene_tree`. **Confirm the world state matches the error before proposing a fix.**
86
93
 
87
- On user yes, edit the file with host tools (`Edit`/`Write`). Single focused change.
94
+ ### 4. Propose — ask before writing
88
95
 
89
- ### 6. Verify
96
+ Surface the proposed fix in plain language and ask permission. Two patterns:
90
97
 
91
- Re-run the relevant check:
98
+ **Code fix:**
99
+ > May I edit `scripts/player.gd` to rename `GRAVTY` → `GRAVITY` on line 14?
92
100
 
93
- ```
94
- summer_get_script_errors # If it was a compile error
95
- summer_play → summer_get_debugger_errors → summer_stop # If runtime
96
- ```
101
+ **Scene fix vs code fix:**
102
+ > The script calls `audio.play()` but the `AudioStreamPlayer` child is gone. Two options:
103
+ > 1. Re-add the `AudioStreamPlayer` to `./Coin` (preserves the original behavior).
104
+ > 2. Null-check in `coin.gd` (defensive, but the audio is silent).
105
+ >
106
+ > Which one do you want?
97
107
 
98
- Report:
108
+ **Never** unilaterally pick when there are two equally valid fixes (scene vs code, defensive vs strict, fast vs correct). Ask.
99
109
 
100
- > Fixed. <One-line description of what changed.>
110
+ ### 5. Fix — minimal, focused
101
111
 
102
- If still broken: go back to step 4 with the new error state. State explicitly that the first hypothesis was wrong.
112
+ - For GDScript edits: `Read` the 20–40 lines around the error, `Edit` the exact change. Don't read the whole file. Don't reformat. Don't rename other things.
113
+ - For scene edits: use the appropriate `summer_*` tool (`summer_add_node`, `summer_set_prop`, `summer_replace_node`). Group multi-step changes in `summer_batch` for one undo step.
114
+ - **Trap to avoid:** never call `summer_set_resource_property` against an inline `sub_resource` — the value is silently dropped. If the property is on a nested resource, first call `summer_set_prop` with the resource class name to instantiate a standalone resource, then drill in. See `_shared/mcp-tools-reference.md`.
103
115
 
104
- ## Common bug patterns and how to spot them
116
+ ### 6. Verify — re-run the diagnostic that found it
105
117
 
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 |
118
+ The fix is not done until the same diagnostic that found the bug returns clean.
119
+
120
+ - Script error → re-run `summer_get_script_errors`.
121
+ - Runtime error → re-run the play/reproduce/check-debugger loop.
122
+ - Console warning → `summer_clear_console`, then `summer_play` and confirm clean output.
115
123
 
116
- ## Anti-patterns (don't do these)
124
+ If the diagnostic is still red after the fix, you formed the wrong hypothesis. Go back to step 3 — do **not** make a second edit on top of the first. Revert if the first edit didn't help, then re-hypothesize.
117
125
 
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.
126
+ ## Anti-Patterns
123
127
 
124
- ## Collaborative protocol
128
+ | Don't | Why |
129
+ |---|---|
130
+ | Grep the whole project before reading the error | The error already names the file and line. Save the user's tokens. |
131
+ | Read whole files | 20–40 lines around the error is enough 90% of the time. |
132
+ | Run multiple diagnostics in parallel | They mask each other's signal. Cheapest first, escalate. |
133
+ | Edit before asking | The user owns the fix decision, you own the diagnosis. |
134
+ | "Try this, see if it works" | That's not a hypothesis, that's gambling. State the theory or ask another question. |
135
+ | Reformat the file while you're in it | Out-of-scope edits make the diff hostile to review. |
136
+ | Auto-fix linter warnings unrelated to the bug | Same reason. |
137
+ | Declare victory after editing | Re-run the diagnostic. Always. |
125
138
 
126
- This skill writes files. Always ask before each edit step. See `_shared/collaborative-protocol.md`.
139
+ ## Quick reference — common Godot bug families
127
140
 
128
- ## Want a working starter?
141
+ | Symptom | First tool | Common cause |
142
+ |---|---|---|
143
+ | "Identifier X not declared" | `summer_get_script_errors` | Typo, missing import, wrong scope |
144
+ | "Invalid call. Nonexistent function 'X' in base 'Nil'" | `summer_get_debugger_errors` after `summer_play` | Node was deleted in editor, code still references it |
145
+ | "Cannot find type 'X'" | `summer_get_script_errors` | Class name mismatch, missing autoload, missing `class_name` |
146
+ | Game runs but visuals wrong | `summer_get_console` + `summer_inspect_node` | Material/light/camera misconfigured |
147
+ | Game freezes (no crash) | `summer_get_console` after `summer_play` for ~3s | Infinite loop in `_process` or `_ready` |
148
+ | `summer_set_resource_property` "succeeded" but nothing changed | n/a | Inline sub-resource silent-fail. Use `summer_set_prop` with class name first. |
129
149
 
130
- No template — this is a workflow, not a project scaffold. It works against any Godot/Summer project that has Summer MCP wired up.
150
+ ## Closing
131
151
 
132
- ## See also
152
+ A debug session is done when:
153
+ 1. The user-reported symptom no longer reproduces.
154
+ 2. The diagnostic that originally flagged the bug returns clean.
155
+ 3. No new errors or warnings have been introduced.
133
156
 
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
157
+ Tell the user one short sentence: "Fixed `<file>:<line>` — `<change>`. Diagnostic clean." Then stop.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: 3d-lighting
3
- description: Lighting setup, WorldEnvironment, sky, and shadows for 3D scenes. Use when setting up a 3D scene, adding lights, configuring environment, or adjusting shadows. Trigger on "lighting", "shadows", "WorldEnvironment", "sun", "ambient".
3
+ description: Use when setting up lighting in a 3D scene — adding lights, configuring WorldEnvironment, sky, or shadows. Covers DirectionalLight3D vs Omni vs Spot, shadow tuning, ambient/sky-driven lighting, and Godot 4.5-era conventions. Trigger on "lighting", "shadows", "WorldEnvironment", "sun", "ambient", "sky", "light".
4
4
  license: MIT
5
5
  compatibility: [Cursor, Claude Code, Windsurf, Codex]
6
6
  category: rendering-and-lighting
@@ -0,0 +1,105 @@
1
+ ---
2
+ name: browse-templates
3
+ description: Use when the user wants to see available Summer Engine project templates, start from an existing template, or asks "what templates exist?" — fetches the live list from github.com/SummerEngine, presents the choices, and creates a project from the chosen template via `summer create <slug> <project-name>`. Trigger on "templates", "starter", "boilerplate", "from a template", "what's available", "show me templates", "third-person", "platformer", "multiplayer starter".
4
+ license: MIT
5
+ compatibility: [Cursor, Claude Code, Codex, Windsurf, Gemini, OpenCode]
6
+ category: scene-and-project
7
+ user-invocable: true
8
+ allowed-tools: Bash Read summer_get_project_context
9
+ paths: ["**/project.godot"]
10
+ ---
11
+
12
+ # /browse-templates — Pick a community template and clone it
13
+
14
+ Summer's community templates live in [github.com/SummerEngine](https://github.com/orgs/SummerEngine/repositories) under `template-*` repos: `template-3d-third-person-controller`, `template-3d-lan-multiplayer-starter`, `template-2d-platformer`, and so on. They're working starter projects — open in Summer Engine and play immediately.
15
+
16
+ ## When to use this skill
17
+
18
+ - User asks "what templates do you have?" / "what starter projects exist?"
19
+ - User says "start from a template" / "use the X template" / "is there a Y starter?"
20
+ - User describes a game shape that maps to a known template (third-person 3D, multiplayer, 2D platformer)
21
+ - User asks for a specific known template by name
22
+
23
+ ## When NOT to use this skill
24
+
25
+ - User says "blank project" / "empty project" / "from scratch" → use `summer:new-project`.
26
+ - User wants to *make* a new template (contribute one) → that's not this skill; point them at the README's contributing section.
27
+
28
+ ## Steps
29
+
30
+ ### 1. Fetch the live list
31
+
32
+ ```
33
+ summer list templates
34
+ ```
35
+
36
+ That hits the GitHub org API and prints both built-in templates (offline-friendly) and community templates with descriptions. **Always run this first — never recommend a template from memory.** The list evolves; what you remember may be stale, archived, or renamed.
37
+
38
+ If the command errors out (rate-limit, offline), tell the user and offer the built-ins (`empty`, `3d-basic`) plus the canonical URL: [github.com/SummerEngine](https://github.com/orgs/SummerEngine/repositories).
39
+
40
+ ### 2. Help the user pick
41
+
42
+ If the user has a specific game shape in mind, narrow before showing all options:
43
+
44
+ > "Looking for a third-person 3D template — `3d-third-person-controller` looks right. Want me to clone it as `my-game`?"
45
+
46
+ If they're undecided, show 3–5 options grouped by genre, with a one-line description each. **Don't dump the full list.** A long menu freezes decisions.
47
+
48
+ ### 3. Confirm the project name
49
+
50
+ Default is the template slug (so `3d-third-person-controller` → directory `3d-third-person-controller`). Almost always wrong. **Always ask:**
51
+
52
+ > "What do you want to call your project? (default: `3d-third-person-controller`)"
53
+
54
+ ### 4. Clone
55
+
56
+ ```
57
+ summer create <template-slug> <project-name>
58
+ ```
59
+
60
+ Example:
61
+
62
+ ```
63
+ summer create 3d-third-person-controller hero-game
64
+ ```
65
+
66
+ This:
67
+ - Clones the latest `main` (or default branch) of `template-3d-third-person-controller`
68
+ - Drops the `.git` directory so the user starts with their own history
69
+ - Prints the source URL for transparency
70
+
71
+ Pass `--keep-git` if the user wants the upstream history (rare).
72
+
73
+ ### 5. Open it in the engine
74
+
75
+ ```
76
+ summer run <project-name>
77
+ ```
78
+
79
+ Confirm it opens. Then invoke `summer:play` to verify the template runs as expected before doing any custom work on top.
80
+
81
+ ## Anti-patterns
82
+
83
+ | Don't | Why |
84
+ |---|---|
85
+ | Recommend a template from memory | List evolves. `summer list templates` is the source of truth. |
86
+ | Dump the full template list as a wall of text | 5 curated picks beats 20 generic ones. Match to user intent. |
87
+ | Default the project name to the slug | `3d-third-person-controller/` is a UX-hostile directory name. Always ask. |
88
+ | Skip `summer run` after cloning | Templates can break upstream — verify the user has a working baseline before they edit. |
89
+ | Clone into an existing directory | The CLI errors out; respect that and ask for a different name. |
90
+
91
+ ## Edge cases
92
+
93
+ - **`git` not installed** → `summer create` errors with a clear message. Tell the user to install git, or fall back to a built-in template.
94
+ - **Template archived or moved** → the API filter excludes archived repos. If a user names one explicitly that's gone, the create command lists what's currently available.
95
+ - **Network down** → fall back to `empty` or `3d-basic`. Don't pretend the remote ones exist.
96
+
97
+ ## After the user is in
98
+
99
+ Once the project is created and running, hand off cleanly. The next skill that fires depends on the template:
100
+
101
+ - Third-person controller → likely `summer:scene-composition` or `summer:gdscript-patterns` next.
102
+ - Multiplayer starter → `summer:setup-multiplayer` or `summer:host-authoritative-state`.
103
+ - 2D platformer → `summer:design-mechanic` for the platforming feel, then `summer:design-level`.
104
+
105
+ Don't auto-fire the next skill — wait for the user to say what they want to change first.