Agent skill

Generate Ors Env

by adithya-s-k in adithya-s-k/FineEnvs

Builds an Open Reward Standard (ORS) variant of an RL environment using the official openreward Python package.

Apache-2.0Auto-check: notesDevOps & Cloud

Install Generate Ors Env

skills CLI
$ npx skills add adithya-s-k/FineEnvs --skill generate-ors-env -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install adithya-s-k/FineEnvs generate-ors-env --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ 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-ors-env .claude/skills/generate-ors-env && rm -rf skills-src

Use ~/.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/

Facts

Skill name
generate-ors-env
GitHub stars
461
Token cost
~2.3k tokens
SKILL.md length
580 words
Files
2 (incl. references)
Skills in repo
8
Repo updated
First seen
Licence
Apache-2.0

At a glance

Builds an Open Reward Standard (ORS) variant of an RL environment using the official openreward Python package.

  • Works in 5 steps: Tasks file — tasks.py → The Environment subclass — server.py → Server entry point — server.py main → …
  • Someone asks to scaffold an ORS env
  • SKILL.md covers Concept, Archetypes, Imports — exactly these and Architecture, plus 6 more sections
  • Calls uv, curl and jq; needs E2B_API_KEY

What it does

Generate Ors Env is an agent skill from adithya-s-k/FineEnvs. Builds an Open Reward Standard (ORS) variant of an RL environment using the official openreward Python package. Use whenever someone asks to scaffold an ORS env, port to OpenReward, add per-tool-call rewards, deploy to OpenReward.ai, or wrap an existing env in the ORS protocol. ORS is the right framework when the user wants HTTP+REST+SSE, rewards arriving inline with each tool call (not post-episode), task-spec-driven sessions, splits (train/val/test), or deployment to OpenReward.ai or HF Spaces. Output is a…

Its SKILL.md is about 2.3k 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 DevOps & Cloud, covering Reinforcement learning, Containers and Deployment. It works with Python and Docker. 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.

When your agent uses it

  • Someone asks to scaffold an ORS env
  • Port to OpenReward
  • Add per-tool-call rewards
  • Deploy to OpenReward.ai

Example prompts

  • “wrap my env in ORS”
  • “make an OpenReward env for X”
  • “add per-call reward to my env”
  • “/generate-ors-env”

Requirements

  • Python 3
  • Docker
  • A credential in E2B_API_KEY

Workflow steps

5 steps, taken from the step headings in SKILL.md.

  1. Tasks file — tasks.py
  2. The Environment subclass — server.py
  3. Server entry point — server.py main
  4. Rollout
  5. Dockerfiles

What it can do on your machine

Read from SKILL.md and the folder at commit 5e0b46e. It shows what the files ask for, not the result of running them.

  • Tool permissions

    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.

  • Runs code

    Shell commands in SKILL.md call:

    • uv
    • curl
    • jq

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Links to these hosts (documentation or services it may open):

    • openrewardstandard.io
    • docs.openreward.ai
    • pypi.org
    • github.com

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • E2B_API_KEY

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Generate Ors Env loads about 2.3k tokens when it runs, and up to ~3.5k if it reads all its reference files. Until then it costs about 191 tokens; SKILL.md has 580 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~191
When it runs · the whole SKILL.md, loaded when a task matches
~2.3k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~3.5k

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.

Safety

Auto-check: notes

The automated check noted patterns worth knowing about, such as sudo or a known installer.

  • NoteMentions a .env fileSKILL.md:178
    bles — they survive rebuilds. The local `.env` file should not be uploaded.

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.

SKILL.md

The full file from adithya-s-k/FineEnvs at commit 5e0b46e, republished under its Apache-2.0 licence (© adithya-s-k). 580 words, ~2,288 tokens.

