arena-composer¶
A visual editor, headless renderer and MCP server for authoring IsaacLab-Arena YAML environment specs.¶
Warning
Under heavy development. Expect the commands, the visual editor and the MCP tools to change between releases, and things to break.
Tip
To start developing with IsaacLab-Arena quickly, we recommend making your project from the
artefacts-arena-template. One
source setup.sh installs Arena, Isaac Lab and arena-composer, and the project comes with the MCP
server and skills wired into Claude Code, VS Code and Cursor, specs to start from, and
Experiments that evaluate a policy on them.
Contents¶
- Highlights
- Commands
- How it works
- Compared with Arena's Agentic Environment Generation
- Install
- Developing
- License
Highlights¶
- Kit-less scene renderer. Arena's solved layouts, drawn live and headless without Isaac Sim; no GPU required.
- CAD-style visual editor for humans. Drag assets in, set the relations between them, and watch Arena's solver place them.
- MCP tools for agents. Search assets, edit the spec, and check the solved layout by its numbers or in pictures.
Commands¶
arena-view <spec>.yamlopens the visual editor, a window with the layout Arena solves for the spec in 3D, beside a form that edits the spec.arena-mcpis an MCP server whose tools search assets, add and remove objects, and describe and render the solved layout.arena-render <spec>.yaml...draws the solved layout headless, a PNG per--view:default(perspective), or orthographictop,frontandside. It needs no display, and a machine with no GPU draws through Mesa's lavapipe.arena-resolve-layout <spec>.yamlprints the solved layout as JSON or text.arena-composer new environments/tasks/<name>.yamlstarts a spec: a task, and the scene it includes, holding a pick-and-place that validates, solves and builds.
A project that registers its own assets or kinds names the modules that do it with
--import MODULE, or in ARENA_COMPOSER_IMPORTS, separated by :.
How it works¶
The YAML is the source of truth: the visual editor, your agent's MCP tools and your text editor all change the same files, and the view follows whichever one did. Edits from the editor and the tools are checked before they are written, Arena's own solver places the objects, and a lightweight Rust renderer draws them, so Isaac Sim never loads.
The guide goes further: how it works, the visual editor and working with an agent.
Compared with Arena's Agentic Environment Generation¶
Arena's Agentic Environment Generation (experimental) works on the same specs, and a spec it generates opens here like any other.
| Agentic Environment Generation | arena-composer | |
|---|---|---|
| Starts from | a natural-language prompt | a spec you already have |
| 3D view | a sim preview in Isaac Sim: builds the environment and records a zero-action rollout | a lightweight Rust renderer, live as the spec changes, and headless PNG renders; no physics |
| Spatial graph | objects as nodes with their pictures, relations as edges | |
| Placement | Arena's relation solver | |
| Assets | Arena's registry, plus NVIDIA's SimReady props | |
| Editing | the YAML as text, validated as you type | the visual editor (a form, and drag-and-drop from an asset browser) and MCP tools |
| LLM | calls one itself, with an NVIDIA or OpenAI API key | none; MCP tools for the agent you use |
| The model sees | the catalogs and validation errors | also where the solver put things, and renders |
| An invalid spec | retried, then handed back with its errors | refused; the files stay as they were |
| Tasks and relations | those Arena marks as agent-ready | every registered one |
Install¶
A project made from the template needs
none of this: its source setup.sh installs a pinned release and runs init. The steps below add
arena-composer to an Arena install of your own.
Into the venv Arena is installed in, from PyPI. isaaclab_arena is not on PyPI, so
the package goes where Arena already is. Linux x86_64, Python 3.12 or newer.
uv pip install --python <Arena's venv>/bin/python arena-composer
Then point the project's agent clients at the MCP server. init writes bin/arena-mcp and the
configs Claude Code, VS Code and Cursor read, keeping any that already exist:
<Arena's venv>/bin/arena-composer init <project>
An MCP client starts the server with almost no environment, so init --import MODULE writes
ARENA_COMPOSER_IMPORTS into bin/arena-mcp itself.
init also links the author-arena-spec skill into .agents/skills/ and .claude/skills/. The
skill is the procedure an agent follows to write a spec with the MCP tools, through to every
sampled layout passing.
Which Arena it runs on¶
arena-composer's main is synced with IsaacLab-Arena's main at
dc77564 (2026-10-20), the commit
the template pins. Arena's main changes with no new version number, so the install cannot check
which one you have.
Developing¶
The showcase on Artefacts¶
The showcase builds about twenty environments and draws each from four views. artefacts.yaml runs it as an Artefacts job, so every run checks two ways: an environment that does not build or draw fails its test, and the pictures show at a glance whether the rest still look right.
From this repo's root, with Arena's venv active and this checkout installed in it:
artefacts config add artefacts/arena-composer # once: the project's API key
artefacts run showcase
The dashboard gets a test per environment and a PNG per environment and view. More in the Artefacts docs.
The Isaac Sim comparison on Artefacts¶
The composer draws a scene without Isaac Sim, so parity/ checks it against Isaac Sim's own renders. A second job in artefacts.yaml builds a handful of specs in Isaac Sim and draws each from the same cameras in both, after moving the composer's scene to where physics left everything. Each camera is a test, which fails when the composer draws further from Isaac Sim than it did before. The dashboard shows the two pictures side by side.
It also needs Isaac Sim in Arena's venv and a GPU that RTX renders on, and its EULA accepted, which nothing here does for you:
OMNI_KIT_ACCEPT_EULA=YES artefacts run parity
How the pictures are scored, and how to record a closer baseline, is in docs/development.md.
License¶
Licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE)
- MIT license (LICENSE-MIT)
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

