summer-engine 2.6.6 → 2.8.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 +4 -1
- package/.codex-plugin/plugin.json +6 -2
- package/.cursor-plugin/plugin.json +5 -1
- package/.opencode/INSTALL.md +1 -1
- package/.opencode/plugins/summer.js +2 -2
- package/AGENTS.md +11 -7
- package/CHANGELOG.md +40 -0
- package/GEMINI.md +9 -7
- package/README.md +63 -21
- package/_persona/summer/SKILL.md +1 -0
- package/assets/autopilot/README.md +51 -0
- package/assets/autopilot/autopilot.gd +222 -0
- package/assets/autopilot/probe_base.gd +262 -0
- package/assets/autopilot/run.sh +78 -0
- package/commands/gameskill.md +11 -2
- package/commands/summer.md +13 -0
- package/dist/bin/summer.js +12 -0
- package/dist/commands/config.d.ts +2 -0
- package/dist/commands/config.js +53 -0
- package/dist/commands/create.d.ts +1 -0
- package/dist/commands/create.js +38 -6
- package/dist/commands/debug.d.ts +2 -0
- package/dist/commands/debug.js +44 -0
- package/dist/commands/doctor.js +112 -8
- package/dist/commands/list.js +1 -1
- package/dist/commands/login.d.ts +19 -0
- package/dist/commands/login.js +123 -36
- package/dist/commands/logout.js +3 -16
- package/dist/commands/logs.d.ts +2 -0
- package/dist/commands/logs.js +19 -0
- package/dist/commands/mcp.js +7 -2
- package/dist/commands/open.js +1 -1
- package/dist/commands/publish.d.ts +2 -0
- package/dist/commands/publish.js +20 -0
- package/dist/commands/releases.d.ts +2 -0
- package/dist/commands/releases.js +20 -0
- package/dist/commands/run.js +1 -1
- package/dist/commands/skills.js +1 -1
- package/dist/lib/api-client.d.ts +15 -4
- package/dist/lib/api-client.js +138 -13
- package/dist/lib/async-op-lifecycle.d.ts +7 -2
- package/dist/lib/async-op-lifecycle.js +32 -9
- package/dist/lib/auth.d.ts +40 -12
- package/dist/lib/auth.js +173 -37
- package/dist/lib/cloud/engine-bridge.d.ts +17 -4
- package/dist/lib/cloud/engine-bridge.js +32 -6
- package/dist/lib/config.d.ts +20 -0
- package/dist/lib/config.js +142 -0
- package/dist/lib/creator.d.ts +93 -0
- package/dist/lib/creator.js +393 -0
- package/dist/lib/debug-report.d.ts +50 -0
- package/dist/lib/debug-report.js +308 -0
- package/dist/lib/engine.d.ts +35 -2
- package/dist/lib/engine.js +240 -6
- package/dist/lib/game-task-plan.js +4 -4
- package/dist/lib/mcp-boot-notice.d.ts +3 -0
- package/dist/lib/mcp-boot-notice.js +7 -0
- package/dist/lib/mcp-log.d.ts +3 -0
- package/dist/lib/mcp-log.js +72 -0
- package/dist/lib/public-surface-paths.d.ts +13 -0
- package/dist/lib/public-surface-paths.js +42 -0
- package/dist/lib/skills-registry.d.ts +33 -1
- package/dist/lib/skills-registry.js +55 -0
- package/dist/lib/store.d.ts +14 -0
- package/dist/lib/store.js +145 -0
- package/dist/lib/summer-compatibility.d.ts +6 -0
- package/dist/lib/summer-compatibility.js +22 -0
- package/dist/mcp/server.d.ts +10 -3
- package/dist/mcp/server.js +104 -11
- package/dist/mcp/tools/asset-tools.js +33 -12
- package/dist/mcp/tools/cloud-tools.js +15 -15
- package/dist/mcp/tools/creator-tools.d.ts +2 -0
- package/dist/mcp/tools/creator-tools.js +105 -0
- package/dist/mcp/tools/debug-tools.js +44 -1
- package/dist/mcp/tools/file-tools.d.ts +2 -0
- package/dist/mcp/tools/file-tools.js +154 -0
- package/dist/mcp/tools/generate-tools.js +159 -11
- package/dist/mcp/tools/project-tools.js +37 -27
- package/dist/mcp/tools/scene-tools.js +106 -29
- package/dist/mcp/tools/visual-tools.js +4 -3
- package/dist/mcp/tools/with-engine.js +4 -4
- package/hooks/session-start.sh +5 -5
- package/package.json +3 -1
- package/references/collaborative-protocol.md +50 -0
- package/references/gd-style.md +121 -0
- package/references/godot-version.md +51 -0
- package/references/mcp-tools-reference.md +199 -0
- package/references/public-surface-language.md +30 -0
- package/references/summer-folder.md +90 -0
- package/references/template-registry.md +73 -0
- package/skills/2d-assets/character-portrait/SKILL.md +17 -12
- package/skills/2d-assets/concept-art/SKILL.md +10 -9
- package/skills/2d-assets/create-asset-sheet/SKILL.md +17 -15
- package/skills/2d-assets/pixel-art/SKILL.md +36 -20
- package/skills/2d-assets/skybox-panorama/SKILL.md +32 -37
- package/skills/2d-assets/sprite-sheet/SKILL.md +40 -35
- package/skills/2d-assets/tileable-texture/SKILL.md +28 -22
- package/skills/2d-assets/ui-graphics/SKILL.md +46 -32
- package/skills/2d-assets/use-widget-asset/SKILL.md +8 -6
- package/skills/3d-assets/character-model/SKILL.md +34 -19
- package/skills/3d-assets/environment-kit/SKILL.md +11 -5
- package/skills/3d-assets/organic-model/SKILL.md +8 -5
- package/skills/3d-assets/prop-model/SKILL.md +9 -3
- package/skills/3d-assets/vehicle-model/SKILL.md +32 -19
- package/skills/README.md +1 -1
- package/skills/ai-and-npcs/design-npc/SKILL.md +31 -13
- package/skills/animation/animation-tree/SKILL.md +39 -15
- package/skills/animation/facial-and-lipsync/SKILL.md +25 -8
- package/skills/animation/generate-motion/SKILL.md +47 -15
- package/skills/animation/procedural-animation/SKILL.md +31 -13
- package/skills/animation/retarget/SKILL.md +127 -79
- package/skills/audio/adaptive-music/SKILL.md +24 -20
- package/skills/audio/ambient-bed/SKILL.md +22 -16
- package/skills/audio/audio-direction/SKILL.md +15 -10
- package/skills/audio/music-track/SKILL.md +18 -12
- package/skills/audio/sound-effect/SKILL.md +17 -12
- package/skills/audio/voice-line/SKILL.md +42 -42
- package/skills/character-controllers/fps-controller/SKILL.md +26 -16
- package/skills/debugging/debug/SKILL.md +74 -20
- package/skills/deployment/export-and-ship/SKILL.md +105 -38
- package/skills/deployment/remote-deploy/SKILL.md +140 -0
- package/skills/gameplay-mechanics/auto-fire-targeting/SKILL.md +26 -1
- package/skills/gameplay-mechanics/design-mechanic/SKILL.md +23 -15
- package/skills/level-design/design-level/SKILL.md +22 -8
- package/skills/level-design/scene-to-level/SKILL.md +13 -7
- package/skills/multiplayer-and-networking/host-authoritative-state/SKILL.md +8 -8
- package/skills/multiplayer-and-networking/peer-to-peer-multiplayer/SKILL.md +2 -7
- package/skills/multiplayer-and-networking/setup-multiplayer/SKILL.md +26 -18
- package/skills/performance/tune-performance/SKILL.md +51 -32
- package/skills/rendering-and-lighting/3d-lighting/SKILL.md +34 -5
- package/skills/rendering-and-lighting/art-direction/SKILL.md +6 -8
- package/skills/scene-and-project/brainstorm-game/SKILL.md +7 -9
- package/skills/scene-and-project/make-game/SKILL.md +2 -1
- package/skills/scene-and-project/play/SKILL.md +10 -4
- package/skills/scene-and-project/scene-composition/SKILL.md +21 -8
- package/skills/scene-and-project/summer-cloud/SKILL.md +92 -0
- package/skills/scripting-patterns/gdscript-patterns/SKILL.md +1 -1
- package/skills/ui-and-ux/ui-basics/SKILL.md +16 -7
- package/skills/video/animated-loop/SKILL.md +63 -39
- package/skills/video/cinematic-cutscene/SKILL.md +66 -30
- package/skills/video/trailer-shot/SKILL.md +30 -21
- package/skills/visual-effects/_building-blocks/additive-billboard-particles.md +25 -16
- package/skills/visual-effects/_building-blocks/trauma-shake-snippet.md +5 -3
- package/skills/visual-effects/game-feel/SKILL.md +51 -33
- package/skills/visual-effects/recipes/dissolve/SKILL.md +51 -9
- package/skills/visual-effects/recipes/fire/SKILL.md +136 -49
- package/skills/visual-effects/recipes/hit-spark/SKILL.md +45 -8
- package/skills/visual-effects/recipes/lightning/SKILL.md +59 -27
- package/skills/visual-effects/recipes/magic-glow/SKILL.md +59 -26
- package/skills/visual-effects/recipes/muzzle-flash/SKILL.md +68 -25
- package/skills/visual-effects/recipes/smoke/SKILL.md +89 -28
- package/skills/visual-effects/recipes/water-ripple/SKILL.md +83 -23
- package/skills/workflow/brainstorming/SKILL.md +1 -1
- package/skills/workflow/debugging-game-feel/SKILL.md +29 -9
- package/skills/workflow/diagnosing-perf-regressions/SKILL.md +46 -21
- package/skills/workflow/gameskill/SKILL.md +11 -2
- package/skills/workflow/headless-scripting/SKILL.md +407 -0
- package/skills/workflow/investigating-bugs/SKILL.md +4 -2
- package/skills/workflow/mcpupdate/SKILL.md +9 -9
- package/skills/workflow/playtesting-a-feature/SKILL.md +94 -21
- package/skills/workflow/skill-create/SKILL.md +7 -7
- package/skills/workflow/skill-test/SKILL.md +3 -3
- package/skills/workflow/using-summer/SKILL.md +32 -3
- package/skills/workflow/verification-before-completion/SKILL.md +2 -0
- package/skills/workflow/writing-plans/SKILL.md +7 -7
- package/skills/workflow/writing-skills/SKILL.md +7 -5
- package/skills/workflow/writing-skills/testing-skills-with-subagents.md +1 -1
|
@@ -29,12 +29,9 @@ Static analysis is necessary but never sufficient for gameplay features. A clean
|
|
|
29
29
|
NO "FEATURE SHIPPED" CLAIM WITHOUT A PLAYED WALKTHROUGH
|
|
30
30
|
```
|
|
31
31
|
|
|
32
|
-
If you have not, in this session,
|
|
32
|
+
If you have not, in this session, driven the feature and read back what happened, you cannot claim it works.
|
|
33
33
|
|
|
34
|
-
|
|
35
|
-
2. Asked the user to walk it and confirmed the result via `summer_get_console` / `summer_get_debugger_errors`
|
|
36
|
-
|
|
37
|
-
— then you cannot claim the feature works.
|
|
34
|
+
**You walk the feature. Not the user.** A `RunVerification` probe presses your game's real inputs, reads state back across frames, and saves real rendered frames. Handing the walkthrough to the user is a last resort for things a probe genuinely cannot judge — see [What only a human can answer](#what-only-a-human-can-answer) — not the default.
|
|
38
35
|
|
|
39
36
|
## The Loop
|
|
40
37
|
|
|
@@ -51,7 +48,57 @@ Before pressing play, write down — in one or two sentences — what "feature w
|
|
|
51
48
|
|
|
52
49
|
If you cannot describe the golden path in one sentence, you do not understand the feature well enough to verify it. Ask the user.
|
|
53
50
|
|
|
54
|
-
### 2.
|
|
51
|
+
### 2. Walk the golden path with a probe
|
|
52
|
+
|
|
53
|
+
Write the golden path as a `RunVerification` probe and send it as a raw op through `summer_batch`. The engine spawns a hidden, disposable game instance positioned offscreen, runs your GDScript, writes `results.json` plus any frames you saved, and kills the instance. It never touches the user's open editor, and nothing appears on their screen.
|
|
54
|
+
|
|
55
|
+
```
|
|
56
|
+
summer_batch ops:[{
|
|
57
|
+
"op": "RunVerification",
|
|
58
|
+
"probe_source": "<your GDScript>",
|
|
59
|
+
"max_seconds": 20
|
|
60
|
+
}]
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
A probe extends `SummerProbeBase` and has: `report(key, value)`, `save_frame(name)`, `dump_tree()`, `press(action, hold_ms)`, `key(keycode, hold_ms)`, `finish()`.
|
|
64
|
+
|
|
65
|
+
```gdscript
|
|
66
|
+
extends SummerProbeBase
|
|
67
|
+
|
|
68
|
+
func _ready() -> void:
|
|
69
|
+
await super._ready()
|
|
70
|
+
for i in 20:
|
|
71
|
+
await get_tree().physics_frame # let the scene settle
|
|
72
|
+
|
|
73
|
+
var player := get_tree().current_scene.get_node("Player")
|
|
74
|
+
var start: Vector2 = player.position
|
|
75
|
+
save_frame("00_start")
|
|
76
|
+
|
|
77
|
+
await press("move_right", 500) # await, or the hold never elapses
|
|
78
|
+
await get_tree().physics_frame
|
|
79
|
+
report("walked_right", player.position.x > start.x + 50)
|
|
80
|
+
save_frame("01_after_walk")
|
|
81
|
+
|
|
82
|
+
var y_before: float = player.position.y
|
|
83
|
+
await press("jump", 50)
|
|
84
|
+
var apex := y_before
|
|
85
|
+
for i in 25:
|
|
86
|
+
await get_tree().physics_frame
|
|
87
|
+
apex = min(apex, player.position.y)
|
|
88
|
+
report("jumped", apex < y_before - 30)
|
|
89
|
+
save_frame("02_after_jump")
|
|
90
|
+
|
|
91
|
+
finish()
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
Four rules the probe API will punish you for breaking:
|
|
95
|
+
|
|
96
|
+
- **`press()` and `key()` are coroutines.** `await press("jump", 50)` — calling them bare starts the press and never releases it. You also cannot store one in a variable and await it later; it returns void.
|
|
97
|
+
- **Assert on physics-frame-derived state.** `await get_tree().physics_frame` N times, then read positions. That is reproducible run to run.
|
|
98
|
+
- **Assert inequalities, never exact values.** `press(hold_ms)` waits on the wall clock, so the number of physics frames a key is held drifts between runs — the same walk lands on x=245 one run and x=250 the next. `position.x > start.x + 50` is a real assertion; `position.x == 250.0` is a flaky test you wrote yourself.
|
|
99
|
+
- **The global RNG is not seeded.** Anything downstream of `randf()` differs every run. Assert ranges, or seed it yourself in the probe.
|
|
100
|
+
|
|
101
|
+
If the probe cannot express the check — no `SummerProbeBase` in this build, or a genuinely out-of-process feature — fall back to `summer_play` + console reads:
|
|
55
102
|
|
|
56
103
|
```
|
|
57
104
|
summer_clear_console
|
|
@@ -61,14 +108,9 @@ If you cannot describe the golden path in one sentence, you do not understand th
|
|
|
61
108
|
|
|
62
109
|
`summer_clear_console` first so the buffer is not polluted by a previous session's errors. If you skip this, you will chase ghost errors that have nothing to do with the current feature.
|
|
63
110
|
|
|
64
|
-
### 3.
|
|
65
|
-
|
|
66
|
-
The MCP cannot simulate keyboard input, mouse motion, or controller. So either:
|
|
67
|
-
|
|
68
|
-
- **The user plays.** Ask them to walk the exact golden path you defined. Wait for their confirmation that they did. Then check state.
|
|
69
|
-
- **You drive via scene mutation.** For features that can be triggered through `summer_set_prop` or function calls exposed to the editor (e.g. autoload methods), drive them programmatically. Be honest about which path you took.
|
|
111
|
+
### 3. Read back what actually happened
|
|
70
112
|
|
|
71
|
-
|
|
113
|
+
The probe's `results.json` is your primary evidence. Then check the editor's own view:
|
|
72
114
|
|
|
73
115
|
```
|
|
74
116
|
summer_get_console (look for unexpected prints, warnings)
|
|
@@ -76,8 +118,20 @@ After the walkthrough:
|
|
|
76
118
|
summer_get_diagnostics (overall counts)
|
|
77
119
|
```
|
|
78
120
|
|
|
121
|
+
A probe also collects engine errors itself — `results.json` carries `errors_seen`. Read it. An empty `reports` block with `finished: false` means the probe hit its `max_seconds` ceiling before calling `finish()`, which is a failure, not a pass.
|
|
122
|
+
|
|
79
123
|
If anything is non-zero or unexpected, the feature is not done. Go to `summer:debug`.
|
|
80
124
|
|
|
125
|
+
### What only a human can answer
|
|
126
|
+
|
|
127
|
+
A probe reports facts. It cannot hold an opinion. Ask the user only when the question is genuinely experiential:
|
|
128
|
+
|
|
129
|
+
- **Does it feel right?** Floaty jumps, sluggish input, mushy hit feedback — see `summer:debugging-game-feel`.
|
|
130
|
+
- **Does it look good?** Composition, colour, readability. A probe can prove a light exists and prove the frame is not black; it cannot tell you the scene is ugly.
|
|
131
|
+
- **Is this fun?** Not a measurable property.
|
|
132
|
+
|
|
133
|
+
"I cannot simulate input" is not on that list, and has not been true since `RunVerification` shipped. If you catch yourself asking the user to press a key, write the probe instead.
|
|
134
|
+
|
|
81
135
|
### 4. Probe the edges
|
|
82
136
|
|
|
83
137
|
The golden path proves the happy case. Most gameplay bugs live in the edges. Before claiming done, probe at least these four classes:
|
|
@@ -120,13 +174,15 @@ The console catches "looks right but isn't right" cases — silent errors, depre
|
|
|
120
174
|
|
|
121
175
|
## When to record video vs when console+diagnostics is enough
|
|
122
176
|
|
|
123
|
-
|
|
177
|
+
Your probe already produces the visual record: `save_frame()` writes a real rendered JPEG at each step, and a sequence of them across a movement is a flipbook of the feature happening. **You are not the only one who cannot see the game — until you save frames, nobody can.** Save them at the interesting moments and read them back.
|
|
178
|
+
|
|
179
|
+
Ask the user for a video or a live look only when:
|
|
124
180
|
|
|
125
|
-
- The feature is **visual** (camera, lighting, particles, animation, UI layout) and the user is the only one who can see the result.
|
|
126
181
|
- The feature **feels wrong** — see `summer:debugging-game-feel`. Frame counts and console output cannot capture "the jump feels floaty."
|
|
127
|
-
- The bug is **non-deterministic**
|
|
182
|
+
- The bug is **non-deterministic** and your probe cannot reproduce it after several attempts.
|
|
183
|
+
- The judgement is aesthetic — see [What only a human can answer](#what-only-a-human-can-answer).
|
|
128
184
|
|
|
129
|
-
Don't ask
|
|
185
|
+
Don't ask reflexively. A saved frame sequence answers most "did it visually work" questions without involving the user at all.
|
|
130
186
|
|
|
131
187
|
## Red Flags — STOP
|
|
132
188
|
|
|
@@ -137,10 +193,15 @@ Don't ask for video reflexively. Most features can be verified through `summer_g
|
|
|
137
193
|
| "User said make this — I'll move on once it builds" | The user wants the feature to work, not to build. |
|
|
138
194
|
| "It would take too long to play" | Playtest takes 60 seconds. Shipping a broken feature costs hours. |
|
|
139
195
|
| "The unit test passes" | Unit tests cover code paths, not gameplay sequences. |
|
|
140
|
-
| "I already played it in a previous session" | State changed.
|
|
196
|
+
| "I already played it in a previous session" | State changed. Verify in this session. |
|
|
141
197
|
| "I'll let the user catch any issues" | That is the user's job description for a non-AI engineer. Yours is to ship working features. |
|
|
142
198
|
| Skipping `summer_clear_console` before `summer_play` | You will chase last session's errors. |
|
|
143
199
|
| Skipping `summer_get_console` because diagnostics looked fine | Silent warnings and signal misfires hide there. |
|
|
200
|
+
| "The MCP can't simulate input, so the user has to test it" | False. `RunVerification` presses actions and keys. Write the probe. |
|
|
201
|
+
| "I'll ask the user to press jump and tell me what happened" | You can press jump. They should not have to QA your work. |
|
|
202
|
+
| Probe returned `finished: false`, you called it a pass | It hit `max_seconds` before `finish()`. That is a failure. |
|
|
203
|
+
| Asserting `position.x == 250.0` in a probe | Hold time is wall-clock. Assert `> start.x + 50`. |
|
|
204
|
+
| `press("jump", 50)` without `await` | It is a coroutine. The key is never released. |
|
|
144
205
|
|
|
145
206
|
## Rationalization Prevention
|
|
146
207
|
|
|
@@ -154,10 +215,22 @@ Don't ask for video reflexively. Most features can be verified through `summer_g
|
|
|
154
215
|
|
|
155
216
|
## When the engine isn't running
|
|
156
217
|
|
|
157
|
-
|
|
218
|
+
`RunVerification` is dispatched by the editor, so it needs the editor running. **The verify instance itself does not.** You can spawn exactly the same probe runtime straight from your shell, with no editor at all:
|
|
219
|
+
|
|
220
|
+
```bash
|
|
221
|
+
/Applications/Summer.app/Contents/MacOS/Summer \
|
|
222
|
+
--path <project-dir> \
|
|
223
|
+
--summer-verify <abs-path-to-probe.gd> \
|
|
224
|
+
--summer-verify-out <abs-out-dir> \
|
|
225
|
+
--summer-verify-max 30
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
Then read `<out-dir>/results.json` and the JPEGs beside it. The probe must extend the base class — copy `summer_probe_base.gd` into the project and `extends "res://summer_probe_base.gd"`, or use the project's `tests/autopilot/` scaffold if it has one. See `summer:headless-scripting` for the full pattern and its traps.
|
|
229
|
+
|
|
230
|
+
So if `summer_play` returns "Summer Engine is not running":
|
|
158
231
|
|
|
159
|
-
1.
|
|
160
|
-
2.
|
|
232
|
+
1. Run the probe directly from the shell as above. That is a real playtest.
|
|
233
|
+
2. Only if that is also impossible: tell the user `summer run` to start the editor, and say plainly "code compiles and looks correct, but I have not played it" — do not claim verification from static analysis alone.
|
|
161
234
|
3. When the engine comes back, run the loop.
|
|
162
235
|
|
|
163
236
|
## The Bottom Line
|
|
@@ -15,9 +15,9 @@ allowed-tools: Read Write Glob Grep
|
|
|
15
15
|
|
|
16
16
|
Ask the user:
|
|
17
17
|
- **Name** (kebab-case, ≤ 64 chars). Example: `state-machine-patterns`.
|
|
18
|
-
- **Category** (one of the
|
|
18
|
+
- **Category** (must be one of the values in the `SKILL_CATEGORIES` array at `src/lib/skills-registry.ts` — read it, do not guess). Example: `scripting-patterns`.
|
|
19
19
|
- **One-sentence description** for the frontmatter.
|
|
20
|
-
- **Template-id** (optional). Lookup against
|
|
20
|
+
- **Template-id** (optional). Lookup against `../../../references/template-registry.md`.
|
|
21
21
|
|
|
22
22
|
### 2. Create the folder
|
|
23
23
|
|
|
@@ -80,13 +80,13 @@ May I <action>?
|
|
|
80
80
|
|
|
81
81
|
→ **template-id**: `<template-id>`
|
|
82
82
|
→ **Repo**: <github URL from references/template-registry.md>
|
|
83
|
-
→ **Bootstrap**: `summer
|
|
83
|
+
→ **Bootstrap**: `summer create <template-id> my-game` (see `summer list templates` for the slugs)
|
|
84
84
|
|
|
85
85
|
## See also
|
|
86
86
|
|
|
87
|
-
-
|
|
88
|
-
-
|
|
89
|
-
-
|
|
87
|
+
- `../../../references/godot-version.md`
|
|
88
|
+
- `../../../references/mcp-tools-reference.md`
|
|
89
|
+
- `../../../references/gd-style.md`
|
|
90
90
|
- (other relevant skills)
|
|
91
91
|
```
|
|
92
92
|
|
|
@@ -149,5 +149,5 @@ This skill writes files (the new skill folder + plugin manifest update + TS regi
|
|
|
149
149
|
|
|
150
150
|
## See also
|
|
151
151
|
|
|
152
|
-
-
|
|
152
|
+
- `../../../references/collaborative-protocol.md`
|
|
153
153
|
- `workflow/skill-test/SKILL.md`
|
|
@@ -21,7 +21,7 @@ For a single skill at `skills/<category>/<name>/`, run these checks:
|
|
|
21
21
|
- At least one `summer_*` MCP tool example.
|
|
22
22
|
- At least one file-edit fallback block (e.g., raw `.tscn` snippet) OR an explicit "no fallback for this — Summer MCP required" note.
|
|
23
23
|
4. **Collaborative protocol.** If the skill triggers user-visible writes, body must contain at least one of: `May I`, `I'm about to`, `Continue?`, `OK?`, `Proceed?`. Skills that only inspect/read are exempt.
|
|
24
|
-
5. **Template-id resolved.** If the skill's frontmatter declares `template-id: <id>`, that id must exist in
|
|
24
|
+
5. **Template-id resolved.** If the skill's frontmatter declares `template-id: <id>`, that id must exist in `../../../references/template-registry.md`.
|
|
25
25
|
6. **Tests/spec.md present.** Every skill in a non-`_meta` category must have `tests/spec.md` with at least one `## Case` heading.
|
|
26
26
|
7. **Relative links resolve.** Every `](../references/...)`, `](../../references/...)`, `](./references/...)`, and `](./examples/...)` link must point at an existing file (FAIL if broken). Forward references in `## See also` to other SKILL.md files (e.g., `[design-mechanic](../../gameplay-mechanics/design-mechanic/SKILL.md)`) are allowed to dangle and only WARN if the target is missing — the catalog evolves and skills should be free to point at planned skills.
|
|
27
27
|
|
|
@@ -80,7 +80,7 @@ This skill is **read-only**. It never writes. No "May I" needed.
|
|
|
80
80
|
|
|
81
81
|
## See also
|
|
82
82
|
|
|
83
|
-
-
|
|
84
|
-
-
|
|
83
|
+
- `../../../references/collaborative-protocol.md`
|
|
84
|
+
- `../../../references/template-registry.md`
|
|
85
85
|
- `tests/runner.md`
|
|
86
86
|
- `tests/specs/` — per-skill behavioral specs
|
|
@@ -36,12 +36,22 @@ If `CLAUDE.md` says "skip the brainstorm, just build it" and a skill says "alway
|
|
|
36
36
|
Two layers:
|
|
37
37
|
|
|
38
38
|
- **Skills** — discipline guides that fire on specific situations: brainstorming a game, designing a mechanic, building an FPS controller, debugging a crash, shipping a build. Each one is a SKILL.md you load via the Skill tool.
|
|
39
|
-
- **MCP tools** — `summer_*` tools that talk to the running Summer Engine on `localhost:6550`. Scene mutation (`summer_add_node`, `summer_set_prop`), inspection (`summer_get_scene_tree`, `summer_inspect_node`), play/diagnostics (`summer_play`, `summer_get_diagnostics`), asset import/generation (`summer_import_from_url`, `summer_generate_3d`), and 30+ more.
|
|
39
|
+
- **MCP tools** — `summer_*` tools that talk to the running Summer Engine on `localhost:6550`. Scene mutation (`summer_add_node`, `summer_set_prop`), inspection (`summer_get_scene_tree`, `summer_inspect_node`), play/diagnostics (`summer_play`, `summer_get_diagnostics`), asset import/generation (`summer_import_from_url`, `summer_generate_3d`), whole-project sync to Summer Cloud (`summer_cloud_push`, `summer_cloud_pull`; see `summer:summer-cloud`), and 30+ more.
|
|
40
40
|
|
|
41
|
-
**Scripting language:**
|
|
41
|
+
**Scripting language:** The user is making a Summer game with the Summer SDK.
|
|
42
|
+
GDScript is the default creator language. Summer currently uses the 4.6.1
|
|
43
|
+
upstream technical base, plans to adopt 4.7.1 next, and follows upstream
|
|
44
|
+
continuously. Confirm version-sensitive behavior from the engine's own version
|
|
45
|
+
string rather than turning that base into the product identity. You can write
|
|
46
|
+
game code in either:
|
|
42
47
|
|
|
43
48
|
- **GDScript** (`.gd`) — the default. Best supported by Summer skills (see `summer:gdscript-patterns`). Use this unless the user has explicitly chosen C#.
|
|
44
|
-
- **C#** (`.cs`) —
|
|
49
|
+
- **C#** (`.cs`) — supported by the shipped Mono build. There is no
|
|
50
|
+
`summer:csharp-patterns` skill yet. When writing C#, use the upstream C# API
|
|
51
|
+
reference matching the current Summer technical base. The lifecycle, signal
|
|
52
|
+
API, and export attributes differ, so do not blindly translate GDScript
|
|
53
|
+
idioms. Confirm that the user wants C# before producing it; switching
|
|
54
|
+
languages mid-project is painful.
|
|
45
55
|
|
|
46
56
|
Scenes are always `.tscn`/`.scn`. Resources are always `.tres`/`.res`. Drive the engine through `summer_*` tools — do not hand-edit `.tscn` files; the editor holds in-memory state that diverges from disk.
|
|
47
57
|
|
|
@@ -90,6 +100,7 @@ These thoughts mean STOP. Check skills first.
|
|
|
90
100
|
| "I'll write the GDScript myself, no skill" | `gdscript-patterns` encodes idioms that Claude/Codex/Cursor regularly get wrong (signal connection, type hints, `_ready` vs `_process`). |
|
|
91
101
|
| "The engine isn't running, I'll just edit files" | Editing scene files directly while the engine is running silently overwrites in-memory state. Check the skill. |
|
|
92
102
|
| "I remember this skill" | Skills evolve. Re-read the current version. |
|
|
103
|
+
| "I'll just zip the project to move it to another machine" | `summer:summer-cloud` syncs the whole project (big assets included) by hash, with restorable versions. Load it whenever the user mentions sync, a second machine, sharing with a teammate, backing up assets, or restoring a version. |
|
|
93
104
|
|
|
94
105
|
## Skill Priority
|
|
95
106
|
|
|
@@ -128,6 +139,24 @@ If skills aren't found or the MCP server fails to start:
|
|
|
128
139
|
2. If not, point them at: `npx -y summer-engine@latest setup <agent> --yes --force`.
|
|
129
140
|
3. If `summer doctor` is available, run it: `summer doctor` reports auth, engine, port, project memory, and skill state.
|
|
130
141
|
|
|
142
|
+
## When Summer Is Stale
|
|
143
|
+
|
|
144
|
+
Run `summer doctor` early in a fresh Summer session when setup, MCP tools, slash commands, or skills behave oddly. If doctor reports `cli-version-current` or `skills-version-stale` as warning/fail, refresh before continuing:
|
|
145
|
+
|
|
146
|
+
```
|
|
147
|
+
npx clear-npx-cache && npx -y summer-engine@latest setup <agent> --yes --force
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
Use the real agent slug from doctor or the current environment (`claude-code`, `codex`, `cursor`, `gemini`, `github-copilot`, `vscode-copilot`, `opencode`, etc.).
|
|
151
|
+
|
|
152
|
+
Why this exact command matters:
|
|
153
|
+
|
|
154
|
+
- `@latest` forces npm/npx to resolve the current published Summer CLI instead of reusing a stale cached package.
|
|
155
|
+
- `clear-npx-cache` clears old npx package material on machines that keep serving an older Summer.
|
|
156
|
+
- `setup ... --force` rewrites copied skill/slash-command files, which do not update just because the MCP server restarted.
|
|
157
|
+
|
|
158
|
+
After the refresh, restart or reload the agent/MCP session if tools were missing. MCP tool changes load on MCP reconnect; copied skills and slash commands load when the agent notices the rewritten files or starts a fresh session.
|
|
159
|
+
|
|
131
160
|
## User Instructions Trump Everything
|
|
132
161
|
|
|
133
162
|
A direct user instruction ("skip the brainstorm", "just write the code", "don't use the MCP, edit files") overrides this skill. Surface the trade-off in one sentence ("Skipping brainstorm — heads up, scope creep is the most common reason game projects die.") and proceed as instructed.
|
|
@@ -45,6 +45,7 @@ Skip any step = lying, not verifying
|
|
|
45
45
|
| Linter clean | Linter output: 0 errors | Partial check, extrapolation |
|
|
46
46
|
| Build succeeds | Build command: exit 0 | Linter passing, logs look good |
|
|
47
47
|
| Bug fixed | Test original symptom: passes | Code changed, assumed fixed |
|
|
48
|
+
| Gameplay behaviour works | `RunVerification` probe: pressed the input, read the state back | Script compiles, game boots, diagnostics clean |
|
|
48
49
|
| Regression test works | Red-green cycle verified | Test passes once |
|
|
49
50
|
| Agent completed | VCS diff shows changes | Agent reports "success" |
|
|
50
51
|
| Requirements met | Line-by-line checklist | Tests passing |
|
|
@@ -72,6 +73,7 @@ Skip any step = lying, not verifying
|
|
|
72
73
|
| "I'm tired" | Exhaustion ≠ excuse |
|
|
73
74
|
| "Partial check is enough" | Partial proves nothing |
|
|
74
75
|
| "Different words so rule doesn't apply" | Spirit over letter |
|
|
76
|
+
| "There's no way to test gameplay, I'll ask the user" | There is. A `RunVerification` probe presses input and reads state back. Ask the user only for what a probe cannot judge. |
|
|
75
77
|
|
|
76
78
|
## Key Patterns
|
|
77
79
|
|
|
@@ -13,7 +13,7 @@ Assume they are a skilled developer, but know almost nothing about our toolset o
|
|
|
13
13
|
|
|
14
14
|
**Announce at start:** "I'm using the writing-plans skill to create the implementation plan."
|
|
15
15
|
|
|
16
|
-
**Context:** If
|
|
16
|
+
**Context:** If the work needs isolation from the current checkout, create a git worktree for it before execution starts.
|
|
17
17
|
|
|
18
18
|
**Save plans to:** `docs/superpowers/plans/YYYY-MM-DD-<feature-name>.md`
|
|
19
19
|
- (User preferences for plan location override this default)
|
|
@@ -49,7 +49,7 @@ This structure informs the task decomposition. Each task should produce self-con
|
|
|
49
49
|
```markdown
|
|
50
50
|
# [Feature Name] Implementation Plan
|
|
51
51
|
|
|
52
|
-
> **For agentic workers:**
|
|
52
|
+
> **For agentic workers:** implement this plan task-by-task, in order, checking off each step as it lands. Steps use checkbox (`- [ ]`) syntax for tracking. Dispatch a fresh subagent per task where the tasks are independent (see summer:dispatching-parallel-agents), otherwise execute inline with a review checkpoint after each task.
|
|
53
53
|
|
|
54
54
|
**Goal:** [One sentence describing what this builds]
|
|
55
55
|
|
|
@@ -139,14 +139,14 @@ After saving the plan, offer execution choice:
|
|
|
139
139
|
|
|
140
140
|
**1. Subagent-Driven (recommended)** - I dispatch a fresh subagent per task, review between tasks, fast iteration
|
|
141
141
|
|
|
142
|
-
**2. Inline Execution** - Execute tasks in this session
|
|
142
|
+
**2. Inline Execution** - Execute tasks in this session, batched with checkpoints
|
|
143
143
|
|
|
144
144
|
**Which approach?"**
|
|
145
145
|
|
|
146
146
|
**If Subagent-Driven chosen:**
|
|
147
|
-
-
|
|
148
|
-
-
|
|
147
|
+
- One fresh subagent per task, each given the task's full text and nothing else from this session's history. See `summer:dispatching-parallel-agents` for prompt structure and when parallelism is safe.
|
|
148
|
+
- Two-stage review: read the subagent's summary, then verify the diff yourself before starting the next task.
|
|
149
149
|
|
|
150
150
|
**If Inline Execution chosen:**
|
|
151
|
-
-
|
|
152
|
-
-
|
|
151
|
+
- Execute tasks in order in this session, stopping at a checkpoint after each task for review.
|
|
152
|
+
- Never batch past a failing step. Fix it, verify it, then continue.
|
|
@@ -15,7 +15,7 @@ You write test cases (pressure scenarios with subagents), watch them fail (basel
|
|
|
15
15
|
|
|
16
16
|
**Core principle:** If you didn't watch an agent fail without the skill, you don't know if the skill teaches the right thing.
|
|
17
17
|
|
|
18
|
-
**REQUIRED BACKGROUND:**
|
|
18
|
+
**REQUIRED BACKGROUND:** This skill adapts the RED-GREEN-REFACTOR cycle to documentation. The cycle: write the test first and watch it FAIL for the reason you expect (red), make the smallest change that passes it (green), then clean up without changing behaviour (refactor). A test you never saw fail proves nothing.
|
|
19
19
|
|
|
20
20
|
**Official guidance:** For Anthropic's official skill authoring best practices, see anthropic-best-practices.md. This document provides additional patterns and guidelines that complement the TDD-focused approach in this skill.
|
|
21
21
|
|
|
@@ -280,10 +280,12 @@ wc -w skills/path/SKILL.md
|
|
|
280
280
|
**When writing documentation that references other skills:**
|
|
281
281
|
|
|
282
282
|
Use skill name only, with explicit requirement markers:
|
|
283
|
-
- ✅ Good: `**REQUIRED SUB-SKILL:** Use summer:
|
|
283
|
+
- ✅ Good: `**REQUIRED SUB-SKILL:** Use summer:verification-before-completion`
|
|
284
284
|
- ✅ Good: `**REQUIRED BACKGROUND:** You MUST understand summer:investigating-bugs`
|
|
285
|
-
- ❌ Bad: `See skills/
|
|
286
|
-
- ❌ Bad: `@skills/
|
|
285
|
+
- ❌ Bad: `See skills/debugging/debug` (unclear if required)
|
|
286
|
+
- ❌ Bad: `@skills/debugging/debug/SKILL.md` (force-loads, burns context)
|
|
287
|
+
|
|
288
|
+
**Check the skill exists before you point at it.** The registry of shipped skills is the `SKILL_REGISTRY` array in `src/lib/skills-registry.ts` and the `skills:` array in `.claude-plugin/plugin.json`. A `REQUIRED SUB-SKILL` pointing at a skill that was never shipped is worse than no cross-reference: the reader stops and looks for something that does not exist.
|
|
287
289
|
|
|
288
290
|
**Why no @ links:** `@` syntax force-loads files immediately, consuming 200k+ context before you need them.
|
|
289
291
|
|
|
@@ -390,7 +392,7 @@ Edit skill without testing? Same violation.
|
|
|
390
392
|
- Don't "adapt" while running tests
|
|
391
393
|
- Delete means delete
|
|
392
394
|
|
|
393
|
-
**
|
|
395
|
+
**Why this matters:** an untested change is an assertion, not a result. Same principle in documentation as in code.
|
|
394
396
|
|
|
395
397
|
## Testing All Skill Types
|
|
396
398
|
|
|
@@ -10,7 +10,7 @@ You run scenarios without the skill (RED - watch agent fail), write skill addres
|
|
|
10
10
|
|
|
11
11
|
**Core principle:** If you didn't watch an agent fail without the skill, you don't know if the skill prevents the right failures.
|
|
12
12
|
|
|
13
|
-
**REQUIRED BACKGROUND:**
|
|
13
|
+
**REQUIRED BACKGROUND:** the RED-GREEN-REFACTOR cycle as stated just above. This reference supplies the skill-specific test formats on top of it (pressure scenarios, rationalization tables).
|
|
14
14
|
|
|
15
15
|
**Complete worked example:** See examples/CLAUDE_MD_TESTING.md for a full test campaign testing CLAUDE.md documentation variants.
|
|
16
16
|
|