summer-engine 2.3.0 → 2.5.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 (176) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +20 -5
  3. package/.codex-plugin/plugin.json +15 -5
  4. package/.cursor-plugin/plugin.json +15 -5
  5. package/.factory-plugin/plugin.json +2 -2
  6. package/.opencode/INSTALL.md +1 -1
  7. package/CHANGELOG.md +27 -6
  8. package/CLAUDE.md +2 -2
  9. package/GEMINI.md +2 -3
  10. package/README.md +51 -30
  11. package/_persona/summer/SKILL.md +5 -6
  12. package/commands/gameskill.md +103 -0
  13. package/dist/bin/summer.js +12 -4
  14. package/dist/commands/create.js +2 -0
  15. package/dist/commands/doctor.js +71 -1
  16. package/dist/commands/install.d.ts +17 -0
  17. package/dist/commands/install.js +63 -4
  18. package/dist/commands/memory.d.ts +14 -0
  19. package/dist/commands/memory.js +196 -0
  20. package/dist/commands/setup.js +8 -2
  21. package/dist/commands/skills.js +90 -6
  22. package/dist/commands/status.js +3 -0
  23. package/dist/lib/agent-config.d.ts +2 -2
  24. package/dist/lib/agent-config.js +134 -7
  25. package/dist/lib/api-client.d.ts +13 -0
  26. package/dist/lib/api-client.js +63 -26
  27. package/dist/lib/async-op-lifecycle.d.ts +60 -0
  28. package/dist/lib/async-op-lifecycle.js +83 -0
  29. package/dist/lib/project-memory.d.ts +33 -0
  30. package/dist/lib/project-memory.js +220 -0
  31. package/dist/lib/skills-registry.d.ts +134 -61
  32. package/dist/lib/skills-registry.js +102 -4
  33. package/dist/lib/version-check.d.ts +106 -0
  34. package/dist/lib/version-check.js +338 -0
  35. package/dist/mcp/server.d.ts +2 -0
  36. package/dist/mcp/server.js +81 -0
  37. package/dist/mcp/tools/debug-tools.js +32 -2
  38. package/dist/mcp/tools/project-tools.js +18 -6
  39. package/dist/mcp/tools/with-engine.d.ts +14 -0
  40. package/dist/mcp/tools/with-engine.js +52 -7
  41. package/gemini-extension.json +2 -2
  42. package/hooks/pre-commit-doctor.sh +0 -0
  43. package/hooks/run-hook.cmd +0 -0
  44. package/hooks/session-start.sh +0 -0
  45. package/package.json +6 -4
  46. package/skills/2d-assets/character-portrait/SKILL.md +1 -1
  47. package/skills/2d-assets/concept-art/SKILL.md +1 -1
  48. package/skills/2d-assets/create-asset-sheet/SKILL.md +163 -0
  49. package/skills/2d-assets/instantiate-asset-pack/SKILL.md +245 -0
  50. package/skills/2d-assets/pixel-art/SKILL.md +1 -1
  51. package/skills/2d-assets/skybox-panorama/SKILL.md +1 -1
  52. package/skills/2d-assets/sprite-sheet/SKILL.md +1 -1
  53. package/skills/2d-assets/tileable-texture/SKILL.md +1 -1
  54. package/skills/2d-assets/ui-graphics/SKILL.md +1 -1
  55. package/skills/2d-assets/use-widget-asset/SKILL.md +217 -0
  56. package/skills/3d-assets/character-model/SKILL.md +1 -1
  57. package/skills/3d-assets/organic-model/SKILL.md +1 -1
  58. package/skills/3d-assets/prop-model/SKILL.md +1 -1
  59. package/skills/3d-assets/vehicle-model/SKILL.md +1 -1
  60. package/skills/README.md +37 -30
  61. package/skills/ai-and-npcs/design-npc/SKILL.md +6 -6
  62. package/skills/animation/animation-tree/SKILL.md +2 -2
  63. package/skills/animation/facial-and-lipsync/SKILL.md +1 -1
  64. package/skills/animation/generate-motion/SKILL.md +1 -1
  65. package/skills/animation/procedural-animation/SKILL.md +2 -2
  66. package/skills/audio/adaptive-music/SKILL.md +1 -1
  67. package/skills/audio/audio-direction/SKILL.md +5 -5
  68. package/skills/audio/sound-effect/SKILL.md +2 -2
  69. package/skills/audio/voice-line/SKILL.md +25 -3
  70. package/skills/character-controllers/fps-controller/SKILL.md +5 -5
  71. package/skills/debugging/debug/SKILL.md +39 -1
  72. package/skills/deployment/export-and-ship/SKILL.md +4 -4
  73. package/skills/gameplay-mechanics/auto-fire-targeting/SKILL.md +170 -0
  74. package/skills/gameplay-mechanics/design-mechanic/SKILL.md +8 -8
  75. package/skills/level-design/design-level/SKILL.md +5 -5
  76. package/skills/level-design/scene-to-level/SKILL.md +125 -0
  77. package/skills/multiplayer-and-networking/host-authoritative-state/SKILL.md +4 -4
  78. package/skills/multiplayer-and-networking/peer-to-peer-multiplayer/SKILL.md +4 -4
  79. package/skills/multiplayer-and-networking/setup-multiplayer/SKILL.md +7 -7
  80. package/skills/performance/tune-performance/SKILL.md +5 -5
  81. package/skills/rendering-and-lighting/3d-lighting/SKILL.md +1 -1
  82. package/skills/rendering-and-lighting/art-direction/SKILL.md +5 -5
  83. package/skills/scene-and-project/brainstorm-game/SKILL.md +4 -4
  84. package/skills/scene-and-project/play/SKILL.md +1 -1
  85. package/skills/scene-and-project/scene-composition/SKILL.md +30 -1
  86. package/skills/scripting-patterns/gdscript-patterns/SKILL.md +53 -0
  87. package/skills/ui-and-ux/ui-basics/SKILL.md +1 -1
  88. package/skills/video/animated-loop/SKILL.md +1 -1
  89. package/skills/video/cinematic-cutscene/SKILL.md +1 -1
  90. package/skills/video/trailer-shot/SKILL.md +1 -1
  91. package/skills/visual-effects/game-feel/SKILL.md +6 -6
  92. package/skills/workflow/brainstorming/SKILL.md +164 -0
  93. package/skills/workflow/brainstorming/scripts/frame-template.html +214 -0
  94. package/skills/workflow/brainstorming/scripts/helper.js +88 -0
  95. package/skills/workflow/brainstorming/scripts/server.cjs +354 -0
  96. package/skills/workflow/brainstorming/scripts/start-server.sh +148 -0
  97. package/skills/workflow/brainstorming/scripts/stop-server.sh +56 -0
  98. package/skills/workflow/brainstorming/spec-document-reviewer-prompt.md +49 -0
  99. package/skills/workflow/brainstorming/visual-companion.md +287 -0
  100. package/skills/workflow/debugging-game-feel/SKILL.md +174 -0
  101. package/skills/workflow/diagnosing-perf-regressions/SKILL.md +190 -0
  102. package/skills/workflow/dispatching-parallel-agents/SKILL.md +182 -0
  103. package/skills/workflow/gameskill/SKILL.md +111 -0
  104. package/skills/workflow/investigating-bugs/CREATION-LOG.md +119 -0
  105. package/skills/workflow/investigating-bugs/SKILL.md +296 -0
  106. package/skills/workflow/investigating-bugs/condition-based-waiting-example.ts +158 -0
  107. package/skills/workflow/investigating-bugs/condition-based-waiting.md +115 -0
  108. package/skills/workflow/investigating-bugs/defense-in-depth.md +122 -0
  109. package/skills/workflow/investigating-bugs/find-polluter.sh +63 -0
  110. package/skills/workflow/investigating-bugs/root-cause-tracing.md +169 -0
  111. package/skills/workflow/investigating-bugs/test-academic.md +14 -0
  112. package/skills/workflow/investigating-bugs/test-pressure-1.md +58 -0
  113. package/skills/workflow/investigating-bugs/test-pressure-2.md +68 -0
  114. package/skills/workflow/investigating-bugs/test-pressure-3.md +69 -0
  115. package/skills/workflow/playtesting-a-feature/SKILL.md +173 -0
  116. package/skills/{_meta → workflow}/skill-create/SKILL.md +32 -22
  117. package/skills/{_meta → workflow}/skill-improve/SKILL.md +9 -10
  118. package/skills/{_meta → workflow}/skill-test/SKILL.md +12 -12
  119. package/skills/{_meta → workflow}/using-summer/SKILL.md +5 -2
  120. package/skills/workflow/verification-before-completion/SKILL.md +139 -0
  121. package/skills/workflow/writing-plans/SKILL.md +152 -0
  122. package/skills/workflow/writing-plans/plan-document-reviewer-prompt.md +49 -0
  123. package/skills/workflow/writing-skills/SKILL.md +655 -0
  124. package/skills/workflow/writing-skills/anthropic-best-practices.md +1150 -0
  125. package/skills/workflow/writing-skills/examples/CLAUDE_MD_TESTING.md +189 -0
  126. package/skills/workflow/writing-skills/graphviz-conventions.dot +172 -0
  127. package/skills/workflow/writing-skills/persuasion-principles.md +187 -0
  128. package/skills/workflow/writing-skills/render-graphs.js +168 -0
  129. package/skills/workflow/writing-skills/testing-skills-with-subagents.md +384 -0
  130. package/dist/commands/assets.d.ts +0 -2
  131. package/dist/commands/assets.js +0 -189
  132. package/dist/commands/debug.d.ts +0 -2
  133. package/dist/commands/debug.js +0 -127
  134. package/dist/commands/doctor.test.d.ts +0 -1
  135. package/dist/commands/doctor.test.js +0 -29
  136. package/dist/commands/project.d.ts +0 -2
  137. package/dist/commands/project.js +0 -170
  138. package/dist/commands/scene.d.ts +0 -2
  139. package/dist/commands/scene.js +0 -290
  140. package/dist/lib/agent-config.test.d.ts +0 -1
  141. package/dist/lib/agent-config.test.js +0 -80
  142. package/dist/lib/format.test.d.ts +0 -1
  143. package/dist/lib/format.test.js +0 -36
  144. package/dist/lib/plugin-manifests.test.d.ts +0 -1
  145. package/dist/lib/plugin-manifests.test.js +0 -134
  146. package/dist/lib/with-engine.d.ts +0 -14
  147. package/dist/lib/with-engine.js +0 -109
  148. package/skills/_shared/collaborative-protocol.md +0 -50
  149. package/skills/_shared/gd-style.md +0 -121
  150. package/skills/_shared/godot-version.md +0 -32
  151. package/skills/_shared/mcp-tools-reference.md +0 -133
  152. package/skills/_shared/summer-folder.md +0 -44
  153. package/skills/_shared/template-registry.md +0 -40
  154. package/skills/_tests/runner.md +0 -90
  155. package/skills/_tests/specs/3d-lighting.md +0 -19
  156. package/skills/_tests/specs/art-direction.md +0 -115
  157. package/skills/_tests/specs/asset-strategy.md +0 -19
  158. package/skills/_tests/specs/audio-direction.md +0 -123
  159. package/skills/_tests/specs/brainstorm-game.md +0 -99
  160. package/skills/_tests/specs/debug.md +0 -94
  161. package/skills/_tests/specs/design-level.md +0 -113
  162. package/skills/_tests/specs/design-mechanic.md +0 -112
  163. package/skills/_tests/specs/design-npc.md +0 -143
  164. package/skills/_tests/specs/export-and-ship.md +0 -114
  165. package/skills/_tests/specs/fps-controller.md +0 -113
  166. package/skills/_tests/specs/gdscript-patterns.md +0 -19
  167. package/skills/_tests/specs/host-authoritative-state.md +0 -104
  168. package/skills/_tests/specs/make-game.md +0 -19
  169. package/skills/_tests/specs/peer-to-peer-multiplayer.md +0 -99
  170. package/skills/_tests/specs/play.md +0 -88
  171. package/skills/_tests/specs/scene-composition.md +0 -19
  172. package/skills/_tests/specs/setup-multiplayer.md +0 -106
  173. package/skills/_tests/specs/tune-performance.md +0 -104
  174. package/skills/_tests/specs/ui-basics.md +0 -19
  175. package/skills/_tests/specs/vfx.md +0 -116
  176. package/skills/catalog.yaml +0 -991