Download SKILL.mdSave it as .claude/skills/generate-ors-env/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.
name
generate-ors-env
description
Builds an Open Reward Standard (ORS) variant of an RL environment using the official `openreward` Python package. Use whenever someone asks to scaffold an ORS env, port to OpenReward, add per-tool-call rewards, deploy to OpenReward.ai, or wrap an existing env in the ORS protocol. ORS is the right framework when the user wants HTTP+REST+SSE, rewards arriving inline with each tool call (not post-episode), task-spec-driven sessions, splits (train/val/test), or deployment to OpenReward.ai or HF Spaces. Output is a runnable `<env_dir>/ors/` folder with `server.py`, `tasks.py`, `pyproject.toml`, `Dockerfile.spaces`, and `rollout.py`. Use for prompts like "wrap my env in ORS", "make an OpenReward env for X", or "add per-call reward to my env".

generate-ors-env

Build the ORS variant of an env using the official openreward >= 0.1.33 package (the ors-sdk name is a common mistake — it does not exist on PyPI).

Concept

ORS is the Open Reward Standard (openrewardstandard.io) — an HTTP REST + Server-Sent Events protocol for agent envs. Reward arrives inline with every ToolOutput, which is the framework's defining feature compared to OpenEnv (external/post-hoc reward) and NeMo Gym (post-episode /verify).

When the user has a shared domain module (<domain>.py) and wants an ORS variant, never duplicate domain logic into the framework folder — wrap it.

Archetypes

ArchetypeHallmarks
Pure-Python gameSingle @tool, tasks.py with N task dicts forming the train split, terminal reward via finished=True.
Stateful sandboxsetup() allocates resources from task_spec; teardown() frees them; per-tool reward stubs.
Vision / computer-useImageBlock(data=<base64>, mimeType="image/png") returns; terminate(status) tool emits the terminal reward.

Imports — exactly these

Server side:

python
from openreward.environments import (
    Environment, Server, tool, ToolOutput, TextBlock, Split, ImageBlock,
)

Client side (rollouts):

python
from openreward import EnvironmentsAPI
api = EnvironmentsAPI(base_url=URL, api_key="")
env = api.get(ENV_NAME)

Don't use OpenReward(api_key=..., base_url=...) even though it's the high-level client. It prepends matrix. / api. / construct. subdomains to the base URL — that breaks HF Space URLs. EnvironmentsAPI talks to base_url verbatim.

Architecture

<env_dir>/ors/
├── pyproject.toml         # openreward>=0.1.33 + e2b-* (if needed) + pydantic
├── __init__.py
├── Dockerfile             # local dev image
├── Dockerfile.spaces      # HF Space (port 7860, single-stage pip install)
├── README.spaces.md       # HF Space frontmatter
├── server.py              # the Environment subclass + main()
├── tasks.py               # list of dicts (task_spec for each task)
├── rollout.py             # or rollout_openai.py + rollout_qwen.py
└── README.md              # one-page dev README

Implementation order

1. Tasks file — tasks.py

A list of plain dicts. Each dict becomes a task_spec per session. ORS auto-wraps these into Task objects on list_tasks().

python
TASKS = [
    {"answer": "apple", "task": "Guess the 5-letter word."},
    # ...
]
2. The Environment subclass — server.py
python
from pydantic import BaseModel
from openreward.environments import Environment, Server, tool, ToolOutput, TextBlock, Split

class GuessInput(BaseModel):
    word: str

class WordleORS(Environment):
    def __init__(self, task_spec=None, secrets=None, **kw):
        super().__init__(task_spec=task_spec or {}, secrets=secrets or {})
        self._game = None

    def setup(self):                      # called on first tool invocation
        self._game = WordleGame(self.task_spec.get("answer"))

    def teardown(self):                   # called on session delete
        self._game = None

    @classmethod
    def list_splits(cls): return [Split(name="train", type="train")]

    @classmethod
    def list_tasks(cls, split): return TASKS

    def get_prompt(self):
        return [TextBlock(text="Play Wordle. Guess the 5-letter word.")]

    @tool
    def guess(self, params: GuessInput) -> ToolOutput:
        feedback = self._game.guess(params.word)
        return ToolOutput(
            blocks=[TextBlock(text=feedback)],
            reward=self._game.reward,
            finished=self._game.done,
        )

