summer-engine 3.8.0 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (485) hide show
  1. package/.claude-plugin/marketplace.json +2 -13
  2. package/.claude-plugin/plugin.json +23 -22
  3. package/.codex-plugin/plugin.json +4 -12
  4. package/.cursor-plugin/plugin.json +4 -12
  5. package/.factory-plugin/plugin.json +4 -12
  6. package/AGENTS.md +19 -12
  7. package/CHANGELOG.md +96 -0
  8. package/GEMINI.md +3 -3
  9. package/README.md +103 -33
  10. package/assets/icon.png +0 -0
  11. package/commands/start.md +71 -0
  12. package/commands/summer.md +3 -2
  13. package/dist/cli/banner.js +3 -0
  14. package/dist/cli/commands/login.d.ts +27 -0
  15. package/dist/cli/commands/login.js +58 -12
  16. package/dist/cli/commands/ops.d.ts +47 -0
  17. package/dist/cli/commands/ops.js +301 -0
  18. package/dist/cli/commands/setup.d.ts +2 -0
  19. package/dist/cli/commands/setup.js +37 -12
  20. package/dist/cli/commands/skills.js +11 -7
  21. package/dist/cli/index.js +7 -0
  22. package/dist/core/agent-host.d.ts +65 -0
  23. package/dist/core/agent-host.js +193 -0
  24. package/dist/core/capabilities/agent-playbook.d.ts +3 -0
  25. package/dist/core/capabilities/agent-playbook.js +54 -2
  26. package/dist/core/capabilities/apps.d.ts +25 -2
  27. package/dist/core/capabilities/apps.js +25 -12
  28. package/dist/core/capabilities/doctor.d.ts +3 -0
  29. package/dist/core/capabilities/doctor.js +20 -15
  30. package/dist/core/capabilities/fabricate-mesh.d.ts +2 -2
  31. package/dist/core/capabilities/game-task-plan.d.ts +12 -6
  32. package/dist/core/capabilities/game-task-plan.js +80 -5
  33. package/dist/core/capabilities/motion-generation.js +2 -2
  34. package/dist/core/capabilities/navigation/open.d.ts +6 -2
  35. package/dist/core/capabilities/navigation/open.js +3 -0
  36. package/dist/core/capabilities/publish-build.js +2 -0
  37. package/dist/core/capabilities/runtime-control.d.ts +4 -4
  38. package/dist/core/capabilities/scene-script-target.d.ts +17 -0
  39. package/dist/core/capabilities/scene-script-target.js +70 -0
  40. package/dist/core/capabilities/sfx-choices.d.ts +4 -0
  41. package/dist/core/capabilities/sfx-choices.js +13 -6
  42. package/dist/core/capabilities/tool-dispatch.d.ts +12 -3
  43. package/dist/core/capabilities/tool-dispatch.js +81 -46
  44. package/dist/core/embeddings.d.ts +2 -0
  45. package/dist/core/embeddings.js +1 -1
  46. package/dist/core/error-codes.d.ts +62 -0
  47. package/dist/core/error-codes.js +97 -0
  48. package/dist/core/format.d.ts +2 -0
  49. package/dist/core/format.js +2 -1
  50. package/dist/core/hosted-mcp.d.ts +22 -0
  51. package/dist/core/hosted-mcp.js +56 -1
  52. package/dist/core/library-read.js +5 -0
  53. package/dist/core/library-search.js +2 -1
  54. package/dist/core/oauth.js +4 -0
  55. package/dist/core/ops/catalog.d.ts +41 -0
  56. package/dist/core/ops/catalog.js +145 -0
  57. package/dist/core/ops/cloud.d.ts +56 -0
  58. package/dist/core/ops/cloud.js +175 -0
  59. package/dist/core/ops/contract.d.ts +119 -0
  60. package/dist/core/ops/contract.js +142 -0
  61. package/dist/core/ops/engine-answer.d.ts +25 -0
  62. package/dist/core/ops/engine-answer.js +117 -0
  63. package/dist/core/ops/engine.d.ts +55 -0
  64. package/dist/core/ops/engine.js +649 -0
  65. package/dist/core/ops/save-files.d.ts +78 -0
  66. package/dist/core/ops/save-files.js +419 -0
  67. package/dist/core/ops/search.d.ts +9 -0
  68. package/dist/core/ops/search.js +55 -0
  69. package/dist/core/skills-registry.d.ts +16 -1
  70. package/dist/core/skills-registry.js +35 -2
  71. package/dist/core/telemetry.d.ts +32 -0
  72. package/dist/core/telemetry.js +38 -10
  73. package/dist/core/tool-profiles.d.ts +25 -0
  74. package/dist/core/tool-profiles.js +41 -0
  75. package/dist/installer/agent-config.d.ts +17 -4
  76. package/dist/installer/agent-config.js +22 -6
  77. package/dist/installer/agent-table.d.ts +3 -0
  78. package/dist/installer/agent-table.js +10 -7
  79. package/dist/installer/setup.d.ts +2 -0
  80. package/dist/installer/setup.js +9 -4
  81. package/dist/installer/version-check.d.ts +29 -9
  82. package/dist/installer/version-check.js +81 -28
  83. package/dist/mcp/command.js +7 -0
  84. package/dist/mcp/hosted-mount.d.ts +27 -2
  85. package/dist/mcp/hosted-mount.js +53 -23
  86. package/dist/mcp/legacy-toolset.d.ts +27 -0
  87. package/dist/mcp/legacy-toolset.js +43 -0
  88. package/dist/mcp/ops-surface.d.ts +59 -0
  89. package/dist/mcp/ops-surface.js +443 -0
  90. package/dist/mcp/server.d.ts +35 -11
  91. package/dist/mcp/server.js +234 -89
  92. package/dist/mcp/tool-results.d.ts +26 -0
  93. package/dist/mcp/tool-results.js +81 -0
  94. package/dist/mcp/tool-surface.d.ts +65 -0
  95. package/dist/mcp/tool-surface.js +317 -0
  96. package/dist/mcp/tools/app-tools.js +9 -2
  97. package/dist/mcp/tools/asset-tools.js +55 -53
  98. package/dist/mcp/tools/audit-tools.js +21 -21
  99. package/dist/mcp/tools/debug-tools.js +6 -6
  100. package/dist/mcp/tools/fabricate-tools.js +6 -6
  101. package/dist/mcp/tools/generate-tools.js +76 -70
  102. package/dist/mcp/tools/project-tools.d.ts +9 -4
  103. package/dist/mcp/tools/project-tools.js +16 -10
  104. package/dist/mcp/tools/scene-tools.js +12 -23
  105. package/dist/mcp/tools/script-tools.js +9 -5
  106. package/dist/mcp/tools/with-engine.d.ts +6 -0
  107. package/dist/mcp/tools/with-engine.js +19 -0
  108. package/gemini-extension.json +4 -12
  109. package/hooks/pre-commit-doctor.sh +5 -4
  110. package/hooks/session-start.sh +24 -28
  111. package/integrations/claude-desktop/README.md +1 -1
  112. package/integrations/copilot-jetbrains/README.md +1 -1
  113. package/integrations/junie/README.md +1 -1
  114. package/integrations/lm-studio/README.md +1 -1
  115. package/integrations/trae/README.md +1 -1
  116. package/integrations/visual-studio/README.md +1 -1
  117. package/library/references/mcp-tools-reference/mcp-tools-reference.md +79 -51
  118. package/library/references/mcp-tools-reference/resource.yaml +1 -1
  119. package/library/references/product-map/resource.yaml +2 -2
  120. package/library/skills/3d-lighting/SKILL.md +53 -28
  121. package/library/skills/3d-lighting/resource.yaml +1 -1
  122. package/library/skills/README.md +119 -117
  123. package/library/skills/adaptive-music/SKILL.md +19 -23
  124. package/library/skills/adaptive-music/resource.yaml +1 -1
  125. package/library/skills/agent-playtesting/SKILL.md +1 -1
  126. package/library/skills/agent-playtesting/resource.yaml +1 -1
  127. package/library/skills/ai-characters-in-games/SKILL.md +1 -1
  128. package/library/skills/ai-characters-in-games/resource.yaml +1 -1
  129. package/library/skills/ambient-bed/SKILL.md +22 -13
  130. package/library/skills/ambient-bed/resource.yaml +1 -1
  131. package/library/skills/animated-loop/SKILL.md +41 -32
  132. package/library/skills/animated-loop/resource.yaml +1 -1
  133. package/library/skills/animation-tree/SKILL.md +1 -1
  134. package/library/skills/animation-tree/resource.yaml +1 -1
  135. package/library/skills/art-direction/SKILL.md +3 -3
  136. package/library/skills/art-direction/resource.yaml +1 -1
  137. package/library/skills/asset-strategy/SKILL.md +21 -4
  138. package/library/skills/asset-strategy/resource.yaml +2 -1
  139. package/library/skills/audio-direction/SKILL.md +10 -10
  140. package/library/skills/audio-direction/resource.yaml +1 -1
  141. package/library/skills/auto-fire-targeting/SKILL.md +1 -1
  142. package/library/skills/auto-fire-targeting/resource.yaml +1 -1
  143. package/library/skills/bounded-engine-runs/SKILL.md +1 -1
  144. package/library/skills/bounded-engine-runs/resource.yaml +1 -1
  145. package/library/skills/brainstorm-game/SKILL.md +1 -1
  146. package/library/skills/brainstorm-game/resource.yaml +1 -1
  147. package/library/skills/brainstorming/SKILL.md +1 -1
  148. package/library/skills/brainstorming/resource.yaml +1 -1
  149. package/library/skills/browse-templates/SKILL.md +1 -1
  150. package/library/skills/browse-templates/resource.yaml +1 -1
  151. package/library/skills/camera-rigs/SKILL.md +2 -2
  152. package/library/skills/camera-rigs/resource.yaml +1 -1
  153. package/library/skills/celeste-momentum-platforming/resource.yaml +1 -0
  154. package/library/skills/character-animation-wiring/SKILL.md +4 -4
  155. package/library/skills/character-animation-wiring/resource.yaml +1 -1
  156. package/library/skills/character-model/SKILL.md +55 -47
  157. package/library/skills/character-model/resource.yaml +1 -1
  158. package/library/skills/character-movement/SKILL.md +3 -3
  159. package/library/skills/character-movement/resource.yaml +1 -1
  160. package/library/skills/character-portrait/SKILL.md +24 -19
  161. package/library/skills/character-portrait/resource.yaml +1 -1
  162. package/library/skills/cinematic-cutscene/SKILL.md +58 -46
  163. package/library/skills/cinematic-cutscene/resource.yaml +1 -1
  164. package/library/skills/combat-basics/SKILL.md +1 -1
  165. package/library/skills/combat-basics/resource.yaml +1 -1
  166. package/library/skills/compatibility-renderer-traps/SKILL.md +1 -1
  167. package/library/skills/compatibility-renderer-traps/resource.yaml +1 -1
  168. package/library/skills/concept-art/SKILL.md +16 -12
  169. package/library/skills/concept-art/resource.yaml +1 -1
  170. package/library/skills/concept-to-level/SKILL.md +239 -0
  171. package/library/skills/concept-to-level/references/technical-rules.md +150 -0
  172. package/library/skills/concept-to-level/resource.yaml +44 -0
  173. package/library/skills/create-asset-sheet/SKILL.md +19 -13
  174. package/library/skills/create-asset-sheet/resource.yaml +1 -1
  175. package/library/skills/debug/SKILL.md +2 -2
  176. package/library/skills/debug/resource.yaml +1 -1
  177. package/library/skills/debugging-game-feel/SKILL.md +1 -1
  178. package/library/skills/debugging-game-feel/resource.yaml +1 -1
  179. package/library/skills/design-level/SKILL.md +23 -35
  180. package/library/skills/design-level/resource.yaml +1 -1
  181. package/library/skills/design-mechanic/SKILL.md +1 -1
  182. package/library/skills/design-mechanic/resource.yaml +1 -1
  183. package/library/skills/design-npc/SKILL.md +22 -24
  184. package/library/skills/design-npc/resource.yaml +1 -1
  185. package/library/skills/diagnosing-perf-regressions/SKILL.md +1 -1
  186. package/library/skills/diagnosing-perf-regressions/resource.yaml +1 -1
  187. package/library/skills/driving-the-editor-ui/SKILL.md +1 -1
  188. package/library/skills/driving-the-editor-ui/resource.yaml +1 -1
  189. package/library/skills/environment-kit/SKILL.md +20 -16
  190. package/library/skills/environment-kit/resource.yaml +1 -1
  191. package/library/skills/export-and-ship/SKILL.md +6 -6
  192. package/library/skills/export-and-ship/resource.yaml +1 -1
  193. package/library/skills/fabricating-assets/SKILL.md +7 -7
  194. package/library/skills/fabricating-assets/resource.yaml +3 -3
  195. package/library/skills/facial-and-lipsync/SKILL.md +14 -15
  196. package/library/skills/facial-and-lipsync/resource.yaml +1 -1
  197. package/library/skills/fps-controller/SKILL.md +33 -41
  198. package/library/skills/fps-controller/resource.yaml +1 -1
  199. package/library/skills/game-feel/SKILL.md +8 -8
  200. package/library/skills/game-feel/resource.yaml +1 -1
  201. package/library/skills/gameskill/SKILL.md +4 -4
  202. package/library/skills/gameskill/resource.yaml +1 -1
  203. package/library/skills/gdscript-patterns/SKILL.md +1 -1
  204. package/library/skills/gdscript-patterns/resource.yaml +1 -1
  205. package/library/skills/generate-motion/SKILL.md +30 -21
  206. package/library/skills/generate-motion/resource.yaml +1 -1
  207. package/library/skills/godogen-visual-proof-game-generation/SKILL.md +1 -1
  208. package/library/skills/godogen-visual-proof-game-generation/resource.yaml +1 -0
  209. package/library/skills/grow-analytics/SKILL.md +3 -3
  210. package/library/skills/grow-analytics/resource.yaml +1 -1
  211. package/library/skills/headless-scripting/SKILL.md +1 -1
  212. package/library/skills/headless-scripting/resource.yaml +1 -1
  213. package/library/skills/in-game-purchases/SKILL.md +1 -1
  214. package/library/skills/in-game-purchases/resource.yaml +1 -1
  215. package/library/skills/instantiate-asset-pack/SKILL.md +2 -2
  216. package/library/skills/instantiate-asset-pack/resource.yaml +1 -1
  217. package/library/skills/lumera-single-image-scene-reconstruction/resource.yaml +1 -0
  218. package/library/skills/make-game/SKILL.md +4 -4
  219. package/library/skills/make-game/references/2d-platformer.md +1 -1
  220. package/library/skills/make-game/references/3d-fps.md +1 -1
  221. package/library/skills/make-game/references/3d-horror.md +1 -1
  222. package/library/skills/make-game/references/3d-third-person.md +2 -2
  223. package/library/skills/make-game/resource.yaml +1 -1
  224. package/library/skills/multiplayer/SKILL.md +1 -1
  225. package/library/skills/multiplayer/resource.yaml +1 -1
  226. package/library/skills/multiplayer-movement/SKILL.md +1 -1
  227. package/library/skills/multiplayer-movement/resource.yaml +1 -1
  228. package/library/skills/multiplayer-project/SKILL.md +1 -1
  229. package/library/skills/multiplayer-project/resource.yaml +1 -1
  230. package/library/skills/multiplayer-publish/SKILL.md +8 -7
  231. package/library/skills/multiplayer-publish/resource.yaml +3 -3
  232. package/library/skills/multiplayer-state/SKILL.md +1 -1
  233. package/library/skills/multiplayer-state/resource.yaml +1 -1
  234. package/library/skills/multiplayer-testing/SKILL.md +1 -1
  235. package/library/skills/multiplayer-testing/resource.yaml +1 -1
  236. package/library/skills/music-track/SKILL.md +22 -13
  237. package/library/skills/music-track/resource.yaml +1 -1
  238. package/library/skills/navigate-summer/SKILL.md +11 -9
  239. package/library/skills/navigate-summer/resource.yaml +1 -1
  240. package/library/skills/new-project/SKILL.md +1 -1
  241. package/library/skills/new-project/resource.yaml +1 -1
  242. package/library/skills/organic-model/SKILL.md +24 -18
  243. package/library/skills/organic-model/resource.yaml +1 -1
  244. package/library/skills/pixel-art/SKILL.md +27 -23
  245. package/library/skills/pixel-art/resource.yaml +1 -1
  246. package/library/skills/play/SKILL.md +1 -1
  247. package/library/skills/play/resource.yaml +1 -1
  248. package/library/skills/playtesting-a-feature/SKILL.md +1 -1
  249. package/library/skills/playtesting-a-feature/resource.yaml +1 -1
  250. package/library/skills/procedural-animation/SKILL.md +20 -16
  251. package/library/skills/procedural-animation/resource.yaml +1 -1
  252. package/library/skills/prop-model/SKILL.md +25 -19
  253. package/library/skills/prop-model/resource.yaml +1 -1
  254. package/library/skills/psx-retro-rendering/resource.yaml +1 -0
  255. package/library/skills/publish-your-game/SKILL.md +16 -6
  256. package/library/skills/publish-your-game/resource.yaml +3 -3
  257. package/library/skills/realtime-wet-surfaces/resource.yaml +1 -0
  258. package/library/skills/release-readiness/SKILL.md +1 -1
  259. package/library/skills/release-readiness/resource.yaml +1 -1
  260. package/library/skills/remote-deploy/SKILL.md +1 -1
  261. package/library/skills/remote-deploy/resource.yaml +1 -1
  262. package/library/skills/retarget/SKILL.md +23 -20
  263. package/library/skills/retarget/resource.yaml +1 -1
  264. package/library/skills/running-in-the-cloud/SKILL.md +1 -1
  265. package/library/skills/running-in-the-cloud/resource.yaml +1 -1
  266. package/library/skills/save-load/SKILL.md +1 -1
  267. package/library/skills/save-load/resource.yaml +1 -1
  268. package/library/skills/scene-composition/SKILL.md +1 -1
  269. package/library/skills/scene-composition/resource.yaml +1 -1
  270. package/library/skills/scene-hierarchy-design/SKILL.md +2 -2
  271. package/library/skills/scene-hierarchy-design/resource.yaml +1 -1
  272. package/library/skills/scene-scripting/SKILL.md +66 -636
  273. package/library/skills/scene-scripting/references/ctx-api.md +184 -0
  274. package/library/skills/scene-scripting/references/recipes-2d-ui.md +193 -0
  275. package/library/skills/scene-scripting/references/recipes-3d.md +280 -0
  276. package/library/skills/scene-scripting/resource.yaml +4 -4
  277. package/library/skills/scene-to-level/SKILL.md +2 -2
  278. package/library/skills/scene-to-level/resource.yaml +1 -1
  279. package/library/skills/skill-create/resource.yaml +1 -0
  280. package/library/skills/skill-improve/resource.yaml +1 -0
  281. package/library/skills/skill-test/SKILL.md +2 -2
  282. package/library/skills/skill-test/resource.yaml +1 -0
  283. package/library/skills/skintokens-auto-rigging/resource.yaml +1 -0
  284. package/library/skills/skybox-panorama/SKILL.md +27 -21
  285. package/library/skills/skybox-panorama/resource.yaml +1 -1
  286. package/library/skills/sound-effect/SKILL.md +29 -20
  287. package/library/skills/sound-effect/resource.yaml +1 -1
  288. package/library/skills/spatial-placement/SKILL.md +14 -9
  289. package/library/skills/spatial-placement/resource.yaml +1 -1
  290. package/library/skills/sprite-sheet/SKILL.md +32 -27
  291. package/library/skills/sprite-sheet/resource.yaml +1 -1
  292. package/library/skills/store-art/SKILL.md +3 -3
  293. package/library/skills/store-art/resource.yaml +2 -2
  294. package/library/skills/store-listing/SKILL.md +3 -3
  295. package/library/skills/store-listing/resource.yaml +2 -2
  296. package/library/skills/summer-analytics/SKILL.md +7 -5
  297. package/library/skills/summer-analytics/resource.yaml +2 -2
  298. package/library/skills/summer-apps/SKILL.md +48 -32
  299. package/library/skills/summer-apps/manifest.md +1 -1
  300. package/library/skills/summer-apps/minimal-app.md +7 -7
  301. package/library/skills/summer-apps/resource.yaml +1 -1
  302. package/library/skills/summer-apps/sdk-reference.md +5 -5
  303. package/library/skills/summer-apps-design/SKILL.md +1 -1
  304. package/library/skills/summer-apps-design/resource.yaml +1 -1
  305. package/library/skills/summer-assets/SKILL.md +56 -0
  306. package/library/skills/summer-assets/resource.yaml +34 -0
  307. package/library/skills/summer-store/SKILL.md +1 -1
  308. package/library/skills/text-to-motion/SKILL.md +30 -23
  309. package/library/skills/text-to-motion/prompts-and-controls.md +5 -5
  310. package/library/skills/text-to-motion/resource.yaml +1 -1
  311. package/library/skills/text-to-motion/rigging-for-text-motion.md +2 -2
  312. package/library/skills/tileable-texture/SKILL.md +19 -15
  313. package/library/skills/tileable-texture/resource.yaml +1 -1
  314. package/library/skills/trailer-shot/SKILL.md +28 -24
  315. package/library/skills/trailer-shot/resource.yaml +1 -1
  316. package/library/skills/tune-performance/SKILL.md +6 -6
  317. package/library/skills/tune-performance/resource.yaml +1 -1
  318. package/library/skills/ui-basics/SKILL.md +41 -36
  319. package/library/skills/ui-basics/resource.yaml +1 -1
  320. package/library/skills/ui-graphics/SKILL.md +47 -38
  321. package/library/skills/ui-graphics/resource.yaml +1 -1
  322. package/library/skills/use-widget-asset/SKILL.md +1 -1
  323. package/library/skills/use-widget-asset/resource.yaml +1 -1
  324. package/library/skills/using-summer/SKILL.md +6 -5
  325. package/library/skills/using-summer/resource.yaml +1 -1
  326. package/library/skills/vehicle-model/SKILL.md +65 -57
  327. package/library/skills/vehicle-model/resource.yaml +1 -1
  328. package/library/skills/verification-before-completion/SKILL.md +1 -1
  329. package/library/skills/verification-before-completion/resource.yaml +1 -1
  330. package/library/skills/verifying-scenes/SKILL.md +2 -2
  331. package/library/skills/verifying-scenes/resource.yaml +1 -1
  332. package/library/skills/vfx-dissolve/SKILL.md +2 -2
  333. package/library/skills/vfx-dissolve/resource.yaml +1 -1
  334. package/library/skills/vfx-fire/SKILL.md +15 -41
  335. package/library/skills/vfx-fire/resource.yaml +1 -1
  336. package/library/skills/vfx-hit-spark/SKILL.md +1 -1
  337. package/library/skills/vfx-hit-spark/resource.yaml +1 -1
  338. package/library/skills/vfx-lightning/SKILL.md +7 -16
  339. package/library/skills/vfx-lightning/resource.yaml +1 -1
  340. package/library/skills/vfx-magic-glow/SKILL.md +23 -32
  341. package/library/skills/vfx-magic-glow/resource.yaml +1 -1
  342. package/library/skills/vfx-muzzle-flash/SKILL.md +20 -35
  343. package/library/skills/vfx-muzzle-flash/resource.yaml +1 -1
  344. package/library/skills/vfx-smoke/SKILL.md +13 -31
  345. package/library/skills/vfx-smoke/resource.yaml +1 -1
  346. package/library/skills/vfx-water-ripple/SKILL.md +12 -31
  347. package/library/skills/vfx-water-ripple/resource.yaml +1 -1
  348. package/library/skills/voice-line/SKILL.md +71 -40
  349. package/library/skills/voice-line/resource.yaml +1 -1
  350. package/library/skills/web-and-touch-input/SKILL.md +1 -1
  351. package/library/skills/web-and-touch-input/resource.yaml +1 -1
  352. package/library/skills/web-compatibility-look/SKILL.md +1 -1
  353. package/library/skills/web-compatibility-look/resource.yaml +1 -1
  354. package/library/skills/world-building-3d/SKILL.md +1 -1
  355. package/library/skills/world-building-3d/resource.yaml +1 -1
  356. package/library/skills/writing-skills/resource.yaml +1 -0
  357. package/library/tools/add-node/GUIDE.md +14 -0
  358. package/library/tools/align-distribute-3d/GUIDE.md +7 -0
  359. package/library/tools/app-call/resource.yaml +1 -1
  360. package/library/tools/app-guide/resource.yaml +2 -2
  361. package/library/tools/app-page/resource.yaml +1 -1
  362. package/library/tools/app-screenshot/resource.yaml +19 -1
  363. package/library/tools/app-tools/resource.yaml +1 -1
  364. package/library/tools/attach-to-surface/GUIDE.md +15 -0
  365. package/library/tools/batch/GUIDE.md +27 -0
  366. package/library/tools/camera-bookmark/GUIDE.md +12 -0
  367. package/library/tools/capture-gameplay/GUIDE.md +3 -0
  368. package/library/tools/capture-gameplay/resource.yaml +3 -3
  369. package/library/tools/check-job/resource.yaml +1 -1
  370. package/library/tools/clear-console/GUIDE.md +3 -0
  371. package/library/tools/connect-ports/GUIDE.md +9 -0
  372. package/library/tools/connect-signal/GUIDE.md +14 -0
  373. package/library/tools/create-debug-report/GUIDE.md +10 -0
  374. package/library/tools/create-scene/GUIDE.md +10 -0
  375. package/library/tools/debug-views/GUIDE.md +7 -0
  376. package/library/tools/enable-plugin/GUIDE.md +3 -0
  377. package/library/tools/export-game/GUIDE.md +3 -0
  378. package/library/tools/export-game/resource.yaml +3 -3
  379. package/library/tools/export-templates/GUIDE.md +3 -0
  380. package/library/tools/fabricate-3d/GUIDE.md +19 -0
  381. package/library/tools/frame-nodes/GUIDE.md +9 -0
  382. package/library/tools/frame-shot/GUIDE.md +9 -0
  383. package/library/tools/game-control/GUIDE.md +9 -0
  384. package/library/tools/game-input/GUIDE.md +9 -0
  385. package/library/tools/game-probe/GUIDE.md +9 -0
  386. package/library/tools/generate-3d/resource.yaml +3 -3
  387. package/library/tools/generate-motion/resource.yaml +2 -2
  388. package/library/tools/get-console/GUIDE.md +9 -0
  389. package/library/tools/get-console/resource.yaml +5 -0
  390. package/library/tools/get-debugger-errors/GUIDE.md +7 -0
  391. package/library/tools/get-debugger-errors/resource.yaml +5 -0
  392. package/library/tools/get-debugger-warnings/GUIDE.md +7 -0
  393. package/library/tools/get-debugger-warnings/resource.yaml +5 -0
  394. package/library/tools/get-diagnostics/GUIDE.md +13 -0
  395. package/library/tools/get-project-context/GUIDE.md +25 -0
  396. package/library/tools/get-runtime-tree/GUIDE.md +7 -0
  397. package/library/tools/get-runtime-tree/resource.yaml +5 -0
  398. package/library/tools/get-scene-tree/GUIDE.md +11 -0
  399. package/library/tools/get-scene-tree/resource.yaml +5 -0
  400. package/library/tools/get-script-errors/GUIDE.md +5 -0
  401. package/library/tools/grep/GUIDE.md +11 -0
  402. package/library/tools/import-asset/GUIDE.md +8 -0
  403. package/library/tools/import-asset-by-id/GUIDE.md +12 -0
  404. package/library/tools/import-from-url/GUIDE.md +10 -0
  405. package/library/tools/import-from-url-batch/GUIDE.md +3 -0
  406. package/library/tools/import-hdri/GUIDE.md +16 -0
  407. package/library/tools/input-map-bind/GUIDE.md +11 -0
  408. package/library/tools/inspect-asset/GUIDE.md +14 -0
  409. package/library/tools/inspect-asset/resource.yaml +5 -0
  410. package/library/tools/inspect-node/GUIDE.md +11 -0
  411. package/library/tools/inspect-node/resource.yaml +5 -0
  412. package/library/tools/inspect-resource/GUIDE.md +7 -0
  413. package/library/tools/inspect-resource/resource.yaml +5 -0
  414. package/library/tools/inspect-runtime-node/GUIDE.md +7 -0
  415. package/library/tools/inspect-runtime-node/resource.yaml +5 -0
  416. package/library/tools/instantiate-scene/GUIDE.md +12 -0
  417. package/library/tools/is-running/GUIDE.md +3 -0
  418. package/library/tools/measure/GUIDE.md +8 -0
  419. package/library/tools/navigation-probe/GUIDE.md +9 -0
  420. package/library/tools/open/resource.yaml +2 -2
  421. package/library/tools/open-main-scene/GUIDE.md +6 -0
  422. package/library/tools/open-scene/GUIDE.md +8 -0
  423. package/library/tools/place-adjacent/GUIDE.md +7 -0
  424. package/library/tools/play/GUIDE.md +13 -0
  425. package/library/tools/project-setting/GUIDE.md +9 -0
  426. package/library/tools/publish-build/resource.yaml +6 -6
  427. package/library/tools/raycast/GUIDE.md +7 -0
  428. package/library/tools/read-file/GUIDE.md +10 -0
  429. package/library/tools/read-library/resource.yaml +5 -0
  430. package/library/tools/recent-events/GUIDE.md +7 -0
  431. package/library/tools/remove-node/GUIDE.md +3 -0
  432. package/library/tools/repeat-along/GUIDE.md +5 -0
  433. package/library/tools/replace-node/GUIDE.md +9 -0
  434. package/library/tools/replace-text/GUIDE.md +5 -0
  435. package/library/tools/run-editor-script/GUIDE.md +16 -0
  436. package/library/tools/run-script/GUIDE.md +30 -0
  437. package/library/tools/run-script/resource.yaml +6 -3
  438. package/library/tools/runtime-animate/GUIDE.md +7 -0
  439. package/library/tools/runtime-call/GUIDE.md +7 -0
  440. package/library/tools/runtime-set/GUIDE.md +9 -0
  441. package/library/tools/runtime-spawn/GUIDE.md +9 -0
  442. package/library/tools/save-scene/GUIDE.md +3 -0
  443. package/library/tools/scene-audit/GUIDE.md +29 -0
  444. package/library/tools/screenshot/GUIDE.md +17 -0
  445. package/library/tools/select-node/GUIDE.md +3 -0
  446. package/library/tools/set-prop/GUIDE.md +23 -0
  447. package/library/tools/set-resource-property/GUIDE.md +8 -0
  448. package/library/tools/shot-sheet/GUIDE.md +7 -0
  449. package/library/tools/snap-to-surface/GUIDE.md +17 -0
  450. package/library/tools/snapshot-diff/GUIDE.md +7 -0
  451. package/library/tools/starcast/GUIDE.md +12 -0
  452. package/library/tools/stop/GUIDE.md +3 -0
  453. package/library/tools/test-placement/GUIDE.md +7 -0
  454. package/library/tools/ui-actions/GUIDE.md +12 -0
  455. package/library/tools/ui-activate/GUIDE.md +11 -0
  456. package/library/tools/ui-screenshot/GUIDE.md +9 -0
  457. package/library/tools/ui-tree/GUIDE.md +10 -0
  458. package/library/tools/wait-for-event/GUIDE.md +11 -0
  459. package/library/tools/world-snapshot/GUIDE.md +9 -0
  460. package/library/tools/write-file/GUIDE.md +5 -0
  461. package/library/tools/zoom/GUIDE.md +5 -0
  462. package/package.json +6 -4
  463. package/registry/generated/counts.json +2 -2
  464. package/registry/generated/gemini-extension.json +4 -12
  465. package/registry/generated/index.json +433 -339
  466. package/registry/generated/marketplace.claude.json +2 -13
  467. package/registry/generated/plugin.claude.json +23 -22
  468. package/registry/generated/plugin.codex.json +4 -12
  469. package/registry/generated/plugin.cursor.json +4 -12
  470. package/registry/generated/plugin.factory.json +4 -12
  471. package/registry/generated/server.json +34 -0
  472. package/registry/generated/skills-index.md +119 -117
  473. package/registry/generated/skills-registry.json +153 -115
  474. package/registry/operations/fixtures/invalid-deprecated-without-replacement.json +60 -0
  475. package/registry/operations/fixtures/invalid-name.json +60 -0
  476. package/registry/operations/fixtures/invalid-publish-without-owner.json +82 -0
  477. package/registry/operations/fixtures/invalid-spend-without-estimate.json +42 -0
  478. package/registry/operations/fixtures/invalid-unknown-field.json +61 -0
  479. package/registry/operations/fixtures/valid-player-facing.json +82 -0
  480. package/registry/operations/fixtures/valid-read.json +60 -0
  481. package/registry/operations/fixtures/valid-spend.json +43 -0
  482. package/registry/operations/legacy-names.json +1206 -0
  483. package/registry/schemas/operation.schema.json +318 -0
  484. package/registry/schemas/skill.schema.json +4 -0
  485. package/CLAUDE.md +0 -7
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: verification-before-completion
3
- description: "Run verification commands and confirm output before claiming work complete, fixed, or passing — evidence before assertions, always."
3
+ description: "Run verification and read its output before claiming work done, fixed or passing: evidence first."
4
4
  ---
