"Route optional MyoSuite JAX/MJX acceleration work: probe
Scanned 9/8/2026
Install to Claude Code
npx -y skills add VectorSpaceLab/AREX-Skill --skill mjx-acceleration --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Mjx Acceleration?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/vectorspacelab-mjx-acceleration)More formats (shields.io, HTML) on the badges page.
---
name: "mjx-acceleration"
description: "Route optional MyoSuite JAX/MJX acceleration work: probe
dependencies and devices, construct MJX environments, use JAX quaternion,
fatigue, and reference-motion helpers, and keep CPU substitution and CUDA
claims explicit."
disable-model-invocation: true
metadata:
disco-role: operating
license: Apache 2.0
---
# MJX acceleration
Use this sub-skill only when the user explicitly asks for the optional JAX/MJX
or MJWarp route, JAX math parity, JAX fatigue/reference-motion helpers, or
backend/device diagnostics. For ordinary MyoSuite environments and MuJoCo
CPU workflows, route to the environments sub-skill instead. For policy
training recipes, route to training-integration.
## Non-negotiable boundary
- Base MyoSuite is a CPU-capable MuJoCo/Gymnasium package.
- MJX is optional; it is not proof that a CPU-only installation can provide
acceleration.
- CUDA is a separate optional route. Never report a CUDA speedup without a
CUDA-backed JAX device probe and a workload measurement.
- A CPU JAX probe can validate imports, shapes, transforms, and semantics, but
it cannot validate CUDA kernels, GPU throughput, or a speedup claim.
- Do not install packages, initialize assets, download data, or run training
from the bundled probe. Installation is an explicit user decision.
Read [compatibility.md](references/compatibility.md) before choosing an
installation or device route. Read [api-reference.md](references/api-reference.md)
for signatures and data contracts. Read [troubleshooting.md](references/troubleshooting.md)
when a probe, parity check, or environment construction fails.
## Route selection
1. Run the safe, import-only probe from this directory:
```bash
python scripts/mjx_probe.py
```
2. If JAX/MJX is absent, choose one of these honest outcomes:
- stay on the base CPU route and state that MJX is optional and unverified;
- ask permission to install the `mjx` extra, then rerun the probe;
- ask for a CUDA-capable environment and permission to install
`mjx-cuda` when GPU acceleration is required.
3. If MJX is present, probe an environment without training:
```bash
python scripts/mjx_probe.py --env-name MjxElbowPoseRandom-v0 --steps 1
```
4. For a CUDA claim, require both the optional dependencies and a device whose
JAX platform is GPU/CUDA. Use `--require-cuda`; a CPU result is a backend
block, not a substitute:
```bash
python scripts/mjx_probe.py --require-cuda --env-name MjxElbowPoseRandom-v0
```
The probe returns JSON only with `--json`, exits nonzero for a requested
required backend that is unavailable, and otherwise leaves optional absence
as a clearly labelled result.
## Minimal MJX environment contract
The public constructor is `myosuite.envs.myo.mjx.make(name,
config_overrides=None)`. A normal JAX lifecycle is:
```python
import jax
import jax.numpy as jnp
from myosuite.envs.myo import mjx
env = mjx.make("MjxElbowPoseRandom-v0", config_overrides={"num_envs": 1})
state = env.reset(jax.random.PRNGKey(0))
next_state = env.step(state, jnp.zeros((env.action_size,), dtype=jnp.float32))
```
`reset` consumes a JAX PRNG key and returns a MuJoCo Playground-style `State`.
`step` returns a new state rather than mutating the old state. The state carries
MJX data, a dictionary observation, scalar reward/done values, metrics, and
information such as the RNG, target, and step count. Confirm action size and
observation keys from the concrete environment; do not assume Gymnasium's
five-value `step` contract here.
Supported factory names in the inspected implementation are
`MjxElbowPoseFixed-v0`, `MjxElbowPoseRandom-v0`, `MjxFingerPoseFixed-v0`,
`MjxFingerPoseRandom-v0`, `MjxHandReachFixed-v0`, and
`MjxHandReachRandom-v0`. Registering a base environment also exposes fatigue
variants with the `MjxFati` prefix. Registration is lazy through `make`; call
`make` before relying on a name being present in the local registry.
## JAX helper routes
- Quaternion/math parity: compare the NumPy helpers in
`myosuite.utils.quat_math` with the JAX helpers in
`myosuite.utils.quat_math_jax`. Check shape, finite values, rotation-matrix
equivalence, and dtype before comparing numerical values.
- Fatigue: use `CumulativeFatigue.reset(key, ...)` to obtain a state dict with
`MA`, `MR`, and `MF`, then pass that state to `compute_act(target_load,
state)`. `get_effort` returns the norm of active-minus-target activation.
- Fatigue wrapper: configure `fatigue_config` with `fatigue_reset_vec`,
`fatigue_reset_random`, and allowed observation keys `MA`, `MR`, `MF`.
The wrapper stores fatigue state in MJX `userdata` and applies fatigue to
muscle activations before stepping.
- Reference motion: use `ReferenceMotion` with a dict or a supported `.npz`/
pickle input. It classifies one-frame, two-bound, and multi-frame data as
fixed, random, and track references, respectively; `get_reference(time)`
returns a `ReferenceStruct`.
## CPU substitution and evidence
CPU substitution is full for base MuJoCo environments and only partial for
this sub-skill. It can validate helper semantics and a CPU JAX execution, but
not GPU placement or acceleration. Preserve an explicit `optional-unverified`
status when the extra is not installed. Treat benchmark figures as context
only: throughput depends on model contacts, batch size, JAX implementation,
hardware, and compilation/warm-up costs.
## Handoff checklist
Before claiming success, record:
- package and optional-extra availability;
- `jax.devices()` and the selected platform;
- model/environment name, implementation, action shape, and one-step result;
- parity tolerance, dtype, and quaternion sign handling;
- whether fatigue/reference-motion helpers were actually exercised;
- whether the result is CPU semantic validation, CUDA execution, or an
unverified optional route.
The bundled script is deliberately a probe, not a benchmark or installer. Keep
long API notes, compatibility rules, and recovery steps in the linked
references.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!