skills/simulation-control/SKILL.md
This skill should be used when the user asks to "start the simulation", "stop the simulation", "pause simulation", "step the simulation", "reset simulation", "play simulation", "check simulation state", "run the simulation", or needs to control simulation playback in Isaac Sim.
npx skillsauth add kickthemoon0817/simul simulation-controlInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Isaac Sim simulation control maps to a state machine: stopped → playing → paused → stopped. The granular MCP tools cover the full lifecycle. Use execute_isaac_script only when you need the lower-level omni.timeline or isaacsim.core.api.World APIs directly.
[stopped] --start--> [playing] --pause--> [paused] --start--> [playing]
^ | |
| v v
+<------stop---------+<-------stop--------+
|
reset (clears physics state, returns to time 0)
Always check state before issuing a command to avoid sending start to an already-playing simulation:
mcp__simul__get_isaac_simulation_state
Returns: { "playing": bool, "paused": bool, "stopped": bool }.
Also useful for monitoring elapsed time during a run:
mcp__simul__get_isaac_simulation_time
Returns current simulation time in seconds (0.0 when stopped or just reset).
mcp__simul__start_isaac_simulation
Equivalent to pressing the Play button in the Isaac Sim UI. Physics begins advancing, rigid bodies start responding to gravity and contacts, and sensors start producing data.
Precondition: A physics scene must exist (/physicsScene or equivalent). If none exists, simulation will start but physics will not run. Create one first — see the scene-setup skill or mcp__simul__get_isaac_physics_scene to check.
For controlled stepping (instead of free-running playback), use:
mcp__simul__step_isaac_simulation
num_steps: 1
Each step advances physics by one timestep (default 1/60 s). This is useful when you need to:
For a burst of steps without reading between them, pass a larger num_steps (e.g. 60 for 1 second at 60 Hz). The tool blocks until all steps complete.
Note: Stepping only works when the simulation is already running (started). Call start_isaac_simulation first, then step_isaac_simulation.
mcp__simul__pause_isaac_simulation
Freezes physics and rendering at the current time. Objects hold their positions and velocities. Resume with start_isaac_simulation — playback continues from where it paused.
mcp__simul__stop_isaac_simulation
Stops playback and rewinds to time 0. Physics state (velocities, contacts) is cleared, but prim positions are not reset to their pre-simulation positions unless you also call reset.
mcp__simul__reset_isaac_simulation
Resets the full simulation: clears physics state, returns timeline to 0, and restores all prim transforms to their authored USD values (the positions they had before simulation started). Use this to run the same scenario again from scratch without reloading the stage.
Typical pattern for repeated runs:
mcp__simul__stop_isaac_simulationmcp__simul__reset_isaac_simulationmcp__simul__start_isaac_simulationPoll state while a simulation is running to track progress or wait for a condition:
mcp__simul__get_isaac_simulation_state # check playing/paused/stopped
mcp__simul__get_isaac_simulation_time # check elapsed time
mcp__simul__get_isaac_prim_transform # read object positions
mcp__simul__get_isaac_rigid_body_info # read velocities
For reading physics quantities mid-simulation, prefer execute_isaac_script with direct USD attribute access (e.g. physics:velocity) as it is lower-latency than chained tool calls.
The granular tools cover all standard lifecycle operations. Use execute_isaac_script when you need:
Timeline API — for querying fps, time_codes_per_second, or time range bounds:
import json, omni.timeline
tl = omni.timeline.get_timeline_interface()
print(json.dumps({
"playing": tl.is_playing(),
"stopped": tl.is_stopped(),
"current_time": tl.get_current_time(),
"fps": tl.get_time_codes_per_second(),
"start_time": tl.get_start_time(),
"end_time": tl.get_end_time(),
}))
World API — for physics stepping with explicit dt control and reading observations between steps:
import json, traceback
try:
from isaacsim.core.api import World
world = World.instance()
if world is None:
world = World(physics_dt=1/60, rendering_dt=1/60)
world.reset()
for _ in range(10):
world.step(render=True)
result = {"success": True, "stepped": 10}
except Exception as e:
result = {"success": False, "error": str(e), "traceback": traceback.format_exc()}
print(json.dumps(result))
Key difference: omni.timeline is for playback control (play/pause/stop/query). isaacsim.core.api.World is for programmatic physics stepping with explicit control over physics_dt and rendering_dt. For simple playback, always use the granular MCP tools. For custom physics loops, use World via execute_isaac_script.
See references/timeline-vs-world.md for detailed comparison.
1. mcp__simul__start_isaac_simulation
2. mcp__simul__step_isaac_simulation num_steps: 300 # 5 sec at 60 Hz
3. mcp__simul__pause_isaac_simulation
4. mcp__simul__get_isaac_prim_transform prim_path: "/World/MyRobot"
1. mcp__simul__get_isaac_simulation_state
→ if playing: skip start
→ if paused: call start to resume
→ if stopped: call start
1. mcp__simul__stop_isaac_simulation
2. mcp__simul__reset_isaac_simulation
3. mcp__simul__get_isaac_simulation_state # confirm stopped, time=0
4. mcp__simul__start_isaac_simulation
references/timeline-vs-world.md — when to use omni.timeline vs isaacsim.core.api.World, with code examplestools
This skill should be used when the user asks to "analyze a USD file", "load a USD file", "inspect USD", "headless USD", "prim info", "search prims", "mesh info", "scene summary", "bounding box", or needs to work with USD files without a running Isaac Sim instance.
development
This skill should be used when the user asks to "set up simul", "install simul", "configure simul", "get started", "which backend", "how to install", or needs help choosing and installing the right backends for their simulation workflow.
development
This skill should be used when the user asks to "set up a scene", "create a new scene", "add a ground plane", "add lighting", "create a basic scene", "scene from scratch", "empty scene", "new stage", or needs to build a complete 3D scene in Isaac Sim from the ground up.
tools
This skill should be used when the user asks to "import a robot", "load a URDF", "import a USD asset", "add a robot to the scene", "load an asset", "add a reference", "import from Nucleus", or needs to bring external 3D assets and robots into an Isaac Sim scene.