5
5
 
6
6
  # Verification Before Completion
@@ -1,7 +1,7 @@
1
1
  id: skill/verification-before-completion
2
2
  kind: skill
3
3
  version: 1.0.3
4
- summary: Run verification commands and confirm output before claiming work complete, fixed, or passing — evidence before assertions, always.
4
+ summary: "Run verification and read its output before claiming work done, fixed or passing: evidence first."
5
5
  use_when:
6
6
  - about to claim work is complete, fixed, or passing, before committing or creating PRs
7
7
  - about to report a test, build, or fix as passing without having run the command and read its output
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: verifying-scenes
3
- description: "Prove scene work landed (snapshot, diff, screenshots, runtime reads), audit 3D scenes for holes and misplacement, review them with shot sheets and zooms."
3
+ description: "Prove scene work landed: snapshot, diff, screenshots, runtime reads, 3D audits, shot sheets and zooms."
4
4
  ---
5
5
 
6
6
  # Verifying Scenes
@@ -153,7 +153,7 @@ When the next step depends on the engine reaching a moment — the game booting
153
153
  - NEVER describe an image you did not receive. A failed capture is a result — report it and climb down (scene → viewport) or ask the user.
154
154
  - Preset-framing scene renders are static (t=0), synthetic-camera, flat-environment: no claims about animation, particles, lighting, or mood from them.