Key contracts:

  • Tools take a params: PydanticModel as the second arg. ORS uses the model's JSON schema as the tool's input_schema.
  • Empty inputs still need a Pydantic model (class _Empty(BaseModel): pass). Don't omit the param.
  • ToolOutput.blocks is [TextBlock | ImageBlock]. For images: ImageBlock(data=<base64>, mimeType="image/png"). Vision models actually see this.
  • reward is float | None. None means "no reward this step"; 0.0 means "stepped, scored zero". For pure terminal reward, return None everywhere except in the last ToolOutput.
  • finished=True ends the session. Pair with reward=1.0 (or whatever) to give the rollout a clean stop.
  • task_spec is a dict you read from self.task_spec — no schema validation. If you want validation, do it in setup().
3. Server entry point — server.py main
python
def main():
    parser = argparse.ArgumentParser()
    parser.add_argument("--port", type=int, default=8080)
    parser.add_argument("--host", type=str, default="0.0.0.0")
    args = parser.parse_args()
    Server([WordleORS]).run(host=args.host, port=args.port)

The endpoint name is auto-derived from the class name lowercased — WordleORS → wordleors. Tell the user this so they know what ENV_NAME to pass.

Show full SKILL.md (237 more words)Show less
4. Rollout

Always discover tools and tasks from the env. Don't hardcode names:

python
api = EnvironmentsAPI(base_url=ENV_URL, api_key="")
env = api.get("wordleors")
tasks = env.list_tasks("train")
tools = env.list_tools(format="openai")     # built-in OpenAI tool-schema converter
with env.session(task=tasks[0]) as session:
    prompt = session.get_prompt()
    result = session.call_tool("guess", {"word": "crane"})
    # result.blocks, result.reward, result.finished

For vision envs, the screenshot tool returns an ImageBlock — read it as b.data (already base64). Pass that into the model's image content.

5. Dockerfiles

Dockerfile.spaces is the HF Space deploy image. Keep it minimal:

dockerfile
FROM python:3.11-slim
RUN useradd -m -u 1000 user
RUN pip install --no-cache-dir openreward pydantic <other-deps>
USER user
ENV HOME=/home/user PATH=/home/user/.local/bin:$PATH
WORKDIR $HOME/app
COPY --chown=user . $HOME/app
EXPOSE 7860
CMD ["python", "server.py", "--host", "0.0.0.0", "--port", "7860"]

README.spaces.md:

yaml
---
title: My Env ORS
emoji: 🎯
colorFrom: pink
colorTo: indigo
sdk: docker
app_port: 7860
tags: [ors, openreward]
---

Pushing to HF Spaces

Create a Space named <owner>/<env_name>-ors. Set E2B_API_KEY (and any other secrets) as Space secrets, not environment variables — they survive rebuilds. The local .env file should not be uploaded.

python
api.add_space_secret(repo_id="<owner>/<env>-ors", key="E2B_API_KEY", value="...")
api.upload_file(path_or_fileobj="Dockerfile.spaces", path_in_repo="Dockerfile", repo_id=...)
api.upload_file(path_or_fileobj="README.spaces.md", path_in_repo="README.md", repo_id=...)
# upload server.py, tasks.py, __init__.py, pyproject.toml

Validation gates

  1. Local server — uv run python server.py --port 8772 then curl http://localhost:8772/list_environments returns ["<envname>"].
  2. Tool discovery — curl http://localhost:8772/<envname>/tools | jq '.tools | length' matches the number of @tool methods.
  3. End-to-end — MAX_TURNS=3 uv run python rollout.py drives the model through at least one tool call without errors.

