@genex-ai/cli-demo 1.13.1-dev.558 → 1.14.0-dev.560

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@genex-ai/cli-demo",
3
- "version": "1.13.1-dev.558",
3
+ "version": "1.14.0-dev.560",
4
4
  "description": "Set up your project's agent workspace (.claude/.codex/.cursor in the game folder), authorize, create a game project, generate AI assets, and publish (genex CLI).",
5
5
  "type": "module",
6
6
  "bin": {
@@ -9,13 +9,17 @@ Turn a text prompt into a real, game-ready **GLB** and drop it into the project.
9
9
 
10
10
  ## When to use this vs. procedural geometry
11
11
 
12
- - **Use `npx genex model`** for a specific, recognizable object a barrel, a chair, a
13
- sword, a spaceship, an animal. You get a real textured mesh.
14
- - **Use `$genex-threejs-procedural-assets`** when code is the more efficient
15
- engine: structures and buildings, modular kits, and anything placed many
16
- times with variation (editable, seeded, no GLB file). Mixing both in one
17
- scene is the normal way to build a detailed world — generated hero pieces
18
- over procedural dressing.
12
+ - **Use `npx genex model`** for a specific, recognizable object the player will
13
+ look at — a barrel, a chair, a sword, a spaceship, an animal, a named
14
+ building, the thing the request asked for. You get a real textured mesh, and
15
+ this is the default route whenever code would not honestly make the object
16
+ read as itself.
17
+ - **Use `$genex-threejs-procedural-assets`** for what is structural, repeated,
18
+ distant, or parametric — modular kits, fences, walls, paving, terrain,
19
+ anything placed many times with variation (editable, seeded, no GLB file) —
20
+ and for a close-up object only when the code result meets the same bar and
21
+ you have checked it in a capture. Mixing both in one scene is the normal way
22
+ to build a detailed world.
19
23
 
20
24
  **The output is a STATIC, unrigged mesh by default — no skeleton, no animation
21
25
  clips.** A "wolf" or "guard" from this command can be posed and moved as one
@@ -0,0 +1,222 @@
1
+ ---
2
+ name: genex-blender-scene
3
+ description: Compose a level, arena, interior, building or map — a SPACE of rooms, lanes, walls and sites that must relate — in a live Blender with `npx genex blender`, then export one GLB the game walks through. Use when the request is a place to move through (from a description or a floor plan), not a single prop; probe the lane first and build the same space in code if it is off.
4
+ ---
5
+
6
+ # Genex Blender · Scene
7
+
8
+ Build the game's SPACE in a real Blender that answers over HTTP: write a Python
9
+ script, run it, read the numbers, look at the four-view sheet, repeat — then
10
+ export one GLB and load it like any model. The scene persists between steps, so a
11
+ level grows the way a level is actually built: shell, then zones, then dressing.
12
+
13
+ ## When this lane owns the work
14
+
15
+ - A **space**: a level, arena, interior, building, map, dungeon, station — several
16
+ rooms, lanes, walls or sites that must relate to each other, and a player who
17
+ moves through them.
18
+ - A **floor plan or reference** to trace (a sketch, an ASCII plan, a photo of a room).
19
+ - A **blockout**: the playable shape first, dressing later.
20
+
21
+ Not this lane:
22
+
23
+ - One recognisable object (a barrel, a cart, a statue) → `$genex-ai-model`.
24
+ - One parameterized object placed many times with variation, or a stylized shader
25
+ material → `$genex-threejs-procedural-assets`.
26
+ - The player's body, creatures, animation → `$genex-ai-character`,
27
+ `$genex-threejs-creatures`. Terrain from a heightmap → code.
28
+
29
+ Mixing all three in one scene is normal: the Blender level is the architecture, a
30
+ generated GLB is the hero piece, code is the repeated dressing.
31
+
32
+ ## Is the lane on? Probe by doing
33
+
34
+ ```bash
35
+ npx genex blender scene
36
+ ```
37
+
38
+ Read the answer literally — there are three:
39
+
40
+ 1. **A scene JSON prints** → the lane is on. Continue.
41
+ 2. `Warming up a Blender seat…` and then `The Blender seat is still warming up. Run
42
+ the same command again in a minute.` → **not done yet**, even though the command
43
+ exited cleanly. A GPU is booting for you (about 20 s on a warm pod, a few
44
+ minutes on a cold one). Write your first script meanwhile, then run the command
45
+ again. Never read this line as success, and never read it as failure.
46
+ 3. `The Blender lane is off on this stand` or `No Blender seat: fleet_full` → build
47
+ the same space **in code** with `$genex-threejs-procedural-assets`, say so in one
48
+ plain line to the player, and keep going. Do not wait, do not ask.
49
+
50
+ The seat, once granted, is remembered in `.genex/blender-seat.json` — later
51
+ commands are silent about it.
52
+
53
+ ## The loop
54
+
55
+ Scripts are the level's source. Keep them in the project, one per zone:
56
+
57
+ ```
58
+ blender/01-shell.py walls, floor, towers
59
+ blender/02-gatehouse.py
60
+ blender/03-courtyard.py
61
+
62
+ ```
63
+
64
+ Run one:
65
+
66
+ ```bash
67
+ npx genex blender exec --in blender/01-shell.py
68
+ ```
69
+
70
+ Every run prints two things and writes one file:
71
+
72
+ - **The numbers** — `objects N meshes N tris N materials N radius N`. This is
73
+ the gate. Before you run, know what the script should produce (twelve objects,
74
+ about 4k tris, radius ≈ 40); after, compare. A render judge is unreliable for
75
+ pass/fail; the numbers are not.
76
+ - **The sheet** — `assets/blender/contact-sheet.webp`, four fixed views (front,
77
+ side, TOP, hero) from cameras derived from the scene bounds, so two steps compare
78
+ pixel for pixel. **Open it with your file-reading tool after every step.** The
79
+ TOP view is the floor-plan check; the hero view is the mood check. Nothing shows
80
+ it to you unless you look.
81
+ - Script `print()` output comes back as stdout; a raised exception comes back with
82
+ its traceback AND the sheet of the half-built scene, which is usually where the
83
+ bug is visible.
84
+
85
+ The Python namespace **persists between runs** (`bpy`, `bmesh`, `mathutils`,
86
+ `math`, `random` are preloaded): define `mat()` and `box()` helpers once in the
87
+ first script and use them in every later one. If a run says the service restarted
88
+ and the scene was restored from a checkpoint, re-read the numbers — your last step
89
+ may be missing; re-run that one script.
90
+
91
+ Other verbs:
92
+
93
+ ```bash
94
+ npx genex blender snap --mode wireframe # topology; also normals | solid | lit
95
+ npx genex blender scene # the full graph as JSON, when a number surprises you
96
+ npx genex blender reset # empty scene (the namespace resets too)
97
+ ```
98
+
99
+ Keep each step under about 90 seconds of Blender time: a script that loops
100
+ hundreds of boolean cuts is killed at the deadline and the scene comes back from
101
+ the last checkpoint. Split heavy work across scripts. A level is 8–15 steps, not 50.
102
+
103
+ ## Craft rules that decide whether the export works
104
+
105
+ - **Metres.** Floor at `z = 0`, the map's centre at the origin. Blender is Z-up;
106
+ the export converts to Y-up, so the floor is the XZ plane in Three.js and a
107
+ Blender `(x, y, z)` lands at `(x, z, -y)`.
108
+ - **Name everything** `<zone>_<thing>` (`gate_portcullis`, `hall_table_1`). Names
109
+ survive the export and are how the game finds parts.
110
+ - **Materials: few and flat.** Six to eight for a whole level, one per surface
111
+ family (stone, dark stone, wood, roof, iron, glow). Set the Principled BSDF base
112
+ colour **and** `material.diffuse_color` — the sheet's fallback renderer reads the
113
+ second, and a scene that sets only the first exports with correct colours and
114
+ renders entirely grey. No image textures: they do not fit the export ceiling, and
115
+ an asset URL does not export.
116
+ - **Repetition by loop, never by an unapplied modifier.** Crenellations, columns,
117
+ pews: a Python `for`. An Array modifier that is not applied is not in the GLB.
118
+ - **Tri budget.** Keep the whole level under ~150k triangles and use 12–16 segments
119
+ on cylinders — phones load this file too. The export refuses above 6 MB; treat
120
+ that as "no longer a game asset", not as a limit to work around.
121
+ - **Markers.** Empties export as named nodes: `bpy.data.objects.new("spawn", None)`
122
+ placed and linked into the scene collection, likewise `key_1`, `door_crypt`,
123
+ `patrol_1`. The level tells the game where things go; the game reads them with
124
+ `scene.getObjectByName("spawn")`.
125
+ - **Lights stay in the game.** Blender lights do not export usefully; light the
126
+ level in Three.js (a hemisphere + a sun, point lights at torches and hearths).
127
+ - **Collision is the game's.** Static level geometry gets Rapier trimesh colliders
128
+ per mesh — `$genex-threejs-physics-rapier`. If a mesh is too dense to collide
129
+ against, add a simplified `col_<zone>` box in Blender and keep the visual one out
130
+ of physics.
131
+
132
+ A minimal first script, the shape every later one follows:
133
+
134
+ ```python
135
+ import bpy
136
+ bpy.ops.wm.read_factory_settings(use_empty=True)
137
+
138
+ def mat(name, rgb, rough=0.85):
139
+ m = bpy.data.materials.new(name)
140
+ m.use_nodes = True
141
+ b = m.node_tree.nodes["Principled BSDF"]
142
+ b.inputs["Base Color"].default_value = (*rgb, 1.0)
143
+ b.inputs["Roughness"].default_value = rough
144
+ m.diffuse_color = (*rgb, 1.0) # BOTH, or the sheet renders grey
145
+ return m
146
+
147
+ def box(name, loc, half, m):
148
+ bpy.ops.mesh.primitive_cube_add(size=2.0, location=loc)
149
+ o = bpy.context.active_object
150
+ o.name, o.scale = name, half
151
+ o.data.materials.append(m)
152
+ return o
153
+
154
+ STONE = mat("Stone", (0.46, 0.44, 0.41))
155
+ box("yard_floor", (0, 0, -0.25), (35, 35, 0.25), mat("Ground", (0.30, 0.28, 0.24)))
156
+ for sx, sy in ((1, 1), (1, -1), (-1, 1), (-1, -1)):
157
+ bpy.ops.mesh.primitive_cylinder_add(radius=3, depth=14, vertices=16,
158
+ location=(sx * 35, sy * 35, 7))
159
+ t = bpy.context.active_object
160
+ t.name = f"tower_{sx}_{sy}"
161
+ t.data.materials.append(STONE)
162
+ print("shell:", len(bpy.context.scene.objects), "objects")
163
+ ```
164
+
165
+ ## Hero pieces from `genex model`
166
+
167
+ ```bash
168
+ npx genex model "weathered stone knight effigy on a tomb, medieval" # prints a URL
169
+ npx genex blender import https://assets.genex.technology/generations/<id>/model-glb
170
+ ```
171
+
172
+ `import` prints the object names it added and renders a fresh sheet; place and
173
+ scale them in the next `exec` (`bpy.data.objects["…"].location = (…)`). Import
174
+ when the piece must be composed WITH the architecture (a gate in a wall, a statue
175
+ in a niche). When it is dressing, skip the import: drop a marker in Blender and
176
+ load the GLB in Three.js at that marker — it keeps the level file small.
177
+
178
+ ## Export and load
179
+
180
+ ```bash
181
+ npx genex blender export --out public/assets/level.glb
182
+ ```
183
+
184
+ Load it like any GLB. The quality kit's rung ladder applies only to generated
185
+ `/generations/` URLs, so this file loads as-is — the tri and material budgets
186
+ above are what keep it phone-safe.
187
+
188
+ ```ts
189
+ import { createGltfLoader } from "./controllers/quality/gltf-loader.ts";
190
+
191
+ const gltfLoader = createGltfLoader(renderer);
192
+ const level = await gltfLoader.loader.loadAsync("/assets/level.glb");
193
+ level.scene.traverse((o) => {
194
+ if ((o as THREE.Mesh).isMesh) { o.castShadow = true; o.receiveShadow = true; }
195
+ });
196
+ scene.add(level.scene);
197
+ const spawn = level.scene.getObjectByName("spawn");
198
+ ```
199
+
200
+ Then colliders (`$genex-threejs-physics-rapier`), the player
201
+ (`$genex-threejs-character-controller`), lights, and a real screenshot check
202
+ (`$genex-threejs-visual-validation`). Record the level in `DESIGN.md`'s Assets as
203
+ `local Blender build — scripts under blender/`, never a provider generation id.
204
+
205
+ ## Money
206
+
207
+ The seat bills a few credits **per minute while it is held, idle or not**, and it
208
+ ends with the session — there is no close command. So build the level in one
209
+ sitting: shell → zones → hero pieces → export, then move on to the game. Batch
210
+ changes into fewer, larger scripts; every step renders one sheet.
211
+
212
+ ## Troubleshooting
213
+
214
+ - `payload_too_large` on export → fewer cylinder segments, delete faces the player
215
+ never sees, or export two GLBs (`--out public/assets/level-a.glb`).
216
+ - The sheet is grey → `material.diffuse_color` was not set (see above).
217
+ - `refused the seat token (401)` → the seat was closed (the session rested, or the
218
+ pod was replaced); run the same command again — it re-acquires, and a replaced
219
+ pod restores your scene from its checkpoint.
220
+ - `seat_not_ready` → the pod is still booting; run again shortly.
221
+ - The numbers are right but the top view is wrong → coordinates: `y` in Blender is
222
+ depth, and `scale` on a 2-unit cube is the half-size.
@@ -1,14 +1,19 @@
1
1
  ---
2
2
  name: genex-game-director
3
- description: The lightweight Genex request router. Read the latest game, tool, component, or focused-change request; ask only genuinely unresolved build forks; keep DESIGN.md current; and load only the Genex skills that the requested work actually needs. Use first for new work, resumed work, or whenever ownership is unclear.
3
+ description: The Genex request router. Read the latest game, tool, component, or focused-change request; ask only genuinely unresolved build forks; keep DESIGN.md current; and load each owning lane BEFORE the first file of the subsystem it owns — only the lanes the work touches, never the whole pack, and never fewer than the work needs. Use first for new work, resumed work, or whenever ownership is unclear.
4
4
  ---
5
5
 
6
6
  # Genex Game Director
7
7
 
8
8
  The player chooses what to build and in what order. You route that request;
9
- the owning Genex skills control how their lanes run. Load only skills that
10
- change the requested result—never the whole pack by default, and never
11
- commission unrelated work because an old workflow listed it.
9
+ the owning Genex skills control how their lanes run.
10
+
11
+ Routing binds in BOTH directions: load only the lanes the requested work
12
+ touches — never the whole pack by default, and never unrelated work because an
13
+ old workflow listed it — and load a lane BEFORE the first file of the subsystem
14
+ it owns. A matching row in the routing map is not a suggestion: each lane
15
+ exists because writing that subsystem without it ships a known defect.
16
+ Loading one lane never commissions another.
12
17
 
13
18
  **After any context compaction or session resume**, re-read the project's
14
19
  `AGENTS.md`, `DESIGN.md` when present, and the skill for the work you are
@@ -103,40 +108,67 @@ Never invent a provider generation ID for local code. Sections for gameplay,
103
108
  content, UI, world, assets, multiplayer, character/animation, tools, or
104
109
  modules are conditional on the request and existing project.
105
110
 
106
- ## 4. Route to the owning lane
107
-
108
- Use the [routing map](references/routing-map.md) for exact ownership. The main
109
- Genex asset and runtime lanes are:
110
-
111
- - `npx genex model "<prompt>"`—a generated GLB (also `--image` from a
112
- reference picture, `model segment` into named parts, `model rig` +
113
- `model animate` for non-biped bodies) `$genex-ai-model`
114
- - `npx genex texture "<prompt>"`—a generated surface → `$genex-ai-texture`
115
- - sky, horizon, time of day, weather mood—built in code, never generated; no
116
- command and no skill owns it, so pick what this game needs
117
- - `npx genex sfx "<prompt>"` / `music` / `voice`
118
- `$genex-ai-sfx`, `$genex-ai-music`, `$genex-ai-voice`
119
- - `npx genex image "<prompt>"` / `video`—2D and motion art
120
- `$genex-ai-image`, `$genex-ai-video`
121
- - UI, HUD, and menu requests `$genex-threejs-game-ui`,
122
- `$genex-ai-hud`, `$genex-ai-menu`
123
- - `npx genex character`, `creature`, and their motion commands
124
- `$genex-ai-character`, `$genex-threejs-creatures`
125
- - movement and vehicles `$genex-threejs-character-controller`,
126
- `$genex-threejs-vehicle-controllers`
127
- - phone input and phone-survivable rendering
128
- `$genex-threejs-touch-controls`, `$genex-threejs-adaptive-quality`
129
- - structures, buildings, modular kits, repeated or varied environment pieces,
130
- and parameterized objectscode is often the more efficient engine for
131
- these `$genex-threejs-procedural-assets`
111
+ ## 4. Routing map — load the owning lane before the first file
112
+
113
+ For every subsystem the current milestone touches, find its row below, load
114
+ that skill, and write the lane beside the work in `DESIGN.md` — a `Lane` cell
115
+ on the module's row in the Modules table, or a `Lane:` line under `Now:` in
116
+ focused or step-by-step work. `Lane: none <why>` is the only way to write a
117
+ subsystem with no lane. Then write the code. Never reconstruct a lane's API or
118
+ vendored code from memory of another engine.
119
+
120
+ | Work needed | Load |
121
+ | --- | --- |
122
+ | shot composition, chase/side/orbit rigs, camera handoffs, projection ownership, pointer look, mouse-aimed action, mouse-look, the screen-direction contract for hand-rolled steering/pan/look input signs, floating origins | `$genex-threejs-camera-direction` |
123
+ | on-foot player movement: walk/run/jump/crouch, third-person character, slopes, stairs, moving platforms, the player's body loader, directional locomotion, transitions, action motion | `$genex-threejs-character-controller` |
124
+ | **attacking, casting, aiming or reloading WHILE moving** — any action the legs must keep running under; a weapon carry stance over stock locomotion; a wind-up the character holds while walking | `$genex-threejs-character-controller` (`references/animations.md`, upper-body layering) |
125
+ | dash, dodge, roll, blink, backstep, a lunging attack — any burst that moves the character itself | `$genex-threejs-character-controller` (`references/tuning-and-presets.md`, dash recipe) |
126
+ | the game's own generated character—the player's body wherever a human body appears—or Meshy animation coverage beyond the stock pack: reference-informed A-pose concepts, exact action IDs, same-rig adapter | `$genex-ai-character` + `$genex-threejs-character-controller` |
127
+ | a character/enemy needs motion the catalog lacks—a signature move, boss telegraph, death, full 8-way set, or the player's footage; free plan before spend | `$genex-ai-character` motion section + `references/motion-generation.md` |
128
+ | remote player bodies in multiplayer—never hand-built primitives: the game's generated character when it has one, otherwise the player's `p.avatarUrl` VRM | `$genex-threejs-multiplayer` + `$genex-threejs-character-controller` |
129
+ | enemies, NPCs, or creatures: rigged bipeds via `npx genex creature`; non-biped body plans (quadruped, flier, serpent, aquatic, multi-leg) via `npx genex model rig` + `model animate`; static plus procedural motion only for shapes with no body plan; collider, facing, hit reaction, death | `$genex-threejs-creatures` |
130
+ | cars, drones, vehicle physics, gearbox, character↔vehicle enter/exit | `$genex-threejs-vehicle-controllers` |
131
+ | playable on phones: joystick, virtual buttons, drag zones, genre touch recipes, rotate-device overlay | `$genex-threejs-touch-controls` |
132
+ | phone-survivable rendering: device tiers, DPR/shadow/post budgets, runtime governor, generated-asset rungs, Quality picker, dispose-on-swap | `$genex-threejs-adaptive-quality` |
133
+ | anything falls, collides, gets pushed, or needs colliders/events | `$genex-threejs-physics-rapier` |
134
+ | launch/docking timelines, authored transform phases, springs, convergence, deterministic prop/debris motion | `$genex-threejs-procedural-animation` |
135
+ | a level, arena, interior, building or map to walk through — a composed space of rooms, lanes, walls and sites, from a description or a floor plan; a blockout | `$genex-blender-scene` probe the lane first (`npx genex blender scene`); when it is off, the same space is built as code via `$genex-threejs-procedural-assets` |
136
+ | rebuild a reference prop, hard-surface object, modular decoration, or structural environment piece (kits, fences, walls, paving) as editable parameterized Three.js code — held to the asset bar at the end of this section | `$genex-threejs-procedural-assets` |
137
+ | stylized/abstract shader-authored materials, the procedural/PBR material boundary | `$genex-threejs-procedural-assets` |
138
+ | particles, trails, plasma, shockwaves, pooled bursts, and event effects | `$genex-threejs-procedural-vfx` |
139
+ | stable large-world shadows, cascades, clipmaps, cached updates | `$genex-threejs-shadow-systems` |
140
+ | eye adaptation, tone mapping, output color, LUT grading, and proven static grain | `$genex-threejs-exposure-color-grading` |
141
+ | fixed-view screenshots, input direction, facing, temporal and budget evidence | `$genex-threejs-visual-validation` |
142
+ | the default for a concrete object the player looks at up close: a generated GLB for a prop, vehicle, building, or object — from text or a reference image (`--image`); split into named parts (`model segment`); rig + animate any mesh (`model rig` / `model animate`) | `$genex-ai-model` |
143
+ | generated surface or terrain texture with real-world UV scale | `$genex-ai-texture` |
144
+ | sky, skybox, horizon, time of day, weather mood, night or space backdrop | build it in code in the scene—there is no sky command and no owning skill, so pick the technique this game needs |
145
+ | poster, sign, sprite, decal, reference sheet, or other 2D art | `$genex-ai-image` |
146
+ | in-world motion art or another requested video | `$genex-ai-video` |
147
+ | sound effect, one looping music bed, or a short spoken line | `$genex-ai-sfx`, `$genex-ai-music`, or `$genex-ai-voice` |
148
+ | requested UI/HUD/menu/interface work, a visible UI problem, or an interface you decided this game wants built with generated art | `$genex-threejs-game-ui` |
149
+ | selling anything for platform coin: a shop, an item catalog, boosts, cosmetics, "make it earn"; also any request for a loot box, gacha, wager, casino mechanic or donation prompt, which that skill refuses and replaces | `$genex-monetization` |
150
+ | cinematic menu/title/pause/victory/defeat/lobby/credits video treatment | `$genex-ai-menu` |
151
+ | drawn HUD chrome the game's style wants—one element or a matched set of frames, masks, and icons | `$genex-ai-hud` |
152
+ | the game works but feels flat, floaty, or unresponsive: input response, camera, impacts, cooldowns, difficulty, fail/retry | `$genex-threejs-game-feel` |
153
+ | realtime multiplayer: movement sync, shared ball/NPC, host-run scores/enemies, shots/emotes, persistence | `$genex-threejs-multiplayer` |
154
+ | players talking to each other by TEXT — chat, room chat, "let them type to each other" (`room.chat` + `npx genex controller chat`) | `$genex-threejs-multiplayer` |
155
+ | players TALKING — voice chat, mic, "hear each other", proximity/positional voice (`room.voice` + `npx genex controller voice`; party-sized, max 6 per room — say that number out loud before building the feature) | `$genex-threejs-multiplayer` |
156
+ | player identity, sign-in, guests, saves/progress, per-player state, shared persistent world, leaderboards—mandatory for every game | `$genex-threejs-embed-auth` |
157
+ | the player EXPLICITLY asks to make an asset or publish something from their game as an asset for the free library | `$genex-asset-author` (`genex asset new`) — never offer this unprompted; no game duty routes here |
158
+
159
+ Request-shape rules, working modes and the protected-lane handoffs stay in the
160
+ [routing map](references/routing-map.md); read it when the request shape, not
161
+ the subsystem, is what is unclear.
132
162
 
133
163
  For “make this image 3D,” ask **one** route question only when both results
134
164
  honestly fit: a generated GLB built from the picture itself
135
165
  (`npx genex model --image <path>`), or editable parameterized Three.js code.
136
166
  If the request says procedural, parametric, code-built, reusable variations,
137
167
  or names a GLB, start the corresponding route directly. An image alone never
138
- auto-triggers the procedural lane. Player bodies, rigged characters/creatures,
139
- and animation stay with their protected owners.
168
+ auto-triggers the procedural lane. A floor plan, a room photo or a map sketch
169
+ is a SPACE, not an object: it goes to `$genex-blender-scene` with no route
170
+ question. Player bodies, rigged characters/creatures, and animation stay with
171
+ their protected owners.
140
172
 
141
173
  If a procedural request has a private reference, use it locally and do not
142
174
  upload, publish, or commit it without explicit permission. If no reference was
@@ -145,12 +177,23 @@ supplied and creating one is part of the requested work, use the existing
145
177
  Assets row.
146
178
 
147
179
  The request sets the floor for the asset plan, never the ceiling: a world
148
- should feel dressed and alive, so plan the detail its genre implies — and pick
149
- the more efficient engine per object. Paid generation buys hero pieces (the
150
- player's character, key props, music); procedural code is the
151
- unlimited detail engine for structures, buildings, modular kits, and repeated
152
- or varied dressing (`$genex-threejs-procedural-assets` owns that lane) and
153
- for the sky, which is never generated at all. Mixing
180
+ should feel dressed and alive, so plan the detail its genre implies — and
181
+ choose the engine per object, never per category. The bar is the same for both
182
+ engines: whatever the player looks at must read as the thing it is, in this
183
+ game's own style a building as that building, a person as a person, a prop as
184
+ that prop. A coloured box, a capsule or a flat grey block is not a finished
185
+ version of any of them. Generation is the default route to that bar wherever
186
+ code will not honestly reach it: the player's character, anything the request
187
+ names, anything the player walks up to, enters, or interacts with, and the
188
+ music and sound under it. Procedural code (`$genex-threejs-procedural-assets`)
189
+ is a first-class engine for what is structural, repeated, distant, or
190
+ parametric — terrain, sky (never generated), fences, paving, modular kits,
191
+ filler — and for anything else only when the result meets the same bar and you
192
+ have checked it in a capture before its row says `landed`. Write the route on
193
+ each Assets row: the paid flow for generated pieces, the procedural flow with
194
+ its local path for code-built ones — the table is where the per-object decision
195
+ lives, and a table with no generated row records
196
+ `Generation: none — <why code alone reaches the bar here>` beside it. Mixing
154
197
  both in one scene is the normal way to build, never a fallback. In focused
155
198
  work, stay inside the touched scope. Run independent planned generations with
156
199
  `--no-wait`, scaffold while they land, and preserve their IDs, URLs, and
@@ -37,11 +37,15 @@ so it survives a long pause, context compaction, handoff, and remix.
37
37
  status flow `proposed → planned → generating (id) → landed (URL) → wired`.
38
38
  A landed asset is unfinished until wired or visibly cancelled. Preserve
39
39
  generation IDs, permanent URLs, local outputs, and wiring state across
40
- compaction.
40
+ compaction. Every row shows its route: generated rows carry the paid flow;
41
+ code-built rows carry the procedural flow and a local path. A table with no
42
+ generated row at all carries `Generation: none — <why code alone reaches the
43
+ bar here>` beside it (build contract, law 22).
41
44
  - **Code-built procedural assets use their own truthful status flow:**
42
45
  `proposed → planned → building (blockout | detail | material | runtime) →
43
46
  landed (<local TypeScript path>) → wired`. They never invent a provider
44
- generation ID. A generated reference image is a separate normal Assets row.
47
+ generation ID. `landed` on a code-built row means a capture at gameplay
48
+ distance showed it reads as the thing it is. A generated reference image is a separate normal Assets row.
45
49
  - Sections are request-driven. Gameplay, content, UI, assets, world,
46
50
  multiplayer, character/animation, tools, modules, and procedural assets
47
51
  appear only when the request or existing project uses them.
@@ -73,6 +77,7 @@ or explicitly re-scope it.>
73
77
  Working mode: <whole coordinated build | step by step | focused change>
74
78
  Now: ▶ <number/name of the current milestone or focused task>
75
79
  Done when: <one plain, observable condition for the current work>
80
+ Lane: <$genex-… owning the current subsystem | none — why no row matches>
76
81
  1. <milestone> — ✅ → previewed
77
82
  2. <milestone> — ▶ in progress (<main agent | sub-agent>)
78
83
  3. <milestone> — ⏸ paused (<reason>)
@@ -121,7 +126,10 @@ Menu video: <generation id/URL, or the still standing in while it renders>
121
126
  | <asset> | <model/image/texture/…> | planned | — |
122
127
  | <asset> | <kind> | generating (<id>) | — |
123
128
  | <asset> | <kind> | landed → <URL> | yes/no |
129
+ | <asset> | procedural-code | building (blockout) | — |
124
130
  Status flow: proposed → planned → generating (id) → landed (URL) → wired.
131
+ Code-built rows: proposed → planned → building (…) → landed (<local path>) → wired.
132
+ Generation: none — <why code alone reaches the bar in this game> (only when no row is generated)
125
133
 
126
134
  **HUD pipeline state (only while the sprites lane is running) — keep this
127
135
  current; it is how that pipeline survives a context compaction.**
@@ -152,9 +160,9 @@ Play-button rule: nothing connects before the click when a Play screen exists.
152
160
  Verification still open: <two-identity/netcode evidence>
153
161
 
154
162
  ## Modules (whole coordinated mode or another useful split only)
155
- | Module | Owns files | Built by | Done when |
156
- |---|---|---|---|
157
- | <request-derived stream> | <disjoint paths> | <parallel/serial + reason> | <observable result> |
163
+ | Module | Lane | Owns files | Built by | Done when |
164
+ |---|---|---|---|---|
165
+ | <request-derived stream> | <$genex-… or none — why> | <disjoint paths> | <parallel/serial + reason> | <observable result> |
158
166
 
159
167
  ## Verification evidence
160
168
  - <preview URL/date and what it proves>
@@ -34,49 +34,17 @@ copy demo architecture.
34
34
 
35
35
  ## Route by system
36
36
 
37
- | Work needed | Load |
38
- | --- | --- |
39
- | shot composition, chase/side/orbit rigs, camera handoffs, projection ownership, pointer look, mouse-aimed action, mouse-look, the screen-direction contract for hand-rolled steering/pan/look input signs, floating origins | `$genex-threejs-camera-direction` |
40
- | on-foot player movement: walk/run/jump/crouch, third-person character, slopes, stairs, moving platforms, the player's body loader, directional locomotion, transitions, action motion | `$genex-threejs-character-controller` |
41
- | **attacking, casting, aiming or reloading WHILE moving** — any action the legs must keep running under; a weapon carry stance over stock locomotion; a wind-up the character holds while walking | `$genex-threejs-character-controller` (`references/animations.md`, upper-body layering) |
42
- | dash, dodge, roll, blink, backstep, a lunging attack — any burst that moves the character itself | `$genex-threejs-character-controller` (`references/tuning-and-presets.md`, dash recipe) |
43
- | the game's own generated character—the player's body wherever a human body appears—or Meshy animation coverage beyond the stock pack: reference-informed A-pose concepts, exact action IDs, same-rig adapter | `$genex-ai-character` + `$genex-threejs-character-controller` |
44
- | a character/enemy needs motion the catalog lacks—a signature move, boss telegraph, death, full 8-way set, or the player's footage; free plan before spend | `$genex-ai-character` motion section + `references/motion-generation.md` |
45
- | remote player bodies in multiplayer—never hand-built primitives: the game's generated character when it has one, otherwise the player's `p.avatarUrl` VRM | `$genex-threejs-multiplayer` + `$genex-threejs-character-controller` |
46
- | enemies, NPCs, or creatures: rigged bipeds via `npx genex creature`; non-biped body plans (quadruped, flier, serpent, aquatic, multi-leg) via `npx genex model rig` + `model animate`; static plus procedural motion only for shapes with no body plan; collider, facing, hit reaction, death | `$genex-threejs-creatures` |
47
- | cars, drones, vehicle physics, gearbox, character↔vehicle enter/exit | `$genex-threejs-vehicle-controllers` |
48
- | playable on phones: joystick, virtual buttons, drag zones, genre touch recipes, rotate-device overlay | `$genex-threejs-touch-controls` |
49
- | phone-survivable rendering: device tiers, DPR/shadow/post budgets, runtime governor, generated-asset rungs, Quality picker, dispose-on-swap | `$genex-threejs-adaptive-quality` |
50
- | anything falls, collides, gets pushed, or needs colliders/events | `$genex-threejs-physics-rapier` |
51
- | launch/docking timelines, authored transform phases, springs, convergence, deterministic prop/debris motion | `$genex-threejs-procedural-animation` |
52
- | rebuild a reference prop, hard-surface object, modular decoration, or simple environment piece as editable parameterized Three.js code | `$genex-threejs-procedural-assets` |
53
- | stylized/abstract shader-authored materials, the procedural/PBR material boundary | `$genex-threejs-procedural-assets` |
54
- | particles, trails, plasma, shockwaves, pooled bursts, and event effects | `$genex-threejs-procedural-vfx` |
55
- | stable large-world shadows, cascades, clipmaps, cached updates | `$genex-threejs-shadow-systems` |
56
- | eye adaptation, tone mapping, output color, LUT grading, and proven static grain | `$genex-threejs-exposure-color-grading` |
57
- | fixed-view screenshots, input direction, facing, temporal and budget evidence | `$genex-threejs-visual-validation` |
58
- | a generated GLB for a concrete prop, vehicle, building, or object — from text or a reference image (`--image`); split into named parts (`model segment`); rig + animate any mesh (`model rig` / `model animate`) | `$genex-ai-model` |
59
- | generated surface or terrain texture with real-world UV scale | `$genex-ai-texture` |
60
- | sky, skybox, horizon, time of day, weather mood, night or space backdrop | build it in code in the scene—there is no sky command and no owning skill, so pick the technique this game needs |
61
- | poster, sign, sprite, decal, reference sheet, or other 2D art | `$genex-ai-image` |
62
- | in-world motion art or another requested video | `$genex-ai-video` |
63
- | sound effect, one looping music bed, or a short spoken line | `$genex-ai-sfx`, `$genex-ai-music`, or `$genex-ai-voice` |
64
- | requested UI/HUD/menu/interface work, a visible UI problem, or an interface you decided this game wants built with generated art | `$genex-threejs-game-ui` |
65
- | selling anything for platform coin: a shop, an item catalog, boosts, cosmetics, "make it earn"; also any request for a loot box, gacha, wager, casino mechanic or donation prompt, which that skill refuses and replaces | `$genex-monetization` |
66
- | cinematic menu/title/pause/victory/defeat/lobby/credits video treatment | `$genex-ai-menu` |
67
- | drawn HUD chrome the game's style wants—one element or a matched set of frames, masks, and icons | `$genex-ai-hud` |
68
- | the game works but feels flat, floaty, or unresponsive: input response, camera, impacts, cooldowns, difficulty, fail/retry | `$genex-threejs-game-feel` |
69
- | realtime multiplayer: movement sync, shared ball/NPC, host-run scores/enemies, shots/emotes, persistence | `$genex-threejs-multiplayer` |
70
- | players talking to each other by TEXT — chat, room chat, "let them type to each other" (`room.chat` + `npx genex controller chat`) | `$genex-threejs-multiplayer` |
71
- | players TALKING — voice chat, mic, "hear each other", proximity/positional voice (`room.voice` + `npx genex controller voice`; party-sized, max 6 per room — say that number out loud before building the feature) | `$genex-threejs-multiplayer` |
72
- | player identity, sign-in, guests, saves/progress, per-player state, shared persistent world, leaderboards—mandatory for every game | `$genex-threejs-embed-auth` |
73
- | the player EXPLICITLY asks to make an asset or publish something from their game as an asset for the free library | `$genex-asset-author` (`genex asset new`) — never offer this unprompted; no game duty routes here |
37
+ The ownership table lives in **SKILL.md §4** so it is in front of you the
38
+ moment the director loads, rather than behind a link you have to decide to
39
+ open. This file keeps the request-shape and working-mode rules; read it when
40
+ the shape of the request, not the owning subsystem, is what is unclear.
74
41
 
75
42
  ## Request-sized execution
76
43
 
77
44
  ### Focused work
78
45
 
79
- Load only the owning row or rows, preserve the current architecture, implement
46
+ Load the owning row or rows before the first file of each subsystem, and
47
+ none beyond the work — preserve the current architecture, implement
80
48
  the requested result, and run its relevant check. UI work routes directly to
81
49
  UI; movement routes directly to movement; publishing routes directly to the
82
50
  existing publish flow. Do not add a concept, unrelated asset batch, full-game
@@ -132,14 +100,17 @@ flow and state what remains.
132
100
 
133
101
  ## Procedural assets (code-built)
134
102
 
135
- Use `$genex-threejs-procedural-assets` whenever code is the more efficient
136
- engine for an objectstructures, buildings, modular kits, repeated or varied
137
- props, parameterized objects — or when the player asks for procedural,
138
- parametric, or code-built work. It is a first-class lane, not a fallback, and
139
- mixing it with generated GLBs in one scene is the normal way to build a
140
- detailed world. An image alone still doesn't decide the route (ask the one
103
+ Use `$genex-threejs-procedural-assets` whenever code will honestly make the
104
+ object read as the thing it is structural pieces, modular kits, repeated or
105
+ varied props, parameterized objects — or when the player asks for procedural,
106
+ parametric, or code-built work. It is a first-class lane, not a fallback, held
107
+ to the same bar as a generated GLB, and mixing it with generated GLBs in one
108
+ scene is the normal way to build a detailed world. An image alone still doesn't decide the route (ask the one
141
109
  route question when both honestly fit), and never use it for player bodies,
142
- rigged characters/creatures, or animation.
110
+ rigged characters/creatures, or animation. An OBJECT is this lane's unit; a
111
+ SPACE the player moves through — a level, an interior, a whole building — is
112
+ `$genex-blender-scene`'s, which falls back to this lane when the Blender lane
113
+ is off on the stand.
143
114
 
144
115
  - Prefer a supplied reference. A private attachment stays local unless the
145
116
  player explicitly permits upload, publication, or commit.
@@ -1,30 +1,34 @@
1
1
  ---
2
2
  name: genex-threejs-procedural-assets
3
- description: Build editable, parameterized Three.js objects in code — structures, buildings, modular kits, repeated or varied props whenever code is the more efficient engine for them, or the user asks for procedural/parametric work. A first-class lane alongside generated GLBs; mix both freely.
3
+ description: Build editable, parameterized Three.js objects in code — modular kits, structural pieces, repeated or varied props, and any object code will honestly make read as the thing it is or whenever the user asks for procedural/parametric work. A first-class lane alongside generated GLBs, held to the same bar; mix both freely.
4
4
  ---
5
5
 
6
6
  # Genex Three.js Procedural Assets
7
7
 
8
8
  Build a recognizable asset as local, editable Three.js code. This lane is a
9
- first-class engine, not a fallback: for structures, buildings, modular kits,
10
- and anything placed many times with variation, code is often more efficient
11
- than a generated GLB and mixing procedural pieces with generated hero
12
- pieces in the same scene is the normal way to build a detailed, lively world.
9
+ first-class engine, not a fallback and it is held to the same bar as a
10
+ generated GLB: the result must read as the thing it is when the player looks at
11
+ it, in the game's own style. A coloured box or a flat grey block is a blockout,
12
+ never a landed asset. Mixing procedural pieces with generated pieces in the
13
+ same scene is the normal way to build a detailed, lively world.
13
14
 
14
15
  ## Choose the route
15
16
 
16
17
  - Start directly when the user says procedural, parametric, code-built,
17
18
  customizable, seeded, or asks for controlled variations.
18
- - Also start directly when code is plainly the efficient route: buildings and
19
- structures, modular environment kits, fences, pipes, rails, and anything
20
- placed many times with variation.
19
+ - Also start directly for what is structural, repeated, distant, or
20
+ parametric: terrain, modular environment kits, fences, pipes, rails, walls,
21
+ paving, and anything placed many times with variation.
22
+ - For anything the player looks at up close, walks into, or interacts with — a
23
+ named building, a signature prop, a vehicle — code is a choice, not a
24
+ default: take it only when you will honestly reach the bar above, and confirm
25
+ it in a capture at gameplay distance before the row reads `landed`. Otherwise
26
+ `$genex-ai-model` owns it.
21
27
  - An attached or available image does not activate this skill by itself.
22
28
  - If “make this image 3D” could honestly mean either route, ask exactly one
23
29
  question: **“Do you want a generated textured GLB, or editable procedural
24
30
  Three.js code?”**
25
31
  - Use `$genex-ai-model` when the user chooses a generated textured GLB.
26
- - Use this skill for props, hard-surface objects, modular decorations, and
27
- simple structures or environment pieces.
28
32
  - Do not use it for characters, creatures, rigging, skeletal animation, or
29
33
  character likeness. Keep those in their existing specialist lanes.
30
34
 
@@ -60,6 +64,9 @@ proposed → planned → building (blockout | detail | material | runtime)
60
64
  → landed (<local TypeScript path>) → wired
61
65
  ```
62
66
 
67
+ `landed` means a capture at gameplay distance showed it reads as the thing it
68
+ is — not that the file exists.
69
+
63
70
  A Genex-generated reference keeps its separate image row and normal paid
64
71
  generation status. Note that the procedural-code row is derived from that
65
72
  image. A private user reference is not a paid generation row.