155
155
  - Pass structured failures (`failure_reason`, `terminalState`) through verbatim — never soften them into "it didn't work".
156
- - After the result is verified, record the outcome with `summer_library_feedback` (worked / worked with fixes / wrong / outdated / incomplete + a short note). Optional and fire-and-forget; if telemetry is off, move on.
156
+ - After the result is verified, record the outcome with `summer_call` `{"op":"docs.feedback"}` (worked / worked with fixes / wrong / outdated / incomplete + a short note). Optional and fire-and-forget; if telemetry is off, move on.
157
157
 
158
158
  ## Red Flags — STOP
159
159
 
@@ -1,7 +1,7 @@
1
1
  id: skill/verifying-scenes
2
2
  kind: skill
3
3
  version: 1.5.0
4
- summary: 'Prove scene work landed (snapshot, diff, screenshots, runtime reads), audit 3D scenes for holes and misplacement, review them with shot sheets and zooms.'
4
+ summary: "Prove scene work landed: snapshot, diff, screenshots, runtime reads, 3D audits, shot sheets and zooms."
5
5
  use_when:
6
6
  - after any mutation batch, asset import, or lighting change, before claiming it worked
7
7
  - during a playtest, to read live runtime state (spawned nodes, actual stats) without stopping the game
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: vfx-dissolve
3
- description: "Dissolve effect — a mesh disintegrating with a glowing burning edge, driven by a noise-threshold ShaderMaterial overriding the target's material."
3
+ description: "Dissolve effect: a mesh burns away with a glowing edge, from a noise-threshold ShaderMaterial."
4
4
  license: MIT
