Skip to content
Back to skills

Environments

ASecurity

"Discover, select, and safely control MyoSuite Gymnasium

  • 247 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added September 8, 2026
toolspythonrustbashapibackend

Works with

  • cli
  • api

Security analysis

A100/100

Pro scans all 5 files and shows the line behind each finding

Scanned September 8, 2026

npx -y skills add VectorSpaceLab/AREX-Skill --skill environments --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Environments?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Environments
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/vectorspacelab-environments-arex-skill/badge)](https://www.skillsdirectory.com/skills/vectorspacelab-environments-arex-skill)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: "environments"
description: "Discover, select, and safely control MyoSuite Gymnasium
  environments on the base CPU backend."
disable-model-invocation: true
metadata:
  disco-role: operating
license: Apache 2.0
---

# MyoSuite environments

Use this sub-skill when a user needs to install the base package, identify a
registered task, create an environment, run a short reset/step rollout, inspect
its spaces or diagnostics, seed it, or close it cleanly. Start with a named
registered environment rather than guessing a model filename.

## Route the request

- Core import, Gymnasium registration, task IDs, reset/step, spaces, rewards,
  `info`, seeding, lifecycle, or safe no-display inspection: handle here.
- Viewer/window behavior and MuJoCo rendering internals: route to
  `simulation-rendering`.
- Model XML editing, IK, or task-specific kinematic changes: route to
  `model-editing-kinematics`.
- Reference trajectories or playback: route to `reference-motion`.
- JAX/MJX execution: route to `mjx-acceleration`; do not imply that a CPU
  smoke proves MJX or CUDA support.
- Long training commands and learner configuration: route to
  `training-integration`.

See [the API reference](references/api-reference.md) for the full contract,
[the task catalog](references/task-catalog.md) for selection, and
[troubleshooting](references/troubleshooting.md) when setup or assets fail.

## Base prerequisites

The supported base route is Python 3.10–3.13 with the package's normal
runtime dependencies, including Gymnasium below 1.3, MuJoCo 3.6.x, NumPy,
Click, and the package data. The verified inspection combination was Python
3.11, MyoSuite 2.12.2, MuJoCo 3.6.0, and Gymnasium 1.2.3. Install the released
package into an isolated environment, or use the project's documented source
installation with all required model assets initialized. Do not install the
MJX/CUDA extras just to run this core route.

Importing `myosuite` imports the package's Gym compatibility helper and then
registers its task suites. If neither `gymnasium` nor the legacy `gym` package
is importable, import fails before an environment can be made. Prefer
Gymnasium for new code.

## Fast path: named, headless rollout

For a standard CPU check, run the bundled safe smoke script:

```bash
python sub-skills/environments/scripts/environment_smoke.py \
  --env-id myoElbowPose1D6MRandom-v0 --steps 3 --seed 123 --render none
```

The script only creates the requested environment, samples bounded actions,
uses `reset(seed=...)`, performs bounded steps, prints contract summaries, and
always calls `close()`. It does not open a viewer, evaluate policy files,
write videos, fetch assets, or execute arbitrary environment arguments. Add
`--check-determinism` to repeat the short rollout with the same reset and
action-space seeds.

The equivalent minimal Python pattern is:

```python
from myosuite.utils import gym

env = gym.make("myoElbowPose1D6MRandom-v0")
try:
    env.action_space.seed(123)
    observation, info = env.reset(seed=123)
    for _ in range(3):
        observation, reward, terminated, truncated, info = env.step(
            env.action_space.sample()
        )
        if terminated or truncated:
            break
finally:
    env.close()
```

Do not call `mj_render()` in a no-display workflow. `gym.make` normally returns
Gymnasium wrappers; use `env.unwrapped` only when the user explicitly needs
MyoSuite internals such as `get_obs_dict`, `get_reward_dict`, `get_proprioception`,
`get_exteroception`, `horizon`, or `get_env_state`.

## Discover before creating

1. Import `myosuite` so registration side effects have run.
2. Prefer an exact ID from [the task catalog](references/task-catalog.md).
3. Check `gym.spec(task_id)` before `gym.make(task_id)`; an unknown ID is a
   selection error, not an installation fix.
4. Read `spec.max_episode_steps` for the wrapper horizon. Core registrations
   include fixed/random tasks and automatically registered `Sarc` and `Fati`
   variants; hand tasks also have `Reaf` variants.
5. If the name is uncertain, list `myosuite.myosuite_env_suite` or filter
   `gym.envs.registry.keys()` instead of probing arbitrary strings.

A valid registry entry does not prove that every model asset can be loaded.
Only `gym.make` followed by `reset` establishes that the selected model is
usable in the current installation.

## Lifecycle and contracts

- `env = gym.make(id, **kwargs)` creates a wrapped task. Keep construction
  kwargs limited to documented task options; do not pass untrusted strings to
  an evaluator.
- `env.reset(seed=seed)` returns `(observation, info)` under Gymnasium. Seed
  the action space separately with `env.action_space.seed(seed)` when comparing
  random-policy rollouts. A legacy Gym installation may return only an
  observation; follow the installed API rather than unpacking blindly.
- `env.step(action)` returns
  `(observation, reward, terminated, truncated, info)`. Stop on either boolean;
  the wrapper enforces the registered time limit through `truncated`, while a
  task's reward dictionary can produce `terminated`.
- `action` must fit `env.action_space`, normally a float32 `Box`. Sampling from
  `action_space` is safer than hand-building controls. Myo muscle tasks may
  internally map normalized controls before MuJoCo advances.
- `observation` is normally a flat NumPy vector in `observation_space`. Its
  task-specific fields can be inspected through the unwrapped task's
  `obs_dict`; do not assume all tasks expose the same keys or dimension.
- `reward` is the configured dense reward scalar by default. `info` contains
  MyoSuite diagnostics such as `time`, `rwd_dense`, `rwd_sparse`, `solved`,
  `done`, `obs_dict`, `rwd_dict`, `proprio_dict`, `visual_dict`, and `state`.
  Treat nested arrays as owned by the environment and copy them before storing.
- Always call `env.close()` in `finally`, including after failed reset, step, or
  inspection. Avoid creating a viewer merely to inspect spaces.

## Safe inspection

Use `environment_smoke.py --list` for a registry snapshot and
`python -m myosuite.utils.examine_env --help` to inspect the supported CLI
surface. The upstream CLI can run random or supplied policies and supports
`--render none`, but it also supports output/video options and policy loading;
use it only with trusted inputs and bounded episode counts. The bundled smoke
script is preferred for automated checks.

For deeper CPU inspection, after a successful reset/step use only public
methods: `env.unwrapped.get_obs_dict(...)`, `get_reward_dict(...)`,
`get_proprioception()`, `get_exteroception()`, `get_env_infos()`, and
`get_env_state()`. Route image capture or viewer setup away from this skill.

## Verification evidence and limits

The base import and a `myoElbowPose1D6MRandom-v0` reset/step smoke passed in the
private Python 3.11 inspection environment after the repository's five MuJoCo
asset submodules were initialized. The source README/minimal example, package
initializers, environment base, Myo base/task registrations, task catalog,
core environment tests, and `examine_env --help` define the claims in the
linked references. Native candidates for later verification are a single pose
reset/step lifecycle, selected core checks from `test_myo`/`test_envs`, and
`examine_env --help`. Optional MJX/JAX/CUDA and display-backed rendering remain
separate, explicitly unverified routes.

Files in this skill

  • SKILL.md7.2 KB
  • references/api-reference.md7.1 KB
  • references/task-catalog.md5 KB
  • references/troubleshooting.md4.5 KB
  • scripts/environment_smoke.py4.7 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.