Gotchas (from real-world ORS work)

  • from openreward.environments.types import Task — wrong; Task is in openreward.api.environments.types and you usually don't import it. list_tasks can return plain dicts; ORS wraps them.
  • OpenReward(base_url=URL) rewrites the URL — prepends matrix. / api. / construct. subdomains. For HF Spaces, use EnvironmentsAPI(base_url=URL, api_key="") directly.
  • e2b-desktop without e2b — e2b-desktop imports from e2b, but doesn't pin it. Add both to dependencies.
  • Endpoint name is the lowercased class name — MyEnvORS becomes myenvors. Tell users this explicitly so their ENV_NAME env var is right.

Reference

  • references/architecture.md — protocol shape + Server / Environment / Session lifecycle

Official documentation

© 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

Files

SKILL.md and 1 other file (references) in .claude/skills/generate-ors-env of adithya-s-k/FineEnvs.

  • SKILL.md
  • references/architecture.md

Open the folder on GitHubat commit 5e0b46e

Compare with similar skills

Generate Ors 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.

Generate Ors Env compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Generate Ors Env this skilladithya-s-k/FineEnvs461—~2.3kAutomated safety check: NotesApache-2.0
DDNS Build and Release MaintenanceNewFuture/DDNS4.7k—~444Automated safety check: PassMIT
Oci Functions Deployoracle/skills877—~4.6kAutomated safety check: PassUPL-1.0
Deploy To Tempsgotempsh/temps831—~1.3kAutomated safety check: NotesApache-2.0
Devops Deploysickn33/agentic-awesome-skills47k2 repos~1.9kAutomated safety check: PassMIT
Deploymentericrisco/rsc-harness180—~4.2kAutomated safety check: NotesMIT

Similar skills

  • Maintains the DDNS project's GitHub Actions, Docker and Nuitka builds, packaging and release preparation without touching publishing credentials.

    4.7k GitHub stars~444 tokensUpdated 2 days ago
    DevOps & CloudAuto-check passed
  • Official

    Build, configure, scaffold, and deploy OCI Functions from a local machine using a dependency-first, Fn-context-guided flow with argv-safe mutation execution, nonce-scoped confirmations, and a…

    877 GitHub stars~4.6k tokensUpdated yesterday
    DevOps & CloudAuto-check passed
  • Deploy To Temps

    gotempsh/temps

    Deploy applications to the Temps platform with automatic framework detection, Dockerfile generation, and container orchestration.

    831 GitHub stars~1.3k tokensUpdated today
    DevOps & CloudAuto-check: notes
  • Devops Deploy

    sickn33/agentic-awesome-skills

    DevOps e deploy de aplicacoes — Docker, CI/CD com GitHub Actions, AWS Lambda, SAM, Terraform, infraestrutura como codigo e monitoramento.

    47k GitHub starsUsed in 2 repos~1.9k tokens
    DevOps & CloudAuto-check passed
  • Deployment

    ericrisco/rsc-harness

    A skill your agent uses when taking an app from source to live: choosing the deploy target from requirements (Hetzner+Coolify vs Vercel vs a third), then wiring container → CI → registry → host with…

    180 GitHub stars~4.2k tokensUpdated today
    DevOps & CloudAuto-check: notes
  • Cosmos3 Env Troubleshoot

    NVIDIA/cosmos-framework

    Official

    Diagnose and fix Cosmos3 environment, installation, and runtime errors.

    560 GitHub stars~1.3k tokensUpdated today
    DevOps & CloudAuto-check: notes

More from adithya-s-k/FineEnvs