5
5
  compatibility: [Cursor, Claude Code, Windsurf, Codex]
6
6
  category: visual-effects
@@ -256,7 +256,7 @@ material, no play-mode round-trip:
256
256
 
257
257
  ```gdscript
258
258
  func run(ctx):
259
- var mat := ctx.make_shader("<section 2 source>", {"threshold": 0.4})
259
+ var mat = ctx.make_shader("<section 2 source>", {"threshold": 0.4})
260
260
  ctx.apply_material(ctx.find("TestDummy"), mat) # eyeball it with summer_screenshot
261
261
  ```
262
262
 
@@ -1,7 +1,7 @@
1
1
  id: skill/vfx-dissolve
2
2
  kind: skill
3
3
  version: 1.0.3
4
- summary: Dissolve effect — a mesh disintegrating with a glowing burning edge, driven by a noise-threshold ShaderMaterial overriding the target's material.
4
+ summary: "Dissolve effect: a mesh burns away with a glowing edge, from a noise-threshold ShaderMaterial."
5
5
  use_when:
6
6
  - authoring a dissolve effect — an object disintegrating with a glowing burning edge (disintegrate, burn away, vanish into ash)
7
7
  - a defeated unit, teleport exit, or removed object should burn away with a glowing edge instead of vanishing
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: vfx-fire
3
- description: "Fire effect — animated flames built with a particle shader, GPUParticles3D, and a noise-based color ramp — torches, campfires, candles."
3
+ description: "Fire effect: animated flames from GPUParticles3D, a particle shader and a noise color ramp."
4
4
  license: MIT