@@ -0,0 +1,125 @@
1
+ ---
2
+ name: scene-to-level
3
+ description: Use when the user wants to go from a single scene reference image (a screenshot or concept art of how the final game should look) all the way to a playable Godot scene populated with the right assets and terrain. Orchestrates concept → asset pack → terrain → composition → scene assembly. Trigger on "build this scene", "make this playable", "I want a level that looks like this", "from a screenshot to a game", "implement this concept".
4
+ license: MIT
5
+ compatibility: [Cursor, Claude Code, Windsurf, Codex]
6
+ category: level-design
7
+ user-invocable: true
8
+ allowed-tools: Read Grep Glob Write Edit summer_create_scene summer_open_scene summer_add_node summer_set_prop summer_set_resource_property summer_save_scene summer_get_scene_tree summer_inspect_node summer_search_assets summer_import_from_url
9
+ paths: ["**/*.tscn", "**/*.gd", "assets/**", ".summer/**", "levels/**"]
10
+ ---
11
+
12
+ # scene-to-level — From a reference image to a playable scene
13
+
14
+ This is the **orchestrator** skill. It doesn't generate art, doesn't slice sheets, doesn't write game code — it routes the user through the chain of skills that do, and stitches their outputs together into a placeable Godot scene.
15
+
16
+ Use it when the user shows you a screenshot or concept image and says "build this." The output is a `.tscn` you can hit play on, populated with assets that match the reference's style.
17
+
18
+ ## The pipeline (decision tree)
19
+
20
+ ```
21
+ 1. Read the reference image (vision).
22
+ └── What kind of scene is it?
23
+ ├─ 2D top-down / isometric / side-scroller
24
+ │ └── route to TERRAIN + 2D ASSETS path
25
+ ├─ 3D third-person / first-person
26
+ │ └── route to 3D ASSETS path (out of scope for this skill —
27
+ │ use summer:3d-assets/ subskills directly)
28
+ └─ UI-only screen (menu, HUD)
29
+ └── route to UI ASSETS path (just plan-asset-pack)
30
+
31
+ 2. For each visible element, route to the right sub-pipeline:
32
+
33
+ TERRAIN → summer:2d-assets/tileable-texture
34
+ (auto-tiling Wang / 47-tile sheet; CURRENTLY a placeholder
35
+ that generates a single tile — full auto-tile work is
36
+ tracked in publicsummerengine/Docs/assetCreation/
37
+ TERRAIN_AUTOTILE_IDEA.md and not yet built)
38
+
39
+ PROPS / DECOR / LIGHTING / NATURE / WATER / BUILDINGS / UI / VFX
40
+ ── If user has time for individual generation, prefer:
41
+ │ summer:2d-assets/create-asset-sheet (Plan + Generate Pack
42
+ │ mode at /studio/plan-asset-pack — higher quality, each asset
43
+ │ gets full model attention)
44
+ └── If user wants fast / exploratory:
45
+ summer:2d-assets/create-asset-sheet (Slice from a sheet at
46
+ /studio/create-tileset — one sheet, autoslice, cheaper)
47
+
48
+ CHARACTERS → summer:2d-assets/character-portrait first for the static
49
+ frame, then summer:2d-assets/sprite-sheet for animation
50
+
51
+ 3. Once assets exist, USE-WIDGET-ASSET on any UI / panel / bar /
52
+ toggle pack files to wire them as NinePatchRect / TextureProgressBar
53
+ / etc. (see summer:2d-assets/use-widget-asset)
54
+
55
+ 4. Compose the scene:
56
+ - summer_create_scene with a Node2D / Control root depending on the
57
+ scene type
58
+ - Add a TileMap node for terrain; assign the generated tileset
59
+ resource
60
+ - Place props as Sprite2D / TextureRect children, positioned to
61
+ match the reference's composition
62
+ - Wire UI as Control nodes anchored to the viewport
63
+
64
+ 5. Validate:
65
+ - summer_get_script_errors
66
+ - summer_play (the user takes over from here)
67
+ ```
68
+
69
+ ## When to use
70
+
71
+ - "Make this screenshot playable."
72
+ - "I want a level that looks exactly like this concept art."
73
+ - "Build a Japanese village scene like this reference."
74
+ - "I have a UI mockup — implement it."
75
+
76
+ ## When NOT to use
77
+
78
+ - The user wants a **single asset** → `summer:2d-assets/pixel-art` or a leaf skill directly.
79
+ - The user wants to **design** a level from scratch (gameplay beats, pacing, encounters) → `summer:level-design/design-level`. This skill is post-design — it implements a known visual target.
80
+ - The user wants a **3D level** → use `summer:3d-assets/` subskills directly; the orchestration for 3D scenes isn't in this skill yet.
81
+ - The user wants a **playable prototype with mechanics already** → mechanics aren't in scope. This skill produces the *visuals*; the mechanic skills (e.g. `summer:gameplay-mechanics/design-mechanic`) handle behavior.
82
+
83
+ ## Required up-front
84
+
85
+ Before starting, you need either:
86
+
87
+ 1. A reference image (URL or local file) the user provides, OR
88
+ 2. A vivid text description of the target scene from the user
89
+
90
+ If neither is offered, stop and ask. Don't guess what a "japanese village scene" looks like — get the reference first.
91
+
92
+ ## Honest reliability map
93
+
94
+ | Pipeline node | Reliability | Cost (rough) | What can go wrong |
95
+ |---|---|---|---|
96
+ | Reading the reference (vision call) | High | $0.02 | Model misidentifies the scene type |
97
+ | Plan + Generate Pack (theme → per-asset) | High for props / icons / UI | $0.10–0.50 per pack | Style drift across items if no style ref |
98
+ | Slice from a sheet (single-sheet path) | Medium for dense sheets | $0.08 + upscales | Touching sprites merge into one slice |
99
+ | Tileable terrain (auto-tile) | LOW today — not built. | n/a | Use a single tile placeholder or stitch by hand |
100
+ | Sprite-sheet animation | Medium — see that skill's own honesty section | varies | Frame consistency is the hard part |
101
+ | Scene assembly via `summer_*` tools | High | free | Engine must be running |
102
+
103
+ Surface this map to the user when relevant — don't claim "ready to play in 10 minutes" if terrain auto-tiling is what they actually need.
104
+
105
+ ## A worked example
106
+
107
+ User shows you a screenshot of a Japanese village with multiple islands, water between them, buildings, characters, and a bottom palette UI:
108
+
109
+ 1. **Vision pass** identifies the scene as 2D isometric with: water terrain (large area), grass terrain (per island), buildings (5+ distinct), characters (2), UI palette + toolbar.
110
+ 2. **Plan the props pack** via the create-asset-sheet planner: 12 props at minimum (torii, sakura, lantern, pagoda, bridge, well, sign, banner, bucket, hay, fence, crate). Generated per-asset for quality.
111
+ 3. **Plan the buildings pack**: 5 distinct buildings (small house, barn, shop, pagoda, watchtower).
112
+ 4. **Generate terrain**: today, single grass tile + single water tile + edge variant placeholders. Full Wang-tile auto-tiling is the TERRAIN_AUTOTILE_IDEA.md unbuilt path.
113
+ 5. **Plan the UI pack** via the planner with theme "isometric voxel game UI: bottom palette, toolbar with Place/Erase/Pan/Save/Reset, asset category tabs, instruction panel."
114
+ 6. **For each UI slice that's a panel / button**, use `summer:2d-assets/use-widget-asset` to wire as NinePatchRect.
115
+ 7. **Compose**: TileMap for terrain; Sprite2D placement matching the reference; Control nodes for the UI.
116
+ 8. **Validate + hand off**.
117
+
118
+ Total wall-clock: maybe 30 min for the asset packs (parallel), another 15 for scene composition. NOT a five-minute thing.
119
+
120
+ ## What this skill explicitly defers
121
+
122
+ - **3D scene assembly.** Out of scope; use `summer:3d-assets/` directly until a 3D variant of this orchestrator exists.
123
+ - **Auto-tiling terrain.** The pipeline node exists in the decision tree but the leaf skill that implements it is not built — see `publicsummerengine/Docs/assetCreation/TERRAIN_AUTOTILE_IDEA.md`.
124
+ - **Animation orchestration.** Per-character `summer:2d-assets/sprite-sheet` is invoked manually; no auto-pairing of characters with their animation pipelines yet.
125
+ - **Gameplay code.** Player movement, interactions, win conditions — those are level-design + gameplay-mechanics skills, not this one.
@@ -321,12 +321,12 @@ This skill writes new autoload files (one per Manager). Always ask before each:
321
321
 
