When To Use
Use this skill when a user needs to define, select, or debug Isaac Lab PresetCfg variants for environments, physics backends, renderers, sensors, events, or task-specific configuration options.
Read the Backends and Presets concept for the authoritative selector behavior and resolution order.
Do not use presets for simple one-backend tasks with no meaningful configuration variants. Prefer a plain config until the task needs a real selectable alternative.
Workflow
- Identify whether the task needs variants. Common reasons are physics backend differences, renderer differences, camera data types, event randomization differences, or play/train variants.
- If there is only one supported behavior, keep the config simple and do not add
PresetCfg. - If variants are needed, choose the selector category:
- Use a
PhysicsCfg(PresetCfg)field for physics backend variants selected byphysics=NAME. - Use a renderer preset for renderer variants selected by
renderer=NAME. - Use task/domain presets for environment-specific variants selected by
presets=NAME[,NAME,...].
- Use a
- Define a
defaultvariant. Add explicit named variants such asphysx,newton_mjwarp,newton_kamino,ovphysx,rgb, ordepthonly when the task supports them. - Assign the preset wrapper to the owning environment config field, for example
sim: SimulationCfg = SimulationCfg(physics=PhysicsCfg()). - Keep backend-specific values inside preset classes rather than scattering runtime conditionals through task logic.
- Use suffixless task names in commands.
- List available preset names before using them in commands.
- Smoke-test every preset with a small random-agent rollout before training.
Validation
Use this checklist:
- Confirm a plain config would not be sufficient.
- Confirm every preset variant has a clear reason to exist.
- Confirm
defaultpoints to a valid config. - Confirm selector names are discoverable through the task's preset help or environment list.
- Run a small reset/step smoke test for every new preset.
- Run training only after preset-specific shape, device, backend, and renderer behavior is stable.
For skill changes, run:
uv run --no-project python tools/skills/cli.py check
Maintenance
Keep this skill synchronized with docs/source/concepts/backends_and_presets.rst, source/isaaclab_tasks/isaaclab_tasks/utils/hydra.py, source/isaaclab_tasks/isaaclab_tasks/utils/preset_cli.py, source/isaaclab_tasks/isaaclab_tasks/utils/preset_target.py, the environment catalog, and maintained preset examples under source/isaaclab_tasks/isaaclab_tasks/. If preset selector behavior changes, update the source docs or examples first and keep this skill as a routing checklist.