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,11 +1,11 @@
1
1
  ---
2
2
  name: adaptive-music
3
- description: "Wire music stems to game state — combat/explore/boss/tension crossfades on a shared bus, paired with a state machine and AudioBus structure."
3
+ description: "Wire music stems to game state: combat, explore, boss and tension crossfades on a shared bus."
4
4
  license: MIT
5
5
  compatibility: [Cursor, Claude Code, Windsurf, Codex]
6
6
  category: audio
7
7
  user-invocable: true
8
- allowed-tools: Read Grep Glob Write Edit summer_generate_audio summer_search_assets summer_import_from_url summer_add_node summer_set_prop summer_connect_signal summer_inspect_node summer_get_scene_tree summer_project_setting
8
+ allowed-tools: Read Grep Glob Write Edit summer_assets_generate_audio summer_assets_search summer_import_from_url summer_run_script summer_add_node summer_set_prop summer_connect_signal summer_inspect_node summer_get_scene_tree summer_project_setting summer_call
9
9
  paths: ["audio/music/**", "scripts/audio/**", "**/*.tscn", "default_bus_layout.tres"]
10
10
  ---
11
11
 
@@ -56,7 +56,7 @@ For most games, **horizontal sequencing** is right. It is cheaper to author and
56
56
  ### 3. Confirm stems exist (or generate them)
57
57
 
58
58
  ```
59
- summer_search_assets(query="music", assetType="music", source="all")
59
+ assets.search({ query: "music", assetType: "music", scope: "all" })
60
60
  ```
61
61
 
62
62
  You need (typical case):
@@ -97,29 +97,25 @@ For ducking, add a sidechain compressor on the `Music` bus with the `Voice` bus
97
97
 
98
98
  ### 5. Build the player rig
99
99
 
100
- For horizontal sequencing, instantiate one `AudioStreamPlayer` per state, all on the Music bus, all autoplay, all looping, all starting at `-60 dB` except the active state:
100
+ For horizontal sequencing, instantiate one `AudioStreamPlayer` per state, all on the Music bus, all autoplay, all looping, all starting at `-60 dB` except the active state. One script builds the whole rig (`scenePath` is the exact scene to change; `ctx.save_scene()` writes it):
101
101
 
102
102
  ```
103
- summer_add_node(scenePath="res://main.tscn", parent="./Music", type="AudioStreamPlayer", name="Calm")
104
- summer_set_prop(scenePath="res://main.tscn", path="./Music/Calm", key="stream", value="res://audio/music/calm.mp3")
105
- summer_set_prop(scenePath="res://main.tscn", path="./Music/Calm", key="bus", value="Music")
106
- summer_set_prop(scenePath="res://main.tscn", path="./Music/Calm", key="volume_db", value=0.0)
107
- summer_set_prop(scenePath="res://main.tscn", path="./Music/Calm", key="autoplay", value=true)
108
-
109
- summer_add_node(scenePath="res://main.tscn", parent="./Music", type="AudioStreamPlayer", name="Tension")
110
- summer_set_prop(scenePath="res://main.tscn", path="./Music/Tension", key="stream", value="res://audio/music/tension.mp3")
111
- summer_set_prop(scenePath="res://main.tscn", path="./Music/Tension", key="bus", value="Music")
112
- summer_set_prop(scenePath="res://main.tscn", path="./Music/Tension", key="volume_db", value=-60.0)
113
- summer_set_prop(scenePath="res://main.tscn", path="./Music/Tension", key="autoplay", value=true)
114
-
115
- summer_add_node(scenePath="res://main.tscn", parent="./Music", type="AudioStreamPlayer", name="Combat")
116
- summer_set_prop(scenePath="res://main.tscn", path="./Music/Combat", key="stream", value="res://audio/music/combat.mp3")
117
- summer_set_prop(scenePath="res://main.tscn", path="./Music/Combat", key="bus", value="Music")
118
- summer_set_prop(scenePath="res://main.tscn", path="./Music/Combat", key="volume_db", value=-60.0)
119
- summer_set_prop(scenePath="res://main.tscn", path="./Music/Combat", key="autoplay", value=true)
103
+ summer_run_script(scenePath="res://main.tscn", source="""
104
+ func run(ctx):
105
+ var music = ctx.get_or_create("Node", "Music")
106
+ var states := {"Calm": 0.0, "Tension": -60.0, "Combat": -60.0} # only the active state is audible
107
+ for state in states:
108
+ ctx.add_node("AudioStreamPlayer", state, music, {
109
+ "stream": load("res://audio/music/%s.mp3" % state.to_lower()),
110
+ "bus": "Music",
111
+ "volume_db": states[state],
112
+ "autoplay": true,
113
+ })
114
+ ctx.save_scene()
115
+ """)
120
116
  ```
121
117
 
122
- Every scene-mutating tool takes an explicit `scenePath`; node paths are relative to that scene's root (`./`), not absolute `/root/...` runtime paths; and the property argument is named `key`, not `property`.
118
+ A fourth state (Boss) is one more entry in `states`, not five more calls. Loop the streams on the imported files (`loop` in the import settings, or `AudioStreamMP3.loop`), not on the player.
123
119
 
124
120
  All three play simultaneously, in sync, but only one is audible. State transitions tween volumes — the music never restarts, only fades.
125
121
 
@@ -326,5 +322,5 @@ in Summer Engine.
326
322
  - `audio-direction` — defines the dynamic music plan and bus layout
327
323
  - `music-track` — generates the stems
328
324
  - `voice-line` — the voice bus that triggers ducking
329
- - `../../references/godot-version/godot-version.md` — Summer compatibility for AudioServer
325
+ - `summer_docs_read` id `reference/godot-version` — Summer compatibility for AudioServer
330
326
  and Tween APIs
@@ -1,7 +1,7 @@
1
1
  id: skill/adaptive-music
2
2
  kind: skill
3
3
  version: 1.0.2
4
- summary: Wire music stems to game state — combat/explore/boss/tension crossfades on a shared bus, paired with a state machine and AudioBus structure.
4
+ summary: "Wire music stems to game state: combat, explore, boss and tension crossfades on a shared bus."
5
5
  use_when:
6
6
  - wiring music stems to game state — combat / explore / boss / tension crossfades on a shared bus
7
7
  - layered or vertical music that changes when combat starts
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: agent-playtesting
3
- description: "Playtest by driving the LIVE game — deterministic launch, frame-stamped probes before/after each action, exact frame steps, scripted or recorded input."
3
+ description: "Playtest by driving the live game: deterministic launch, frame-stamped probes, scripted or recorded input."
4
4
  ---
5
5
 
6
6
  # Agent Playtesting
@@ -1,7 +1,7 @@
1
1
  id: skill/agent-playtesting
2
2
  kind: skill
3
3
  version: 1.0.0
4
- summary: Playtest by driving the LIVE game — deterministic launch, frame-stamped probes before/after each action, exact frame steps, scripted or recorded input.
4
+ summary: "Playtest by driving the live game: deterministic launch, frame-stamped probes, scripted or recorded input."
5
5
  use_when:
6
6
  - proving a gameplay feature works by driving the running game frame by frame with the runtime tools (summer_game_probe, summer_game_input, summer_game_control, summer_runtime_set/call/spawn/animate)
7
7
  - a bug repro or an A/B needs a deterministic launch (seed, fixed frame rate, offscreen instance), a recorded input replay, or two instances side by side
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: ai-characters-in-games
3
- description: "Safe AI characters in published games: no keys in the build, replies via Summer's player AI gateway, moderation, spend caps, offline brain and a report button."
3
+ description: "Safe AI characters in published games: no keys in the build, Summer's player AI gateway, moderation, caps."
4
4
  license: MIT
5
5
  compatibility: [Cursor, Claude Code, Windsurf, Codex]
6
6
  category: ai-and-npcs
@@ -1,7 +1,7 @@
1
1
  id: skill/ai-characters-in-games
2
2
  kind: skill
3
3
  version: 0.3.0
4
- summary: "Safe AI characters in published games: no keys in the build, replies via Summer's player AI gateway, moderation, spend caps, offline brain and a report button."
4
+ summary: "Safe AI characters in published games: no keys in the build, Summer's player AI gateway, moderation, caps."
5
5
  use_when:
6
6
  - a character, creature or object should answer free-form player text or speech in a published game (talking flowers, shopkeepers, companions)
7
7
  - about to put a model name, a provider SDK or a provider key into a game project
@@ -1,11 +1,11 @@
1
1
  ---
2
2
  name: ambient-bed
3
- description: "Generate a long looping location ambience — forest, dungeon, city, spaceship, cave — a looping AudioStreamPlayer on the Ambient bus with a seamless loop."
3
+ description: "Generate a long looping location ambience (forest, dungeon, city, cave) on the Ambient bus."
4
4
  license: MIT
5
5
  compatibility: [Cursor, Claude Code, Windsurf, Codex]
6
6
  category: audio
7
7
  user-invocable: true
8
- allowed-tools: Read Grep Glob Write Edit summer_generate_audio summer_search_assets summer_import_from_url summer_add_node summer_set_prop summer_inspect_node
8
+ allowed-tools: Read Grep Glob Write Edit summer_assets_generate_audio summer_assets_search summer_import_from_url summer_add_node summer_set_prop summer_inspect_node summer_call
9
9
  paths: ["audio/ambient/**", "**/*.tscn", "**/*.import"]
10
10
  ---
11
11
 
@@ -15,7 +15,7 @@ paths: ["audio/ambient/**", "**/*.tscn", "**/*.import"]
15
15
 
16
16
  An ambient bed is the *air* of a place. Forest at dawn, dungeon corridor, spaceship hum, market street, ocean cave. It plays at low energy under everything else and is never melodic. Players rarely notice a bed, but they notice the silence when a level has none.
17
17
 
18
- This is **not** music. Use `summer_generate_audio({capability: 'sound_effects'})`, not `{capability: 'music'}`: the SFX model renders texture, the music model renders melody.
18
+ This is **not** music. Use `assets.generate_audio({ capability: 'sound_effects' })`, not `{ capability: 'music' }`: the SFX model renders texture, the music model renders melody.
19
19
 
20
20
  Generated at 15–22 seconds (the SFX duration ceiling) and looped with a Summer
21
21
  Engine import loop point and optional crossfade.
@@ -101,17 +101,17 @@ If the user wants a busier bed (market, party), still prevent foreground events:
101
101
  ### 5. Generate at the duration ceiling
102
102
 
103
103
  ```
104
- summer_generate_audio(
104
+ assets.generate_audio({
105
105
  capability: "sound_effects",
106
106
  modelId: "eleven_text_to_sound_v2",
107
107
  loop: true,
108
108
  text: "forest at dawn, gentle wind through leaves, distant bird calls every 6 seconds, soft creaking branches, no music, no human sound, 22s seamless loop",
109
109
  durationSeconds: 22
110
- )
111
- // Then: summer_import_from_url(url: "<fileUrl>", path: "res://audio/ambient/forest_dawn.wav")
110
+ })
111
+ // Then: summer_import_from_url(url: "<asset.fileUrl>", path: "res://audio/ambient/forest_dawn.wav")
112
112
  ```
113
113
 
114
- Name `modelId: "eleven_text_to_sound_v2"` with `loop: true`: it is the only sound-effect model that makes seamless loops, and without a `modelId` the person's default sound-effect model runs, which may not loop. `sound_effects` reads from **`text`**, not `prompt` — passing `prompt` is a 400 `text_required`. (`prompt` is the `music` capability's field.) The clip comes back as WAV, so a `.wav` target path is correct.
114
+ Name `modelId: "eleven_text_to_sound_v2"` with `loop: true`: it is the only sound-effect model that makes seamless loops, and without a `modelId` the person's default sound-effect model runs, which may not loop. `sound_effects` reads from **`text`**, not `prompt` — without `text` the call is refused (`text_required`). (`prompt` is the `music` capability's field.) The clip comes back as WAV, so a `.wav` target path is correct.
115
115
 