322
322
  Don't bulk-create five Managers in one shot. Walk one Manager end-to-end (data → mutators → requests → broadcasts → lifecycle) so the user can verify the shape, then repeat for the next domain.
323
323
 
324
- After each Manager file lands, call `summer_get_script_errors` to confirm clean compile. See [`_shared/collaborative-protocol.md`](../../_shared/collaborative-protocol.md).
324
+ After each Manager file lands, call `summer_get_script_errors` to confirm clean compile. See [`references/collaborative-protocol.md`](../../references/collaborative-protocol.md).
325
325
 
326
326
  ## See also
327
327
 
328
328
  - [`peer-to-peer-multiplayer`](../peer-to-peer-multiplayer/SKILL.md) — the four-layer architecture overview. Read this first if you haven't.
329
329
  - [`setup-multiplayer`](../setup-multiplayer/SKILL.md) — lighter intro that just gets a session running. Use that one if the user just wants two players to see each other.
330
- - [`_shared/godot-version.md`](../../_shared/godot-version.md) — Godot 4.5 multiplayer API stability notes.
331
- - [`_shared/gd-style.md`](../../_shared/gd-style.md) — typed-GDScript conventions used in the examples above.
332
- - [`_shared/mcp-tools-reference.md`](../../_shared/mcp-tools-reference.md) — `summer_get_script_errors` for compile verification.
330
+ - [`references/godot-version.md`](../../references/godot-version.md) — Godot 4.5 multiplayer API stability notes.
331
+ - [`references/gd-style.md`](../../references/gd-style.md) — typed-GDScript conventions used in the examples above.
332
+ - [`references/mcp-tools-reference.md`](../../references/mcp-tools-reference.md) — `summer_get_script_errors` for compile verification.
@@ -361,7 +361,7 @@ This skill writes multiple new files (`autoloads/network_manager.gd`, `autoloads
361
361
 
362
362
  Don't apply all four layers in one shot — checkpoint after each layer so the user can verify before adding the next.
363
363
 
364
- See [`_shared/collaborative-protocol.md`](../../_shared/collaborative-protocol.md).
364
+ See [`references/collaborative-protocol.md`](../../references/collaborative-protocol.md).
365
365
 
366
366
  ## Want a working starter?
367
367
 
@@ -371,8 +371,8 @@ When the `template-co-op-3d` template ships in the registry, this skill will ref
371
371
 
372
372
  ## See also
373
373
 
374
- - [`_shared/godot-version.md`](../../_shared/godot-version.md) — Godot 4.5 multiplayer API stability notes
375
- - [`_shared/mcp-tools-reference.md`](../../_shared/mcp-tools-reference.md) — `summer_project_setting` for autoload registration
376
- - [`_shared/gd-style.md`](../../_shared/gd-style.md) — typed-GDScript conventions
374
+ - [`references/godot-version.md`](../../references/godot-version.md) — Godot 4.5 multiplayer API stability notes
375
+ - [`references/mcp-tools-reference.md`](../../references/mcp-tools-reference.md) — `summer_project_setting` for autoload registration
376
+ - [`references/gd-style.md`](../../references/gd-style.md) — typed-GDScript conventions
377
377
  - [`host-authoritative-state`](../host-authoritative-state/SKILL.md) — deeper dive on JUST the state ownership decision matrix
378
378
  - [`setup-multiplayer`](../setup-multiplayer/SKILL.md) — lighter intro that just gets a session running (use that one if the user just wants 2 players to see each other; use this one if they want to ship a real game)
@@ -286,7 +286,7 @@ Test checklist:
286
286
  | Replicate every property | Replicate position, rotation, health, that's it | Bandwidth + bug surface |
287
287
  | Run physics on every peer for every player | Physics on owner only, others receive transform | Otherwise jitter and divergence |
288
288
  | Trust the client | Validate `get_remote_sender_id()` in every `any_peer` RPC | Cheaters route through the wrong RPC |
289
- | Inline `SceneReplicationConfig` sub_resource | Save as standalone `.tres` | Silent-fail trap (see `_shared/mcp-tools-reference.md`) |
289
+ | Inline `SceneReplicationConfig` sub_resource | Save as standalone `.tres` | Silent-fail trap (see `references/mcp-tools-reference.md`) |
290
290
  | Roll custom transport | ENet (or WebSocket for browser) | You will hit edge cases ENet already solved |
291
291
  | Skip authority check in damage RPC | `if not multiplayer.is_server(): return` at the top of damage handlers | Otherwise damage applied N times |
292
292
  | Spawn players on every peer | MultiplayerSpawner — host spawns, clients receive | Otherwise N copies of each player |
@@ -303,22 +303,22 @@ Test checklist:
303
303
 
304
304
  ## Collaborative protocol
305
305
 
306
- This skill rewires the project at the architectural level. Always ask before each block of changes. Group writes — "I'm about to add the autoload + 2 scenes + 3 scripts + InputMap entries. OK?". See `_shared/collaborative-protocol.md`.
306
+ This skill rewires the project at the architectural level. Always ask before each block of changes. Group writes — "I'm about to add the autoload + 2 scenes + 3 scripts + InputMap entries. OK?". See `references/collaborative-protocol.md`.
307
307
 
308
308
  ## Want a working starter?
309
309
 
310
310
  For a known-good multiplayer scaffold (host + join UI, ENet transport, MultiplayerSpawner, replicated player), point users at:
311
311
 
312
- → **template-id**: TBD (`template-co-op-online` planned, see `_shared/template-registry.md`)
312
+ → **template-id**: TBD (`template-co-op-online` planned, see `references/template-registry.md`)
313
313
 
314
314
  For now: this skill produces the scaffold inline. When the template lands, link from here.
315
315
 
316
316
  ## See also
317
317
 
318
- - `_shared/mcp-tools-reference.md` — full MCP tool list (project-setting, autoload registration)
319
- - `_shared/godot-version.md` — `MultiplayerAPI` is medium-churn; `SceneReplicationConfig` settled in 4.0+
320
- - `_shared/collaborative-protocol.md` — "May I write" pattern
321
- - `_shared/gd-style.md` — typed GDScript conventions
318
+ - `references/mcp-tools-reference.md` — full MCP tool list (project-setting, autoload registration)
319
+ - `references/godot-version.md` — `MultiplayerAPI` is medium-churn; `SceneReplicationConfig` settled in 4.0+
320
+ - `references/collaborative-protocol.md` — "May I write" pattern
321
+ - `references/gd-style.md` — typed GDScript conventions
322
322
  - `multiplayer-and-networking/multiplayerapi-basics/SKILL.md` — deeper MultiplayerAPI patterns
323
323
  - `multiplayer-and-networking/client-server-pattern/SKILL.md` — dedicated server architecture
324
324
  - `multiplayer-and-networking/peer-replication/SKILL.md` — synchronizer config patterns
@@ -200,7 +200,7 @@ Compare: was the metric movement at least 50% of what was promised? If yes, ship
200
200
 
201
201
  ## Collaborative protocol
202
202
 
203
- This skill makes scene/resource/code changes. Always ask before each fix is applied. See `_shared/collaborative-protocol.md`.
203
+ This skill makes scene/resource/code changes. Always ask before each fix is applied. See `references/collaborative-protocol.md`.
204
204
 
205
205
  ## Want a working starter?
206
206
 
@@ -208,10 +208,10 @@ No template — this is a workflow. Performance tuning is project-specific by de
208
208
 
209
209
  ## See also
210
210
 
211
- - `_shared/mcp-tools-reference.md` — full MCP tool list
212
- - `_shared/godot-version.md` — Godot 4.5 renderer notes (Compositor, RenderSceneBuffers churn)
213
- - `_shared/collaborative-protocol.md` — "May I write" pattern
214
- - `_shared/gd-style.md` — GDScript conventions (avoid bare types, use `:=`)
211
+ - `references/mcp-tools-reference.md` — full MCP tool list
212
+ - `references/godot-version.md` — Godot 4.5 renderer notes (Compositor, RenderSceneBuffers churn)
213
+ - `references/collaborative-protocol.md` — "May I write" pattern
214
+ - `references/gd-style.md` — GDScript conventions (avoid bare types, use `:=`)
215
215
  - `performance/profiling-godot/SKILL.md` — deeper Godot profiler usage
216
216
  - `performance/draw-call-batching/SKILL.md` — MultiMeshInstance3D patterns
217
217
  - `performance/lod-and-culling/SKILL.md` — LOD setup
@@ -121,4 +121,4 @@ Then create `Environment` and `Sky` resources via the inspector or load from `.t
121
121
 
122
122
  ## Collaborative protocol
123
123
 
124
- This skill mutates the scene (adds lights + WorldEnvironment + tunes Environment sub-properties). Always ask before applying: "May I add a DirectionalLight3D Sun with shadows + a WorldEnvironment with a procedural sky?". See `../../_shared/collaborative-protocol.md`.
124
+ This skill mutates the scene (adds lights + WorldEnvironment + tunes Environment sub-properties). Always ask before applying: "May I add a DirectionalLight3D Sun with shadows + a WorldEnvironment with a procedural sky?". See `../../references/collaborative-protocol.md`.
@@ -261,11 +261,11 @@ End with:
261
261
  | Procedural skybox without angle | Mid-day sun + uniform fog reads generic. Always angle the sun. |
262
262
  | Skipping the lighting plan | Lighting *is* art direction in 3D. Without a plan, every level looks different. |
263
263
  | Adopting "AAA realism" at vertical-slice scope | Asset cost is brutal solo. Stylized always wins. |
264
- | Calling SetResourceProperty on inline sub_resources | Silent fail. See `_shared/mcp-tools-reference.md` § Trap. |
264
+ | Calling SetResourceProperty on inline sub_resources | Silent fail. See `references/mcp-tools-reference.md` § Trap. |
265
265
 
266
266
  ## Collaborative protocol
267
267
 
268
- This skill writes one design doc (`.summer/art-bible.md`) and may modify `project.godot` settings + the main scene's `WorldEnvironment`. Always ask. See `_shared/collaborative-protocol.md`.
268
+ This skill writes one design doc (`.summer/art-bible.md`) and may modify `project.godot` settings + the main scene's `WorldEnvironment`. Always ask. See `references/collaborative-protocol.md`.
269
269
 
270
270
  ## Want a working starter?
271
271
 
@@ -273,9 +273,9 @@ No template — this is a workflow that produces the bible the rest of the proje
273
273
 
274
274
  ## See also
275
275
 
276
- - `_shared/collaborative-protocol.md`
277
- - `_shared/godot-version.md` — Godot 4.5 rendering API notes (Compositor moved in 4.4 / 4.5)
278
- - `_shared/mcp-tools-reference.md`
276
+ - `references/collaborative-protocol.md`
277
+ - `references/godot-version.md` — Godot 4.5 rendering API notes (Compositor moved in 4.4 / 4.5)
278
+ - `references/mcp-tools-reference.md`
279
279
  - `scene-and-project/brainstorm-game/SKILL.md` — produces the brief that anchors the bible
280
280
  - `audio/audio-direction/SKILL.md` — the sonic counterpart
281
281
  - `rendering-and-lighting/3d-lighting/SKILL.md` — implements the lighting plan
@@ -193,16 +193,16 @@ Don't auto-pick. Let them decide.
193
193
 
194
194
  ## Collaborative protocol
195
195
 
196
- This skill writes one file (`.summer/GameSoul.md`). Always ask before writing. Always show the brief inline before saving so the user can react. See `_shared/collaborative-protocol.md`.
196
+ This skill writes one file (`.summer/GameSoul.md`). Always ask before writing. Always show the brief inline before saving so the user can react. See `references/collaborative-protocol.md`.
197
197
 
198
198
  ## Want a working starter?
199
199
 
200
- No template — this is a workflow that produces the brief that drives template selection later. Once `.summer/GameSoul.md` exists, `/summer:make-game` can match it against `_shared/template-registry.md`.
200
+ No template — this is a workflow that produces the brief that drives template selection later. Once `.summer/GameSoul.md` exists, `/summer:make-game` can match it against `references/template-registry.md`.
201
201
 
202
202
  ## See also
203
203
 
204
- - `_shared/collaborative-protocol.md` — "May I write?" pattern
205
- - `_shared/template-registry.md` — templates the brief will be matched against later
204
+ - `references/collaborative-protocol.md` — "May I write?" pattern
205
+ - `references/template-registry.md` — templates the brief will be matched against later
206
206
  - `gameplay-mechanics/design-mechanic/SKILL.md` — design the core loop in detail
207
207
  - `level-design/design-level/SKILL.md` — sketch level 1
208
208
  - `rendering-and-lighting/art-direction/SKILL.md` — turn the one-phrase look into a full bible
@@ -104,5 +104,5 @@ No template — works against any Godot/Summer project that has a main scene set
104
104
 
105
105
  ## See also
106
106
 
107
- - `_shared/mcp-tools-reference.md` — full tool list
107
+ - `references/mcp-tools-reference.md` — full tool list
108
108
  - `debugging/debug/SKILL.md` — what to do when /play surfaces an error
@@ -112,6 +112,35 @@ Use `./` for paths relative to the scene root:
112
112
 
113
113
  No fallback for this — Summer MCP required. Handwriting `.tscn` files for hierarchy mutations is error-prone (UID collisions, wrong format version, broken sub_resource refs). If MCP isn't connected, open the scene in the Godot editor and use the SceneTree dock.
114
114
 
115
+ ## Trap — Cross-scene transform leak when copying a scene as a template
116
+
117
+ When you duplicate a scene to spawn a sibling level (for example, `level_1.tscn` → `level_2.tscn`), every child instance carries its transform offset baked at the original level's coordinate system. If the source level places its player at world `(223, 108, -1833)` and instances a kill-volume scene at offset `(512, -3, 512)`, those numbers are anchored to the source level's terrain origin. Drop the same kill-volume instance into a level whose player spawns at world `(0, 1, 0)` and the volume's wall colliders may end up slicing the new arena at world `x = 0`. The user sees a "glitching invisible line through the middle of the map" they can't pass through. The colliders are invisible under the floor, so visual diagnosis is hard. Only collision-walking through them reveals the problem.
118
+
119
+ Rule when copying a scene as a template:
120
+
121
+ 1. Audit every child instance for hardcoded `transform = Transform3D(...)` lines.
122
+ 2. Decide for each: keep, re-zero (origin = `(0,0,0)`), or drop entirely.
123
+ 3. The bigger the original level's world-space coordinates, the more dangerous the copy. Re-zero by default; you can move things back if needed.
124
+ 4. Levels that spawn the player at world origin (for example flat arenas centered on `(0,0,0)`) should drop ALL transform overrides from carry-over instances. Only re-add transforms relative to the new origin.
125
+
126
+ ## Trap — Third-person camera collision when foliage shouldn't block
127
+
128
+ Godot's `SpringArm3D` shortens the camera boom when it raycasts into geometry on the configured `collision_mask`. If your trees, bushes, or grass have collision so the player physically bumps them, on the same layer the SpringArm queries, the camera shortens for foliage too. Players see the camera awkwardly snap forward whenever they walk near a tree.
129
+
130
+ The pattern that works:
131
+
132
+ 1. Foliage gets its own physics layer. Conventionally layer 9 ("Foliage").
133
+ - Foliage `StaticBody3D`: `collision_layer = 256` (which is 2^8, layer 9).
134
+ 2. Player still bumps into foliage by including that layer in its `collision_mask`.
135
+ - Player `CharacterBody3D`: `collision_mask = 259` (which is 1 + 2 + 256, Entities + Level + Foliage).
136
+ 3. SpringArm uses a mask that catches solid level geometry but excludes foliage.
137
+ - SpringArm: `collision_mask = 3` (which is 1 + 2, Entities + Level only).
138
+ 4. For the visual fade the user expects when the camera is "behind" a tree, add the foliage mesh to the `camera_fade` group. An existing camera-occlusion fade system can ghost the mesh by AABB intersection with the camera-to-player segment without touching collision.
139
+
140
+ Why per-layer split: there's no clean way to exclude a single body type from `SpringArm3D`'s collision check via `add_excluded_object` for dynamically-spawned foliage. You'd have to register every tree at spawn time and re-register on level change. Layer-level filtering is set-and-forget.
141
+
142
+ Don't skip the player mask update. If you only move foliage to layer 9 without adding it to the player's mask, the player walks straight through trees.
143
+
115
144
  ## Collaborative protocol
116
145
 
117
- This skill creates and mutates scene files. Always ask before applying: "May I create `res://scenes/player.tscn` and instantiate it under `./World`?". See `../../_shared/collaborative-protocol.md`.
146
+ This skill creates and mutates scene files. Always ask before applying: "May I create `res://scenes/player.tscn` and instantiate it under `./World`?". See `../../references/collaborative-protocol.md`.
@@ -90,6 +90,59 @@ var siblings = get_parent().get_children()
90
90
 
91
91
  For health systems, input handling, and state machines, see [reference.md](reference.md).
92
92
 
93
+ ## Anti-patterns — introspection traps
94
+
95
+ Godot's introspection API has Object-instance methods that look like they should work on script-class references. They don't. Calling them on a `const ScriptName = preload(...)` reference is a parse error, not a runtime no-op.
96
+
97
+ | Wrong | Right | Why |
98
+ |---|---|---|
99
+ | `if SomeScript.has_static_method("play"): SomeScript.play(...)` | Just call `SomeScript.play(...)` directly. If the method exists in the script, it parses; if not, the parser catches it. | `has_static_method()` is an `Object` instance method. `SomeScript` here is a `Script` reference. It has no `has_static_method` member, so the parser rejects the call. |
100
+ | `if SomeScript.has_method("foo")` (on a script-class ref) | Same. Call `foo()` directly, or check `is_instance_of()` after instancing. | Same trap. |
101
+ | Defensive guards "in case the script ships in parallel" | Don't ship in parallel agents that depend on each other's APIs without one of them landing first. The compiler will catch missing methods at parse time. | Guards that don't compile aren't guards. |
102
+
103
+ **Rule of thumb:** if you're tempted to write `Klass.has_*("name")` on a `const Klass = preload(...)` reference, you're confusing class-level introspection (compile-time, automatic) with instance-level introspection (`Object` method, runtime). GDScript's parser already does the compile-time check for free.
104
+
105
+ **Side note on `has_method` vs `has_static_method`:** `has_method` works on a node/instance to check if the *instance* has a method. `has_static_method` works on an *Object* instance to check if its *class* has a static method. Neither is callable on a bare `Script` reference (`preload(...)` result). To check static-method presence at runtime, call the method inside a `try`-equivalent. In practice if your code paths are well-typed you don't need to.
106
+
107
+ ## Anti-pattern — `@onready var = $Path` on nodes that don't exist on every variant
108
+
109
+ Godot resolves `$Path` (the `get_node` shorthand) at `@implicit_ready` time. If the node is missing from the current scene, you get `Node not found: "X" (relative to "Y")` errors before any of your `_ready()` runtime guards can run.
110
+
111
+ Common case: a script is shared by multiple scene variants where some variants have an optional child. Even if every code path that touches the variable has a `if inventory_ui:` guard, the `@onready` line itself errors at scene load.
112
+
113
+ | Wrong | Right |
114
+ |---|---|
115
+ | `@onready var inventory_ui: CanvasLayer = $InventoryUI` | `@onready var inventory_ui: CanvasLayer = get_node_or_null("InventoryUI")` |
116
+ | `@onready var hp_bar: ProgressBar = $HUD/HPBar` (HUD optional) | `@onready var hp_bar: ProgressBar = get_node_or_null("HUD/HPBar")` |
117
+
118
+ **Rule of thumb:** if the node is required for the script to function at all, use `$Path` and rely on the parse-time error. If the node may be missing in some scene variants the script is reused across, use `get_node_or_null` and guard at every read site.
119
+
120
+ ## Anti-pattern — `Label3D.label_settings` (it doesn't exist)
121
+
122
+ `LabelSettings` is a resource type used by `Label` (the 2D Control node) to bundle font + size + outline + colors. `Label3D` does NOT accept it. Assigning `LabelSettings` to `label_settings` on a `Label3D` raises `Invalid assignment of property or key 'label_settings' with value of type 'LabelSettings' on a base object of type 'Label3D'.`
123
+
124
+ `Label3D` exposes the same styling fields as direct properties:
125
+
126
+ ```gdscript
127
+ # WRONG - parses but errors at runtime when label is a Label3D.
128
+ var settings := LabelSettings.new()
129
+ settings.font = my_font
130
+ settings.font_size = 24
131
+ settings.outline_size = 2
132
+ settings.outline_color = my_outline
133
+ my_label_3d.label_settings = settings # <-- runtime error
134
+
135
+ # RIGHT - set the styling directly on the Label3D.
136
+ my_label_3d.font = my_font
137
+ my_label_3d.font_size = 24
138
+ my_label_3d.outline_size = 2
139
+ my_label_3d.outline_modulate = my_outline
140
+ ```
141
+
142
+ Note the field name difference too: `LabelSettings.outline_color` (Label 2D) vs `Label3D.outline_modulate` (Label3D). Easy to miss in copy-paste.
143
+
144
+ **Rule of thumb:** `LabelSettings` is for `Label` only. For `Label3D` use direct properties. For `RichTextLabel`, neither — it has its own theme overrides.
145
+
93
146
  ## Scene Integration
94
147
 
95
148
  When the AI adds a node with Summer MCP tools and attaches a script, the script path is set via `summer_set_prop(path, "script", "res://path/to/script.gd")`. The script file must exist first. Create or edit `.gd` files with the host agent's normal file-editing tools, then use Summer MCP only to attach the script and connect scene signals.
@@ -147,4 +147,4 @@ text = "Start Game"
147
147
 
148
148
  ## Collaborative protocol
149
149
 
150
- This skill writes UI scene nodes and wires button signals. Always ask before applying: "May I add the MainMenu (Control + Margin + VBox + Title + Start/Quit buttons) and connect Start.pressed to `_on_start_pressed`?". See `../../_shared/collaborative-protocol.md`.
150
+ This skill writes UI scene nodes and wires button signals. Always ask before applying: "May I add the MainMenu (Control + Margin + VBox + Title + Start/Quit buttons) and connect Start.pressed to `_on_start_pressed`?". See `../../references/collaborative-protocol.md`.
@@ -197,4 +197,4 @@ Once the loop is wired:
197
197
  - `audio/music-track` — score the menu.
198
198
  - `2d-assets/ui-graphics` — logo, menu buttons, HUD that sits over the loop.
199
199
  - `2d-assets/concept-art` — produce the reference still that anchors the loop.
200
- - `_shared/mcp-tools-reference.md` — `summer_generate_video` parameter schema and error codes.
200
+ - `references/mcp-tools-reference.md` — `summer_generate_video` parameter schema and error codes.
@@ -201,4 +201,4 @@ Once the cutscene is generated and wired:
201
201
  - `audio/music-track` — score the cutscene.
202
202
  - `2d-assets/concept-art` — generate the reference image axis if no character reference exists yet.
203
203
  - `2d-assets/character-portrait` — produce a high-fidelity locked character portrait for use as `imageUrl`.
204
- - `_shared/mcp-tools-reference.md` — `summer_generate_video` parameter schema and error codes.
204
+ - `references/mcp-tools-reference.md` — `summer_generate_video` parameter schema and error codes.
@@ -200,4 +200,4 @@ Once the shots are generated:
200
200
  - `audio/music-track` — trailer score.
201
201
  - `audio/sound-effect` — cut SFX (whooshes, impacts, stingers).
202
202
  - `2d-assets/concept-art` — generate the reference image axis when no asset exists yet.
203
- - `_shared/mcp-tools-reference.md` — `summer_generate_video` parameter schema and error codes.
203
+ - `references/mcp-tools-reference.md` — `summer_generate_video` parameter schema and error codes.
@@ -110,7 +110,7 @@ func flash() -> void:
110
110
 
111
111
  **Tunable knobs:** `duration` 0.06–0.12s — under 0.06 reads as a flicker, over 0.12 looks slow. `emission_energy_multiplier` 1.5–3.0.
112
112
 
113
- > CRITICAL: do NOT inline a `StandardMaterial3D` as a `sub_resource` via `summer_set_prop`. Build it in script (as above) or save it to `materials/flash.tres`. Inline sub_resources break `summer_set_resource_property` silently — see `_shared/mcp-tools-reference.md` § "Trap".
113
+ > CRITICAL: do NOT inline a `StandardMaterial3D` as a `sub_resource` via `summer_set_prop`. Build it in script (as above) or save it to `materials/flash.tres`. Inline sub_resources break `summer_set_resource_property` silently — see `references/mcp-tools-reference.md` § "Trap".
114
114
 
115
115
  ## Step 5 — Install Section 2 (Trauma Camera Shake)
116
116
 
@@ -358,7 +358,7 @@ Tune one knob at a time:
358
358
 
359
359
  ## Collaborative protocol
360
360
 
361
- This skill writes 3 GDScript files and adds 1 node + 1 autoload entry. Always ask before each section is applied. Group related writes into one ask: "I'm about to add HitFlash + CameraShake + AudioDucker autoload, wire one signal. OK?" See `_shared/collaborative-protocol.md`.
361
+ This skill writes 3 GDScript files and adds 1 node + 1 autoload entry. Always ask before each section is applied. Group related writes into one ask: "I'm about to add HitFlash + CameraShake + AudioDucker autoload, wire one signal. OK?" See `references/collaborative-protocol.md`.
362
362
 
363
363
  ## When NOT to use this skill
364
364
 
@@ -369,10 +369,10 @@ This skill writes 3 GDScript files and adds 1 node + 1 autoload entry. Always as
369
369
 
370
370
  ## See also
371
371
 
372
- - `_shared/mcp-tools-reference.md` — full MCP tool list, especially the inline-sub_resource trap
373
- - `_shared/godot-version.md` — Godot 4.5 API notes
374
- - `_shared/collaborative-protocol.md` — "May I write" pattern
375
- - `_shared/gd-style.md` — typed GDScript conventions
372
+ - `references/mcp-tools-reference.md` — full MCP tool list, especially the inline-sub_resource trap
373
+ - `references/godot-version.md` — Godot 4.5 API notes
374
+ - `references/collaborative-protocol.md` — "May I write" pattern
375
+ - `references/gd-style.md` — typed GDScript conventions
376
376
  - `audio/audio-direction/SKILL.md` — bus layout setup (prerequisite for ducking)
377
377
  - `post-processing/screen-shake/SKILL.md` — deeper trauma variants (Perlin noise, stacked sources)
378
378
  - `visual-effects/gpuparticles-3d-basics/SKILL.md` — particles to layer on top of the trio
@@ -0,0 +1,164 @@
1
+ ---
2
+ name: brainstorming
3
+ description: "Use when starting creative work — designing a game, picking a mechanic, building features or components, modifying behavior. Explores user intent, requirements, and design before implementation. MUST run before any creative work."
4
+ ---
5
+
6
+ # Brainstorming Ideas Into Designs
7
+
8
+ Help turn ideas into fully formed designs and specs through natural collaborative dialogue.
9
+
10
+ Start by understanding the current project context, then ask questions one at a time to refine the idea. Once you understand what you're building, present the design and get user approval.
11
+
12
+ <HARD-GATE>
13
+ Do NOT invoke any implementation skill, write any code, scaffold any project, or take any implementation action until you have presented a design and the user has approved it. This applies to EVERY project regardless of perceived simplicity.
14
+ </HARD-GATE>
15
+
16
+ ## Anti-Pattern: "This Is Too Simple To Need A Design"
17
+
18
+ Every project goes through this process. A todo list, a single-function utility, a config change — all of them. "Simple" projects are where unexamined assumptions cause the most wasted work. The design can be short (a few sentences for truly simple projects), but you MUST present it and get approval.
19
+
20
+ ## Checklist
21
+
22
+ You MUST create a task for each of these items and complete them in order:
23
+
24
+ 1. **Explore project context** — check files, docs, recent commits
25
+ 2. **Offer visual companion** (if topic will involve visual questions) — this is its own message, not combined with a clarifying question. See the Visual Companion section below.
26
+ 3. **Ask clarifying questions** — one at a time, understand purpose/constraints/success criteria
27
+ 4. **Propose 2-3 approaches** — with trade-offs and your recommendation
28
+ 5. **Present design** — in sections scaled to their complexity, get user approval after each section
29
+ 6. **Write design doc** — save to `docs/superpowers/specs/YYYY-MM-DD-<topic>-design.md` and commit
30
+ 7. **Spec self-review** — quick inline check for placeholders, contradictions, ambiguity, scope (see below)
31
+ 8. **User reviews written spec** — ask user to review the spec file before proceeding
32
+ 9. **Transition to implementation** — invoke writing-plans skill to create implementation plan
33
+
34
+ ## Process Flow
35
+
36
+ ```dot
37
+ digraph brainstorming {
38
+ "Explore project context" [shape=box];
39
+ "Visual questions ahead?" [shape=diamond];
40
+ "Offer Visual Companion\n(own message, no other content)" [shape=box];
41
+ "Ask clarifying questions" [shape=box];
42
+ "Propose 2-3 approaches" [shape=box];
43
+ "Present design sections" [shape=box];
44
+ "User approves design?" [shape=diamond];
45
+ "Write design doc" [shape=box];
46
+ "Spec self-review\n(fix inline)" [shape=box];
47
+ "User reviews spec?" [shape=diamond];
48
+ "Invoke writing-plans skill" [shape=doublecircle];
49
+
50
+ "Explore project context" -> "Visual questions ahead?";
51
+ "Visual questions ahead?" -> "Offer Visual Companion\n(own message, no other content)" [label="yes"];
52
+ "Visual questions ahead?" -> "Ask clarifying questions" [label="no"];
53
+ "Offer Visual Companion\n(own message, no other content)" -> "Ask clarifying questions";
54
+ "Ask clarifying questions" -> "Propose 2-3 approaches";
55
+ "Propose 2-3 approaches" -> "Present design sections";
56
+ "Present design sections" -> "User approves design?";
57
+ "User approves design?" -> "Present design sections" [label="no, revise"];
58
+ "User approves design?" -> "Write design doc" [label="yes"];
59
+ "Write design doc" -> "Spec self-review\n(fix inline)";
60
+ "Spec self-review\n(fix inline)" -> "User reviews spec?";
61
+ "User reviews spec?" -> "Write design doc" [label="changes requested"];
62
+ "User reviews spec?" -> "Invoke writing-plans skill" [label="approved"];
63
+ }
64
+ ```
65
+
66
+ **The terminal state is invoking writing-plans.** Do NOT invoke frontend-design, mcp-builder, or any other implementation skill. The ONLY skill you invoke after brainstorming is writing-plans.
67
+
68
+ ## The Process
69
+
70
+ **Understanding the idea:**
71
+
72
+ - Check out the current project state first (files, docs, recent commits)
73
+ - Before asking detailed questions, assess scope: if the request describes multiple independent subsystems (e.g., "build a platform with chat, file storage, billing, and analytics"), flag this immediately. Don't spend questions refining details of a project that needs to be decomposed first.
74
+ - If the project is too large for a single spec, help the user decompose into sub-projects: what are the independent pieces, how do they relate, what order should they be built? Then brainstorm the first sub-project through the normal design flow. Each sub-project gets its own spec → plan → implementation cycle.
75
+ - For appropriately-scoped projects, ask questions one at a time to refine the idea
76
+ - Prefer multiple choice questions when possible, but open-ended is fine too
77
+ - Only one question per message - if a topic needs more exploration, break it into multiple questions
78
+ - Focus on understanding: purpose, constraints, success criteria
79
+
80
+ **Exploring approaches:**
81
+
82
+ - Propose 2-3 different approaches with trade-offs
83
+ - Present options conversationally with your recommendation and reasoning
84
+ - Lead with your recommended option and explain why
85
+
86
+ **Presenting the design:**
87
+
88
+ - Once you believe you understand what you're building, present the design
89
+ - Scale each section to its complexity: a few sentences if straightforward, up to 200-300 words if nuanced
90
+ - Ask after each section whether it looks right so far
91
+ - Cover: architecture, components, data flow, error handling, testing
92
+ - Be ready to go back and clarify if something doesn't make sense
93
+
94
+ **Design for isolation and clarity:**
95
+
96
+ - Break the system into smaller units that each have one clear purpose, communicate through well-defined interfaces, and can be understood and tested independently
97
+ - For each unit, you should be able to answer: what does it do, how do you use it, and what does it depend on?
98
+ - Can someone understand what a unit does without reading its internals? Can you change the internals without breaking consumers? If not, the boundaries need work.
99
+ - Smaller, well-bounded units are also easier for you to work with - you reason better about code you can hold in context at once, and your edits are more reliable when files are focused. When a file grows large, that's often a signal that it's doing too much.
100
+
101
+ **Working in existing codebases:**
102
+
103
+ - Explore the current structure before proposing changes. Follow existing patterns.
104
+ - Where existing code has problems that affect the work (e.g., a file that's grown too large, unclear boundaries, tangled responsibilities), include targeted improvements as part of the design - the way a good developer improves code they're working in.
105
+ - Don't propose unrelated refactoring. Stay focused on what serves the current goal.
106
+
107
+ ## After the Design
108
+
109
+ **Documentation:**
110
+
111
+ - Write the validated design (spec) to `docs/superpowers/specs/YYYY-MM-DD-<topic>-design.md`
112
+ - (User preferences for spec location override this default)
113
+ - Use elements-of-style:writing-clearly-and-concisely skill if available
114
+ - Commit the design document to git
115
+
116
+ **Spec Self-Review:**
117
+ After writing the spec document, look at it with fresh eyes:
118
+
119
+ 1. **Placeholder scan:** Any "TBD", "TODO", incomplete sections, or vague requirements? Fix them.
120
+ 2. **Internal consistency:** Do any sections contradict each other? Does the architecture match the feature descriptions?
121
+ 3. **Scope check:** Is this focused enough for a single implementation plan, or does it need decomposition?
122
+ 4. **Ambiguity check:** Could any requirement be interpreted two different ways? If so, pick one and make it explicit.
123
+
124
+ Fix any issues inline. No need to re-review — just fix and move on.
125
+
126
+ **User Review Gate:**
127
+ After the spec review loop passes, ask the user to review the written spec before proceeding:
128
+
129
+ > "Spec written and committed to `<path>`. Please review it and let me know if you want to make any changes before we start writing out the implementation plan."
130
+
131
+ Wait for the user's response. If they request changes, make them and re-run the spec review loop. Only proceed once the user approves.
132
+
133
+ **Implementation:**
134
+
135
+ - Invoke the writing-plans skill to create a detailed implementation plan
136
+ - Do NOT invoke any other skill. writing-plans is the next step.
137
+
138
+ ## Key Principles
139
+
140
+ - **One question at a time** - Don't overwhelm with multiple questions
141
+ - **Multiple choice preferred** - Easier to answer than open-ended when possible
142
+ - **YAGNI ruthlessly** - Remove unnecessary features from all designs
143
+ - **Explore alternatives** - Always propose 2-3 approaches before settling
144
+ - **Incremental validation** - Present design, get approval before moving on
145
+ - **Be flexible** - Go back and clarify when something doesn't make sense
146
+
147
+ ## Visual Companion
148
+
149
+ A browser-based companion for showing mockups, diagrams, and visual options during brainstorming. Available as a tool — not a mode. Accepting the companion means it's available for questions that benefit from visual treatment; it does NOT mean every question goes through the browser.
150
+
151
+ **Offering the companion:** When you anticipate that upcoming questions will involve visual content (mockups, layouts, diagrams), offer it once for consent:
152
+ > "Some of what we're working on might be easier to explain if I can show it to you in a web browser. I can put together mockups, diagrams, comparisons, and other visuals as we go. This feature is still new and can be token-intensive. Want to try it? (Requires opening a local URL)"
153
+
154
+ **This offer MUST be its own message.** Do not combine it with clarifying questions, context summaries, or any other content. The message should contain ONLY the offer above and nothing else. Wait for the user's response before continuing. If they decline, proceed with text-only brainstorming.
155
+
156
+ **Per-question decision:** Even after the user accepts, decide FOR EACH QUESTION whether to use the browser or the terminal. The test: **would the user understand this better by seeing it than reading it?**
157
+
158
+ - **Use the browser** for content that IS visual — mockups, wireframes, layout comparisons, architecture diagrams, side-by-side visual designs
159
+ - **Use the terminal** for content that is text — requirements questions, conceptual choices, tradeoff lists, A/B/C/D text options, scope decisions
160
+
161
+ A question about a UI topic is not automatically a visual question. "What does personality mean in this context?" is a conceptual question — use the terminal. "Which wizard layout works better?" is a visual question — use the browser.
162
+
163
+ If they agree to the companion, read the detailed guide before proceeding:
164
+ `skills/brainstorming/visual-companion.md`