Generate OpenEnv environments from a concrete use case (for example, "generate an env for the library textarena"). Use when asked to design or implement a new environment under envs/ by researching a target library/API, selecting matching OpenEnv examples, asking key implementation questions, and building models/client/server/openenv.yaml. Do not use for model training or evaluation tasks.
npx skills add https://github.com/huggingface/OpenEnv --skill generate-openenv-env
Build a production-ready OpenEnv environment from a use-case prompt.
When invoked, execute this workflow end-to-end.
Derive a repo path in the form envs/<name>_env/.
envs/textarena_env/.Gather the minimum interface facts needed to implement reset, step, and state serialization.
Select 2-3 existing environments as implementation templates.
references/openenv-tutorial-01-environments.md (Part 10) and references/openenv-docs-environment-builder.md.envs/textarena_env for external-library wrappers with richer state.envs/snake_env or envs/echo_env) to keep the implementation minimal..venv/, build/, site-packages/, __pycache__/).For a compact checklist and mapping, read references/env-generation-checklist.md.
Ask only the questions that materially affect architecture. Use the question bank in references/env-generation-checklist.md.
Cover at least:
If answers are unavailable, proceed with explicit assumptions and document them.
Choose one archetype before scaffolding:
EnvClient + typed Action/Observation[/State] models.MCPEnvironment + MCPToolClient and MCP action/observation types.Use the CLI to scaffold:
PYTHONPATH=src uv run openenv init <name>_env --output-dir envs
This generates all files with correct placeholders replaced, including pyproject.toml, Dockerfile, and uv.lock.
If the CLI is unavailable (import errors, missing dependencies), create the structure manually matching:
envs/<name>_env/
├── __init__.py
├── client.py
├── models.py
├── openenv.yaml
├── pyproject.toml
└── server/
├── __init__.py
├── app.py
├── <name>_environment.py
└── Dockerfile
Use assets/openenv_env_template/ as a reference for file contents when scaffolding manually.
Implement these files in order:
models.pyserver/<name>_environment.pyserver/app.pyclient.pyopenenv.yamlREADME.mdUse these standards:
create_app(<factory_or_class>, ActionType, ObservationType, env_name=...) in server/app.py. Pass a class or factory callable, not an instantiated environment.server/app.py and server/<name>_environment.py): Use try: from ..models import X / except ImportError: from models import X. Relative imports work in-repo (PYTHONPATH=src:envs); bare imports work in Docker (PYTHONPATH=/app/env). The same pattern applies to intra-server imports (e.g., from .foo import Bar vs from server.foo import Bar).client.py uses EnvClient[ActionType, ObservationType, State] (three type parameters).server/, keep client parsing in client.py.Environment:reset(seed=None, episode_id=None, **kwargs)step(action, timeout_s=None, **kwargs)SUPPORTS_CONCURRENT_SESSIONS=True only when isolation is real. Set max_concurrent_envs in create_app accordingly (1 when False, >1 when True).server/app.py.__init__.py.openenv.yaml aligned with current scaffold format (spec_version: 1, name, type, runtime, app, port).Run the narrowest useful checks:
# Verify in-repo imports work (catches missing dual-import pattern)
PYTHONPATH=src:envs uv run python -c "from envs.<name>_env.server.<name>_environment import <ClassName>Environment"
# Build and validate
cd envs/<name>_env
openenv build
openenv validate --verbose
PYTHONPATH=src:envs uv run pytest envs/<name>_env -q
If tests do not exist, run a smoke check:
PYTHONPATH=src:envs uv run uvicorn envs.<name>_env.server.app:app --port 8000
curl http://localhost:8000/health
openenv validate --url http://localhost:8000
Report:
name/version/action/observation-only manifests).max_concurrent_envs > 1 unless the environment explicitly supports concurrent sessions.Comprehensive toolkit for creating, analyzing, and visualizing complex networks and graphs in Python. Use when working with network/graph data structures, analyzing relationships between entities, computing graph algorithms (shortest paths, centrality, clustering), detecting communities, generating synthetic networks, or visualizing network topologies. Applicable to social networks, biological networks, transportation systems, citation networks, and any domain involving pairwise relationships.
Interact with Zotero reference management libraries using the pyzotero Python client. Retrieve, create, update, and delete items, collections, tags, and attachments via the Zotero Web API v3. Use this skill when working with Zotero libraries programmatically, managing bibliographic references, exporting citations, searching library contents, uploading PDF attachments, or building research automation workflows that integrate with Zotero.
Comprehensive toolkit for creating, analyzing, and visualizing complex networks and graphs in Python. Use when working with network/graph data structures, analyzing relationships between entities, computing graph algorithms (shortest paths, centrality, clustering), detecting communities, generating synthetic networks, or visualizing network topologies. Applicable to social networks, biological networks, transportation systems, citation networks, and any domain involving pairwise relationships.
Create, analyze, and visualize complex networks and graphs in Python with NetworkX. Use when working with network/graph data structures, computing graph algorithms (shortest paths, centrality, clustering), detecting communities, generating synthetic networks (random, scale-free, small-world), reading/writing graph file formats, or drawing network topologies. Common applications include social, biological, transportation, and citation networks.
Use NeuroKit2 to build or audit reproducible research workflows for physiological time-series preprocessing, event/interval analysis, multimodal alignment, variability, and complexity. Trigger when code imports neurokit2 or needs its current APIs, schemas, and method-aware validation—not for diagnosis or device validation.
Interact with Zotero reference management libraries using the pyzotero Python client. Retrieve, create, update, and delete items, collections, tags, and attachments via the Zotero Web API v3. Use this skill when working with Zotero libraries programmatically, managing bibliographic references, exporting citations, searching library contents, uploading PDF attachments, or building research automation workflows that integrate with Zotero.
Comprehensive toolkit for creating, analyzing, and visualizing complex networks and graphs in Python. Use when working with network/graph data structures, analyzing relationships between entities, computing graph algorithms (shortest paths, centrality, clustering), detecting communities, generating synthetic networks, or visualizing network topologies. Applicable to social networks, biological networks, transportation systems, citation networks, and any domain involving pairwise relationships.
A practical, jargon-free guide to fp-ts functional programming - the 80/20 approach that gets results without the academic overhead. Use when writing TypeScript with fp-ts library.
Take huggingface/generate-openenv-env from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.