summer-engine 4.0.0 → 4.2.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 (199) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/.claude-plugin/plugin.json +3 -2
  3. package/.codex-plugin/plugin.json +15 -11
  4. package/.cursor-plugin/plugin.json +5 -3
  5. package/.factory-plugin/plugin.json +3 -2
  6. package/AGENTS.md +1 -1
  7. package/CHANGELOG.md +37 -0
  8. package/README.md +20 -9
  9. package/dist/cli/commands/config.js +3 -2
  10. package/dist/cli/commands/create.js +12 -3
  11. package/dist/cli/commands/list.d.ts +5 -0
  12. package/dist/cli/commands/list.js +30 -13
  13. package/dist/cli/commands/memory.js +6 -2
  14. package/dist/cli/commands/ops.d.ts +20 -3
  15. package/dist/cli/commands/ops.js +55 -27
  16. package/dist/cli/commands/setup.d.ts +2 -0
  17. package/dist/cli/commands/setup.js +219 -16
  18. package/dist/cli/commands/skills.js +20 -7
  19. package/dist/cli/commands/status.d.ts +26 -0
  20. package/dist/cli/commands/status.js +36 -21
  21. package/dist/core/capabilities/apps.d.ts +10 -10
  22. package/dist/core/capabilities/audit/args.d.ts +6 -6
  23. package/dist/core/capabilities/fabricate-mesh.d.ts +2 -2
  24. package/dist/core/capabilities/game-task-plan.d.ts +2 -2
  25. package/dist/core/capabilities/hdri-import.d.ts +2 -2
  26. package/dist/core/capabilities/motion-generation.d.ts +2 -2
  27. package/dist/core/capabilities/placement.d.ts +23 -23
  28. package/dist/core/capabilities/runtime-control.d.ts +38 -38
  29. package/dist/core/capabilities/seeing/args.d.ts +16 -16
  30. package/dist/core/capabilities/ui-control.d.ts +2 -2
  31. package/dist/core/capabilities/world-snapshot.d.ts +4 -4
  32. package/dist/core/library-search.d.ts +2 -2
  33. package/dist/core/ops/areas.d.ts +11 -0
  34. package/dist/core/ops/areas.js +24 -0
  35. package/dist/core/ops/catalog.d.ts +4 -0
  36. package/dist/core/ops/catalog.js +13 -1
  37. package/dist/core/ops/cloud.d.ts +10 -2
  38. package/dist/core/ops/cloud.js +51 -28
  39. package/dist/core/ops/contract.d.ts +2 -1
  40. package/dist/core/ops/contract.js +2 -10
  41. package/dist/core/ops/public-catalog.d.ts +48 -0
  42. package/dist/core/ops/public-catalog.js +56 -0
  43. package/dist/core/ops/search.d.ts +0 -1
  44. package/dist/core/ops/search.js +169 -37
  45. package/dist/installer/agent-config.js +5 -0
  46. package/dist/installer/agent-table.d.ts +9 -0
  47. package/dist/installer/agent-table.js +23 -2
  48. package/dist/installer/cli-permissions.d.ts +65 -0
  49. package/dist/installer/cli-permissions.js +182 -0
  50. package/dist/installer/setup.d.ts +2 -0
  51. package/dist/installer/setup.js +3 -0
  52. package/dist/installer/skills-refresh.d.ts +29 -0
  53. package/dist/installer/skills-refresh.js +261 -0
  54. package/dist/installer/version-check.d.ts +22 -2
  55. package/dist/installer/version-check.js +66 -9
  56. package/dist/mcp/ops-surface.js +16 -6
  57. package/dist/mcp/server.d.ts +10 -0
  58. package/dist/mcp/server.js +32 -3
  59. package/dist/project-memory/agent-instructions.d.ts +47 -0
  60. package/dist/project-memory/agent-instructions.js +226 -0
  61. package/gemini-extension.json +3 -2
  62. package/integrations/README.md +1 -1
  63. package/integrations/claude/README.md +6 -0
  64. package/integrations/claude/manifest-target.json +4 -0
  65. package/integrations/gemini/README.md +11 -0
  66. package/integrations/windsurf/README.md +1 -1
  67. package/library/skills/3d-lighting/SKILL.md +16 -0
  68. package/library/skills/README.md +5 -4
  69. package/library/skills/adaptive-music/SKILL.md +21 -0
  70. package/library/skills/agent-playtesting/SKILL.md +22 -0
  71. package/library/skills/ai-characters-in-games/SKILL.md +15 -0
  72. package/library/skills/ambient-bed/SKILL.md +16 -0
  73. package/library/skills/animated-loop/SKILL.md +19 -0
  74. package/library/skills/animation-tree/SKILL.md +26 -0
  75. package/library/skills/art-direction/SKILL.md +14 -0
  76. package/library/skills/asset-strategy/SKILL.md +30 -0
  77. package/library/skills/audio-direction/SKILL.md +16 -0
  78. package/library/skills/auto-fire-targeting/SKILL.md +14 -0
  79. package/library/skills/brainstorm-game/SKILL.md +13 -0
  80. package/library/skills/browse-templates/SKILL.md +10 -0
  81. package/library/skills/camera-rigs/SKILL.md +20 -0
  82. package/library/skills/character-animation-wiring/SKILL.md +24 -0
  83. package/library/skills/character-model/SKILL.md +28 -0
  84. package/library/skills/character-movement/SKILL.md +24 -0
  85. package/library/skills/character-portrait/SKILL.md +15 -0
  86. package/library/skills/cinematic-cutscene/SKILL.md +21 -0
  87. package/library/skills/combat-basics/SKILL.md +19 -0
  88. package/library/skills/compatibility-renderer-traps/SKILL.md +11 -0
  89. package/library/skills/concept-art/SKILL.md +13 -0
  90. package/library/skills/concept-to-level/SKILL.md +20 -1
  91. package/library/skills/concept-to-level/resource.yaml +2 -2
  92. package/library/skills/create-asset-sheet/SKILL.md +18 -0
  93. package/library/skills/debug/SKILL.md +32 -0
  94. package/library/skills/debugging-game-feel/SKILL.md +12 -0
  95. package/library/skills/design-level/SKILL.md +17 -0
  96. package/library/skills/design-mechanic/SKILL.md +17 -0
  97. package/library/skills/design-npc/SKILL.md +21 -0
  98. package/library/skills/diagnosing-perf-regressions/SKILL.md +12 -0
  99. package/library/skills/driving-the-editor-ui/SKILL.md +23 -0
  100. package/library/skills/environment-kit/SKILL.md +23 -0
  101. package/library/skills/export-and-ship/SKILL.md +23 -0
  102. package/library/skills/fabricating-assets/SKILL.md +23 -0
  103. package/library/skills/facial-and-lipsync/SKILL.md +22 -0
  104. package/library/skills/fps-controller/SKILL.md +17 -0
  105. package/library/skills/game-feel/SKILL.md +26 -0
  106. package/library/skills/gameskill/SKILL.md +11 -0
  107. package/library/skills/gdscript-patterns/SKILL.md +15 -0
  108. package/library/skills/generate-motion/SKILL.md +21 -0
  109. package/library/skills/godogen-visual-proof-game-generation/SKILL.md +17 -0
  110. package/library/skills/grow-analytics/SKILL.md +10 -0
  111. package/library/skills/headless-scripting/SKILL.md +13 -0
  112. package/library/skills/in-game-purchases/SKILL.md +11 -0
  113. package/library/skills/instantiate-asset-pack/SKILL.md +17 -0
  114. package/library/skills/make-game/SKILL.md +29 -0
  115. package/library/skills/multiplayer/SKILL.md +12 -0
  116. package/library/skills/multiplayer-movement/SKILL.md +18 -0
  117. package/library/skills/multiplayer-project/SKILL.md +17 -0
  118. package/library/skills/multiplayer-publish/SKILL.md +17 -0
  119. package/library/skills/multiplayer-state/SKILL.md +16 -0
  120. package/library/skills/multiplayer-testing/SKILL.md +15 -0
  121. package/library/skills/music-track/SKILL.md +16 -0
  122. package/library/skills/navigate-summer/SKILL.md +15 -0
  123. package/library/skills/new-project/SKILL.md +11 -0
  124. package/library/skills/organic-model/SKILL.md +24 -0
  125. package/library/skills/pixel-art/SKILL.md +15 -0
  126. package/library/skills/play/SKILL.md +18 -0
  127. package/library/skills/playtesting-a-feature/SKILL.md +23 -0
  128. package/library/skills/procedural-animation/SKILL.md +18 -0
  129. package/library/skills/prop-model/SKILL.md +23 -0
  130. package/library/skills/publish-your-game/SKILL.md +27 -0
  131. package/library/skills/release-readiness/SKILL.md +12 -0
  132. package/library/skills/remote-deploy/SKILL.md +14 -0
  133. package/library/skills/retarget/SKILL.md +20 -0
  134. package/library/skills/running-in-the-cloud/SKILL.md +10 -0
  135. package/library/skills/save-load/SKILL.md +15 -0
  136. package/library/skills/scene-composition/SKILL.md +17 -0
  137. package/library/skills/scene-hierarchy-design/SKILL.md +24 -0
  138. package/library/skills/scene-scripting/SKILL.md +30 -0
  139. package/library/skills/scene-to-level/SKILL.md +22 -0
  140. package/library/skills/skill-test/SKILL.md +10 -0
  141. package/library/skills/skybox-panorama/SKILL.md +20 -0
  142. package/library/skills/sound-effect/SKILL.md +23 -0
  143. package/library/skills/spatial-placement/SKILL.md +30 -0
  144. package/library/skills/sprite-sheet/SKILL.md +23 -0
  145. package/library/skills/store-art/SKILL.md +11 -0
  146. package/library/skills/store-listing/SKILL.md +10 -0
  147. package/library/skills/summer-analytics/SKILL.md +15 -0
  148. package/library/skills/summer-apps/SKILL.md +29 -0
  149. package/library/skills/summer-assets/SKILL.md +31 -1
  150. package/library/skills/summer-assets/resource.yaml +2 -2
  151. package/library/skills/summer-cli/SKILL.md +133 -0
  152. package/library/skills/summer-cli/resource.yaml +31 -0
  153. package/library/skills/summer-friends/SKILL.md +14 -0
  154. package/library/skills/summer-leaderboards/SKILL.md +16 -0
  155. package/library/skills/summer-match-results/SKILL.md +17 -0
  156. package/library/skills/summer-matchmaking/SKILL.md +17 -0
  157. package/library/skills/summer-parties/SKILL.md +14 -0
  158. package/library/skills/summer-player-data/SKILL.md +14 -0
  159. package/library/skills/summer-store/SKILL.md +15 -0
  160. package/library/skills/summer-world-chat/SKILL.md +14 -0
  161. package/library/skills/summer-world-saves/SKILL.md +14 -0
  162. package/library/skills/text-to-motion/SKILL.md +15 -0
  163. package/library/skills/tileable-texture/SKILL.md +18 -0
  164. package/library/skills/trailer-shot/SKILL.md +18 -0
  165. package/library/skills/tune-performance/SKILL.md +26 -0
  166. package/library/skills/ui-basics/SKILL.md +14 -0
  167. package/library/skills/ui-graphics/SKILL.md +17 -0
  168. package/library/skills/use-widget-asset/SKILL.md +14 -0
  169. package/library/skills/using-summer/SKILL.md +26 -0
  170. package/library/skills/using-summer/resource.yaml +2 -1
  171. package/library/skills/vehicle-model/SKILL.md +27 -0
  172. package/library/skills/verifying-scenes/SKILL.md +29 -0
  173. package/library/skills/vfx-dissolve/SKILL.md +19 -0
  174. package/library/skills/vfx-fire/SKILL.md +26 -0
  175. package/library/skills/vfx-hit-spark/SKILL.md +23 -0
  176. package/library/skills/vfx-lightning/SKILL.md +23 -0
  177. package/library/skills/vfx-magic-glow/SKILL.md +23 -0
  178. package/library/skills/vfx-muzzle-flash/SKILL.md +23 -0
  179. package/library/skills/vfx-smoke/SKILL.md +26 -0
  180. package/library/skills/vfx-water-ripple/SKILL.md +23 -0
  181. package/library/skills/voice-line/SKILL.md +16 -0
  182. package/library/skills/web-and-touch-input/SKILL.md +19 -0
  183. package/library/skills/web-compatibility-look/SKILL.md +20 -0
  184. package/library/skills/world-building-3d/SKILL.md +28 -0
  185. package/package.json +3 -2
  186. package/registry/generated/counts.json +2 -2
  187. package/registry/generated/gemini-extension.json +3 -2
  188. package/registry/generated/index.json +157 -118
  189. package/registry/generated/marketplace.claude.json +2 -2
  190. package/registry/generated/plugin.claude-directory.json +168 -0
  191. package/registry/generated/plugin.claude.json +3 -2
  192. package/registry/generated/plugin.codex.json +15 -11
  193. package/registry/generated/plugin.cursor.json +5 -3
  194. package/registry/generated/plugin.factory.json +3 -2
  195. package/registry/generated/server.json +11 -2
  196. package/registry/generated/skills-index.md +5 -4
  197. package/registry/generated/skills-registry.json +16 -2
  198. package/registry/operations/legacy-names.json +35 -0
  199. package/registry/operations/public-catalog.json +33160 -0
