Holodeck
Holodeck is a large library of game-ready 3D assets (low-poly Synty-style prefabs, models, materials, textures and animations), plus the Playground: a live 3D editor where you say what you want — “build me a forest with a cabin and a campfire, at night” — and an AI agent builds it from the library while you watch. Think Star Trek holodeck meets the Unity editor.
Ways in
| You want to… | Use |
|---|---|
| Build scenes by talking or typing, in the browser | Playground at https://arx.dev/playground |
| The same, inside the Unity editor with your real prefabs | Unity client |
| Let Claude, Cursor or another AI tool build scenes | MCP server at https://arx.dev/mcp |
| Script scenes, or run your own agent loop | Playground API + tool reference |
| Search and download assets from code | Asset library API |
| Run your own asset library and plug it in | Host your own asset library |
Every one of these drives the same scenes and the same tools. Build a forest from Claude over MCP and it appears live in the browser editor and in Unity at the same moment; nudge a tree in Unity and the browser sees it move.
How it fits together
browser editor ─┐ ┌─ Playground::Tools ── SceneOps ── scene (Postgres)
Unity editor ───┼── REST /api/v1 ───────┤ ▲ │
scripts ────────┤ │ │ same 14 tools ▼
Claude / MCP ───┴── POST /mcp ──────────┘ server agent (Grok) live ops on ActionCable
(/cable, PlaygroundChannel)
asset library: this server's own, or any self-hosted library speaking the same API
- Scenes are JSON: objects (library assets, primitives, lights, cameras), an environment (sky, ground, fog), a material library and settings (vendor lock).
- Ops are the only way a scene changes —
add,update,remove,env,material, … — whether they come from you, the agent or another client. - Tools are the agent’s verbs (
search_assets,scatter_assets,place_asset,create_material,add_camera, …). They turn intent into ops.
Get an API key
Sign in, open Account → API keys (https://arx.dev/account?tab=api_keys),
create a key and copy it (it’s shown once). Send it as Authorization: Bearer <key>
to the API and MCP, or as ?token=<key> on the WebSocket.