5
5
  compatibility: [Cursor, Claude Code, Windsurf, Codex]
6
6
  category: visual-effects
@@ -285,50 +285,21 @@ apply here — a draw pass mesh carries its material in `Mesh.material`.
285
285
 
286
286
  Add an OmniLight3D as a sibling (parented to the same anchor as the GPUParticles3D, NOT under it) for proper light cast. Recommended: `light_color = Color(1.0, 0.6, 0.25)`, `light_energy = 1.6`, `omni_range = 6.0`. Pulse it lightly via the controller for free atmosphere.
287
287
 
288
- ### 6. Wire it in (MCP calls)
288
+ ### 6. Wire it in
289
289
 
290
- Every scene-mutating call takes an explicit `scenePath`. `summer_set_prop` uses `key`
291
- (not `property`) and only accepts a string, number, or boolean.
290
+ Write the three files, then wire everything in ONE `summer_run_script` call with
291
+ an explicit `scenePath` — transactional (rollback on a mid-script error), no
292
+ `.tres` sidecar files needed because the script builds the resources directly:
292
293
 
293
294
  ```
294
295
  summer_write_file(path="res://addons/vfx/_building-blocks/noise-3d-fbm.gdshaderinc", content="<from this skill>", create_only=true)
295
296
  summer_write_file(path="res://addons/vfx/fire/fire.gdshader", content="<section 2>", create_only=true)
296
297
  summer_write_file(path="res://addons/vfx/fire/fire_controller.gd", content="<section 4>", create_only=true)
297
298
 
298
- summer_add_node(scenePath="res://main.tscn", parent="./World/Torch", type="GPUParticles3D", name="Fire")
299
- summer_set_prop(scenePath="res://main.tscn", path="./World/Torch/Fire", key="script", value="res://addons/vfx/fire/fire_controller.gd")
300
-
301
- # ParticleProcessMaterial is a Material, not a Node — you cannot summer_add_node it.
302
- # Assign the resource by path; the controller configures it on _ready().
303
- summer_set_prop(scenePath="res://main.tscn", path="./World/Torch/Fire", key="process_material", value="res://addons/vfx/fire/process_mat.tres")
304
-
305
- summer_set_prop(scenePath="res://main.tscn", path="./World/Torch/Fire", key="draw_pass_1", value="res://addons/vfx/fire/quad.tres")
306
- # quad.tres is a QuadMesh with size (1,1) and material = fire_material.tres (ShaderMaterial wrapping fire.gdshader)
307
- summer_set_resource_property(scenePath="res://main.tscn", nodePath="./World/Torch/Fire", resourceProperty="draw_pass_1", subProperty="size", value="Vector2(1, 1)")
308
-
309
- summer_set_prop(scenePath="res://main.tscn", path="./World/Torch/Fire", key="flame_height", value=1.2)
310
- summer_set_prop(scenePath="res://main.tscn", path="./World/Torch/Fire", key="flame_radius", value=0.35)
311
- summer_set_prop(scenePath="res://main.tscn", path="./World/Torch/Fire", key="particle_count", value=96)
312
-
313
- summer_add_node(scenePath="res://main.tscn", parent="./World/Torch", type="OmniLight3D", name="FireLight")
314
- summer_set_prop(scenePath="res://main.tscn", path="./World/Torch/FireLight", key="light_color", value="Color(1.0, 0.6, 0.25)")
315
- summer_set_prop(scenePath="res://main.tscn", path="./World/Torch/FireLight", key="light_energy", value=1.6)
316
- summer_set_prop(scenePath="res://main.tscn", path="./World/Torch/FireLight", key="omni_range", value=6.0)
317
-
318
- summer_save_scene(scenePath="res://main.tscn")
319
- ```
320
-
321
- ### 6a. One-script wiring (summer_run_script)
322
-
323
- On engines with `summer_run_script` (see `scene-scripting`), everything after
324
- the `summer_write_file` calls above is ONE ctx script — transactional (rollback on a
325
- mid-script error), no `.tres` sidecar files needed because the script builds the
326
- resources directly:
327
-
328
- ```gdscript
299
+ summer_run_script(scenePath="res://main.tscn", source="""
329
300
  func run(ctx):
330
- var anchor := ctx.find("Torch")
331
- var fire := ctx.add_node("GPUParticles3D", "Fire", anchor)
301
+ var anchor = ctx.find("Torch")
302
+ var fire = ctx.add_node("GPUParticles3D", "Fire", anchor)
332
303
  fire.set_script(load("res://addons/vfx/fire/fire_controller.gd"))
333
304
  fire.process_material = ParticleProcessMaterial.new() # controller configures it on _ready
334
305
  var quad := QuadMesh.new()
@@ -343,13 +314,16 @@ func run(ctx):
343
314
  ctx.add_node("OmniLight3D", "FireLight", anchor, {
344
315
  "light_color": Color(1.0, 0.6, 0.25), "light_energy": 1.6, "omni_range": 6.0})
345
316
  ctx.save_scene()
317
+ """)
346
318
  ```
347
319
 
348
- `ctx.add_node` sets owners for you. Take a `summer_world_snapshot` before, and verify
349
- after with `summer_snapshot_diff` (exactly `Fire` + `FireLight` added) plus a
350
- `summer_screenshot` — flames are pixels, judge them as pixels.
320
+ `ParticleProcessMaterial` is a Material, not a Node: the script assigns it to
321
+ `process_material`, it is never a child. `ctx.add_node` sets owners for you. Take
322
+ a `summer_world_snapshot` before, and verify after with `summer_snapshot_diff`
323
+ (exactly `Fire` + `FireLight` added) plus a `summer_screenshot` — flames are
324
+ pixels, judge them as pixels.
351
325
 
352
- ### 6b. Verify
326
+ ### 6a. Verify
353
327
 
354
328
  Every file this recipe writes is compiled code. Check it before claiming the fire works.
355
329
 
@@ -1,7 +1,7 @@
1
1
  id: skill/vfx-fire
2
2
  kind: skill
3
3
  version: 1.0.3
4
- summary: Fire effect — animated flames built with a particle shader, GPUParticles3D, and a noise-based color ramp — torches, campfires, candles.
4
+ summary: "Fire effect: animated flames from GPUParticles3D, a particle shader and a noise color ramp."
5
5
  use_when:
6
6
  - authoring a fire visual effect — torch, campfire, bonfire, flame, burning object, candle