@@ -0,0 +1,226 @@
1
+ import { existsSync, lstatSync, readFileSync, readlinkSync, realpathSync, writeFileSync } from "fs";
2
+ import { homedir } from "os";
3
+ import { basename, dirname, join, parse, relative, resolve, isAbsolute } from "path";
4
+ import { PACKAGE_ROOT } from "../core/package-root.js";
5
+ /**
6
+ * AGENTS.md and CLAUDE.md in a Summer project. AGENTS.md is the one file
7
+ * Codex, Cursor, Copilot, Amp and other agents read in every session;
8
+ * Claude Code reads CLAUDE.md, which here only imports AGENTS.md.
9
+ * `summer create` writes both; `summer setup --yes` inside a project adds
10
+ * them when missing.
11
+ *
12
+ * An existing file is never overwritten: Summer adds one marked block once,
13
+ * and later runs replace only that block. A link is followed only to a file
14
+ * inside the project, and a CLAUDE.md that is the same file as AGENTS.md
15
+ * gets the AGENTS.md block only. The five commands are the list in the
16
+ * summer-cli skill (between its project-commands markers), so the two
17
+ * cannot drift; the skill's test runs every command both of them teach.
18
+ */
19
+ export const SUMMER_BLOCK_START = "<!-- summer-engine:start. summer setup updates only this block; write your own notes outside it. -->";
20
+ export const SUMMER_BLOCK_END = "<!-- summer-engine:end -->";
21
+ const CLAUDE_IMPORTS = new Set(["@AGENTS.md", "@./AGENTS.md"]);
22
+ const SKILL_PATH = ["library", "skills", "summer-cli", "SKILL.md"];
23
+ const COMMANDS = /<!-- project-commands[^>]*-->\n([\s\S]*?)\n<!-- \/project-commands -->/;
24
+ /** The numbered command list from the summer-cli skill. */
25
+ export function projectCommands(skill = readFileSync(join(PACKAGE_ROOT, ...SKILL_PATH), "utf-8")) {
26
+ const match = COMMANDS.exec(skill);
27
+ if (!match)
28
+ throw new Error("The summer-cli skill has no project-commands list.");
29
+ return match[1].trim();
30
+ }
31
+ /** The Summer block of AGENTS.md, markers included. */
32
+ export function renderAgentsBlock(commands = projectCommands()) {
33
+ return [
34
+ SUMMER_BLOCK_START,
35
+ "# Summer Engine game",
36
+ "",
37
+ "This is a game made with Summer Engine, the game engine built for AI. Game code is GDScript (`.gd`), scenes are `.tscn`, resources are `.tres`, and `project.godot` is the project file.",
38
+ "",
39
+ "## How to work on it",
40
+ "",
41
+ "- Change scenes through Summer while Summer Engine has the project open. The editor rewrites `.tscn` files when it saves, so hand edits get lost.",
42
+ "- With Summer's MCP server, call the `summer_*` tools and start with `summer_get_project_context`. Without it, run the same operations as `summer` commands in the shell (the `summer-cli` skill). If `summer` is missing or older than 4.0, use `npx -y summer-engine@latest` in its place.",
43
+ "- Summer's skills teach each part of a game. `npx -y summer-engine@latest setup <agent> --yes` installs them for your agent (add `--cli` for no MCP server). Start with `using-summer`, and find the right one with `summer docs search --query \"<the task>\"`.",
44
+ "- `.summer/` is the project's memory: `GameSoul.md` says what the game is, `memory/` holds the decisions to keep. Read them before you change the game's look, sound or story.",
45
+ "- Check your own work: script errors, a screenshot, a play run. Ask the person to play only for feel and fun.",
46
+ "",
47
+ "## The five commands",
48
+ "",
49
+ commands,
50
+ "",
51
+ "## Publishing",
52
+ "",
53
+ "The `publish-your-game` skill has the steps; `summer ops search \"publish my game\"` finds each operation. `summer store publish` sends the game to Summer's store review, and the game's owner approves it: give them the link it prints. Nothing goes live until they approve.",
54
+ SUMMER_BLOCK_END,
55
+ ].join("\n");
56
+ }
57
+ /** The text with `block` as its Summer block: replaced where it is, else appended. Keeps the file's line endings. */
58
+ function withBlock(text, block) {
59
+ const eol = text.includes("\r\n") ? "\r\n" : "\n";
60
+ const ours = block.replace(/\r?\n/g, eol);
61
+ const start = text.indexOf(SUMMER_BLOCK_START);
62
+ if (start === -1) {
63
+ // Only trailing line breaks change outside the block; an empty file is the block alone.
64
+ return { text: text.trim() ? `${text.replace(/(\r?\n)*$/, eol)}${eol}${ours}${eol}` : `${ours}${eol}`, action: "added" };
65
+ }
66
+ const end = text.indexOf(SUMMER_BLOCK_END, start);
67
+ if (end === -1)
68
+ return { text, action: "skipped", reason: "its Summer block has no end marker" };
69
+ // Two blocks (a merge, or the markers quoted in the person's text): which
70
+ // one is Summer's is not knowable, so the person picks; nothing is deleted.
71
+ if (text.indexOf(SUMMER_BLOCK_START, end) !== -1)
72
+ return { text, action: "skipped", reason: "it has two Summer blocks; delete one and run setup again" };
73
+ const next = `${text.slice(0, start)}${ours}${text.slice(end + SUMMER_BLOCK_END.length)}`;
74
+ return { text: next, action: next === text ? "unchanged" : "updated" };
75
+ }
76
+ /** Does the text import AGENTS.md on a line of its own, outside code fences? */
77
+ function importsAgents(text) {
78
+ let fence = false;
79
+ for (const line of text.split(/\r?\n/)) {
80
+ const trimmed = line.trim();
81
+ if (/^(```|~~~)/.test(trimmed))
82
+ fence = !fence;
83
+ else if (!fence && CLAUDE_IMPORTS.has(trimmed))
84
+ return true;
85
+ }
86
+ return false;
87
+ }
88
+ function inside(root, path) {
89
+ const rel = relative(root, path);
90
+ return rel === "" || (!rel.startsWith("..") && !isAbsolute(rel));
91
+ }
92
+ /**
93
+ * Where a file may be written, and `real`, the file a write lands in:
94
+ * "missing" (create it: here, or the missing target of a link inside the
95
+ * project), "file" (a file, or a link to one inside the project), or a
96
+ * reason to leave it alone (a link that points nowhere or out of the
97
+ * project). `real` is known before anything is written, so a link from one
98
+ * name to the other counts as one file even when its target is missing.
99
+ */
100
+ function locate(path, realRoot) {
101
+ let isLink = false;
102
+ try {
103
+ isLink = lstatSync(path).isSymbolicLink();
104
+ }
105
+ catch {
106
+ return { kind: "missing", real: join(realRoot, basename(path)) };
107
+ }
108
+ let real;
109
+ try {
110
+ real = realpathSync(path);
111
+ }
112
+ catch {
113
+ const target = resolve(realRoot, readlinkSync(path));
114
+ return inside(realRoot, target) ? { kind: "missing", real: target } : { kind: "skip", reason: "it is a link to a file that does not exist" };
115
+ }
116
+ if (isLink && !inside(realRoot, real))
117
+ return { kind: "skip", reason: "it is a link to a file outside the project" };
118
+ return { kind: "file", real };
119
+ }
120
+ /**
121
+ * Write or update AGENTS.md and CLAUDE.md in the project root. A new
122
+ * AGENTS.md is the Summer block; a new CLAUDE.md is `@AGENTS.md` only. An
123
+ * existing CLAUDE.md that already imports AGENTS.md is left as it is. Each
124
+ * file is its own step: a file that cannot be read or written is skipped
125
+ * with the reason, and the other is still done.
126
+ */
127
+ export function writeAgentInstructions(projectDir, options = {}) {
128
+ const agents = join(projectDir, "AGENTS.md");
129
+ const claude = join(projectDir, "CLAUDE.md");
130
+ let block;
131
+ let realRoot;
132
+ try {
133
+ block = options.block ?? renderAgentsBlock();
134
+ realRoot = realpathSync(projectDir);
135
+ }
136
+ catch (error) {
137
+ const reason = messageOf(error);
138
+ return [
139
+ { file: "AGENTS.md", path: agents, action: "skipped", reason },
140
+ { file: "CLAUDE.md", path: claude, action: "skipped", reason },
141
+ ];
142
+ }
143
+ const write = (path, text) => {
144
+ if (!options.dryRun)
145
+ writeFileSync(path, text, "utf-8");
146
+ };
147
+ const step = (file, path, run) => {
148
+ try {
149
+ return { file, path, ...run() };
150
+ }
151
+ catch (error) {
152
+ return { file, path, action: "skipped", reason: messageOf(error) };
153
+ }
154
+ };
155
+ const agentsAt = locate(agents, realRoot);
156
+ const agentsResult = step("AGENTS.md", agents, () => {
157
+ if (agentsAt.kind === "skip")
158
+ return { action: "skipped", reason: agentsAt.reason };
159
+ if (agentsAt.kind === "missing") {
160
+ write(agents, `${block}\n`);
161
+ return { action: "created" };
162
+ }
163
+ const next = withBlock(readFileSync(agents, "utf-8"), block);
164
+ if (next.action === "added" || next.action === "updated")
165
+ write(agents, next.text);
166
+ return { action: next.action, ...(next.reason ? { reason: next.reason } : {}) };
167
+ });
168
+ const claudeAt = locate(claude, realRoot);
169
+ const claudeResult = step("CLAUDE.md", claude, () => {
170
+ if (claudeAt.kind === "skip")
171
+ return { action: "skipped", reason: claudeAt.reason };
172
+ // CLAUDE.md -> AGENTS.md (or the reverse): one file, which already has the AGENTS.md block.
173
+ if (agentsAt.kind !== "skip" && claudeAt.real === agentsAt.real) {
174
+ return { action: "unchanged", reason: "it is the same file as AGENTS.md" };
175
+ }
176
+ if (claudeAt.kind === "missing") {
177
+ write(claude, "@AGENTS.md\n");
178
+ return { action: "created" };
179
+ }
180
+ const text = readFileSync(claude, "utf-8");
181
+ if (importsAgents(text) && !text.includes(SUMMER_BLOCK_START))
182
+ return { action: "unchanged" };
183
+ const next = withBlock(text, `${SUMMER_BLOCK_START}\n@AGENTS.md\n${SUMMER_BLOCK_END}`);
184
+ if (next.action === "added" || next.action === "updated")
185
+ write(claude, next.text);
186
+ return { action: next.action, ...(next.reason ? { reason: next.reason } : {}) };
187
+ });
188
+ return [agentsResult, claudeResult];
189
+ }
190
+ /**
191
+ * The Summer project the working directory is in, for `summer setup`: the
192
+ * nearest folder with project.godot, looking up no further than the git
193
+ * top level, and never the home folder or the filesystem root (a stray
194
+ * project.godot there must not put an AGENTS.md or CLAUDE.md in every
195
+ * session). Null when there is none.
196
+ */
197
+ export function findSetupProjectRoot(cwd = process.cwd()) {
198
+ let current;
199
+ try {
200
+ current = realpathSync(resolve(cwd));
201
+ }
202
+ catch {
203
+ return null;
204
+ }
205
+ let home;
206
+ try {
207
+ home = realpathSync(homedir());
208
+ }
209
+ catch {
210
+ home = homedir();
211
+ }
212
+ while (current !== home && current !== parse(current).root) {
213
+ if (existsSync(join(current, "project.godot")))
214
+ return current;
215
+ if (existsSync(join(current, ".git")))
216
+ return null;
217
+ const parent = dirname(current);
218
+ if (parent === current)
219
+ return null;
220
+ current = parent;
221
+ }
222
+ return null;
223
+ }
224
+ function messageOf(error) {
225
+ return error instanceof Error ? error.message : String(error);
226
+ }
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "_generated": "GENERATED from integrations/gemini — do not edit; npm run generate:registry",
3
3
  "name": "summer",
4
- "version": "4.0.0",
5
- "description": "Agent tooling for Summer Engine: MCP bridge, context primer, and game-dev skills. Use with the npm CLI for skill files on disk.",
4
+ "version": "4.2.0",
5
+ "description": "The game engine built for AI. Any agent makes a multiplayer game and publishes it. The Summer Engine MCP server, context primer and game-dev skills.",
6
6
  "contextFileName": "GEMINI.md",
7
7
  "mcpServers": {
8
8
  "summer-engine": {
@@ -108,6 +108,7 @@
108
108
  "./library/skills/summer-apps/",
109
109
  "./library/skills/summer-apps-design/",
110
110
  "./library/skills/summer-assets/",
111
+ "./library/skills/summer-cli/",
111
112
  "./library/skills/summer-friends/",
112
113
  "./library/skills/summer-leaderboards/",
113
114
  "./library/skills/summer-match-results/",
@@ -58,7 +58,7 @@ are listed where they differ.
58
58
  | claude-desktop | — | MCP: `~/Library/Application Support/Claude/claude_desktop_config.json`; Linux `~/.config/Claude/claude_desktop_config.json`; Windows `%APPDATA%/Claude/claude_desktop_config.json`; no skills folder (MCP only) |
59
59
  | codex | `.codex-plugin/plugin.json` | MCP: `~/.codex/config.toml`; project `.codex/config.toml`; skills: `~/.agents/skills`; project `.agents/skills` (`<skill>/SKILL.md`) |
60
60
  | cursor | `.cursor-plugin/plugin.json` | MCP: `~/.cursor/mcp.json`; project `.cursor/mcp.json`; skills: `~/.agents/skills`; project `.agents/skills` (`<skill>/SKILL.md`) |
61
- | windsurf | — | MCP: `~/.codeium/windsurf/mcp_config.json`; skills: `~/.agents/skills`; project `.agents/skills` (`<skill>/SKILL.md`) |
61
+ | windsurf | — | MCP: `~/.config/devin/mcp_config.json`; Windows `%APPDATA%/devin/mcp_config.json`; skills: `~/.agents/skills`; project `.agents/skills` (`<skill>/SKILL.md`) |
62
62
  | antigravity | — | MCP: `~/.gemini/config/mcp_config.json`; project `.agents/mcp_config.json`; skills: `~/.gemini/config/skills`; project `.agents/skills` (`<skill>/SKILL.md`) |
63
63
  | gemini (legacy) | `gemini-extension.json` | MCP: `~/.gemini/extensions/summer-engine/gemini-extension.json`; skills: `~/.gemini/extensions/summer-engine/skills` (`<skill>/SKILL.md`) |
64
64
  | cline | — | MCP: `~/Library/Application Support/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json`; Linux `~/.config/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json`; Windows `%APPDATA%/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json`; skills: `~/.cline/skills`; project `.cline/skills` (`<skill>/SKILL.md`) |
@@ -8,6 +8,12 @@ Generated by `scripts/generate-registry` from `library/**/resource.yaml`:
8
8
  - `registry/generated/marketplace.claude.json` -> `.claude-plugin/marketplace.json`
9
9
  (marketplace listing wrapper).
10
10
 
11
+ - `registry/generated/plugin.claude-directory.json` -> `plugins/claude/.claude-plugin/plugin.json`,
12
+ plus the rest of `plugins/claude/` (`scripts/generate-registry/mirrors.ts`): the same
13
+ plugin for Anthropic's plugin directory, from a folder of its own (under 512 files,
14
+ no symlinks), with the server and every `summer-engine@latest` pinned to this
15
+ version. Submit `plugins/claude` as the plugin path.
16
+
11
17
  The MCP pointer `./.mcp.json` these manifests reference is generated as
12
18
  well (`registry/generated/mcp.json -> .mcp.json`, owned by the claude target).
13
19
 
@@ -11,6 +11,10 @@
11
11
  {
12
12
  "generated": "mcp.json",
13
13
  "destination": ".mcp.json"
14
+ },
15
+ {
16
+ "generated": "plugin.claude-directory.json",
17
+ "destination": "plugins/claude/.claude-plugin/plugin.json"
14
18
  }
15
19
  ]
16
20
  }
@@ -21,6 +21,17 @@ Generated by `scripts/generate-registry` from `library/**/resource.yaml`:
21
21
  `skills install --all --agent gemini`); Gemini extensions are user-scoped, so
22
22
  `--scope project` falls back to user with a warning.
23
23
 
24
+ `gemini extensions install https://github.com/SummerEngine/summer` (and the
25
+ Gemini CLI gallery) installs a GitHub Release's only asset when it has one.
26
+ `.github/workflows/gemini-extension.yml` attaches `summer-gemini-extension.tar.gz`
27
+ to every release (`scripts/build-gemini-extension.ts`): the manifest without `settings` (no hooks ship) and without
28
+ `skills`, `GEMINI.md`, `AGENTS.md` and `skills/<slug>/` for every bundled skill.
29
+ Keep it the release's only asset, or Gemini falls back to the source tarball,
30
+ which has no `skills/` folder: the workflow leaves a release that already has it
31
+ alone and stops with an error on one that has other assets. Every packaged file
32
+ comes from the tag itself (only the script comes from the workflow's commit), so
33
+ dispatching it for an older tag packages that release as it was.
34
+
24
35
  Never edit the destination file by hand — edit `library/` resources or
25
36
  `scripts/generate-registry/manifests.ts`, then run
26
37
  `npm run generate:registry`. CI `--check` fails on any drift.
@@ -4,7 +4,7 @@ No manifest file is generated in this repo for Devin Desktop — `manifest-targe
4
4
  is intentionally empty. Support is delivered at install time by
5
5
  `summer setup windsurf` (aliases: `devin`, `devin-desktop`, `devindesktop`), which writes:
6
6
 
7
- - MCP config: `~/.codeium/windsurf/mcp_config.json`; Windows `%USERPROFILE%/.codeium/windsurf/mcp_config.json` (user); user scope only (project requests fall back with a warning).
7
+ - MCP config: `~/.config/devin/mcp_config.json` (`$XDG_CONFIG_HOME/devin` when set); Windows `%APPDATA%\devin\mcp_config.json` (user); user scope only (project requests fall back with a warning). Summer 4.1.0 and earlier wrote `~/.codeium/windsurf/mcp_config.json`; setup says when an entry is still there.
8
8
  Shape: `mcpServers.summer-engine = { command, args }`.
9
9
  - Skills: `~/.agents/skills` (user) or `.agents/skills` (project) as `<skill>/SKILL.md`.
10
10
  - After: Restart Devin Desktop and refresh MCP servers from the agent settings. Devin's docs say mcp_config.json configures the Cascade agent; for the Devin agent add the server in the app's MCP settings with the same command.
@@ -180,3 +180,19 @@ Then create `Environment` and `Sky` resources via the inspector or load from `.t
180
180
  ## Collaborative protocol
181
181
 
182
182
  This skill mutates the scene (adds lights + WorldEnvironment + tunes Environment sub-properties). Always ask before applying: "May I add a DirectionalLight3D Sun with shadows + a WorldEnvironment with a procedural sky?".
183
+
184
+ <!-- shell-commands: generated from the operation catalog by npm run generate:registry; do not edit by hand -->
185
+ ## From a shell
186
+
187
+ No Summer MCP tools in this session? Run each one as a command; when `summer --version` is missing or below 4.0, use `npx -y summer-engine@latest` in place of `summer`. Fields are flags in kebab-case (`--scene-path res://main.tscn`) or one `--input '<json>'`, and `summer ops describe <op>` prints the exact input. The `summer-cli` skill has the rest.
188
+
189
+ | In this skill | Command |
190
+ |---|---|
191
+ | `summer_add_node` | `summer engine add-node` |
192
+ | `summer_get_project_context` | `summer engine get-project-context` |
193
+ | `summer_run_script` | `summer engine run-script` |
194
+ | `summer_save_scene` | `summer engine save-scene` |
195
+ | `summer_screenshot` | `summer engine screenshot` |
196
+ | `summer_set_prop` | `summer engine set-prop` |
197
+ | `summer_set_resource_property` | `summer engine set-resource-property` |
198
+ <!-- /shell-commands -->
@@ -1,6 +1,6 @@
1
1
  # Summer skills
2
2
 
3
- > 127 skills, grouped by their primary domain. **Generated** by `npm run generate:registry` from each skill's `resource.yaml`; `--check` fails when this file and the library disagree. Do not edit by hand.
3
+ > 128 skills, grouped by their primary domain. **Generated** by `npm run generate:registry` from each skill's `resource.yaml`; `--check` fails when this file and the library disagree. Do not edit by hand.
4
4
 
5
5
  The folder is flat on purpose (`docs/design/DECISIONS.md`, D3): a skill usually belongs to several domains, so categories live in each skill's `facets.domains` and this index is rendered from them. The first domain listed is the primary one. `summer skills list --by-domain` prints the same grouping; `summer skills info <slug>` shows one skill.
6
6
 
@@ -10,7 +10,7 @@ Status: **stable** unless marked; *preview* = not yet exercised in-engine by the
10
10
 
11
11
  - [2d](#2d) (10)
12
12
  - [3d](#3d) (6)
13
- - [agent-workflow](#agent-workflow) (18)
13
+ - [agent-workflow](#agent-workflow) (19)
14
14
  - [ai](#ai) (2)
15
15
  - [animation](#animation) (7)
16
16
  - [assets](#assets) (4)
@@ -78,6 +78,7 @@ Status: **stable** unless marked; *preview* = not yet exercised in-engine by the
78
78
  | [skill-create](./skill-create/SKILL.md) (library only) | Bootstrap a new Summer library skill (library/skills/<slug>/ with resource.yaml and SKILL.md), frontmatter, and stub sections. | meta |
79
79
  | [skill-improve](./skill-improve/SKILL.md) (library only) | Upgrade an underperforming Summer skill — run it against a behavioral spec with and without changes via a parallel-eval harness; ship the winner. | meta |
80
80
  | [skill-test](./skill-test/SKILL.md) (library only) | Lint a Summer skill before commit, audit the whole library, or check a behavioral spec assertion — static structural rules plus behavioral specs. | meta |
81
+ | [*summer-cli*](./summer-cli/SKILL.md) ★ (preview) | Summer as shell commands, no MCP: sign in, find and run operations, follow jobs, save files, drive the engine. | assets, tools |
81
82
  | [using-summer](./using-summer/SKILL.md) | Session bootstrap: how to find and use Summer skills and the summer-engine MCP before any response. | meta |
82
83
  | [verification-before-completion](./verification-before-completion/SKILL.md) ★ | Run verification and read its output before claiming work done, fixed or passing: evidence first. | verification |
83
84
  | [writing-plans](./writing-plans/SKILL.md) | Turn a spec or requirements for a multi-step task into a written implementation plan before touching code. | meta |
@@ -109,7 +110,7 @@ Status: **stable** unless marked; *preview* = not yet exercised in-engine by the
109
110
  | [asset-strategy](./asset-strategy/SKILL.md) ★ | Route any 'I need a [thing]' asset request to the right skill: 2D, 3D, audio, video, VFX or animation. | pipeline |
110
111
  | [*lumera-single-image-scene-reconstruction*](./lumera-single-image-scene-reconstruction/SKILL.md) (preview) (library only) | Lumera-style single image to editable 3D scene — VLM-parsed object boxes and parametric lights, per-object meshes, HDR probe, .tscn assembly, refinement loop. | pipeline, 3d, scenes |
111
112
  | [*skintokens-auto-rigging*](./skintokens-auto-rigging/SKILL.md) (preview) (library only) | Offline auto-rigging with skin-tokens.cpp (GGML SkinTokens/TokenRig port) — skeleton and skin weights from a static GLB mesh on CPU/Vulkan, into Summer Engine. | pipeline, 3d, animation |
112
- | [summer-assets](./summer-assets/SKILL.md) | Make game assets with Summer without Summer Engine: find, generate and download 3D models, images, audio and video for any engine or web app. | agent-workflow |
113
+ | [summer-assets](./summer-assets/SKILL.md) | Make game assets with Summer, no Summer Engine: find, generate and download 3D models, images, audio and video for any engine or app. | agent-workflow |
113
114
 
114
115
  ## audio
115
116
 
@@ -173,7 +174,7 @@ Status: **stable** unless marked; *preview* = not yet exercised in-engine by the
173
174
 
174
175
  | skill | when to use | also |
175
176
  |---|---|---|
176
- | [*concept-to-level*](./concept-to-level/SKILL.md) (preview) | Take a 3D map from concept art to a polished, shippable level, with the questions to ask the user, owned lanes, render checks and collision kept in step. | 3d, world-building, agent-workflow |
177
+ | [*concept-to-level*](./concept-to-level/SKILL.md) (preview) | Take a 3D map from concept art to a shippable level: questions for the user, owned lanes, render checks, collision kept in step. | 3d, world-building, agent-workflow |
177
178
  | [design-level](./design-level/SKILL.md) ★ | Design one level (layout, pacing, encounters, secrets) as a design doc plus a node-tree skeleton. | game-design |
178
179
  | [scene-to-level](./scene-to-level/SKILL.md) | Turn a reference image or concept art into a playable scene: concept, asset pack, terrain, assembly. | game-design |
179
180
 
@@ -324,3 +324,24 @@ in Summer Engine.
324
324
  - `voice-line` — the voice bus that triggers ducking
325
325
  - `summer_docs_read` id `reference/godot-version` — Summer compatibility for AudioServer
326
326
  and Tween APIs
327
+
328
+ <!-- shell-commands: generated from the operation catalog by npm run generate:registry; do not edit by hand -->
329
+ ## From a shell
330
+
331
+ No Summer MCP tools in this session? Run each one as a command; when `summer --version` is missing or below 4.0, use `npx -y summer-engine@latest` in place of `summer`. Fields are flags in kebab-case (`--scene-path res://main.tscn`) or one `--input '<json>'`, and `summer ops describe <op>` prints the exact input. The `summer-cli` skill has the rest.
332
+
333
+ | In this skill | Command |
334
+ |---|---|
335
+ | `summer_assets_generate_audio` | `summer assets generate-audio` |
336
+ | `summer_assets_search` | `summer assets search` |
337
+ | `summer_docs_read` | `summer docs read` |
338
+ | `summer_add_node` | `summer engine add-node` |
339
+ | `summer_connect_signal` | `summer engine connect-signal` |
340
+ | `summer_get_scene_tree` | `summer engine get-scene-tree` |
341
+ | `summer_import_from_url` | `summer engine import-from-url` |
342
+ | `summer_inspect_node` | `summer engine inspect-node` |
343
+ | `summer_play` | `summer engine play` |
344
+ | `summer_project_setting` | `summer engine project-setting` |
345
+ | `summer_run_script` | `summer engine run-script` |
346
+ | `summer_set_prop` | `summer engine set-prop` |
347
+ <!-- /shell-commands -->
@@ -146,3 +146,25 @@ Read `determinism.seed_scope` on the play result and believe it. Pinned: the glo
146
146
  - `verification-before-completion` — the code layer that must be green before any of this.
147
147
  - `debugging-game-feel` — when the feature works but feels wrong.
148
148
  - `investigating-bugs` — root-causing a reproducible bug once a recording reproduces it.
149
+
150
+ <!-- shell-commands: generated from the operation catalog by npm run generate:registry; do not edit by hand -->
151
+ ## From a shell
152
+
153
+ No Summer MCP tools in this session? Run each one as a command; when `summer --version` is missing or below 4.0, use `npx -y summer-engine@latest` in place of `summer`. Fields are flags in kebab-case (`--scene-path res://main.tscn`) or one `--input '<json>'`, and `summer ops describe <op>` prints the exact input. The `summer-cli` skill has the rest.
154
+
155
+ | In this skill | Command |
156
+ |---|---|
157
+ | `summer_game_control` | `summer engine game-control` |
158
+ | `summer_game_input` | `summer engine game-input` |
159
+ | `summer_game_probe` | `summer engine game-probe` |
160
+ | `summer_get_console` | `summer engine get-console` |
161
+ | `summer_get_debugger_errors` | `summer engine get-debugger-errors` |
162
+ | `summer_input_map_bind` | `summer engine input-map-bind` |
163
+ | `summer_is_running` | `summer engine is-running` |
164
+ | `summer_play` | `summer engine play` |
165
+ | `summer_runtime_animate` | `summer engine runtime-animate` |
166
+ | `summer_runtime_call` | `summer engine runtime-call` |
167
+ | `summer_runtime_set` | `summer engine runtime-set` |
168
+ | `summer_runtime_spawn` | `summer engine runtime-spawn` |
169
+ | `summer_stop` | `summer engine stop` |
170
+ <!-- /shell-commands -->
@@ -218,3 +218,18 @@ func _gateway() -> Object:
218
218
  - Retrying on `limit_exceeded` or `credits_exhausted`. The limit is the product working.
219
219
  - Putting a provider key in the project "until Summer is live". There is no bring-your-own-key path; keys in builds leak.
220
220
  - Letting the model decide rewards because "it only suggests". It will be talked into suggesting everything.
221
+
222
+ <!-- shell-commands: generated from the operation catalog by npm run generate:registry; do not edit by hand -->
223
+ ## From a shell
224
+
225
+ No Summer MCP tools in this session? Run each one as a command; when `summer --version` is missing or below 4.0, use `npx -y summer-engine@latest` in place of `summer`. Fields are flags in kebab-case (`--scene-path res://main.tscn`) or one `--input '<json>'`, and `summer ops describe <op>` prints the exact input. The `summer-cli` skill has the rest.
226
+
227
+ | In this skill | Command |
228
+ |---|---|
229
+ | `summer_add_node` | `summer engine add-node` |
230
+ | `summer_connect_signal` | `summer engine connect-signal` |
231
+ | `summer_get_scene_tree` | `summer engine get-scene-tree` |
232
+ | `summer_get_script_errors` | `summer engine get-script-errors` |
233
+ | `summer_save_scene` | `summer engine save-scene` |
234
+ | `summer_set_prop` | `summer engine set-prop` |
235
+ <!-- /shell-commands -->
@@ -291,3 +291,19 @@ Print the SFX prompt and the import dock settings. User runs via the Summer dash
291
291
  - `sound-effect` — short event SFX layered over the bed
292
292
  - `music-track` — melodic music layered over the bed
293
293
  - `adaptive-music` — state-driven crossfades use the same pattern
294
+
295
+ <!-- shell-commands: generated from the operation catalog by npm run generate:registry; do not edit by hand -->
296
+ ## From a shell
297
+
298
+ No Summer MCP tools in this session? Run each one as a command; when `summer --version` is missing or below 4.0, use `npx -y summer-engine@latest` in place of `summer`. Fields are flags in kebab-case (`--scene-path res://main.tscn`) or one `--input '<json>'`, and `summer ops describe <op>` prints the exact input. The `summer-cli` skill has the rest.
299
+
300
+ | In this skill | Command |
301
+ |---|---|
302
+ | `assets.generate_audio`, `summer_assets_generate_audio` | `summer assets generate-audio` |
303
+ | `summer_assets_search` | `summer assets search` |
304
+ | `summer_add_node` | `summer engine add-node` |
305
+ | `summer_import_from_url` | `summer engine import-from-url` |
306
+ | `summer_inspect_node` | `summer engine inspect-node` |
307
+ | `summer_run_script` | `summer engine run-script` |
308
+ | `summer_set_prop` | `summer engine set-prop` |
309
+ <!-- /shell-commands -->
@@ -231,3 +231,22 @@ Once the loop is wired:
231
231
  - `ui-graphics` — logo, menu buttons, HUD that sits over the loop.
232
232
  - `concept-art` — produce the reference still that anchors the loop.
233
233
  - `summer_docs_read` id `reference/mcp-tools-reference` — how to call `assets.generate_video`; `summer_search` returns its exact input.
234
+
235
+ <!-- shell-commands: generated from the operation catalog by npm run generate:registry; do not edit by hand -->
236
+ ## From a shell
237
+
238
+ No Summer MCP tools in this session? Run each one as a command; when `summer --version` is missing or below 4.0, use `npx -y summer-engine@latest` in place of `summer`. Fields are flags in kebab-case (`--scene-path res://main.tscn`) or one `--input '<json>'`, and `summer ops describe <op>` prints the exact input. The `summer-cli` skill has the rest.
239
+
240
+ | In this skill | Command |
241
+ |---|---|
242
+ | `summer_assets_generate_image` | `summer assets generate-image` |
243
+ | `assets.generate_video`, `summer_assets_generate_video` | `summer assets generate-video` |
244
+ | `summer_assets_search` | `summer assets search` |
245
+ | `summer_docs_read` | `summer docs read` |
246
+ | `summer_add_node` | `summer engine add-node` |
247
+ | `summer_import_from_url` | `summer engine import-from-url` |
248
+ | `summer_run_script` | `summer engine run-script` |
249
+ | `summer_set_prop` | `summer engine set-prop` |
250
+ | `jobs.wait`, `summer_jobs_wait` | `summer jobs wait` |
251
+ | `summer_search` | `summer ops search "<what you want>"` |
252
+ <!-- /shell-commands -->
@@ -299,3 +299,29 @@ the same `.tres`; it is slower but discoverable.
299
299
  - `character-animation-wiring` — the end-to-end rigged-GLB path: inspect real clip/bone names, `ctx.anim_state_machine`, method tracks, root motion, playtest verification.
300
300
  - `generate-motion` — produce the clips this tree references.
301
301
  - `retarget` — share one tree across many characters.
302
+
303
+ <!-- shell-commands: generated from the operation catalog by npm run generate:registry; do not edit by hand -->
304
+ ## From a shell
305
+
306
+ No Summer MCP tools in this session? Run each one as a command; when `summer --version` is missing or below 4.0, use `npx -y summer-engine@latest` in place of `summer`. Fields are flags in kebab-case (`--scene-path res://main.tscn`) or one `--input '<json>'`, and `summer ops describe <op>` prints the exact input. The `summer-cli` skill has the rest.
307
+
308
+ | In this skill | Command |
309
+ |---|---|
310
+ | `summer_add_node` | `summer engine add-node` |
311
+ | `summer_connect_signal` | `summer engine connect-signal` |
312
+ | `summer_get_diagnostics` | `summer engine get-diagnostics` |
313
+ | `summer_get_project_context` | `summer engine get-project-context` |
314
+ | `summer_get_scene_tree` | `summer engine get-scene-tree` |
315
+ | `summer_get_script_errors` | `summer engine get-script-errors` |
316
+ | `summer_inspect_node` | `summer engine inspect-node` |
317
+ | `summer_inspect_resource` | `summer engine inspect-resource` |
318
+ | `summer_instantiate_scene` | `summer engine instantiate-scene` |
319
+ | `summer_play` | `summer engine play` |
320
+ | `summer_remove_node` | `summer engine remove-node` |
321
+ | `summer_replace_node` | `summer engine replace-node` |
322
+ | `summer_run_script` | `summer engine run-script` |
323
+ | `summer_save_scene` | `summer engine save-scene` |
324
+ | `summer_set_prop` | `summer engine set-prop` |
325
+ | `summer_set_resource_property` | `summer engine set-resource-property` |
326
+ | `summer_stop` | `summer engine stop` |
327
+ <!-- /shell-commands -->
@@ -277,3 +277,17 @@ No template — this is a workflow that produces the bible the rest of the proje
277
277
  - `brainstorm-game` — produces the brief that anchors the bible
278
278
  - `audio-direction` — the sonic counterpart
279
279
  - `3d-lighting` — implements the lighting plan and the environment's glow, tonemap and SSAO settings
280
+
281
+ <!-- shell-commands: generated from the operation catalog by npm run generate:registry; do not edit by hand -->
282
+ ## From a shell
283
+
284
+ No Summer MCP tools in this session? Run each one as a command; when `summer --version` is missing or below 4.0, use `npx -y summer-engine@latest` in place of `summer`. Fields are flags in kebab-case (`--scene-path res://main.tscn`) or one `--input '<json>'`, and `summer ops describe <op>` prints the exact input. The `summer-cli` skill has the rest.
285
+
286
+ | In this skill | Command |
287
+ |---|---|
288
+ | `assets.generate_image` | `summer assets generate-image` |
289
+ | `summer_get_project_context` | `summer engine get-project-context` |
290
+ | `summer_inspect_node` | `summer engine inspect-node` |
291
+ | `summer_project_setting` | `summer engine project-setting` |
292
+ | `summer_set_prop` | `summer engine set-prop` |
293
+ <!-- /shell-commands -->
@@ -150,3 +150,33 @@ In a session without Summer Engine tools (the assets profile; the `summer-assets
150
150
  ## Fallback (no MCP)
151
151
 
152
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).
153
+
154
+ <!-- shell-commands: generated from the operation catalog by npm run generate:registry; do not edit by hand -->
155
+ ## From a shell
156
+
157
+ No Summer MCP tools in this session? Run each one as a command; when `summer --version` is missing or below 4.0, use `npx -y summer-engine@latest` in place of `summer`. Fields are flags in kebab-case (`--scene-path res://main.tscn`) or one `--input '<json>'`, and `summer ops describe <op>` prints the exact input. The `summer-cli` skill has the rest.
158
+
159
+ | In this skill | Command |
160
+ |---|---|
161
+ | `assets.choices` | `summer assets choices` |
162
+ | `assets.delete` | `summer assets delete` |
163
+ | `assets.generate_3d` | `summer assets generate-3d` |
164
+ | `assets.generate_audio` | `summer assets generate-audio` |
165
+ | `assets.generate_image` | `summer assets generate-image` |
166
+ | `assets.generate_motion` | `summer assets generate-motion` |
167
+ | `assets.generate_sfx_choices` | `summer assets generate-sfx-choices` |
168
+ | `assets.generate_video` | `summer assets generate-video` |
169
+ | `assets.get`, `summer_assets_get` | `summer assets get` |
170
+ | `assets.remove_background` | `summer assets remove-background` |
171
+ | `assets.search`, `summer_assets_search` | `summer assets search` |
172
+ | `assets.slice_sheet` | `summer assets slice-sheet` |
173
+ | `assets.update` | `summer assets update` |
174
+ | `assets.upload_begin` | `summer assets upload-begin` |
175
+ | `assets.upload_complete` | `summer assets upload-complete` |
176
+ | `summer_import_asset_by_id` | `summer engine import-asset-by-id` |
177
+ | `summer_import_from_url` | `summer engine import-from-url` |
178
+ | `jobs.wait` | `summer jobs wait` |
179
+ | `makers.npc_voice` | `summer makers npc-voice` |
180
+ | `makers.trailer_forge` | `summer makers trailer-forge` |
181
+ | `summer_search` | `summer ops search "<what you want>"` |
182
+ <!-- /shell-commands -->
@@ -259,3 +259,19 @@ No template — this is a workflow that produces the bible the rest of the proje
259
259
  - `art-direction` — the visual counterpart; audio must rhyme with it
260
260
  - `adaptive-music` — implements the dynamic music plan
261
261
  - `sound-effect`, `music-track`, `ambient-bed`, `voice-line` — generate the audio the bible describes
262
+
263
+ <!-- shell-commands: generated from the operation catalog by npm run generate:registry; do not edit by hand -->
264
+ ## From a shell
265
+
266
+ No Summer MCP tools in this session? Run each one as a command; when `summer --version` is missing or below 4.0, use `npx -y summer-engine@latest` in place of `summer`. Fields are flags in kebab-case (`--scene-path res://main.tscn`) or one `--input '<json>'`, and `summer ops describe <op>` prints the exact input. The `summer-cli` skill has the rest.
267
+
268
+ | In this skill | Command |
269
+ |---|---|
270
+ | `summer_assets_generate_audio` | `summer assets generate-audio` |
271
+ | `summer_docs_read` | `summer docs read` |
272
+ | `summer_add_node` | `summer engine add-node` |
273
+ | `summer_get_project_context` | `summer engine get-project-context` |
274
+ | `summer_get_scene_tree` | `summer engine get-scene-tree` |
275
+ | `summer_inspect_node` | `summer engine inspect-node` |
276
+ | `summer_project_setting` | `summer engine project-setting` |
277
+ <!-- /shell-commands -->
@@ -194,3 +194,17 @@ Do **not** reach for `SimulateInput` here. It is only reachable from the
194
194
  in-editor chat bridge; an MCP or CLI caller gets
195
195
  `{ok: false, failure_reason: "unsupported_transport"}` back. Drive input from
196
196
  inside the probe with `press()` / `key()` instead.
197
+
198
+ <!-- shell-commands: generated from the operation catalog by npm run generate:registry; do not edit by hand -->
199
+ ## From a shell
200
+
201
+ No Summer MCP tools in this session? Run each one as a command; when `summer --version` is missing or below 4.0, use `npx -y summer-engine@latest` in place of `summer`. Fields are flags in kebab-case (`--scene-path res://main.tscn`) or one `--input '<json>'`, and `summer ops describe <op>` prints the exact input. The `summer-cli` skill has the rest.
202
+
203
+ | In this skill | Command |
204
+ |---|---|
205
+ | `summer_batch` | `summer engine batch` |
206
+ | `summer_game_probe` | `summer engine game-probe` |
207
+ | `summer_get_diagnostics` | `summer engine get-diagnostics` |
208
+ | `summer_inspect_node` | `summer engine inspect-node` |
209
+ | `summer_inspect_runtime_node` | `summer engine inspect-runtime-node` |
210
+ <!-- /shell-commands -->
@@ -206,3 +206,16 @@ No template — this is a workflow that produces the brief that drives template
206
206
  - `art-direction` — turn the one-phrase look into a full bible
207
207
  - `audio-direction` — sonic identity
208
208
  - `make-game` — scaffold the project once the brief is locked
209
+
210
+ <!-- shell-commands: generated from the operation catalog by npm run generate:registry; do not edit by hand -->
211
+ ## From a shell
212
+
213
+ No Summer MCP tools in this session? Run each one as a command; when `summer --version` is missing or below 4.0, use `npx -y summer-engine@latest` in place of `summer`. Fields are flags in kebab-case (`--scene-path res://main.tscn`) or one `--input '<json>'`, and `summer ops describe <op>` prints the exact input. The `summer-cli` skill has the rest.
214
+
215
+ | In this skill | Command |
216
+ |---|---|
217
+ | `summer_get_project_context` | `summer engine get-project-context` |
218
+ | `summer_get_scene_tree` | `summer engine get-scene-tree` |
219
+ | `summer_read_file` | `summer engine read-file` |
220
+ | `summer_write_file` | `summer engine write-file` |
221
+ <!-- /shell-commands -->