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.
- package/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +20 -5
- package/.codex-plugin/plugin.json +15 -5
- package/.cursor-plugin/plugin.json +15 -5
- package/.factory-plugin/plugin.json +2 -2
- package/.opencode/INSTALL.md +1 -1
- package/CHANGELOG.md +27 -6
- package/CLAUDE.md +2 -2
- package/GEMINI.md +2 -3
- package/README.md +51 -30
- package/_persona/summer/SKILL.md +5 -6
- package/commands/gameskill.md +103 -0
- package/dist/bin/summer.js +12 -4
- package/dist/commands/create.js +2 -0
- package/dist/commands/doctor.js +71 -1
- package/dist/commands/install.d.ts +17 -0
- package/dist/commands/install.js +63 -4
- package/dist/commands/memory.d.ts +14 -0
- package/dist/commands/memory.js +196 -0
- package/dist/commands/setup.js +8 -2
- package/dist/commands/skills.js +90 -6
- package/dist/commands/status.js +3 -0
- package/dist/lib/agent-config.d.ts +2 -2
- package/dist/lib/agent-config.js +134 -7
- package/dist/lib/api-client.d.ts +13 -0
- package/dist/lib/api-client.js +63 -26
- package/dist/lib/async-op-lifecycle.d.ts +60 -0
- package/dist/lib/async-op-lifecycle.js +83 -0
- package/dist/lib/project-memory.d.ts +33 -0
- package/dist/lib/project-memory.js +220 -0
- package/dist/lib/skills-registry.d.ts +134 -61
- package/dist/lib/skills-registry.js +102 -4
- package/dist/lib/version-check.d.ts +106 -0
- package/dist/lib/version-check.js +338 -0
- package/dist/mcp/server.d.ts +2 -0
- package/dist/mcp/server.js +81 -0
- package/dist/mcp/tools/debug-tools.js +32 -2
- package/dist/mcp/tools/project-tools.js +18 -6
- package/dist/mcp/tools/with-engine.d.ts +14 -0
- package/dist/mcp/tools/with-engine.js +52 -7
- package/gemini-extension.json +2 -2
- package/hooks/pre-commit-doctor.sh +0 -0
- package/hooks/run-hook.cmd +0 -0
- package/hooks/session-start.sh +0 -0
- package/package.json +6 -4
- package/skills/2d-assets/character-portrait/SKILL.md +1 -1
- package/skills/2d-assets/concept-art/SKILL.md +1 -1
- package/skills/2d-assets/create-asset-sheet/SKILL.md +163 -0
- package/skills/2d-assets/instantiate-asset-pack/SKILL.md +245 -0
- package/skills/2d-assets/pixel-art/SKILL.md +1 -1
- package/skills/2d-assets/skybox-panorama/SKILL.md +1 -1
- package/skills/2d-assets/sprite-sheet/SKILL.md +1 -1
- package/skills/2d-assets/tileable-texture/SKILL.md +1 -1
- package/skills/2d-assets/ui-graphics/SKILL.md +1 -1
- package/skills/2d-assets/use-widget-asset/SKILL.md +217 -0
- package/skills/3d-assets/character-model/SKILL.md +1 -1
- package/skills/3d-assets/organic-model/SKILL.md +1 -1
- package/skills/3d-assets/prop-model/SKILL.md +1 -1
- package/skills/3d-assets/vehicle-model/SKILL.md +1 -1
- package/skills/README.md +37 -30
- package/skills/ai-and-npcs/design-npc/SKILL.md +6 -6
- package/skills/animation/animation-tree/SKILL.md +2 -2
- package/skills/animation/facial-and-lipsync/SKILL.md +1 -1
- package/skills/animation/generate-motion/SKILL.md +1 -1
- package/skills/animation/procedural-animation/SKILL.md +2 -2
- package/skills/audio/adaptive-music/SKILL.md +1 -1
- package/skills/audio/audio-direction/SKILL.md +5 -5
- package/skills/audio/sound-effect/SKILL.md +2 -2
- package/skills/audio/voice-line/SKILL.md +25 -3
- package/skills/character-controllers/fps-controller/SKILL.md +5 -5
- package/skills/debugging/debug/SKILL.md +39 -1
- package/skills/deployment/export-and-ship/SKILL.md +4 -4
- package/skills/gameplay-mechanics/auto-fire-targeting/SKILL.md +170 -0
- package/skills/gameplay-mechanics/design-mechanic/SKILL.md +8 -8
- package/skills/level-design/design-level/SKILL.md +5 -5
- package/skills/level-design/scene-to-level/SKILL.md +125 -0
- package/skills/multiplayer-and-networking/host-authoritative-state/SKILL.md +4 -4
- package/skills/multiplayer-and-networking/peer-to-peer-multiplayer/SKILL.md +4 -4
- package/skills/multiplayer-and-networking/setup-multiplayer/SKILL.md +7 -7
- package/skills/performance/tune-performance/SKILL.md +5 -5
- package/skills/rendering-and-lighting/3d-lighting/SKILL.md +1 -1
- package/skills/rendering-and-lighting/art-direction/SKILL.md +5 -5
- package/skills/scene-and-project/brainstorm-game/SKILL.md +4 -4
- package/skills/scene-and-project/play/SKILL.md +1 -1
- package/skills/scene-and-project/scene-composition/SKILL.md +30 -1
- package/skills/scripting-patterns/gdscript-patterns/SKILL.md +53 -0
- package/skills/ui-and-ux/ui-basics/SKILL.md +1 -1
- package/skills/video/animated-loop/SKILL.md +1 -1
- package/skills/video/cinematic-cutscene/SKILL.md +1 -1
- package/skills/video/trailer-shot/SKILL.md +1 -1
- package/skills/visual-effects/game-feel/SKILL.md +6 -6
- package/skills/workflow/brainstorming/SKILL.md +164 -0
- package/skills/workflow/brainstorming/scripts/frame-template.html +214 -0
- package/skills/workflow/brainstorming/scripts/helper.js +88 -0
- package/skills/workflow/brainstorming/scripts/server.cjs +354 -0
- package/skills/workflow/brainstorming/scripts/start-server.sh +148 -0
- package/skills/workflow/brainstorming/scripts/stop-server.sh +56 -0
- package/skills/workflow/brainstorming/spec-document-reviewer-prompt.md +49 -0
- package/skills/workflow/brainstorming/visual-companion.md +287 -0
- package/skills/workflow/debugging-game-feel/SKILL.md +174 -0
- package/skills/workflow/diagnosing-perf-regressions/SKILL.md +190 -0
- package/skills/workflow/dispatching-parallel-agents/SKILL.md +182 -0
- package/skills/workflow/gameskill/SKILL.md +111 -0
- package/skills/workflow/investigating-bugs/CREATION-LOG.md +119 -0
- package/skills/workflow/investigating-bugs/SKILL.md +296 -0
- package/skills/workflow/investigating-bugs/condition-based-waiting-example.ts +158 -0
- package/skills/workflow/investigating-bugs/condition-based-waiting.md +115 -0
- package/skills/workflow/investigating-bugs/defense-in-depth.md +122 -0
- package/skills/workflow/investigating-bugs/find-polluter.sh +63 -0
- package/skills/workflow/investigating-bugs/root-cause-tracing.md +169 -0
- package/skills/workflow/investigating-bugs/test-academic.md +14 -0
- package/skills/workflow/investigating-bugs/test-pressure-1.md +58 -0
- package/skills/workflow/investigating-bugs/test-pressure-2.md +68 -0
- package/skills/workflow/investigating-bugs/test-pressure-3.md +69 -0
- package/skills/workflow/playtesting-a-feature/SKILL.md +173 -0
- package/skills/{_meta → workflow}/skill-create/SKILL.md +32 -22
- package/skills/{_meta → workflow}/skill-improve/SKILL.md +9 -10
- package/skills/{_meta → workflow}/skill-test/SKILL.md +12 -12
- package/skills/{_meta → workflow}/using-summer/SKILL.md +5 -2
- package/skills/workflow/verification-before-completion/SKILL.md +139 -0
- package/skills/workflow/writing-plans/SKILL.md +152 -0
- package/skills/workflow/writing-plans/plan-document-reviewer-prompt.md +49 -0
- package/skills/workflow/writing-skills/SKILL.md +655 -0
- package/skills/workflow/writing-skills/anthropic-best-practices.md +1150 -0
- package/skills/workflow/writing-skills/examples/CLAUDE_MD_TESTING.md +189 -0
- package/skills/workflow/writing-skills/graphviz-conventions.dot +172 -0
- package/skills/workflow/writing-skills/persuasion-principles.md +187 -0
- package/skills/workflow/writing-skills/render-graphs.js +168 -0
- package/skills/workflow/writing-skills/testing-skills-with-subagents.md +384 -0
- package/dist/commands/assets.d.ts +0 -2
- package/dist/commands/assets.js +0 -189
- package/dist/commands/debug.d.ts +0 -2
- package/dist/commands/debug.js +0 -127
- package/dist/commands/doctor.test.d.ts +0 -1
- package/dist/commands/doctor.test.js +0 -29
- package/dist/commands/project.d.ts +0 -2
- package/dist/commands/project.js +0 -170
- package/dist/commands/scene.d.ts +0 -2
- package/dist/commands/scene.js +0 -290
- package/dist/lib/agent-config.test.d.ts +0 -1
- package/dist/lib/agent-config.test.js +0 -80
- package/dist/lib/format.test.d.ts +0 -1
- package/dist/lib/format.test.js +0 -36
- package/dist/lib/plugin-manifests.test.d.ts +0 -1
- package/dist/lib/plugin-manifests.test.js +0 -134
- package/dist/lib/with-engine.d.ts +0 -14
- package/dist/lib/with-engine.js +0 -109
- package/skills/_shared/collaborative-protocol.md +0 -50
- package/skills/_shared/gd-style.md +0 -121
- package/skills/_shared/godot-version.md +0 -32
- package/skills/_shared/mcp-tools-reference.md +0 -133
- package/skills/_shared/summer-folder.md +0 -44
- package/skills/_shared/template-registry.md +0 -40
- package/skills/_tests/runner.md +0 -90
- package/skills/_tests/specs/3d-lighting.md +0 -19
- package/skills/_tests/specs/art-direction.md +0 -115
- package/skills/_tests/specs/asset-strategy.md +0 -19
- package/skills/_tests/specs/audio-direction.md +0 -123
- package/skills/_tests/specs/brainstorm-game.md +0 -99
- package/skills/_tests/specs/debug.md +0 -94
- package/skills/_tests/specs/design-level.md +0 -113
- package/skills/_tests/specs/design-mechanic.md +0 -112
- package/skills/_tests/specs/design-npc.md +0 -143
- package/skills/_tests/specs/export-and-ship.md +0 -114
- package/skills/_tests/specs/fps-controller.md +0 -113
- package/skills/_tests/specs/gdscript-patterns.md +0 -19
- package/skills/_tests/specs/host-authoritative-state.md +0 -104
- package/skills/_tests/specs/make-game.md +0 -19
- package/skills/_tests/specs/peer-to-peer-multiplayer.md +0 -99
- package/skills/_tests/specs/play.md +0 -88
- package/skills/_tests/specs/scene-composition.md +0 -19
- package/skills/_tests/specs/setup-multiplayer.md +0 -106
- package/skills/_tests/specs/tune-performance.md +0 -104
- package/skills/_tests/specs/ui-basics.md +0 -19
- package/skills/_tests/specs/vfx.md +0 -116
- 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 [`
|
|
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
|
-
- [`
|
|
331
|
-
- [`
|
|
332
|
-
- [`
|
|
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 [`
|
|
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
|
-
- [`
|
|
375
|
-
- [`
|
|
376
|
-
- [`
|
|
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 `
|
|
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 `
|
|
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 `
|
|
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
|
-
- `
|
|
319
|
-
- `
|
|
320
|
-
- `
|
|
321
|
-
- `
|
|
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 `
|
|
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
|
-
- `
|
|
212
|
-
- `
|
|
213
|
-
- `
|
|
214
|
-
- `
|
|
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 `../../
|
|
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 `
|
|
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 `
|
|
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
|
-
- `
|
|
277
|
-
- `
|
|
278
|
-
- `
|
|
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 `
|
|
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 `
|
|
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
|
-
- `
|
|
205
|
-
- `
|
|
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
|
-
- `
|
|
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 `../../
|
|
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 `../../
|
|
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
|
-
- `
|
|
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
|
-
- `
|
|
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
|
-
- `
|
|
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 `
|
|
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 `
|
|
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
|
-
- `
|
|
373
|
-
- `
|
|
374
|
-
- `
|
|
375
|
-
- `
|
|
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`
|