7
7
  - adding fire to props, hazards, or projectiles — torches, braziers, burning wreckage, a fireball or flame jet
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: vfx-hit-spark
3
- description: "Hit-spark effect — a one-shot burst of additive billboard particles oriented to a surface normal, fired on impact."
3
+ description: "Hit-spark effect: a one-shot burst of additive particles oriented to the surface, fired on impact."
4
4
  license: MIT
5
5
  compatibility: [Cursor, Claude Code, Windsurf, Codex]
6
6
  category: visual-effects
@@ -1,7 +1,7 @@
1
1
  id: skill/vfx-hit-spark
2
2
  kind: skill
3
3
  version: 1.0.2
4
- summary: Hit-spark effect — a one-shot burst of additive billboard particles oriented to a surface normal, fired on impact.
4
+ summary: "Hit-spark effect: a one-shot burst of additive particles oriented to the surface, fired on impact."
5
5
  use_when:
6
6
  - authoring a hit-spark effect — impact spark, bullet hit, sword clash, ricochet, sparks at a hit point
7
7
  - melee hits, bullet impacts, or ricochets have no visual feedback at the contact point
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: vfx-lightning
3
- description: "Lightning bolt effect — procedural jagged path drawn via ImmediateMesh, glow shader, sparks at endpoints, screen shake."
3
+ description: "Lightning bolt effect: a jagged procedural path with a glow shader, end sparks and screen shake."
4
4
  license: MIT
5
5
  compatibility: [Cursor, Claude Code, Windsurf, Codex]
6
6
  category: visual-effects
@@ -222,31 +222,22 @@ Recommended: register one `LightningCaster` as an autoload (`/root/Lightning`) s
222
222
 
223
223
  Place one `LightningCaster` per "world" (or autoload it), then call from gameplay code.
224
224
 
225
- Every scene-mutating call takes an explicit `scenePath`. `summer_set_prop` uses `key`
226
- (not `property`) and only accepts a string, number, or boolean.
225
+ Write the two files, then place the caster with ONE `summer_run_script` call
226
+ with an explicit `scenePath` — one transactional run, and several casters or
227
+ anything computed is a loop in the same script:
227
228
 
228
229
  ```
229
230
  summer_write_file(path="res://addons/vfx/lightning/lightning.gdshader", content="<section 2>", create_only=true)
230
231
  summer_write_file(path="res://addons/vfx/lightning/lightning_caster.gd", content="<section 3>", create_only=true)
231
232
 
232
- summer_add_node(scenePath="res://main.tscn", parent="./World", type="Node3D", name="LightningCaster")
233
- summer_set_prop(scenePath="res://main.tscn", path="./World/LightningCaster", key="script", value="res://addons/vfx/lightning/lightning_caster.gd")
234
- summer_set_prop(scenePath="res://main.tscn", path="./World/LightningCaster", key="bolt_color", value="Color(0.55, 0.75, 1.0)")
235
- summer_set_prop(scenePath="res://main.tscn", path="./World/LightningCaster", key="trauma_amount", value=0.6)
236
- summer_save_scene(scenePath="res://main.tscn")
237
- ```
238
-
239
- Or, on engines with `summer_run_script` (see `scene-scripting`), the two node
240
- calls collapse into one transactional ctx script — worth it when placing several
241
- casters or anything computed:
242
-
243
- ```gdscript
233
+ summer_run_script(scenePath="res://main.tscn", source="""
244
234
  func run(ctx):
245
- var caster := ctx.add_node("Node3D", "LightningCaster", null)
235
+ var caster = ctx.add_node("Node3D", "LightningCaster", ctx.find("World"))
246
236
  caster.set_script(load("res://addons/vfx/lightning/lightning_caster.gd"))
247
237
  caster.set("bolt_color", Color(0.55, 0.75, 1.0))
248
238
  caster.set("trauma_amount", 0.6)
249
239
  ctx.save_scene()
240
+ """)
250
241
  ```
251
242
 
252
243
  Then verify — the caster `preload`s its own shader, so a shader that failed to write
@@ -1,7 +1,7 @@
1
1
  id: skill/vfx-lightning
2
2
  kind: skill
3
3
  version: 1.0.3
4
- summary: Lightning bolt effect — procedural jagged path drawn via ImmediateMesh, glow shader, sparks at endpoints, screen shake.
4
+ summary: "Lightning bolt effect: a jagged procedural path with a glow shader, end sparks and screen shake."
5
5
  use_when:
6
6
  - authoring a lightning bolt effect — chain lightning, electric attack, tesla coil, shock spell, energy beam
7
7
  - a spell, weapon, or hazard needs a jagged electric arc with glow, endpoint sparks, and camera shake
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: vfx-magic-glow
3
- description: "Magic-glow effect — a pulsing OmniLight3D plus drifting additive motes plus optional emission shader on the source mesh."
3
+ description: "Magic-glow effect: a pulsing OmniLight3D, drifting additive motes and an optional emission shader."
4
4
  license: MIT
5
5
  compatibility: [Cursor, Claude Code, Windsurf, Codex]
6
6
  category: visual-effects
@@ -195,42 +195,16 @@ Node3D ("MagicGlow") [script: magic_glow.gd]
195
195
 
196
196
  ### 4. Wire it in (MCP calls)
197
197
 
198
- For an enchanted sword:
199
-
200
- Every scene-mutating call takes an explicit `scenePath`. `summer_set_prop` uses `key`
201
- (not `property`) and only accepts a string, number, or boolean.
198
+ Write the script once, then wire each glow with ONE `summer_run_script` call
199
+ with an explicit `scenePath` — one transactional run instead of a chain of
200
+ `summer_set_prop` calls. For an enchanted sword:
202
201
 
203
202
  ```
204
203
  summer_write_file(path="res://addons/vfx/magic-glow/magic_glow.gd", content="<section 2>", create_only=true)
205
204
 
206
- summer_add_node(scenePath="res://main.tscn", parent="./Player/Hand/Sword", type="Node3D", name="Glow")
207
- summer_set_prop(scenePath="res://main.tscn", path="./Player/Hand/Sword/Glow", key="script", value="res://addons/vfx/magic-glow/magic_glow.gd")
208
- summer_set_prop(scenePath="res://main.tscn", path="./Player/Hand/Sword/Glow", key="glow_color", value="Color(0.55, 0.85, 1.0)")
209
- summer_set_prop(scenePath="res://main.tscn", path="./Player/Hand/Sword/Glow", key="light_energy_base", value=1.2)
210
- summer_set_prop(scenePath="res://main.tscn", path="./Player/Hand/Sword/Glow", key="light_energy_amplitude", value=0.6)
211
- summer_set_prop(scenePath="res://main.tscn", path="./Player/Hand/Sword/Glow", key="mote_count", value=16)
212
- summer_set_prop(scenePath="res://main.tscn", path="./Player/Hand/Sword/Glow", key="mote_radius", value=0.20)
213
- summer_set_prop(scenePath="res://main.tscn", path="./Player/Hand/Sword/Glow", key="pulse_source_mesh", value="../Blade")
214
- summer_save_scene(scenePath="res://main.tscn")
215
- ```
216
-
217
- For a soul gem on a pedestal:
218
-
219
- ```
220
- summer_add_node(scenePath="res://main.tscn", parent="./World/Pedestal/SoulGem", type="Node3D", name="Glow")
221
- summer_set_prop(scenePath="res://main.tscn", path="./World/Pedestal/SoulGem/Glow", key="glow_color", value="Color(0.85, 0.45, 1.0)")
222
- summer_set_prop(scenePath="res://main.tscn", path="./World/Pedestal/SoulGem/Glow", key="pulse_hz", value=0.4)
223
- summer_set_prop(scenePath="res://main.tscn", path="./World/Pedestal/SoulGem/Glow", key="mote_count", value=32)
224
- summer_set_prop(scenePath="res://main.tscn", path="./World/Pedestal/SoulGem/Glow", key="mote_radius", value=0.30)
225
- ```
226
-
227
- Either wiring block is also ONE ctx script on engines with `summer_run_script`
228
- (see `scene-scripting`) — the eight `summer_set_prop` calls become one
229
- transactional run, and computed placement (a glow per gem in a ring) becomes a loop:
230
-
231
- ```gdscript
205
+ summer_run_script(scenePath="res://main.tscn", source="""
232
206
  func run(ctx):
233
- var glow := ctx.add_node("Node3D", "Glow", ctx.find("Sword"))
207
+ var glow = ctx.add_node("Node3D", "Glow", ctx.find("Sword"))
234
208
  glow.set_script(load("res://addons/vfx/magic-glow/magic_glow.gd"))
235
209
  glow.set("glow_color", Color(0.55, 0.85, 1.0))
236
210
  glow.set("light_energy_base", 1.2)
@@ -239,6 +213,23 @@ func run(ctx):
239
213
  glow.set("mote_radius", 0.20)
240
214
  glow.set("pulse_source_mesh", NodePath("../Blade"))
241
215
  ctx.save_scene()
216
+ """)
217
+ ```
218
+
219
+ For a soul gem on a pedestal (computed placement, such as a glow per gem in a
220
+ ring, is a loop in the same script):
221
+
222
+ ```
223
+ summer_run_script(scenePath="res://main.tscn", source="""
224
+ func run(ctx):
225
+ var glow = ctx.add_node("Node3D", "Glow", ctx.find("SoulGem"))
226
+ glow.set_script(load("res://addons/vfx/magic-glow/magic_glow.gd"))
227
+ glow.set("glow_color", Color(0.85, 0.45, 1.0))
228
+ glow.set("pulse_hz", 0.4)
229
+ glow.set("mote_count", 32)
230
+ glow.set("mote_radius", 0.30)
231
+ ctx.save_scene()
232
+ """)
242
233
  ```
