SimReady Conform FET000MUJOCO
SkillDev toolsUse for repairing exact FET_000_MUJOCO SimReady conformance: the MuJoCo physics runtime variant scaffolding (MuJoCo variant set, runnables/physics/mujoco payload, and SimReady variant metadata). Use when a profile, validation report, or user request names FET_000_MUJOCO; default to version `0.1.0`.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the SimReady Conform FET000MUJOCO skill
What this skill tells your AI
The instructions your AI receives, as published by nvidia/simready-foundation in skills/simready-foundation-conform-fet-000-mujoco/SKILL.md and read by ahel’s review.
Purpose
Use this exact feature skill when the selected profile, validation report, or user request names FET_000_MUJOCO. It repairs or stages the MuJoCo physics runtime variant contract on top of neutral Core, without drifting into another runtime contract.
FET_000_MUJOCO adds the MuJoCo runtime variant scaffolding to an asset that already satisfies neutral Core (FET_000_STANDARD@0.1.0). It does not author MuJoCo rigid-body/collider physics itself; that belongs to FET_003_MUJOCO and related features. This skill only makes the MuJoCo variant set, its runnables/physics/mujoco payload, and its SimReady variant metadata correct.
Default to FET_000_MUJOCO@0.1.0 when the user asks for this feature without a version. If the report names a different FET_000_<RUNTIME> feature (FET_000_PHYSX, FET_000_NEWTON), switch to that feature's matching skill before editing.
To conform an asset to a profile like Robotics-Prop@3.1.0 that lists all three optional runtime variants, run all three FET_000_* runtime skills so each of PhysX, Newton, and MuJoCo ends up with both a variant set on the default prim and a SimReady_Metadata.Variants.Physics entry. Never leave a runnables/physics/<stem>.usd payload on disk without its matching variant set and metadata — an orphaned payload fails RV.007/RV.008/RV.009 for its runtime.
This skill is not the final validator and should not silently mutate source assets. It stages a repaired USD-family asset under the requested output directory, applies deterministic fixes only where safe, and stops when a validation gate still fails or a manual decision is required.
Source of Truth
Before changing an asset or package, read:
nv_core/tiers/simready_foundation_tier_core/simready/foundation/tier_core/features/FET_000_MUJOCO-0.1.0.jsonnv_core/tiers/simready_foundation_tier_core/simready/foundation/tier_core/features/FET_000_MUJOCO.mdnv_core/tiers/simready_foundation_tier_core/simready/foundation/tier_core/features/FET_000_STANDARD-0.1.0.json(dependency)- Requirement docs for the failing IDs under
nv_core/tiers/simready_foundation_tier_core/simready/foundation/tier_core/capabilities/core/runtime_variants/requirements/:mujoco-variant-set.md(RV.007)mujoco-runtime-payload.md(RV.008)mujoco-variant-metadata.md(RV.009)runtime-variant-section-purity.md(RV.010)runtime-physics-isolation.md(RV.011)
- For the cross-runtime isolation policy that RV.010/RV.011 enforce, read
nv_core/tiers/simready_foundation_tier_core/simready/foundation/tier_core/capabilities/core/runtime_variants/runtime-physics-isolation-matrix.md. - For the MuJoCo payload body (mesh collision authoring), read
nv_core/tiers/simready_foundation_tier_core/simready/foundation/tier_core/capabilities/physics_bodies/physics_rigid_bodies/requirements/mujoco-mesh-collision-api.mdandnv_core/tiers/simready_foundation_tier_core/simready/foundation/tier_core/features/FET_003_MUJOCO.md.
Treat the selected JSON manifest as authoritative for dependencies and requirement IDs.
This skill is self-contained: the deterministic guidance and worked example below are sufficient to author a conforming MuJoCo runtime variant from scratch. You do not need to open an existing 3.1.0 asset and copy its structure — do so only to cross-check, and only against a sample known to pass.
Sample-asset caveats (do not copy structure blindly):
- Author from the requirement docs and the worked example below, not by copying an existing asset. Sample assets drift, and a stale or pre-contract sample will lead you astray. If you do cross-check, only trust a sample you have just confirmed passes the full target profile (RV.001–011 and AA.001, not the RV-only harness) — never treat any specific asset as a canonical template.
Feature Versions
| Version | Dependencies | Requirements |
|---|---|---|
0.1.0 | FET_000_STANDARD@0.1.0 | RV.007, RV.008, RV.009, RV.010, RV.011 |
Inputs
| Input | Requirement |
|---|---|
usd_asset | Required USD-family asset to repair. |
output_root | Required or inferred folder for staged assets and reports. |
simready_profile / profile_version | Validation target, if supplied. |
validation_report | Preferred JSON/markdown report from the failing gate. |
mujoco_overrides | Optional source of the MuJoCo runtime override data (schemas/attributes) to place in the payload; required to fully author mujoco.usd content. |
Workflow
- Confirm the input exists and identify the exact selected feature/version.
- Ensure the neutral Core gate (
FET_000_STANDARD@0.1.0) is in shape first; if Core fails, hand off tosimready-foundation-conform-fet-000-standardbefore this skill. - Load the
FET_000_MUJOCOmanifest, the feature markdown, and the RV.007-RV.009 + RV.010/RV.011 requirement docs (plus the isolation matrix). - Create or use a staged output location unless the user explicitly asks for in-place edits.
- Repair only
RV.007,RV.008,RV.009,RV.010, andRV.011(see Feature Guidance). Do not touch PhysX/Newton variants or rigid-body physics. - Rerun the same profile gate or the narrowest available feature/capability validation gate.
- Summarize the selected version, changed files, validation evidence, and the first remaining blocker or next exact feature gate.
Feature Guidance
Repair each MuJoCo runtime variant requirement deterministically where safe:
RV.007(variant set): On the stagedefaultPrim, add aMuJoCovariant set withDisabledandEnabledoptions and author the default selection asDisabled. Keep theDisabledvariant free of runtime payloads.RV.008(payload): From theEnabledvariant,prepend payload = @./runnables/physics/mujoco.usd@(or.usda). The payload must live inside the asset root — the directory that holds the root layer — so keeprunnables/physics/as a subfolder beside the root layer and anchor the arc with./. Do not placerunnables/beside or above the asset root and reference it with@../runnables/physics/mujoco.usd@: a../payload that resolves above the asset root fails AA.001 (atomic-asset anchored paths) and precludesFET_001_STANDARD, even though the RV.008 payload check alone still passes — so the RV-only local harness will not catch it. Create therunnables/physics/mujoco.usdlayer as anoverlayer with the samedefaultPrim..usdand.usdaare interchangeable; author.usdawhen a binary USDC cannot be compiled.RV.009(metadata): AddcustomLayerData.SimReady_Metadata.Variants.Physics.MuJoCo = {prim = <defaultPrim path>, variantSetName = "MuJoCo", activateOption = "Enabled"}. TheVariantsdict must live insideSimReady_Metadata, not as a sibling top-levelcustomLayerData.Variantskey.RV.010(variant-section purity): Keep the variant sections pure. TheEnabledoption must contain only theprepend payloadarc — no inlineover/defchild prims, no authored properties, no other composition arcs. TheDisabledoption must be completely empty. Inline variant opinions outrank payloads in USD strength ordering (LIVRPS), so any override authored in a variant section leaks into the composed result of the other runtimes. All runtime data belongs in therunnables/physics/mujoco.usdpayload, never in the root variant edit.RV.011(composed-stage isolation): The composed MuJoCo stage (MuJoCoEnabled, othersDisabled) must carry only neutralUsdPhysics/physics:*data plus MuJoCo data (Mjc*schemas,mjc:*attributes). The inherited Newton collision base (NewtonCollisionAPI,newton:contactGap/newton:contactMargin) is the only Newton data allowed, viaMjcCollisionAPI's upstream inheritance; do not author any otherNewton*/newton:*. Do not author PhysX (Physx*/physx*:) data. On aMjcCollisionAPImesh,physics:approximationmust beconvexHull(MUJOCO.COL.002) — neversdforconvexDecomposition. RV.010/RV.011 are composition-wide checks: if a sibling runtime's section is impure or its payload leaks a foreign schema, report it rather than silently editing another runtime's contract.- Neutral-base precondition (RV.011 / MUJOCO.COL.002). MuJoCo requires
physics:approximation = "convexHull"on the collider, and themujoco.usdoversets it. For thatoverto win, the neutral base collider must not authorphysics:approximationas a local (non-variant) opinion. A local base opinion outranks the payload arc in USD strength ordering (LIVRPS: Local > … > Payload), so a baseconvexDecomposition/sdfmasks the requiredconvexHulland fails MUJOCO.COL.002 under the MuJoCo selection (and leaks into the other runtimes). If the neutral base authorsphysics:approximation, clear that local opinion so each runnable owns its own value (PhysXsdf, MuJoCoconvexHull, Newton none). See the "Value-level attribute rules" in the isolation matrix. - Migrating a runtime-authored base (RV.011). If the asset arrives with a different runtime authored directly on the neutral base — common when a prop was previously conformed to a single-runtime PhysX profile — the base collider carries that runtime's API schemas (e.g.
PhysxCollisionAPI,PhysxSDFMeshCollisionAPI) alongsidePhysicsMeshCollisionAPIand a localphysics:approximation. Move that runtime data into its own runnable payload and reduce the neutral base collider to neutralUsdPhysicsonly (PhysicsCollisionAPI+PhysicsMassAPI), with the mesh-collision schema and approximation living in the per-runtime payloads. Otherwise the neutral (all-Disabled) composition still carries foreign runtime schemas and fails RV.011.
MuJoCo payload body for a single-mesh prop
For a simple prop whose collision is a single existing mesh, the mujoco.usd payload body is a deterministic mesh-collision delta. Apply on the collision mesh over:
prepend apiSchemas = ["MjcCollisionAPI", "PhysicsMeshCollisionAPI", "MjcMeshCollisionAPI"]uniform token physics:approximation = "convexHull"(required whenPhysicsMeshCollisionAPI+MjcCollisionAPIare combined)uniform int mjc:group = 2uniform token mjc:inertia = "convex"(one oflegacy,convex,exact,shell)uniform int mjc:maxhullvert = -1(>= -1; -1 means no limit)
Do not create geometry; only add schemas/attributes to the mesh(es) that already exist in the neutral base.
Block and report instead of guessing when:
- The asset needs MuJoCo joints, actuators, or scene/material tuning, or per-link collider decisions that are not the uniform delta below. Author the variant/payload scaffolding and hand that body work off to
FET_003_MUJOCO/FET_004_MUJOCO/FET_022_MUJOCOor the suppliedmujoco_overrides. A plain multibody prop whose colliders all take the same delta is in scope — see "Multibody / multi-collider assemblies" below. - The collision geometry or intended collider mesh is ambiguous.
- The asset has no
defaultPrim, or the intended owning prim is ambiguous.
Keep joint/articulation/actuator MuJoCo physics work in FET_003_MUJOCO/FET_004_MUJOCO; this skill owns the runtime variant scaffolding plus the collision delta — one collider mesh for a single-mesh prop, or every collider mesh for a multibody assembly (below).
Multibody / multi-collider assemblies
When the neutral base is a multibody assembly — several rigid-body parts sharing one articulation (e.g. a toolbox with a hinged lid, handle, and locks) — the mujoco.usd payload is the same collision delta applied to every collider:
- Apply the mesh-collision
overabove (MjcCollisionAPI,PhysicsMeshCollisionAPI,MjcMeshCollisionAPI+physics:approximation = "convexHull"+mjc:group/mjc:inertia/mjc:maxhullvert) to each collider mesh in the assembly. - Keep the payload collider-only: never re-author joints, articulation, actuators, or rigid bodies in
mujoco.usd— that topology lives once on the neutral base.
Neutral-base preconditions for a multibody assembly (owned by FET_004_STANDARD/FET_004_MUJOCO, repair there — not here):
- Every collider mesh must have its local
physics:approximationcleared, so each runnable owns its own value (theconvexHullabove must win from the payload — MUJOCO.COL.002). - The base carries the runtime-agnostic multibody topology (rigid bodies +
UsdPhysicsjoints) and exactly onePhysicsArticulationRootAPI. If the topology or articulation root is missing, hand off toFET_004_STANDARD/FET_004_MUJOCObefore wiring the MuJoCo variant.
Worked Example: single-mesh prop
Add the MuJoCo variant to a single-mesh prop in four edits (illustrated with a RootNode-rooted prop; substitute your asset's defaultPrim and collider mesh path). This is authored from the requirement docs — it does not depend on any existing asset.
- Create the payload layer
runnables/physics/mujoco.usdinside the asset root, in arunnables/physics/subfolder beside the root layer (e.g.simready_usd/runnables/physics/mujoco.usd), with the samedefaultPrimas the root asset. Do not placerunnables/outside the asset root — the./-anchored payload below must resolve within it (AA.001). Standardize on binary.usd; author the equivalent.usdabelow and export it to.usd(e.g.Sdf.Layer.FindOrOpen("mujoco.usda").Export("mujoco.usd")), or keep.usdaif a binary cannot be compiled:
#usda 1.0
(
defaultPrim = "RootNode"
doc = """MuJoCo overrides for sm_obs_orange_a02_01.usda"""
)
over "RootNode"
{
over "Geometry"
{
over "obs_orange_01_obj_01"
{
over "obs_orange_01_mesh_01" (
prepend apiSchemas = ["MjcCollisionAPI", "PhysicsMeshCollisionAPI", "MjcMeshCollisionAPI"]
)
{
uniform token physics:approximation = "convexHull"
uniform int mjc:group = 2
uniform token mjc:inertia = "convex"
uniform int mjc:maxhullvert = -1
}
}
}
}
- In the root asset layer, add the
MuJoCoentry tocustomLayerData.SimReady_Metadata.Variants.Physics(alongside anyPhysX/Newtonentries). TheVariantsdict lives insideSimReady_Metadata, never as a sibling top-levelcustomLayerData.Variantskey:
"MuJoCo" = {
string prim = "/RootNode"
string variantSetName = "MuJoCo"
string activateOption = "Enabled"
}
-
On
RootNode, add"MuJoCo"toprepend variantSetsand add its default selection tovariants(string MuJoCo = "Disabled"). -
Add the
variantSet "MuJoCo"block with a payload-freeDisabledoption and anEnabledoption that prepends the payload:
variantSet "MuJoCo" = {
"Disabled" {
}
"Enabled" (
prepend payload = @./runnables/physics/mujoco.usd@
) {
}
}
Note that the Enabled option holds only the payload arc and the Disabled option is empty (RV.010), and the payload authors only MuJoCo + neutral data with physics:approximation = "convexHull" (RV.011).
Validation
The RV.007-RV.009 + RV.010/RV.011 checks live in nv_core/tiers/simready_foundation_tier_core/simready/foundation/tier_core/capabilities/core/runtime_variants/validation.py and are generated into simready.foundation.tier_core.requirements as RV_001-RV_011. To run them locally:
- Build the core tier wheel, which is what generates the
RV_001-RV_011enums from the capability markdown:repo.bat build_tiers(writesnv_core/tiers/simready_foundation_tier_core/_build/dist/simready_foundation_tier_core-*.whl). - Create a Python 3.12 venv:
repo.bat uv venv --python 3.12 .venv_val. - Install USD, the validator deps, and the tier wheel into it:
repo.bat uv pip install --python .venv_val usd-core usd-validation-nvidia numpy nv_core/tiers/simready_foundation_tier_core/_build/dist/simready_foundation_tier_core-*.whl. - Invoke the venv Python directly (not
uv run, which spawns its own venv) against a small harness that importssimready.foundation.tier_core.capabilities.core.runtime_variants.validation, callsResetCaches()thenCheckStage(stage)on each checker, and reads results viachecker.GetIssues(). Installing the wheel puts the generated enums on the path, so noPYTHONPATHsetup is needed.
Confirm the MuJoCo trio (RV_007/RV_008/RV_009) plus the isolation rules (RV_010/RV_011) pass on the Disabled-default stage. RV.011 recomposes each declared variant selection, so also spot-check that enabling MuJoCo composes only MuJoCo + neutral physics with physics:approximation = "convexHull". If the environment cannot be bootstrapped, fall back to inspecting the staged USD for the variant set, anchored payload, nested SimReady_Metadata.Variants.Physics.MuJoCo entry, pure variant sections, and a MuJoCo-only payload, and report validation as inspection-only.
Limitations
- Do not silently mutate the source asset; work on the requested staged output.
- Do not author PhysX or Newton variants in this skill.
- Keep runtime data out of the root variant sections (RV.010) and keep the MuJoCo payload free of PhysX schemas/attributes; use
physics:approximation = "convexHull", neversdf/convexDecomposition(RV.011). - Do not create geometry; the single-mesh collision delta only annotates existing meshes.
- Beyond the deterministic single-mesh convexHull delta, do not invent MuJoCo runtime physics values (joints, actuators, scene/material tuning) that require domain knowledge; scaffold and hand off to
FET_003_MUJOCO/FET_004_MUJOCO/FET_022_MUJOCO.
Report Fields
| Field | Meaning |
|---|---|
feature | Exact feature ID and version, for example FET_000_MUJOCO@0.1.0. |
input | Source asset or package inspected. |
output | Staged output path, or in-place only when explicitly requested. |
requirements_repaired | Requirement IDs repaired in this pass (subset of RV.007-RV.009, RV.010, RV.011). |
requirements_blocked | Requirement IDs needing MuJoCo override data or user input. |
validation | Command or inspection used to verify this exact feature. |
status | passed, failed, skipped, or blocked. |
next_step | The next exact feature skill or evidence needed. |
Signals
- GitHub stars
- 87
- Forks
- 18
- Last commit
- Sep 2026
ahel review
K1binfo
installs-packages
Automated review, not a security audit. Ruleset v1+k2.
Advanced
- Catalog kind
- skill
- Gateway key
simready-foundation-conform-fet-000-mujoco- Source
- github.com/nvidia/simready-foundation