Hugging Face Spaces Deploy
Vincentqyw/image-matching-webui
Releases a new imcui version on GitHub, then deploys it to a test and a production Hugging Face Space from a dedicated huggingface branch.
Builds an OpenEnv (Hugging Face) variant of an RL environment.
$ npx skills add adithya-s-k/FineEnvs --skill generate-openenv-env -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install adithya-s-k/FineEnvs generate-openenv-env --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/adithya-s-k/FineEnvs.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/generate-openenv-env .claude/skills/generate-openenv-env && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "generate-openenv-env" agent skill from https://github.com/adithya-s-k/FineEnvs/tree/main/.claude/skills/generate-openenv-env into .claude/skills/generate-openenv-env/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "generate-openenv-env", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/adithya-s-k/FineEnvs/tree/main/.claude/skills/generate-openenv-envType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add adithya-s-k/FineEnvs --skill generate-openenv-env -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install adithya-s-k/FineEnvs generate-openenv-env --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/adithya-s-k/FineEnvs.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/generate-openenv-env .agents/skills/generate-openenv-env && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "generate-openenv-env" agent skill from https://github.com/adithya-s-k/FineEnvs/tree/main/.claude/skills/generate-openenv-env into .agents/skills/generate-openenv-env/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "generate-openenv-env", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add adithya-s-k/FineEnvs --skill generate-openenv-env -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install adithya-s-k/FineEnvs generate-openenv-env --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/adithya-s-k/FineEnvs.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/generate-openenv-env .cursor/skills/generate-openenv-env && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "generate-openenv-env" agent skill from https://github.com/adithya-s-k/FineEnvs/tree/main/.claude/skills/generate-openenv-env into .cursor/skills/generate-openenv-env/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "generate-openenv-env", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/adithya-s-k/FineEnvs.git --path .claude/skills/generate-openenv-env--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add adithya-s-k/FineEnvs --skill generate-openenv-env -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install adithya-s-k/FineEnvs generate-openenv-env --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/adithya-s-k/FineEnvs.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/generate-openenv-env .gemini/skills/generate-openenv-env && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "generate-openenv-env" agent skill from https://github.com/adithya-s-k/FineEnvs/tree/main/.claude/skills/generate-openenv-env into .gemini/skills/generate-openenv-env/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "generate-openenv-env", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install adithya-s-k/FineEnvs generate-openenv-envInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add adithya-s-k/FineEnvs --skill generate-openenv-env -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/adithya-s-k/FineEnvs.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/generate-openenv-env .github/skills/generate-openenv-env && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "generate-openenv-env" agent skill from https://github.com/adithya-s-k/FineEnvs/tree/main/.claude/skills/generate-openenv-env into .github/skills/generate-openenv-env/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "generate-openenv-env", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add adithya-s-k/FineEnvs --skill generate-openenv-env -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install adithya-s-k/FineEnvs generate-openenv-env --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/adithya-s-k/FineEnvs.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/generate-openenv-env .opencode/skills/generate-openenv-env && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "generate-openenv-env" agent skill from https://github.com/adithya-s-k/FineEnvs/tree/main/.claude/skills/generate-openenv-env into .opencode/skills/generate-openenv-env/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "generate-openenv-env", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
generate-openenv-envBuilds an OpenEnv (Hugging Face) variant of an RL environment.
Generate Openenv Env is an agent skill from adithya-s-k/FineEnvs. Builds an OpenEnv (Hugging Face) variant of an RL environment. Use whenever someone asks to scaffold an OpenEnv server, port an existing env to OpenEnv, add MCP tools to an env, or deploy an OpenEnv to HF Spaces. OpenEnv is the right framework when the user wants HTTP+MCP, structured tool calls discovered via listtools(), an optional Gradio UI, sandbox-backed sessions, or deployment as a Docker container / HF Space. Output is a runnable <envdir/openenv/ folder with server/app.py, server/<envenvironment.py…
Its SKILL.md is about 2.4k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files, including reference files (for example `references/architecture.md`).
It sits in AI & LLM Engineering, covering Model hubs and datasets, Containers and Reinforcement learning. It works with Docker, Model Context Protocol, Gradio and Hugging Face. The repository describes itself as: FineEnvs — RL Environments 101: building and scaling RL environments in the age of LLMs. The licence is Apache-2.0.
7 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 5e0b46e. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
uvcurlFrom the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
huggingface.cogithub.comFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Generate Openenv Env loads about 2.4k tokens when it runs, and up to ~3.5k if it reads all its reference files. Until then it costs about 175 tokens; SKILL.md has 691 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from adithya-s-k/FineEnvs at commit 5e0b46e, republished under its Apache-2.0 licence (© adithya-s-k). 691 words, ~2,351 tokens.
.claude/skills/generate-openenv-env/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.Build the OpenEnv variant of an env. Targets OpenEnv >= 0.4.1 (the openenv package — formerly openenv-core[core]).
OpenEnv is an HTTP server exposing tools via the MCP (Model Context Protocol) shape. The runtime is FastAPI; tools are FastMCP-decorated functions. Clients discover tools via list_tools() (under the hood: a list-tools action on /step) and call them via call_tool(name, **args).
When the user has a shared domain module (<domain>.py) and wants an OpenEnv variant, never duplicate domain logic into the framework folder — wrap it.
| Archetype | Hallmarks |
|---|---|
| Pure-Python game | Deterministic, single @mcp.tool, text-only observations. Reward computed externally from the trajectory. |
| Stateful sandbox | E2B / browser / DB, multiple tools mutating session state, MCPEnvironment per session. |
| Vision / computer-use | Screenshots returned as MCP image content blocks (fastmcp.utilities.types.Image), 19-tool action surface modelled on Anthropic's computer_20251124, optional custom Gradio UI mounted at /web. |
The user picks the actual paths. The canonical shape:
<env_dir>/openenv/
├── pyproject.toml # openenv + e2b-* + fastmcp + uvicorn + gradio
├── __init__.py
├── models.py # Pydantic State / typed action / observation models
├── Dockerfile # multi-stage from ghcr.io/huggingface/openenv-base
├── openenv.yaml # spec_version 1, name, runtime, app, port
├── server/
│ ├── __init__.py
│ ├── app.py # create_app(EnvCls, CallToolAction, CallToolObservation, env_name=...)
│ └── <env>_environment.py # MCPEnvironment subclass with @mcp.tool methods
├── rollout.py # MCPToolClient drives the server; auto-discovers tools
└── README.md # one-page; with HF frontmatter if deploying to Spacesmodels.pySubclass openenv.core.env_server.types.State. Add per-episode fields you'll mutate (step_count, last_output, sandbox/session ids, anything you want to inspect later).
For visual envs, add last_screenshot_b64. Don't store huge blobs unless you need them in state — use metadata on observations instead.
server/<name>_environment.pyclass MyEnv(MCPEnvironment):
SUPPORTS_CONCURRENT_SESSIONS = True # only if real session isolation
def __init__(self):
# ... env-side state init
mcp = FastMCP("my_env")
@mcp.tool
def my_tool(arg: int) -> str: ...
super().__init__(mcp)Key contracts:
server/, write try: from ..models import X; except ImportError: from models import X. Relative imports work inside the repo (PYTHONPATH=src:envs); flat imports work in Docker (/app/env). Same applies to sibling modules like e2b_sandbox.py.@mcp.tool decorated functions inside __init__. They close over self and read/write env state. Don't try to put @mcp.tool on instance methods — FastMCP introspects free functions.fastmcp.utilities.types.Image: return Image(data=png_bytes, format="png"). The model receives an MCP image content block. Returning a base64 string in text means the model is blind.reset(seed=None, episode_id=None, **kwargs) returns an Observation; step(action, timeout_s=None, **kwargs) is inherited from MCPEnvironment for tool dispatch — only override if you need pre/post hooks (e.g. step-counter increment, terminate signal handling).server/app.pyimport os
from openenv.core.env_server.http_server import create_app
from openenv.core.env_server.mcp_types import CallToolAction, CallToolObservation
try:
from .my_environment import MyEnv
from .gradio_ui import my_ui_builder # only if you have a custom UI
except ImportError:
from server.my_environment import MyEnv
from server.gradio_ui import my_ui_builder
def _custom_gradio_builder(*args, **kwargs):
return my_ui_builder(env_factory=MyEnv)
os.environ["ENABLE_WEB_INTERFACE"] = "true"
app = create_app(
MyEnv, CallToolAction, CallToolObservation,
env_name="my_env",
max_concurrent_envs=int(os.getenv("MAX_CONCURRENT_ENVS", "4")),
gradio_builder=_custom_gradio_builder, # omit if no custom UI
)Pass the class to create_app, not an instantiated env.
server/gradio_ui.py defines my_ui_builder(env_factory) that returns a gr.Blocks. Mounted at /web (set base_path: /web in the HF Space frontmatter). For computer-use envs, the canonical pattern includes an iframe panel showing the E2B stream URL alongside text controls — but any gr.Blocks layout works.
rollout.pyUse openenv.core.mcp_client.MCPToolClient. Discover tools, don't hardcode:
from openenv.core.mcp_client import MCPToolClient
with MCPToolClient(base_url=ENV_URL).sync() as env:
env.reset()
tools = env.list_tools() # list of ToolSpec
# convert to OpenAI tool schemas, drive the LLM, call env.call_tool(name, **args)Note: for image-returning tools, env.call_tool strips to result.data (which is None for image returns). Use env.step(CallToolAction(tool_name="screenshot", arguments={})) to get the full result dict, then read obs.result["content"][0]["data"] for the b64 image. Pattern:
def _call(env, name, **kwargs):
out = env.step(CallToolAction(tool_name=name, arguments=kwargs))
return out.observation.result or {}
def _b64_screenshot(env):
res = _call(env, "screenshot")
for c in res.get("content", []) or []:
if c.get("type") == "image" and c.get("data"):
return c["data"]
raise RuntimeError(f"screenshot returned no image: {res}")For multimodal models (Qwen3-VL, GPT-4o), feed the latest screenshot as an image block in the user message every turn.
Use a multi-stage build:
FROM ghcr.io/huggingface/openenv-base:latest (the official base — already has FastAPI, MCP, Gradio).uv sync twice (no-install-project, then with project) for cache friendliness./health.For HF Spaces, the canonical app_port is 8000 (not 7860 — OpenEnv's pattern uses 8000). Set base_path: /web in the README frontmatter so Gradio mounts under that prefix.
---
title: My Env Server
emoji: 🤖
colorFrom: blue
colorTo: purple
sdk: docker
pinned: false
app_port: 8000
base_path: /web
tags: [openenv, your-domain]
short_description: One-line summary
---Before declaring done, all four must pass:
PYTHONPATH=envs uv run python -c "from envs.<name>.openenv.server.<name>_environment import <Cls>"uv run uvicorn server.app:app --port 8000 then curl /health returns {"status":"healthy"} and /list_environments returns the env name.MCPToolClient.list_tools() returns the expected list.MAX_TURNS=3 uv run python rollout.py runs without errors.KeyError: 'tools' from POST /list_tools — OpenEnv doesn't expose /list_tools directly; MCPToolClient uses /step with a list-tools action under the hood. Always discover via the client.None — env.call_tool("screenshot") returns only the structured data field. Use env.step(CallToolAction(...)) and read obs.result["content"].address already in use — common during local-dev iteration. Just pick a different --port.ModuleNotFoundError in Docker but works locally — missing dual-import pattern in server/app.py or server/<name>_environment.py.references/architecture.md — full architecture deep-dive (when needed)generate-openenv-env skill at .claude/skills/generate-openenv-env/ in their repo — useful as a second opinion if behaviour is unclear.© adithya-s-k, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 1 other file (references) in .claude/skills/generate-openenv-env of adithya-s-k/FineEnvs.
Open the folder on GitHubat commit 5e0b46e
Generate Openenv Env next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Generate Openenv Env this skilladithya-s-k/FineEnvs | 456 | — | ~2.4k | Automated safety check: Pass | Apache-2.0 | |
| Hugging Face Spaces DeployVincentqyw/image-matching-webui | 1.3k | — | ~721 | Automated safety check: Pass | Apache-2.0 | |
| Hf MCPhuggingface/skills | 11k | 2 repos | ~1.2k | Automated safety check: Pass | Apache-2.0 | |
| Task Orchestrator Server Setupjpicklyk/task-orchestrator | 207 | — | ~3.1k | Automated safety check: Pass | MIT | |
| Frontmcp Deploymentagentfront/frontmcp | 146 | — | ~9.2k | Automated safety check: Notes | Apache-2.0 | |
| Convergence TestAMD-AGI/Primus | 131 | — | ~2.1k | Automated safety check: Pass | Custom licence |
Vincentqyw/image-matching-webui
Releases a new imcui version on GitHub, then deploys it to a test and a production Hugging Face Space from a dedicated huggingface branch.
huggingface/skills
Use Hugging Face Hub via MCP server tools. An agent skill from huggingface/skills.
jpicklyk/task-orchestrator
Walks through how to launch and reach the MCP Task Orchestrator server container: transport, REST API, port publishing, config mounts and config-sync.
agentfront/frontmcp
A skill your agent uses when deploying, building for production, packaging, or shipping a FrontMCP server.
AMD-AGI/Primus
Run, monitor, stop and report Primus convergence tests -- training a model on a real corpus and checking that the loss curve is healthy -- from a plain-language request such as "run convergence test…
huggingface/skills
Trains or fine-tunes language and vision models with TRL or Unsloth on Hugging Face Jobs cloud GPUs, then converts the results to GGUF.
adithya-s-k/FineEnvs
Builds a Verifiers (PrimeIntellect) variant of an RL environment.
adithya-s-k/FineEnvs
Builds a NeMo Gym (NVIDIA) variant of an RL environment. An agent skill from adithya-s-k/FineEnvs.
adithya-s-k/FineEnvs
Builds an Open Reward Standard (ORS) variant of an RL environment using the official openreward Python package.
adithya-s-k/FineEnvs
Turns a user's plain-English description of an RL training environment into runnable code across the four target frameworks — OpenEnv, OpenReward (ORS), Verifiers, and NeMo Gym.
adithya-s-k/FineEnvs
Configure article metadata via MDX frontmatter. An agent skill from adithya-s-k/FineEnvs.
adithya-s-k/FineEnvs
Create self-contained D3 HTML embed charts for the research article template.
Categories
Builds an OpenEnv (Hugging Face) variant of an RL environment. Generate Openenv Env is an agent skill from adithya-s-k/FineEnvs. Builds an OpenEnv (Hugging Face) variant of an RL environment.
Generate Openenv Env fits situations like: someone asks to scaffold an OpenEnv server; port an existing env to OpenEnv; add MCP tools to an env; deploy an OpenEnv to HF Spaces.
Run `npx skills add adithya-s-k/FineEnvs --skill generate-openenv-env -a claude-code`. Or copy the skill folder (.claude/skills/generate-openenv-env in adithya-s-k/FineEnvs) into .claude/skills/generate-openenv-env in your project. Claude Code loads it when a task matches its description.
Run `npx skills add adithya-s-k/FineEnvs --skill generate-openenv-env -a codex`. Or copy the skill folder (.claude/skills/generate-openenv-env in adithya-s-k/FineEnvs) into .agents/skills/generate-openenv-env in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add adithya-s-k/FineEnvs --skill generate-openenv-env -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/generate-openenv-env, .gemini/skills/generate-openenv-env, .github/skills/generate-openenv-env and .opencode/skills/generate-openenv-env in your project.
Going by SKILL.md and its folder, Generate Openenv Env needs the command-line tools its instructions call (uv and curl). Our summary lists: Python 3; Docker.
SKILL.md names 2 domains. As links in the text: huggingface.co and github.com. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Generate Openenv Env is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.4k tokens (SKILL.md is roughly 9.4k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 1.1k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Generate Openenv Env: Hugging Face Spaces Deploy (Vincentqyw/image-matching-webui, 1.3k stars), Hf MCP (huggingface/skills, 11k stars), Task Orchestrator Server Setup (jpicklyk/task-orchestrator, 207 stars) and Frontmcp Deployment (agentfront/frontmcp, 146 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
adithya-s-k (a GitHub user) maintains it in adithya-s-k/FineEnvs, which has 456 GitHub stars. The repository holds 8 skills in this directory. The repository was last updated on October 8, 2026.
Source: adithya-s-k/FineEnvs on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.