116
116
  22s is the SFX ceiling. Always generate at the ceiling for ambient — longer cycle means less recognized repetition.
117
117
 
@@ -196,11 +196,16 @@ This eliminates the click and adds variation through phase-overlap (the loop ove
196
196
  For most beds, non-positional is correct (the player is *in* the place; the bed isn't an emitter):
197
197
 
198
198
  ```
199
- summer_add_node(scenePath="res://levels/level_01.tscn", parent="./Level", type="AudioStreamPlayer", name="AmbientBed")
200
- summer_set_prop(scenePath="res://levels/level_01.tscn", path="./Level/AmbientBed", key="stream", value="res://audio/ambient/forest_dawn.wav")
201
- summer_set_prop(scenePath="res://levels/level_01.tscn", path="./Level/AmbientBed", key="bus", value="Ambient")
202
- summer_set_prop(scenePath="res://levels/level_01.tscn", path="./Level/AmbientBed", key="volume_db", value=-12.0)
203
- summer_set_prop(scenePath="res://levels/level_01.tscn", path="./Level/AmbientBed", key="autoplay", value=true)
199
+ summer_run_script(scenePath="res://levels/level_01.tscn", source="""
200
+ func run(ctx):
201
+ ctx.add_node("AudioStreamPlayer", "AmbientBed", ctx.find("Level"), {
202
+ "stream": load("res://audio/ambient/forest_dawn.wav"),
203
+ "bus": "Ambient",
204
+ "volume_db": -12.0,
205
+ "autoplay": true,
206
+ })
207
+ ctx.save_scene()
208
+ """)
204
209
  ```
205
210
 
206
211
  Or attach the script in step 7 to a Node, set its `stream` to the imported audio, and skip the `AudioStreamPlayer` node — the script provides its own.
@@ -249,7 +254,7 @@ Boss arena: vast stone arena, low ominous drone, distant rumble,
249
254
 
250
255
  ## Anti-patterns
251
256
 
252
- - **Using `summer_generate_audio({capability: 'music'})` for an ambient bed.** Music model adds melody. You don't want melody.
257
+ - **Using `assets.generate_audio({ capability: 'music' })` for an ambient bed.** Music model adds melody. You don't want melody.
253
258
  - **Foreground events in the bed.** A wolf howl, an explosion, a clear word — these promote themselves and the bed becomes annoying.
254
259
  - **Bed louder than `-10 dB` on its bus.** Beds belong under everything; default is `-12 dB` to `-15 dB`.
255
260
  - **No loop point set.** The clip plays once and silence follows.
@@ -265,6 +270,10 @@ Boss arena: vast stone arena, low ominous drone, distant rumble,
265
270
  - **Need positional bed (a campfire crackle).** Use `AudioStreamPlayer3D` with `max_distance` matching the campfire's reasonable hearing radius (4–8m typical).
266
271
  - **Multi-room transitions.** Use Areas; on player enter, fade in destination bed and fade out source bed over 1.5s.
267
272
 
273
+ ## Without Summer Engine
274
+
275
+ In a session without Summer Engine tools (the assets profile; the `summer-assets` skill has the whole loop), do steps 1-5 and stop when the bed exists. Skip steps 6-9: the loop point, the crossfade script and the `AudioStreamPlayer` are Summer Engine work. Save the file where the person asked with `out` (the `summer-assets` skill says how), and tell them the path and format. Tell the person it is a long bed made to loop: their engine either loops it with a short crossfade or plays two copies that overlap.
276
+
268
277
  ## Fallback (no MCP)
269
278
 
270
279
  Print the SFX prompt and the import dock settings. User runs via the Summer dashboard and imports manually.
@@ -1,7 +1,7 @@
1
1
  id: skill/ambient-bed
2
2
  kind: skill
3
3
  version: 1.0.3
4
- summary: Generate a long looping location ambience — forest, dungeon, city, spaceship, cave — a looping AudioStreamPlayer on the Ambient bus with a seamless loop.
4
+ summary: "Generate a long looping location ambience (forest, dungeon, city, cave) on the Ambient bus."
5
5
  use_when:
6
6
  - generating a long looping location ambience — forest at dawn, dungeon air, city street, spaceship hum, cave drip — non-melodic and low-energy
7
7
  - a location feels silent and needs a continuous soundscape beneath the score and effects
@@ -1,11 +1,11 @@
1
1
  ---
2
2
  name: animated-loop
3
- description: "Generate a short seamlessly-looping video clip — splash background, animated logo backdrop, idle title-screen footage — wired as a looping VideoStreamPlayer."
3
+ description: "Generate a short seamless video loop: splash background, animated logo backdrop, idle title screen."
4
4
  license: MIT
5
5
  compatibility: [Cursor, Claude Code, Windsurf, Codex]
6
6
  category: video
7
7
  user-invocable: true
8
- allowed-tools: Read Grep Glob Write Edit summer_generate_video summer_check_job summer_generate_image summer_search_assets summer_import_from_url summer_add_node summer_set_prop
8
+ allowed-tools: Read Grep Glob Write Edit summer_assets_generate_video summer_jobs_wait summer_assets_generate_image summer_assets_search summer_import_from_url summer_add_node summer_set_prop summer_call
9
9
  paths: ["assets/video/**", "menus/**", "ui/**"]
10
10
  ---
11
11
 
@@ -13,7 +13,7 @@ paths: ["assets/video/**", "menus/**", "ui/**"]
13
13
 
14
14
  A loop is the only video format that has to *not have* a beginning or end. The viewer sees it on the title screen for 30 seconds; if the seam between loop iterations is visible, the whole thing reads as broken. This skill exists to force the constraints that make seams invisible: take the shortest duration available, keep the motion ambient (no narrative, no big camera moves), use the fast model (`ltx`), and prompt for a composition where the first and last frames are functionally identical.
15
15
 
16
- **Duration is not a dial here.** `summer_generate_video` accepts only `duration=5` or `duration=10`; the server coerces every other value to 5. So "drop to 3s to hide the seam" is not an option — 5s is the floor, and the seam has to be won in the prompt and the reference frame instead.
16
+ **Duration is not a dial here.** On `ltx` and `kling`, `assets.generate_video` renders only `duration: 5` or `duration: 10`; every other value renders 5. So "drop to 3s to hide the seam" is not an option — 5s is the floor, and the seam has to be won in the prompt and the reference frame instead.
17
17
 
18
18
  If the user wants a 5s punchy marketing shot, that's `trailer-shot`. If they want a 10s narrative cutscene, that's `cinematic-cutscene`. This skill is the one for video that has to *disappear* — atmosphere behind a logo, mood behind a menu, ambience behind a splash card.
19
19
 
@@ -46,13 +46,12 @@ If the user wants narrative motion (a character walking, a door opening), this i
46
46
 
47
47
  For loops, `ltx` is almost always right. It takes ~30s, and short ambient motion is what it handles best. The premium models cost more credits and do not loop better.
48
48
 
49
- This skill always passes `imageUrl` (step 3), which puts every call on the image-to-video route — and that route accepts only `ltx`, `kling`, and `minimax`. `kling-turbo` and `veo3` are text-to-video only; pairing either with an `imageUrl` is a 400 `invalid_model`, not a silent downgrade.
49
+ This skill always passes `imageUrl` (step 3), which puts every call on the image-to-video route. `kling-turbo` and `veo3` are text-to-video only; pairing either with an `imageUrl` is a 400 `invalid_model`, not a silent downgrade.
50
50
 
51
51
  | Model | i2v? | Speed | When |
52
52
  |---|---|---|---|
53
53
  | `ltx` | yes | ~30s | Default. Use this. |
54
54
  | `kling` | yes | 2-4 min | Only if the loop is the centerpiece of a premium splash and quality is visibly lacking on `ltx` |
55
- | `minimax` | yes | 2-3 min | Stylized / anime aesthetic loops |
56
55
  | `kling-turbo` | **no** | 1-2 min | Not reachable from this skill — text-to-video only |
57
56
  | `veo3` | **no** | 3-5 min | Not reachable from this skill, and pointless for ambient loops anyway |
58
57
 
@@ -61,15 +60,16 @@ This skill always passes `imageUrl` (step 3), which puts every call on the image
61
60
  The reference still doubles as the *target* loop frame. Generate it deliberately — the video model's first and last frames will gravitate toward the reference, which is exactly what you want for a closing seam.
62
61
 
63
62
  ```
64
- summer_generate_image(
65
- prompt="<subject>, ambient atmospheric scene, cinematic lighting, painterly, wide 16:9 framing, balanced composition with no clear focal action",
66
- model="nano-banana-2"
67
- )
63
+ assets.generate_image({
64
+ prompt: "<subject>, ambient atmospheric scene, cinematic lighting, painterly, wide framing, balanced composition with no clear focal action",
65
+ model: "nano-banana-2",
66
+ aspectRatio: "16:9"
67
+ })
68
68
  ```
69
69
 
70
- `summer_generate_image` has no size or aspect argument — `options.image_size` is dropped without an error and every MCP image comes back at the server's 1:1 default. Ask for the framing in the prompt, or generate the reference in the Summer dashboard (which exposes aspect ratio) and pass its URL.
70
+ Set `aspectRatio` to the screen the loop fills (`16:9`, or `9:16` for a vertical mobile splash).
71
71
 
72
- On the image-to-video route `aspectRatio` is **not applied at all** — the clip inherits the reference image's framing. So a vertical mobile splash needs a 9:16 reference image, and setting `aspectRatio="9:16"` on the video call does nothing.
72
+ On the image-to-video route `aspectRatio` is **not applied at all** — the clip inherits the reference image's framing. So a vertical mobile splash needs a 9:16 reference image, and setting `aspectRatio: "9:16"` on the video call does nothing.
73
73
 
74
74
  ### 4. Prompt for loopable motion only
75
75
 
@@ -80,20 +80,20 @@ Loopable verbs: `drift`, `flicker`, `swirl`, `shimmer`, `sway`, `pulse`, `glow`,
80
80
  Non-loopable verbs (avoid): `walks`, `enters`, `appears`, `emerges`, `transforms`, `attacks`, `falls down`, `opens`, `closes`.
81
81
 
82
82
  ```
83
- summer_generate_video(
84
- prompt="<subject from reference>, <ambient loopable motion>, slow continuous, looping, seamless, cinematic",
85
- model="ltx",
86
- imageUrl="<reference URL from step 3>",
87
- duration=5,
88
- options={ negative_prompt: "sudden movement, character action, narrative event, fade to black" }
89
- )
83
+ assets.generate_video({
84
+ prompt: "<subject from reference>, <ambient loopable motion>, slow continuous, looping, seamless, cinematic",
85
+ model: "ltx",
86
+ imageUrl: "<reference URL from step 3>",
87
+ duration: 5,
88
+ negativePrompt: "sudden movement, character action, narrative event, fade to black"
89
+ })
90
90
  ```
91
91
 
92
- The phrase **"looping, seamless"** in the prompt biases the model toward stable first/last frames. `options.negative_prompt` is one of the few provider keys that does pass through on the video route (`prompt`, `image_url`, `num_frames`, `duration`, `resolution`, and `model` are stripped; everything else is forwarded), so the negative prompt does rule out narrative drift here — unlike on `summer_generate_image`, where no such argument exists.
92
+ The phrase **"looping, seamless"** in the prompt biases the model toward stable first/last frames, and `negativePrompt` rules out narrative drift. Images have no negative prompt: put negations in the image prompt text.
93
93
 
94
94
  `aspectRatio` is omitted deliberately: it is applied on the text-to-video path only, and this call passes `imageUrl`.
95
95
 
96
- The call returns `{ success, queued: true, jobId, ... }` and **no URL** — video generation is asynchronous. Poll `summer_check_job(jobId="<jobId>")` until it reports `completed`, and only then treat the clip as existing.
96
+ The call answers at once with `{ status: "running", job: { id } }` and **no URL**. Call `jobs.wait({ jobId: "<job.id>", timeoutSeconds: 50 })` until `finished` is true; only a `done` job's `result` holds the clip.
97
97
 
98
98
  ### 5. Inspect the seam
99
99
 
@@ -125,19 +125,24 @@ ffmpeg -i title_screen_bg.mp4 -c:v libtheora -q:v 8 -an title_screen_bg.ogv
125
125
  summer_import_from_url(url="<hosted .ogv url>", path="res://assets/video/loops/title_screen_bg.ogv")
126
126
  ```
127
127
 
128
- Then wire it. Every scene-mutating tool takes an explicit `scenePath`, and `summer_set_prop`'s property argument is named `key`, not `property`:
128
+ Then wire it in one script. `scenePath` is the exact scene to change:
129
129
 
130
130
  ```
131
- summer_add_node(scenePath="res://ui/title_screen.tscn", parent=".", type="VideoStreamPlayer", name="BackgroundLoop")
132
- summer_set_prop(scenePath="res://ui/title_screen.tscn", path="./BackgroundLoop", key="stream", value="res://assets/video/loops/title_screen_bg.ogv")
133
- summer_set_prop(scenePath="res://ui/title_screen.tscn", path="./BackgroundLoop", key="autoplay", value=true)
134
- summer_set_prop(scenePath="res://ui/title_screen.tscn", path="./BackgroundLoop", key="loop", value=true)
135
- summer_set_prop(scenePath="res://ui/title_screen.tscn", path="./BackgroundLoop", key="expand", value=true)
136
- summer_set_prop(scenePath="res://ui/title_screen.tscn", path="./BackgroundLoop", key="anchors_preset", value=15)
137
- summer_save_scene(scenePath="res://ui/title_screen.tscn")
131
+ summer_run_script(scenePath="res://ui/title_screen.tscn", source="""
132
+ func run(ctx):
133
+ var loop_player = ctx.add_node("VideoStreamPlayer", "BackgroundLoop", null, {
134
+ "stream": load("res://assets/video/loops/title_screen_bg.ogv"),
135
+ "autoplay": true,
136
+ "loop": true,
137
+ "expand": true,
138
+ })
139
+ loop_player.set_anchors_and_offsets_preset(Control.PRESET_FULL_RECT) # the loop fills the menu
140
+ ctx.get_scene_root().move_child(loop_player, 0) # drawn first: the menu draws on top
141
+ ctx.save_scene()
142
+ """)
138
143
  ```
139
144
 
140
- Anchors preset 15 is "full rect" — the loop fills the menu. Place the logo and menu buttons as children *above* the `VideoStreamPlayer` in the tree (Controls draw in tree order; later siblings render on top).
145
+ Controls draw in tree order and later siblings render on top, so the logo and menu buttons come after the `VideoStreamPlayer` in the tree.
141
146
 
142
147
  ### 7. Mute the audio track
143
148
 
@@ -161,7 +166,7 @@ Pattern: `<subject> + <ambient loopable motion> + <constant lighting> + "looping
161
166
  | Logo backdrop — magic runes | `ltx` | `dark surface with glowing blue runes pulsing softly in slow rhythm, faint shimmer, no narrative motion, looping, seamless` | 5s |
162
167
  | Menu — underwater | `ltx` | `underwater scene with caustic light dancing on a sandy floor, slow drifting bubbles, gentle current sway on kelp, looping, seamless` | 5s |
163
168
  | Pause screen — slow rain | `ltx` | `window pane with continuous gentle rain drops, blurred warm interior glow behind, looping, seamless, ambient` | 5s |
164
- | Title — anime sky | `minimax` | `anime style cumulus clouds drifting slowly across a pastel sunset sky, soft, painterly, looping, seamless, Ghibli` | 5s |
169
+ | Title — anime sky | `ltx` | `anime style cumulus clouds drifting slowly across a pastel sunset sky, soft, painterly, looping, seamless, Ghibli` | 5s |
165
170
  | Premium splash centerpiece | `kling` | `dragon silhouette breathing in profile against a vast sunset sky, only the chest rising and falling and clouds drifting, looping, seamless` | 5s |
166
171
 
167
172
  ### Bad prompts and why
@@ -177,7 +182,7 @@ Pattern: `<subject> + <ambient loopable motion> + <constant lighting> + "looping
177
182
  ## Anti-patterns
178
183
 
179
184
  - **Asking the model for a 10s loop.** Past ~6s, identity drifts and the seam shows. `duration=5` is both the floor and the right answer; 10 is the only other value the API accepts.
180
- - **Treating `summer_generate_video` as synchronous.** It returns `{ queued: true, jobId }` and no URL. Poll `summer_check_job` before claiming a clip exists.
185
+ - **Treating `assets.generate_video` as finished.** It answers `{ status: "running", job }` and no URL. Wait with `jobs.wait` before claiming a clip exists.
181
186
  - **Using `kling` for a loop.** `ltx` is almost always right; short ambient motion is what it does best.
182
187
  - **Prompting narrative motion.** "Hero draws sword" doesn't loop. Use ambient verbs.
183
188
  - **Forgetting `loop=true` on the `VideoStreamPlayer`.** The clip will play once and freeze on the last frame.
@@ -193,6 +198,10 @@ Pattern: `<subject> + <ambient loopable motion> + <constant lighting> + "looping
193
198
  - **Loop is behind translucent UI.** Generate with extra contrast headroom — the model tends toward mid-grey, and translucent UI on mid-grey reads muddy. Push for `high contrast cinematic` in the prompt.
194
199
  - **Loop seam still visible after 3 regens.** Set up two `VideoStreamPlayer` siblings and crossfade between them with a `Tween` on a 0.5s overlap. Costs an extra GPU decode but hides the seam.
195
200
 
201
+ ## Without Summer Engine
202
+
203
+ In a session without Summer Engine tools (the assets profile; the `summer-assets` skill has the whole loop), do steps 1-5 and stop when the seam passes. Skip steps 6-7 (the `VideoStreamPlayer` and its audio). Save the file where the person asked with `out` (the `summer-assets` skill says how), and tell them the path and format. The file is MP4; tell the person to play it looped and muted.
204
+
196
205
  ## Fallback (no MCP)
197
206
 
198
207
  If the MCP server isn't running, route the user to the Summer dashboard:
@@ -221,4 +230,4 @@ Once the loop is wired:
221
230
  - `music-track` — score the menu.
222
231
  - `ui-graphics` — logo, menu buttons, HUD that sits over the loop.
223
232
  - `concept-art` — produce the reference still that anchors the loop.
224
- - `../../references/mcp-tools-reference/mcp-tools-reference.md` — `summer_generate_video` parameter schema and error codes.
233
+ - `summer_docs_read` id `reference/mcp-tools-reference` — how to call `assets.generate_video`; `summer_search` returns its exact input.
@@ -1,7 +1,7 @@
1
1
  id: skill/animated-loop
2
2
  kind: skill
3
3
  version: 1.0.4
4
- summary: Generate a short seamlessly-looping video clip — splash background, animated logo backdrop, idle title-screen footage — wired as a looping VideoStreamPlayer.
4
+ summary: "Generate a short seamless video loop: splash background, animated logo backdrop, idle title screen."
5
5
  use_when:
6
6
  - generating a short looping video clip — splash screen background, animated logo backdrop, idle title-screen footage, looping environment ambience
7
7
  - an idle backdrop behind the UI needs subtle motion without a real-time animated scene
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: animation-tree
3
- description: "Design and wire AnimationTree state machines and blend trees so clips respond to gameplay — locomotion blends, attack interrupts, hit reactions."
3
+ description: "Wire AnimationTree state machines and blend trees: locomotion blends, attack interrupts, hit reactions."
4
4
  license: MIT
5
5
  compatibility: [Cursor, Claude Code, Windsurf, Codex]
6
6
  category: animation
@@ -1,7 +1,7 @@
1
1
  id: skill/animation-tree
2
2
  kind: skill
3
3
  version: 1.0.1
4
- summary: Design and wire AnimationTree state machines and blend trees so clips respond to gameplay — locomotion blends, attack interrupts, hit reactions.
4
+ summary: "Wire AnimationTree state machines and blend trees: locomotion blends, attack interrupts, hit reactions."
5
5
  use_when:
6
6
  - the character has clips that must play in response to gameplay — idle/walk/run blends, attacks that interrupt locomotion, hit reactions
7
7
  - a character keeps T-posing
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: art-direction
3
- description: "Define the game's visual style — references, palette, mood, lighting plan, post-processing, do/don't list — output as an art bible at .summer/art-bible.md."
3
+ description: "Define the game's visual style (palette, mood, lighting, post) as an art bible in .summer/art-bible.md."
4
4
  license: MIT
5
5
  compatibility: [Cursor, Claude Code, Windsurf, Codex]
6
6
  category: rendering-and-lighting
@@ -185,7 +185,7 @@ If a `WorldEnvironment` node is in the main scene, set its environment defaults
185
185
 
186
186
  ```
187
187
  summer_inspect_node(path="./World/WorldEnvironment")
188
- summer_set_prop(path="./World/WorldEnvironment/...", key="...", value="...")
188
+ summer_set_prop(scenePath="res://main.tscn", path="./World/WorldEnvironment/...", key="...", value="...")
189
189
  ```
190
190
 
191
191
  Ask before each:
@@ -247,7 +247,7 @@ End with:
247
247
  > - `/audio-direction` to define the sonic identity that pairs with this look.
248
248
  > - `/game-feel` to design particle / hit-feedback styles within the palette.
249
249
  > - Open the project's `WorldEnvironment` node and dial in the lighting plan.
250
- > - Or generate first-pass concept assets via `summer_generate_image` using the palette + mood as the prompt prefix.
250
+ > - Or generate first-pass concept assets via `assets.generate_image` using the palette + mood as the prompt prefix.
251
251
 
252
252
  ## Common mistakes
253
253
 
@@ -1,7 +1,7 @@
1
1
  id: skill/art-direction
2
2
  kind: skill
3
3
  version: 1.0.2
4
- summary: Define the game's visual style — references, palette, mood, lighting plan, post-processing, do/don't list — output as an art bible at .summer/art-bible.md.
4
+ summary: "Define the game's visual style (palette, mood, lighting, post) as an art bible in .summer/art-bible.md."
5
5
  use_when:
6
6
  - defining the visual style of the game — references, palette, mood, lighting plan, post-processing
7
7
  - make it look like PS1, retro, low-poly, pixel art, cel-shaded, or a horror aesthetic
@@ -1,11 +1,11 @@
1
1
  ---
2
2
  name: asset-strategy
3
- description: "Route any 'I need a [thing]' asset request to the right specialist skill — disambiguates 2D / 3D / audio / video / VFX / animation pipelines."
3
+ description: "Route any 'I need a [thing]' asset request to the right skill: 2D, 3D, audio, video, VFX or animation."
4
4
  license: MIT
5
5
  compatibility: [Cursor, Claude Code, Windsurf, Codex]
6
6
  category: asset-pipeline
7
7
  user-invocable: false
8
- allowed-tools: Read Grep Skill summer_search_assets summer_list_my_assets summer_get_asset summer_import_asset_by_id
8
+ allowed-tools: Read Grep Skill summer_assets_search summer_assets_get summer_import_asset_by_id summer_call
9
9
  ---
10
10
 
11
11
  # Asset Strategy — Meta-Router for Asset Creation
@@ -114,22 +114,39 @@ VFX is **code, not generative** — recipes are shader + GDScript + node setup,
114
114
  | Magic glow / aura | `vfx-magic-glow` |
115
115
  | Camera shake / hit-stop | `game-feel` |
116
116
 
117
+ ## How the specialists call Summer
118
+
119
+ The specialists name Summer's asset work by operation. A call written `area.action({...})` is one operation: use the tool `summer_area_action` when your client lists it, else `summer_call({ op: "area.action", input: {...} })`. `summer_search` finds any operation and its exact input.
120
+
121
+ - **Find and read:** `assets.search({ query, scope })` (`scope`: `library` (default), `mine` for their own, `all`), then `assets.get({ assetId })` for the file, `downloadUrl` and `viewerUrl`. Reuse before generating.
122
+ - **Generate:** `assets.generate_image`, `assets.generate_3d`, `assets.generate_audio`, `assets.generate_video`, `assets.generate_motion`, `assets.generate_sfx_choices` (then `assets.choices` for the person's picks). They spend the person's credits; `dryRun: true` returns the estimate (`credits`, `balance`, `enough`) and makes nothing.
123
+ - **Wait:** 3D, video and animation answer at once with a job; `jobs.wait({ jobId, timeoutSeconds: 50 })` until `finished`, and the finished job's `result` holds the asset ids.
124
+ - **Save on this machine:** with the local Summer MCP or the CLI, `out` (a folder or a file path) on a generate call, `jobs.wait` or `assets.get` saves the file there, and the answer adds `localPath`.
125
+ - **Edit their assets:** `assets.remove_background`, `assets.slice_sheet`, `assets.update` (title, description, tags, private or team), `assets.make_public` (lists one for everyone in Summer's asset store), `assets.delete` (deletes for good; asks the person unless they let their agent delete, and then nothing is deleted until they confirm).
126
+ - **Permissions:** The person decides once what their agent may do: publishing (including `assets.make_public`), spending and building run at once by default, and deleting for good asks. An operation whose group they have not granted answers `needs_approval` with a link: give the link to the person, then `jobs.wait` on the `apr:` job.
127
+ - **Upload an image from disk:** `assets.upload_begin`, then `assets.upload_complete`.
128
+ - **One-shot makers:** `makers.<tool>` (for example `makers.npc_voice`, `makers.trailer_forge`); `summer_search` lists them.
129
+
117
130
  ## When NOT to use this skill
118
131
 
119
132
  - The user already named the specific skill — go straight there.
120
133
  - The user is debugging or running the game — route to `debug` or `play`.
121
- - The asset is an existing Summer asset ID — call `summer_get_asset`, then `summer_import_asset_by_id`.
134
+ - The asset is an existing Summer asset ID — call `assets.get({ assetId })`, then `summer_import_asset_by_id`.
122
135
  - The asset is being imported from a non-Summer URL (`.glb` / `.wav` from Sketchfab, Quaternius, AmbientCG) — call `summer_import_from_url` directly.
123
136
  - The user wants to plan the whole game's asset list — `brainstorm-game` first, then this router on each item.
124
137
 
125
138
  ## Anti-patterns
126
139
 
127
- - **Generating yourself instead of dispatching.** This file holds zero prompt patterns by design. If you're writing a `summer_generate_image` call from here, stop and invoke the specialist.
140
+ - **Generating yourself instead of dispatching.** This file holds zero prompt patterns by design. If you're writing an `assets.generate_image` call from here, stop and invoke the specialist.
128
141
  - **Skipping the disambiguation question.** Sends users to the wrong specialist and burns a paid generation. The verbatim phrasing in Step 2 is required.
129
142
  - **Routing concept-art to character-portrait** (or the reverse). Different goals: concept-art produces 4 divergent variants for art direction; character-portrait produces 1 polished bust for dialogue UI.
130
143
  - **Inventing skill names.** Only dispatch to skills listed above. If nothing fits, ask the user to clarify.
131
144
  - **Routing rigged-humanoid requests to `prop-model`.** Anything that needs animation always goes to `character-model`.
132
145
 
146
+ ## Without Summer Engine
147
+
148
+ In a session without Summer Engine tools (the assets profile; the `summer-assets` skill has the whole loop), the routing tables still pick the skill. Leave out every step that imports (`summer_import_asset_by_id`, `summer_import_from_url`): deliver the file with `out` instead (the `summer-assets` skill says how).
149
+
133
150
  ## Fallback (no MCP)
134
151
 
135
152
  The router still works without MCP — classification is text-only. It hands off to the specialist, which surfaces its own no-MCP fallback (typically: run the same generation in the Summer dashboard, then `summer_import_from_url` once MCP is back).
@@ -1,7 +1,7 @@
1
1
  id: skill/asset-strategy
2
2
  kind: skill
3
3
  version: 1.0.3
4
- summary: Route any 'I need a [thing]' asset request to the right specialist skill — disambiguates 2D / 3D / audio / video / VFX / animation pipelines.
4
+ summary: "Route any 'I need a [thing]' asset request to the right skill: 2D, 3D, audio, video, VFX or animation."
5
5
  use_when:
6
6
  - planning asset creation, picking an asset pipeline, or routing an 'I need a [thing]' request to the right specialist skill
7
7
  - '"I need a sword / a forest / a boss theme / an explosion" and it is unclear which pipeline (2D, 3D, audio, video, VFX, animation) fits'
@@ -20,6 +20,7 @@ compatibility:
20
20
  engine: ">=4.6"
21
21
  related:
22
22
  skills:
23
+ - skill/summer-assets
23
24
  - skill/character-portrait
24
25
  - skill/concept-art
25
26
  - skill/pixel-art
@@ -1,11 +1,11 @@
1
1
  ---
2
2
  name: audio-direction
3
- description: "Define the game's sonic identity — music style, instruments, SFX vocabulary, dynamic music plan — output as an audio bible at .summer/audio-bible.md."
3
+ description: "Define the game's sound (music style, SFX vocabulary, dynamic music) as .summer/audio-bible.md."
4
4
  license: MIT
5
5
  compatibility: [Cursor, Claude Code, Windsurf, Codex]
6
6
  category: audio
7
7
  user-invocable: true
8
- allowed-tools: Read Grep Glob Write Edit summer_get_project_context summer_get_scene_tree summer_inspect_node summer_add_node summer_project_setting summer_generate_audio
8
+ allowed-tools: Read Grep Glob Write Edit summer_get_project_context summer_get_scene_tree summer_inspect_node summer_add_node summer_project_setting summer_assets_generate_audio summer_call
9
9
  paths: [".summer/**", "project.godot", "**/*.tscn", "audio/**"]
10
10
  ---
11
11
 
@@ -206,9 +206,9 @@ Ask:
206
206
  If the user wants to start generating, propose 3-5 SFX seeds aligned with the vocabulary. These are starting points, not finals. Generate them with the `sound-effect` skill: the first sound effect in a chat starts with its question (three versions from three models, picked by ear in Summer Studio), and its prompt shape is the one that tested well.
207
207
 
208
208
  ```
209
- summer_generate_audio(capability="sound_effects", text="Foley one-shot: a fingertip taps a small wooden button, soft woody click, no tail, close-mic, dry, no reverb, no music, no voices.", durationSeconds=0.5)
210
- summer_generate_audio(capability="sound_effects", text="Foley one-shot: a small gold coin drops onto a wooden table, bright metallic ting with a short ring, close-mic, dry, no music, no voices.", durationSeconds=0.5)
211
- summer_generate_audio(capability="sound_effects", text="Foley one-shot: a fist hits a padded leather vest, low-mid thump, no tail, close-mic, dry, no reverb, no music, no voices.", durationSeconds=0.5)
209
+ assets.generate_audio({ capability: "sound_effects", text: "Foley one-shot: a fingertip taps a small wooden button, soft woody click, no tail, close-mic, dry, no reverb, no music, no voices.", durationSeconds: 0.5 })
210
+ assets.generate_audio({ capability: "sound_effects", text: "Foley one-shot: a small gold coin drops onto a wooden table, bright metallic ting with a short ring, close-mic, dry, no music, no voices.", durationSeconds: 0.5 })
211
+ assets.generate_audio({ capability: "sound_effects", text: "Foley one-shot: a fist hits a padded leather vest, low-mid thump, no tail, close-mic, dry, no reverb, no music, no voices.", durationSeconds: 0.5 })
212
212
  ```
213
213
 
214
214
  `capability` is required; `sound_effects` reads from `text` (not `prompt`), and the length argument is `durationSeconds` (not `duration`) with a floor of 0.5 s (1 s for Stable Audio 3 SFX). Leave out `modelId` so the person's approved default model runs. Ask for the character you want inside the text and let the player only use the front of the clip — you cannot request 80 ms.
@@ -239,11 +239,11 @@ End with:
239
239
  | Pure sine "ding" for pickup | Reads as cheap mobile game. Use a major-third interval with character. |
240
240
  | Same footstep sample for all surfaces | Players hear footsteps constantly; material-aware steps carry much of the perceived audio quality. |
241
241
  | No master ceiling / true peak | Audio clips on console builds without `-1 dBTP` ceiling. Always set it. |
242
- | Assuming SetResourceProperty fails silently on inline sub_resources | It does not — inline targets work, and the structural failures (`node not found`, `property is not a resource`, `resource is null`) are explicit errors. What *is* silent on current engines is a bad value shape: a JSON object instead of an engine literal string, a misspelled `subProperty`, or a wrong-typed value returns `ok:true` yet no-ops or coerces destructively. Pass class names and literal strings, and confirm in the saved `.tres`/`.tscn`, never from `ok` alone. See `../../references/mcp-tools-reference/mcp-tools-reference.md`. |
242
+ | Assuming SetResourceProperty fails silently on inline sub_resources | It does not — inline targets work, and the structural failures (`node not found`, `property is not a resource`, `resource is null`) are explicit errors. What *is* silent on current engines is a bad value shape: a JSON object instead of an engine literal string, a misspelled `subProperty`, or a wrong-typed value returns `ok:true` yet no-ops or coerces destructively. Pass class names and literal strings, and confirm in the saved `.tres`/`.tscn`, never from `ok` alone. See `summer_docs_read` id `reference/mcp-tools-reference`. |
243
243
 
244
244
  ## Collaborative protocol
245
245
 
246
- This skill writes one bible (`.summer/audio-bible.md`), creates a bus layout (`audio/default_bus_layout.tres`), modifies `project.godot`, and may generate audio (metered). Always ask before writing or generating. See `../../references/collaborative-protocol/collaborative-protocol.md`.
246
+ This skill writes one bible (`.summer/audio-bible.md`), creates a bus layout (`audio/default_bus_layout.tres`), modifies `project.godot`, and may generate audio (metered). Always ask before writing or generating. See `summer_docs_read` id `reference/collaborative-protocol`.
247
247
 
248
248
  ## Want a working starter?
249
249
 
@@ -251,10 +251,10 @@ No template — this is a workflow that produces the bible the rest of the proje
251
251
 
252
252
  ## See also
253
253
 
254
- - `../../references/collaborative-protocol/collaborative-protocol.md`
255
- - `../../references/godot-version/godot-version.md` — Summer compatibility and
254
+ - `summer_docs_read` id `reference/collaborative-protocol`
255
+ - `summer_docs_read` id `reference/godot-version` — Summer compatibility and
256
256
  version-sensitive audio API notes
257
- - `../../references/mcp-tools-reference/mcp-tools-reference.md`
257
+ - `summer_docs_read` id `reference/mcp-tools-reference`
258
258
  - `brainstorm-game` — produces the brief that anchors the bible
259
259
  - `art-direction` — the visual counterpart; audio must rhyme with it
260
260
  - `adaptive-music` — implements the dynamic music plan
@@ -1,7 +1,7 @@
1
1
  id: skill/audio-direction
2
2
  kind: skill
3
3
  version: 1.0.7
4
- summary: Define the game's sonic identity — music style, instruments, SFX vocabulary, dynamic music plan — output as an audio bible at .summer/audio-bible.md.
4
+ summary: "Define the game's sound (music style, SFX vocabulary, dynamic music) as .summer/audio-bible.md."
5
5
  use_when:
6
6
  - defining the sonic identity — music style, instruments, SFX vocabulary, dynamic music plan
7
7
  - starting audio work with no audio bible, or soundtrack and SFX requests keep drifting in style