243
234
 
244
235
  Judge the pulse with `summer_screenshot framing:"camera"` — emissive glow does not
@@ -1,7 +1,7 @@
1
1
  id: skill/vfx-magic-glow
2
2
  kind: skill
3
3
  version: 1.0.2
4
- summary: Magic-glow effect — a pulsing OmniLight3D plus drifting additive motes plus optional emission shader on the source mesh.
4
+ summary: "Magic-glow effect: a pulsing OmniLight3D, drifting additive motes and an optional emission shader."
5
5
  use_when:
6
6
  - authoring a magic-glow effect — enchanted item, soul gem, pulsing aura, rune glow, magical orb, wisp
7
7
  - an item, altar, or portal should read as magical or important with a pulsing light and drifting motes
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: vfx-muzzle-flash
3
- description: "Muzzle-flash effect — a one-shot ~80 ms burst at a gun barrel built with a particle one-shot or a flashing quad with a star-burst shader."
3
+ description: "Muzzle-flash effect: a one-shot ~80 ms burst at a gun barrel, from particles or a star-burst quad."
4
4
  license: MIT
5
5
  compatibility: [Cursor, Claude Code, Windsurf, Codex]
6
6
  category: visual-effects
@@ -201,54 +201,39 @@ Node3D ("MuzzleFlash") [script: muzzle_flash.gd]
201
201
 
202
202
  Place the node at the **barrel tip** of the weapon. If your gun model has a `BarrelTip` Marker3D, parent there directly.
203
203
 
204
- Every scene-mutating call takes an explicit `scenePath`. `summer_set_prop` uses `key`
205
- (not `property`) and only accepts a string, number, or boolean.
204
+ Write the two files, then mount the flash with ONE `summer_run_script` call with
205
+ an explicit `scenePath` — one transactional run, and mounting a flash on every
206
+ weapon in the scene is a loop instead of a chain of calls per gun:
206
207
 
207
208
  ```
208
209
  summer_write_file(path="res://addons/vfx/muzzle-flash/muzzle_flash.gdshader", content="<section 2>", create_only=true)
209
210
  summer_write_file(path="res://addons/vfx/muzzle-flash/muzzle_flash.gd", content="<section 3>", create_only=true)
210
211
 
211
- summer_add_node(scenePath="res://main.tscn", parent="./Player/Weapon/BarrelTip", type="Node3D", name="MuzzleFlash")
212
- summer_set_prop(scenePath="res://main.tscn", path="./Player/Weapon/BarrelTip/MuzzleFlash", key="script", value="res://addons/vfx/muzzle-flash/muzzle_flash.gd")
213
- summer_set_prop(scenePath="res://main.tscn", path="./Player/Weapon/BarrelTip/MuzzleFlash", key="flash_size", value=0.6)
214
- summer_set_prop(scenePath="res://main.tscn", path="./Player/Weapon/BarrelTip/MuzzleFlash", key="flash_duration", value=0.08)
215
- summer_set_prop(scenePath="res://main.tscn", path="./Player/Weapon/BarrelTip/MuzzleFlash", key="light_energy", value=4.0)
216
- summer_save_scene(scenePath="res://main.tscn")
217
- ```
218
-
219
- Then in your weapon script, on `fire()`:
220
-
221
- ```gdscript
222
- $BarrelTip/MuzzleFlash.fire()
223
- ```
224
-
225
- Or connect the weapon's `fired` signal in the scene:
226
-
227
- ```
228
- summer_connect_signal(scenePath="res://main.tscn", emitter="./Player/Weapon", signal="fired", receiver="./Player/Weapon/BarrelTip/MuzzleFlash", method="fire")
229
- ```
230
-
231
- ### 5a. One-script wiring (summer_run_script)
232
-
233
- On engines with `summer_run_script` (see `scene-scripting`), the node calls
234
- above are ONE transactional ctx script — and mounting a flash on every weapon in the
235
- scene becomes a loop instead of a CRUD chain per gun:
236
-
237
- ```gdscript
212
+ summer_run_script(scenePath="res://main.tscn", source="""
238
213
  func run(ctx):
239
- var tip := ctx.find("BarrelTip")
240
- var flash := ctx.add_node("Node3D", "MuzzleFlash", tip)
214
+ var tip = ctx.find("BarrelTip")
215
+ var flash = ctx.add_node("Node3D", "MuzzleFlash", tip)
241
216
  flash.set_script(load("res://addons/vfx/muzzle-flash/muzzle_flash.gd"))
242
217
  flash.set("flash_size", 0.6)
243
218
  flash.set("flash_duration", 0.08)
244
219
  flash.set("light_energy", 4.0)
245
- var weapon := ctx.find("Weapon")
220
+ var weapon = ctx.find("Weapon")
246
221
  weapon.connect("fired", Callable(flash, "fire"), CONNECT_PERSIST)
247
- # CONNECT_PERSIST is required — a bare connect() works live but is NOT saved
222
+ # CONNECT_PERSIST is required: a bare connect() works live but is NOT saved
248
223
  ctx.save_scene()
224
+ """)
249
225
  ```
250
226
 
251
- ### 5b. Verify
227
+ Then in your weapon script, on `fire()`:
228
+
229
+ ```gdscript
230
+ $BarrelTip/MuzzleFlash.fire()
231
+ ```
232
+
233
+ The script above already connects the weapon's `fired` signal to the flash; the
234
+ one-call form is `summer_connect_signal(scenePath="res://main.tscn", emitter="./Player/Weapon", signal="fired", receiver="./Player/Weapon/BarrelTip/MuzzleFlash", method="fire")`.
235
+
236
+ ### 5a. Verify
252
237
 
253
238
  `muzzle_flash.gd` `preload`s its own shader, so a shader that failed to write takes
254
239
  the script down at parse time. Check before firing a shot.
@@ -1,7 +1,7 @@
1
1
  id: skill/vfx-muzzle-flash
2
2
  kind: skill
3
3
  version: 1.0.3
4
- summary: Muzzle-flash effect — a one-shot ~80 ms burst at a gun barrel built with a particle one-shot or a flashing quad with a star-burst shader.
4
+ summary: "Muzzle-flash effect: a one-shot ~80 ms burst at a gun barrel, from particles or a star-burst quad."
5
5
  use_when:
6
6
  - authoring a muzzle-flash effect — gun fire, weapon flash, barrel flash, spell-cast burst at a hand
7
7
  - a gun or spell-casting hand shoots with no visible flash at the barrel or palm
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: vfx-smoke
3
- description: "Smoke effect — a slow-rising column or puff of soft particles built with a noise + density falloff shader on a quad mesh, GPUParticles3D."
3
+ description: "Smoke effect: a rising column or puff of soft particles with a noise and density falloff shader."
4
4
  license: MIT
5
5
  compatibility: [Cursor, Claude Code, Windsurf, Codex]
6
6
  category: visual-effects
@@ -228,42 +228,19 @@ child nodes, and `ParticleProcessMaterial` is a `Material` — you cannot
228
228
 
229
229
  ### 5. Wire it in (MCP calls)
230
230
 
231
- Every scene-mutating call takes an explicit `scenePath`. `summer_set_prop` uses `key`
232
- (not `property`) and only accepts a string, number, or boolean.
233
-
234
- For chimney smoke or fire pairing, parent the Smoke just above the heat source:
231
+ Write the three files, then wire the emitter with ONE `summer_run_script` call
232
+ with an explicit `scenePath` — transactional, and it builds the QuadMesh +
233
+ ShaderMaterial resources directly instead of `.tres` sidecars. For chimney
234
+ smoke, parent the Smoke just above the heat source:
235
235
 
