← ClaudeAtlas

otto-design-3dlisted

Use when creating or editing a 3D SCENE for an Otto Product story from an agent session — the Design tab's `scene3d` format (a `scene.json` file the arena's three.js viewport renders and the inspector round-trips) — or when asked for a game-level blockout, a product shot, a kiosk/booth/room layout, a 3D concept for a story. Covers the exact `otto-scene3d` v1 schema with a full example, blockout conventions (metres, y-up, floor at y=0), lighting recipes, naming/grouping rules, the validation limits, how GLB models are referenced (attachment_id, never a URL), and when to prefer the Blender MCP tools / the server-side Blender render+script export instead of editing the file.
itzikiusa/otto_os · ★ 0 · API & Backend · score 67
Install: claude install-skill itzikiusa/otto_os
# Otto Design — 3D scenes (`scene3d`) — in-place agent Otto's **Product → Design** tab has a game-studio side: a three.js **viewport** (orbit, grid, gizmo), a **Hierarchy** and an **Inspector**. Its document format is **`scene3d`** — a small, declarative JSON file you can write by hand. You are the agent that creates/refines it **in place**: the assist prompt names the file (**`scene.json`**), includes its current contents, and you edit it. On every save Otto validates the file, re-renders the viewport live and broadcasts `mockup_updated`; when the turn ends it commits the file as a `kind:"design"` attachment (`format:"scene3d"`, mime `application/vnd.otto.scene3d+json`). Reply with ONE short sentence describing what you changed — the file is the artifact. Keep the file **always valid JSON** and always a **complete document** (rewrite the whole file, never a fragment), so every intermediate save renders. ## The schema — `otto-scene3d` version 1 ```jsonc { "type": "otto-scene3d", "version": 1, // both REQUIRED, exactly these values "background": "#0f172a", // "#rrggbb"; optional (default dark slate) "grid": true, // editor grid; hidden in Play; optional (default true) "camera": { "position": [6, 5, 8], "target": [0, 1, 0], "fov": 50 }, // fov in degrees; near/far optional "lights": [ { "id": "sun", "name": "Sun", "type": "directional", "position": [5, 10, 5], "target": [0, 0, 0], "inten