All 8 skills in this repo
  • Generate Verifiers Env

    adithya-s-k/FineEnvs

    Builds a Verifiers (PrimeIntellect) variant of an RL environment.

    461 GitHub starsUsed in 1 repo~2.3k tokens
    Auto-check passed
  • Generate Nemo Gym Env

    adithya-s-k/FineEnvs

    Builds a NeMo Gym (NVIDIA) variant of an RL environment. An agent skill from adithya-s-k/FineEnvs.

    461 GitHub stars~2.1k tokensUpdated 2 days ago
    Auto-check passed
  • Generate Openenv Env

    adithya-s-k/FineEnvs

    Builds an OpenEnv (Hugging Face) variant of an RL environment.

    461 GitHub stars~2.4k tokensUpdated 2 days ago
    Auto-check passed
  • Rl Env From Description

    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.

    461 GitHub stars~2.3k tokensUpdated 2 days ago
    Auto-check: notes
  • Article Frontmatter

    adithya-s-k/FineEnvs

    Configure article metadata via MDX frontmatter. An agent skill from adithya-s-k/FineEnvs.

    461 GitHub stars~1.1k tokensUpdated 2 days ago
    Auto-check passed
  • Create HTML Embed

    adithya-s-k/FineEnvs

    Create self-contained D3 HTML embed charts for the research article template.

    461 GitHub stars~1.1k tokensUpdated 2 days ago
    Auto-check passed

Works with

Questions about Generate Ors Env

What does Generate Ors Env do?

Builds an Open Reward Standard (ORS) variant of an RL environment using the official openreward Python package. Generate Ors Env is an agent skill from adithya-s-k/FineEnvs. Builds an Open Reward Standard (ORS) variant of an RL environment using the official openreward Python package.

When should I use Generate Ors Env?

Generate Ors Env fits situations like: someone asks to scaffold an ORS env; port to OpenReward; add per-tool-call rewards; deploy to OpenReward.ai.

How do I install Generate Ors Env in Claude Code?

Run `npx skills add adithya-s-k/FineEnvs --skill generate-ors-env -a claude-code`. Or copy the skill folder (.claude/skills/generate-ors-env in adithya-s-k/FineEnvs) into .claude/skills/generate-ors-env in your project. Claude Code loads it when a task matches its description.

How do I install Generate Ors Env in Codex?

Run `npx skills add adithya-s-k/FineEnvs --skill generate-ors-env -a codex`. Or copy the skill folder (.claude/skills/generate-ors-env in adithya-s-k/FineEnvs) into .agents/skills/generate-ors-env in your project. Codex loads it when a task matches its description.

Can I use Generate Ors Env in Cursor, Gemini CLI or GitHub Copilot?

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-ors-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-ors-env, .gemini/skills/generate-ors-env, .github/skills/generate-ors-env and .opencode/skills/generate-ors-env in your project.

What does Generate Ors Env need to run?

Going by SKILL.md and its folder, Generate Ors Env needs the command-line tools its instructions call (uv, curl and jq) and credentials named E2B_API_KEY. Our summary lists: Python 3; Docker; A credential in E2B_API_KEY.

Does Generate Ors Env access the network?

SKILL.md names 4 domains. As links in the text: openrewardstandard.io, docs.openreward.ai, pypi.org and github.com. This is read from the text; nothing was executed.

Is Generate Ors Env safe to install?

Our automated static check of SKILL.md found notes only (mentions a .env file), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.

What licence does Generate Ors Env use?

Generate Ors 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.

How many tokens does Generate Ors Env use?

About 2.3k tokens (SKILL.md is roughly 9.2k 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.2k tokens, read only when the agent opens those files.

What are the alternatives to Generate Ors Env?

Skills that share tags, products or a category with Generate Ors Env: DDNS Build and Release Maintenance (NewFuture/DDNS, 4.7k stars), Oci Functions Deploy (oracle/skills, 877 stars), Deploy To Temps (gotempsh/temps, 831 stars) and Devops Deploy (sickn33/agentic-awesome-skills, 47k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Generate Ors Env?

adithya-s-k (a GitHub user) maintains it in adithya-s-k/FineEnvs, which has 461 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.