236
236
  ```
237
237
  summer_write_file(path="res://addons/vfx/_building-blocks/noise-3d-fbm.gdshaderinc", content="<from this skill>", create_only=true)
238
238
  summer_write_file(path="res://addons/vfx/smoke/smoke.gdshader", content="<section 2>", create_only=true)
239
239
  summer_write_file(path="res://addons/vfx/smoke/smoke_controller.gd", content="<section 3>", create_only=true)
240
240
 
241
- summer_add_node(scenePath="res://main.tscn", parent="./World/Cottage/Chimney", type="GPUParticles3D", name="Smoke")
242
- summer_set_prop(scenePath="res://main.tscn", path="./World/Cottage/Chimney/Smoke", key="script", value="res://addons/vfx/smoke/smoke_controller.gd")
243
- summer_set_prop(scenePath="res://main.tscn", path="./World/Cottage/Chimney/Smoke", key="position", value="Vector3(0, 0.3, 0)")
244
- summer_set_prop(scenePath="res://main.tscn", path="./World/Cottage/Chimney/Smoke", key="rise_height", value=4.0)
245
- summer_set_prop(scenePath="res://main.tscn", path="./World/Cottage/Chimney/Smoke", key="particle_count", value=48)
246
- summer_set_prop(scenePath="res://main.tscn", path="./World/Cottage/Chimney/Smoke", key="wind_direction", value="Vector3(0.4, 0, 0.1)")
247
- summer_save_scene(scenePath="res://main.tscn")
248
- ```
249
-
250
- For pairing with a fire:
251
-
252
- ```
253
- summer_add_node(scenePath="res://main.tscn", parent="./World/Campfire", type="GPUParticles3D", name="Smoke")
254
- summer_set_prop(scenePath="res://main.tscn", path="./World/Campfire/Smoke", key="position", value="Vector3(0, 1.5, 0)") # above flame top
255
- summer_set_prop(scenePath="res://main.tscn", path="./World/Campfire/Smoke", key="rise_height", value=3.0)
256
- ```
257
-
258
- ### 5a. One-script wiring (summer_run_script)
259
-
260
- On engines with `summer_run_script` (see `scene-scripting`), the node wiring
261
- above is ONE ctx script — transactional, and it builds the QuadMesh + ShaderMaterial
262
- resources directly instead of `.tres` sidecars:
263
-
264
- ```gdscript
241
+ summer_run_script(scenePath="res://main.tscn", source="""
265
242
  func run(ctx):
266
- var smoke := ctx.add_node("GPUParticles3D", "Smoke", ctx.find("Chimney"))
243
+ var smoke = ctx.add_node("GPUParticles3D", "Smoke", ctx.find("Chimney"))
267
244
  smoke.set_script(load("res://addons/vfx/smoke/smoke_controller.gd"))
268
245
  smoke.process_material = ParticleProcessMaterial.new()
269
246
  var quad := QuadMesh.new()
@@ -277,11 +254,16 @@ func run(ctx):
277
254
  smoke.set("particle_count", 48)
278
255
  smoke.set("wind_direction", Vector3(0.4, 0, 0.1))
279
256
  ctx.save_scene()
257
+ """)
280
258
  ```
281
259
 
260
+ For pairing with a fire, run the same script with `ctx.find("Campfire")` as the
261
+ parent, `position = Vector3(0, 1.5, 0)` (above the flame top) and
262
+ `rise_height` 3.0.
263
+
282
264
  Verify with `summer_snapshot_diff` (exactly one node added) and a `summer_screenshot`.
283
265
 
284
- ### 5b. Verify
266
+ ### 5a. Verify
285
267
 
286
268
  The shader and the controller are compiled code. Check them before tuning anything.
287
269
 
@@ -1,7 +1,7 @@
1
1
  id: skill/vfx-smoke
2
2
  kind: skill
3
3
  version: 1.0.2
4
- summary: Smoke effect — a slow-rising column or puff of soft particles built with a noise + density falloff shader on a quad mesh, GPUParticles3D.
4
+ summary: "Smoke effect: a rising column or puff of soft particles with a noise and density falloff shader."
5
5
  use_when:
6
6
  - authoring a smoke effect — smoke trail, puff, chimney smoke, steam, fog cloud, explosion smoke
7
7
  - a chimney, campfire, explosion, or vent needs a rising smoke column or puff in a 3D scene
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: vfx-water-ripple
3
- description: "Water-ripple effect — animated normal-distortion ripples on a water plane (or as a Decal) triggered by impacts."
3
+ description: "Water-ripple effect: animated normal-distortion ripples on a water plane or Decal, set off by impacts."
4
4
  license: MIT
5
5
  compatibility: [Cursor, Claude Code, Windsurf, Codex]
6
6
  category: visual-effects
@@ -221,54 +221,35 @@ MeshInstance3D ("Water") [script: water_ripple_surface.gd]
221
221
 
222
222
  ### 5. Wire it in (MCP calls)
223
223
 
224
- Every scene-mutating call takes an explicit `scenePath`. `summer_set_prop` uses `key`
225
- (not `property`); `summer_set_resource_property` always needs a `subProperty` and is
226
- for reaching *into* a resource, not for assigning one.
224
+ Write the two files, then wire the surface with ONE `summer_run_script` call
225
+ with an explicit `scenePath` — transactional, and it builds the subdivided
226
+ PlaneMesh directly, so no `plane.tres` sidecar is needed:
227
227
 
228
228
  ```
229
229
  summer_write_file(path="res://addons/vfx/water-ripple/water_ripple.gdshader", content="<section 2>", create_only=true)
230
230
  summer_write_file(path="res://addons/vfx/water-ripple/water_ripple_surface.gd", content="<section 3>", create_only=true)
231
231
 
232
- summer_add_node(scenePath="res://main.tscn", parent="./World", type="MeshInstance3D", name="Puddle")
233
- summer_set_prop(scenePath="res://main.tscn", path="./World/Puddle", key="script", value="res://addons/vfx/water-ripple/water_ripple_surface.gd")
234
- summer_set_prop(scenePath="res://main.tscn", path="./World/Puddle", key="position", value="Vector3(0, 0.01, 0)")
235
-
236
- # Whole resources are assigned by path with summer_set_prop.
237
- summer_set_prop(scenePath="res://main.tscn", path="./World/Puddle", key="mesh", value="res://addons/vfx/water-ripple/plane.tres")
238
- # `normal_texture` is an exported script property on the controller, not a
239
- # MeshInstance3D property — MeshInstance3D has no `normal_texture`.
240
- summer_set_prop(scenePath="res://main.tscn", path="./World/Puddle", key="normal_texture", value="res://addons/vfx/water-ripple/water_normals.png")
241
-
242
- # subProperty is required — this is how you reach into the PlaneMesh itself.
243
- summer_set_resource_property(scenePath="res://main.tscn", nodePath="./World/Puddle", resourceProperty="mesh", subProperty="subdivide_width", value=32)
244
- summer_set_resource_property(scenePath="res://main.tscn", nodePath="./World/Puddle", resourceProperty="mesh", subProperty="subdivide_depth", value=32)
245
-
246
- summer_save_scene(scenePath="res://main.tscn")
247
- ```
248
-
249
- ### 5a. One-script wiring (summer_run_script)
250
-
251
- On engines with `summer_run_script` (see `scene-scripting`), the node and
252
- resource wiring is ONE transactional ctx script — and it builds the subdivided
253
- PlaneMesh directly, so the `plane.tres` sidecar disappears:
254
-
255
- ```gdscript
232
+ summer_run_script(scenePath="res://main.tscn", source="""
256
233
  func run(ctx):
257
- var puddle := ctx.add_node("MeshInstance3D", "Puddle", null)
234
+ var puddle = ctx.add_node("MeshInstance3D", "Puddle", ctx.find("World"))
258
235
  var plane := PlaneMesh.new()
259
236
  plane.subdivide_width = 32
260
237
  plane.subdivide_depth = 32
261
238
  puddle.mesh = plane
262
239
  puddle.position = Vector3(0, 0.01, 0)
263
240
  puddle.set_script(load("res://addons/vfx/water-ripple/water_ripple_surface.gd"))
241
+ # normal_texture is an exported property of the controller script, not of MeshInstance3D
264
242
  puddle.set("normal_texture", load("res://addons/vfx/water-ripple/water_normals.png"))
265
243
  ctx.save_scene()
244
+ """)
266
245
  ```
267
246
 
268
247
  Set the mesh BEFORE the script if the controller reads it in `_ready`; either way,
269
- `ctx.add_node` has already owned the node, so it survives the save.
248
+ `ctx.add_node` has already owned the node, so it survives the save. Tuning one
249
+ mesh value later is one `summer_set_resource_property` call (`resourceProperty="mesh"`,
250
+ `subProperty="subdivide_width"`): it reaches into a resource, it never assigns one.
270
251
 
271
- ### 5b. Verify
252
+ ### 5a. Verify
272
253
 
273
254
  The shader and the controller are compiled code, and the controller `preload`s the
274
255
  shader — a shader that failed to write takes the script down at parse time.
@@ -1,7 +1,7 @@
1
1
  id: skill/vfx-water-ripple
2
2
  kind: skill
3
3
  version: 1.0.2
4
- summary: Water-ripple effect — animated normal-distortion ripples on a water plane (or as a Decal) triggered by impacts.
4
+ summary: "Water-ripple effect: animated normal-distortion ripples on a water plane or Decal, set off by impacts."
5
5
  use_when:
6
6
  - authoring a water-ripple effect — raindrop ripples, splash ripples, footstep in a puddle, fish jumps
7
7
  - rain, footsteps, or falling objects should disturb a water surface with spreading ripples