Buckets:
| import"../chunks/DsnmJJEf.js";import{i as we,h as _e,C as Be,H as l,D as n,E as v,a as i,b as fe,s as Ie}from"../chunks/DCNlwWI8.js";import{p as je,o as Ue,s as e,f as m,a as p,b as Ze,c as a,d as k,r as t,n as s}from"../chunks/CMKpKl_X.js";const ke='{"title":"CLI","local":"cli","sections":[{"title":"openenv init","local":"openenv.cli.commands.init","sections":[],"depth":2},{"title":"openenv import","local":"openenv-import","sections":[],"depth":2},{"title":"openenv build","local":"openenv.cli.commands.build","sections":[],"depth":2},{"title":"openenv validate","local":"openenv.cli.commands.validate","sections":[],"depth":2},{"title":"openenv push","local":"openenv.cli.commands.push","sections":[],"depth":2},{"title":"openenv serve","local":"openenv.cli.commands.serve","sections":[],"depth":2},{"title":"openenv fork","local":"openenv.cli.commands.fork","sections":[],"depth":2},{"title":"openenv skills","local":"openenv.cli.commands.skills.skills_add","sections":[],"depth":2}],"depth":1}';var Ve=k('<meta name="hf:doc:metadata"/>'),u=k("<p>Examples:</p> <!>",1),Ge=k(`<p></p> <!> <!> <p>The <code>openenv</code> CLI provides a set of commands for building, validating, and pushing environments to Hugging Face Spaces or a custom Docker registry. For an end-to-end tutorial on building environments with OpenEnv, see the <a href="../getting_started/environment-builder">building an environment</a> guide.</p> <!> <div class="docstring border-l-2 border-t-2 pl-4 pt-3.5 border-gray-100 rounded-tl-xl mb-6 mt-8"><!> <p>Initialize a new OpenEnv environment.</p> <p>Creates a new directory with the environment name and generates all necessary | |
| files based on the OpenEnv template structure.</p> <!></div> <!> <p>Import a supported third-party source environment into a generated OpenEnv | |
| wrapper package. The command detects the source format from the directory | |
| contents, so ORS/OpenReward and Prime Intellect Verifiers sources do not | |
| require <code>--type</code> in the common case.</p> <p>The generated wrapper vendors the source tree into the package and includes | |
| vendored files as package data, so non-secret fixture/data files are available to | |
| the environment server at runtime. The importer carries portable dependencies | |
| from source <code>pyproject.toml</code> and <code>requirements.txt</code> files into the generated | |
| environment, skips VCS/cache/build directories and common secret file patterns | |
| such as <code>.env</code>, <code>secrets.yaml</code>, and private key files, and excludes compiled | |
| binary artifacts; review the generated <code>vendor/</code> directory before publishing a | |
| wrapper.</p> <!> <!> <!> <div class="docstring border-l-2 border-t-2 pl-4 pt-3.5 border-gray-100 rounded-tl-xl mb-6 mt-8"><!> <p>Build Docker images for OpenEnv environments.</p> <p>This command builds Docker images using the environment’s pyproject.toml | |
| and uv for dependency management. Run from the environment root directory.</p> <!></div> <!> <div class="docstring border-l-2 border-t-2 pl-4 pt-3.5 border-gray-100 rounded-tl-xl mb-6 mt-8"><!> <p>Validate local environments and running OpenEnv servers.</p> <p>Local validation checks if an environment is properly configured with:</p> <ul><li>Required files (pyproject.toml, openenv.yaml, server/app.py, etc.)</li> <li>Docker deployment support</li> <li>uv run server capability</li> <li>python -m module execution</li></ul> <p>Runtime validation checks if a live OpenEnv server conforms to the | |
| versioned runtime API contract and returns a criteria-based JSON report.</p> <!></div> <!> <div class="docstring border-l-2 border-t-2 pl-4 pt-3.5 border-gray-100 rounded-tl-xl mb-6 mt-8"><!> <p>Push an OpenEnv environment to Hugging Face Spaces or a custom Docker registry.</p> <p>This command:</p> <ol><li>Validates that the directory is an OpenEnv environment (openenv.yaml present)</li> <li>Builds and pushes to Hugging Face Spaces or custom Docker registry</li> <li>Optionally enables web interface for deployment</li></ol> <p>The web interface is enabled by default when pushing to HuggingFace Spaces, | |
| but disabled by default when pushing to a custom Docker registry.</p> <!></div> <!> <p>Local serving is not implemented in the CLI yet. This command exits non-zero | |
| and prints alternative ways to run an environment server.</p> <div class="docstring border-l-2 border-t-2 pl-4 pt-3.5 border-gray-100 rounded-tl-xl mb-6 mt-8"><!> <p>Serve an OpenEnv environment locally.</p> <p>TODO: This command is currently not implemented and has been deferred for later.</p> <p>Planned functionality:</p> <ul><li>Run environment server locally without Docker</li> <li>Support multiple deployment modes (local, notebook, cluster)</li> <li>Auto-reload for development</li> <li>Integration with environment’s [project.scripts] entry point</li></ul> <p>For now, use Docker-based serving:</p> <ol><li>Build the environment: openenv build</li> <li>Run the container: docker run -p 8000:8000 <image-name></li></ol> <p>Or use uv directly: | |
| uv run —project . server —port 8000</p></div> <!> <div class="docstring border-l-2 border-t-2 pl-4 pt-3.5 border-gray-100 rounded-tl-xl mb-6 mt-8"><!> <p>Fork (duplicate) a Hugging Face Space to your account using the Hub API.</p> <p>Uses the Hugging Face duplicate_space API. You can set environment variables | |
| and secrets, and request hardware/storage/sleep time at creation time.</p> <!></div> <!> <p>Installs an <code>openenv-cli</code> skill into your AI assistant’s skills directory so | |
| it knows the <code>openenv</code> CLI is available and what each command does. Supports | |
| Claude Code, Cursor, Codex, and OpenCode.</p> <p><strong>Install for a single assistant (project-local):</strong></p> <!> <p>Multiple flags can be combined — <code>openenv skills add --claude --cursor</code> installs | |
| for both at once. The skill file is written to a central location | |
| (<code>.agents/skills/openenv-cli/</code>) and each agent directory gets a symlink, so | |
| there is only one copy to update.</p> <p><strong>Install globally (user-level, across all projects):</strong></p> <!> <p><strong>Overwrite an existing installation</strong> (e.g. after upgrading <code>openenv</code>):</p> <!> <p><strong>Preview the skill content without installing:</strong></p> <!> <p><strong>Install to a custom path</strong> (for non-standard agent setups):</p> <!> <div class="docstring border-l-2 border-t-2 pl-4 pt-3.5 border-gray-100 rounded-tl-xl mb-6 mt-8"><!> <p>Install OpenEnv CLI skill for AI assistants.</p></div> <div class="docstring border-l-2 border-t-2 pl-4 pt-3.5 border-gray-100 rounded-tl-xl mb-6 mt-8"><!> <p>Print generated SKILL.md content.</p></div> <!> <!> <div class="docstring border-l-2 border-t-2 pl-4 pt-3.5 border-gray-100 rounded-tl-xl mb-6 mt-8"><!> <p>Main entry point for the CLI.</p></div> <!> <div class="docstring border-l-2 border-t-2 pl-4 pt-3.5 border-gray-100 rounded-tl-xl mb-6 mt-8"><!> <p>Validate that the directory follows OpenEnv environment structure.</p></div> <!> <div class="docstring border-l-2 border-t-2 pl-4 pt-3.5 border-gray-100 rounded-tl-xl mb-6 mt-8"><!> <p>Validate a running OpenEnv server against runtime API standards.</p> <p>The returned JSON report contains an overall pass/fail result and | |
| per-criterion outcomes that can be consumed in CI.</p></div> <div class="docstring border-l-2 border-t-2 pl-4 pt-3.5 border-gray-100 rounded-tl-xl mb-6 mt-8"><!> <p>Validate that an environment is ready for multi-mode deployment.</p> <p>Checks:</p> <ol><li>pyproject.toml exists</li> <li>uv.lock exists</li> <li>pyproject.toml has [project.scripts] with server entry point</li> <li>server/app.py has a main() function</li> <li>Required dependencies are present</li></ol></div> <div class="docstring border-l-2 border-t-2 pl-4 pt-3.5 border-gray-100 rounded-tl-xl mb-6 mt-8"><!> <p>Check which deployment modes are supported by the environment.</p></div> <div class="docstring border-l-2 border-t-2 pl-4 pt-3.5 border-gray-100 rounded-tl-xl mb-6 mt-8"><!> <p>Format a validation report for display.</p></div> <div class="docstring border-l-2 border-t-2 pl-4 pt-3.5 border-gray-100 rounded-tl-xl mb-6 mt-8"><!> <p>Build a JSON report for local environment validation.</p></div> <!> <p></p>`,1);function xe(oe,le){je(le,!1),Ue(()=>{new URLSearchParams(window.location.search).get("fw")}),we();var V=Ge();_e("hdrvib",r=>{var c=Ve();Ie(c,"content",ke),p(r,c)});var G=e(m(V),2);Be(G,{containerStyle:"float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"});var N=e(G,2);l(N,{title:"CLI",local:"cli",headingTag:"h1"});var W=e(N,4);l(W,{title:"openenv init",local:"openenv.cli.commands.init",headingTag:"h2"});var h=e(W,2),E=a(h);n(E,{name:"openenv.cli.commands.init",anchor:"openenv.cli.commands.init",source:"https://github.com/huggingface/openenv/blob/vr_1007/openenv/cli/commands/init.py#L402",parameters:[{name:"env_name",val:`: Annotated[str, typer.Argument(help="Name of the environment to create (snake_case, e.g., 'my_env')")]`},{name:"output_dir",val:": Annotated[str | None, typer.Option('--output-dir', '-o', help='Output directory (defaults to current working directory)')] = None"}]});var re=e(E,6);v(re,{anchor:"openenv.cli.commands.init.example",children:(r,c)=>{var o=u(),d=e(m(o),2);i(d,{code:"JTI0JTIwb3BlbmVudiUyMGluaXQlMjBteV9nYW1lX2VudiUwQSUyNCUyMG9wZW5lbnYlMjBpbml0JTIwbXlfZW52JTIwLS1vdXRwdXQtZGlyJTIwJTJGcGF0aCUyRnRvJTJGcHJvamVjdHM=",highlighted:`$ openenv init my_game_env | |
| $ openenv init my_env --output-dir /path/to/projects`,lang:"bash",wrap:!1}),p(r,o)},$$slots:{default:!0}}),t(h);var x=e(h,2);l(x,{title:"openenv import",local:"openenv-import",headingTag:"h2"});var S=e(x,6);i(S,{code:"b3BlbmVudiUyMGltcG9ydCUyMHBhdGglMkZ0byUyRnNvdXJjZSUyMC0tbmFtZSUyMG15X2VudiUyMC0tb3V0cHV0LWRpciUyMC4lMkZlbnZzJTBBb3BlbmVudiUyMGltcG9ydCUyMHBhdGglMkZ0byUyRnNvdXJjZSUyMC0tbmFtZSUyMG15X2VudiUyMC0tb3V0cHV0LWRpciUyMC4lMkZlbnZzJTIwLS1lbnYtY2xhc3MlMjBNeUVudg==",highlighted:`openenv import path/to/source --name my_env --output-dir ./envs | |
| openenv import path/to/source --name my_env --output-dir ./envs --env-class MyEnv`,lang:"bash",wrap:!1});var R=e(S,2);i(R,{code:"Li4lMjBhdXRvbW9kdWxlJTNBJTNBJTIwb3BlbmVudi5jbGkuY29tbWFuZHMuaW1wb3J0X2VudiUwQSUyMCUyMCUyMCUzQW1lbWJlcnMlM0ElMEElMjAlMjAlMjAlM0F1bmRvYy1tZW1iZXJzJTNBJTBBJTIwJTIwJTIwJTNBc2hvdy1pbmhlcml0YW5jZSUzQQ==",highlighted:`.. automodule:: openenv.cli.commands.import_env | |
| <span class="hljs-symbol">:members</span>: | |
| <span class="hljs-symbol">:undoc-members</span>: | |
| <span class="hljs-symbol">:show-inheritance</span><span class="hljs-symbol">:</span>`,lang:"",wrap:!1});var A=e(R,2);l(A,{title:"openenv build",local:"openenv.cli.commands.build",headingTag:"h2"});var b=e(A,2),C=a(b);n(C,{name:"openenv.cli.commands.build",anchor:"openenv.cli.commands.build",source:"https://github.com/huggingface/openenv/blob/vr_1007/openenv/cli/commands/build.py#L358",parameters:[{name:"env_path",val:": Annotated[str | None, typer.Argument(help='Path to the environment directory (default: current directory)')] = None"},{name:"tag",val:": Annotated[str | None, typer.Option('--tag', '-t', help='Docker image tag (default: openenv-<env_name>)')] = None"},{name:"context",val:": Annotated[str | None, typer.Option('--context', '-c', help='Build context path (default: <env_path>/server)')] = None"},{name:"dockerfile",val:": Annotated[str | None, typer.Option('--dockerfile', '-f', help='Path to Dockerfile (default: <context>/Dockerfile)')] = None"},{name:"no_cache",val:": Annotated[bool, typer.Option('--no-cache', help='Build without using cache')] = False"},{name:"build_arg",val:": Annotated[list[str] | None, typer.Option('--build-arg', help='Build arguments (can be used multiple times, format: KEY=VALUE)')] = None"}]});var ie=e(C,6);v(ie,{anchor:"openenv.cli.commands.build.example",children:(r,c)=>{var o=u(),d=e(m(o),2);i(d,{code:"JTIzJTIwQnVpbGQlMjBmcm9tJTIwZW52aXJvbm1lbnQlMjByb290JTIwKHJlY29tbWVuZGVkKSUwQSUyNCUyMGNkJTIwbXlfZW52JTBBJTI0JTIwb3BlbmVudiUyMGJ1aWxkJTBBJTBBJTIzJTIwQnVpbGQlMjB3aXRoJTIwY3VzdG9tJTIwdGFnJTBBJTI0JTIwb3BlbmVudiUyMGJ1aWxkJTIwLXQlMjBteS1jdXN0b20tdGFnJTBBJTBBJTIzJTIwQnVpbGQlMjB3aXRob3V0JTIwY2FjaGUlMEElMjQlMjBvcGVuZW52JTIwYnVpbGQlMjAtLW5vLWNhY2hlJTBBJTBBJTIzJTIwQnVpbGQlMjB3aXRoJTIwY3VzdG9tJTIwYnVpbGQlMjBhcmd1bWVudHMlMEElMjQlMjBvcGVuZW52JTIwYnVpbGQlMjAtLWJ1aWxkLWFyZyUyMFZFUlNJT04lM0QxLjAlMjAtLWJ1aWxkLWFyZyUyMEVOViUzRHByb2QlMEElMEElMjMlMjBCdWlsZCUyMGZyb20lMjBkaWZmZXJlbnQlMjBkaXJlY3RvcnklMEElMjQlMjBvcGVuZW52JTIwYnVpbGQlMjBlbnZzJTJGZWNob19lbnY=",highlighted:`<span class="hljs-comment"># Build from environment root (recommended)</span> | |
| $ <span class="hljs-built_in">cd</span> my_env | |
| $ openenv build | |
| <span class="hljs-comment"># Build with custom tag</span> | |
| $ openenv build -t my-custom-tag | |
| <span class="hljs-comment"># Build without cache</span> | |
| $ openenv build --no-cache | |
| <span class="hljs-comment"># Build with custom build arguments</span> | |
| $ openenv build --build-arg VERSION=1.0 --build-arg ENV=prod | |
| <span class="hljs-comment"># Build from different directory</span> | |
| $ openenv build envs/echo_env`,lang:"bash",wrap:!1}),p(r,o)},$$slots:{default:!0}}),t(b);var F=e(b,2);l(F,{title:"openenv validate",local:"openenv.cli.commands.validate",headingTag:"h2"});var y=e(F,2),Y=a(y);n(Y,{name:"openenv.cli.commands.validate",anchor:"openenv.cli.commands.validate",source:"https://github.com/huggingface/openenv/blob/vr_1007/openenv/cli/commands/validate.py#L30",parameters:[{name:"target",val:": Annotated = None"},{name:"url",val:": Annotated = None"},{name:"json_output",val:": Annotated = False"},{name:"timeout",val:": Annotated = 5.0"},{name:"verbose",val:": Annotated = False"}]});var se=e(Y,10);v(se,{anchor:"openenv.cli.commands.validate.example",children:(r,c)=>{var o=u(),d=e(m(o),2);i(d,{code:"JTIzJTIwVmFsaWRhdGUlMjBjdXJyZW50JTIwZGlyZWN0b3J5JTIwKHJlY29tbWVuZGVkKSUwQSUyNCUyMGNkJTIwbXlfZW52JTBBJTI0JTIwb3BlbmVudiUyMHZhbGlkYXRlJTBBJTBBJTIzJTIwVmFsaWRhdGUlMjBhJTIwcnVubmluZyUyMGVudmlyb25tZW50JTIwYW5kJTIwcmV0dXJuJTIwSlNPTiUyMGNyaXRlcmlhJTBBJTI0JTIwb3BlbmVudiUyMHZhbGlkYXRlJTIwLS11cmwlMjBodHRwJTNBJTJGJTJGbG9jYWxob3N0JTNBODAwMCUwQSUyNCUyMG9wZW5lbnYlMjB2YWxpZGF0ZSUyMGh0dHBzJTNBJTJGJTJGbXktZW52LmhmLnNwYWNlJTBBJTBBJTIzJTIwVmFsaWRhdGUlMjB3aXRoJTIwZGV0YWlsZWQlMjBvdXRwdXQlMEElMjQlMjBvcGVuZW52JTIwdmFsaWRhdGUlMjAtLXZlcmJvc2UlMEElMEElMjMlMjBWYWxpZGF0ZSUyMHNwZWNpZmljJTIwZW52aXJvbm1lbnQlMEElMjQlMjBvcGVuZW52JTIwdmFsaWRhdGUlMjBlbnZzJTJGZWNob19lbnY=",highlighted:`<span class="hljs-comment"># Validate current directory (recommended)</span> | |
| $ <span class="hljs-built_in">cd</span> my_env | |
| $ openenv validate | |
| <span class="hljs-comment"># Validate a running environment and return JSON criteria</span> | |
| $ openenv validate --url http://localhost:8000 | |
| $ openenv validate https://my-env.hf.space | |
| <span class="hljs-comment"># Validate with detailed output</span> | |
| $ openenv validate --verbose | |
| <span class="hljs-comment"># Validate specific environment</span> | |
| $ openenv validate envs/echo_env`,lang:"bash",wrap:!1}),p(r,o)},$$slots:{default:!0}}),t(y);var X=e(y,2);l(X,{title:"openenv push",local:"openenv.cli.commands.push",headingTag:"h2"});var g=e(X,2),L=a(g);n(L,{name:"openenv.cli.commands.push",anchor:"openenv.cli.commands.push",source:"https://github.com/huggingface/openenv/blob/vr_1007/openenv/cli/commands/push.py#L510",parameters:[{name:"directory",val:": Annotated[str | None, typer.Argument(help='Directory containing the OpenEnv environment (default: current directory)')] = None"},{name:"repo_id",val:`: Annotated[str | None, typer.Option('--repo-id', '-r', help="Repository ID as 'repo_name' or 'namespace/repo_name'. Defaults to 'username/env-name' from openenv.yaml.")] = None`},{name:"base_image",val:": Annotated[str | None, typer.Option('--base-image', '-b', help='Base Docker image to use (overrides Dockerfile FROM)')] = None"},{name:"interface",val:": Annotated[bool, typer.Option('--interface', help='Enable web interface (default: True if no registry specified)')] = None"},{name:"no_interface",val:": Annotated[bool, typer.Option('--no-interface', help='Disable web interface')] = False"},{name:"registry",val:": Annotated[str | None, typer.Option('--registry', help='Custom registry URL (e.g., docker.io/username). Disables web interface by default.')] = None"},{name:"private",val:": Annotated[bool, typer.Option('--private', help='Deploy the space as private')] = False"},{name:"create_pr",val:": Annotated[bool, typer.Option('--create-pr', help='Create a Pull Request instead of pushing to the default branch')] = False"},{name:"exclude",val:": Annotated[str | None, typer.Option('--exclude', help='Optional additional ignore file with newline-separated glob patterns to exclude from Hugging Face uploads')] = None"},{name:"hardware",val:": Annotated[str | None, typer.Option('--hardware', '-H', help='Request hardware for Hugging Face Space (e.g. t4-medium, cpu-basic). See HF docs for options.')] = None"},{name:"count",val:": Annotated[int, typer.Option('--count', '-n', help='Number of Space instances to deploy. Each gets a numeric suffix (e.g. env-1, env-2).', min=1)] = 1"},{name:"env_vars",val:": Annotated[list[str] | None, typer.Option('--env-var', '-e', help='Public Space variable as KEY=VALUE (repeatable). Overrides matching keys from openenv.yaml variables:.')] = None"},{name:"secrets",val:": Annotated[list[str] | None, typer.Option('--secret', help='Private Space secret as KEY=VALUE (repeatable). Value is never logged.')] = None"}]});var de=e(L,10);v(de,{anchor:"openenv.cli.commands.push.example",children:(r,c)=>{var o=u(),d=e(m(o),2);i(d,{code:"JTIzJTIwUHVzaCUyMHRvJTIwSHVnZ2luZ0ZhY2UlMjBTcGFjZXMlMjBmcm9tJTIwY3VycmVudCUyMGRpcmVjdG9yeSUyMCh3ZWIlMjBpbnRlcmZhY2UlMjBlbmFibGVkKSUwQSUyNCUyMGNkJTIwbXlfZW52JTBBJTI0JTIwb3BlbmVudiUyMHB1c2glMEElMEElMjMlMjBQdXNoJTIwdG8lMjBIdWdnaW5nRmFjZSUyMHJlcG8lMjBhbmQlMjBvcGVuJTIwYSUyMFB1bGwlMjBSZXF1ZXN0JTBBJTI0JTIwb3BlbmVudiUyMHB1c2glMjBteS1vcmclMkZteS1lbnYlMjAtLWNyZWF0ZS1wciUwQSUyNCUyMG9wZW5lbnYlMjBwdXNoJTIwLS1yZXBvLWlkJTIwbXktb3JnJTJGbXktZW52JTIwLS1jcmVhdGUtcHIlMEElMEElMjMlMjBQdXNoJTIwdG8lMjBIdWdnaW5nRmFjZSUyMHdpdGhvdXQlMjB3ZWIlMjBpbnRlcmZhY2UlMEElMjQlMjBvcGVuZW52JTIwcHVzaCUyMC0tbm8taW50ZXJmYWNlJTBBJTBBJTIzJTIwUHVzaCUyMHRvJTIwRG9ja2VyJTIwSHViJTBBJTI0JTIwb3BlbmVudiUyMHB1c2glMjAtLXJlZ2lzdHJ5JTIwZG9ja2VyLmlvJTJGbXl1c2VyJTBBJTBBJTIzJTIwUHVzaCUyMHRvJTIwR2l0SHViJTIwQ29udGFpbmVyJTIwUmVnaXN0cnklMEElMjQlMjBvcGVuZW52JTIwcHVzaCUyMC0tcmVnaXN0cnklMjBnaGNyLmlvJTJGbXlvcmclMEElMEElMjMlMjBQdXNoJTIwdG8lMjBjdXN0b20lMjByZWdpc3RyeSUyMHdpdGglMjB3ZWIlMjBpbnRlcmZhY2UlMEElMjQlMjBvcGVuZW52JTIwcHVzaCUyMC0tcmVnaXN0cnklMjBteXJlZ2lzdHJ5LmlvJTJGcGF0aDElMkZwYXRoMiUyMC0taW50ZXJmYWNlJTBBJTBBJTIzJTIwUHVzaCUyMHRvJTIwc3BlY2lmaWMlMjBIdWdnaW5nRmFjZSUyMHJlcG8lMEElMjQlMjBvcGVuZW52JTIwcHVzaCUyMC0tcmVwby1pZCUyMG15LW9yZyUyRm15LWVudiUwQSUwQSUyMyUyMFB1c2glMjBwcml2YXRlbHklMjB3aXRoJTIwY3VzdG9tJTIwYmFzZSUyMGltYWdlJTBBJTI0JTIwb3BlbmVudiUyMHB1c2glMjAtLXByaXZhdGUlMjAtLWJhc2UtaW1hZ2UlMjBnaGNyLmlvJTJGaHVnZ2luZ2ZhY2UlMkZvcGVuZW52LWJhc2UlM0FsYXRlc3QlMEElMEElMjMlMjBQdXNoJTIwd2l0aCUyMEdQVSUyMGhhcmR3YXJlJTBBJTI0JTIwb3BlbmVudiUyMHB1c2glMjAtLWhhcmR3YXJlJTIwdDQtbWVkaXVtJTBBJTBBJTIzJTIwU2V0JTIwYSUyMHB1YmxpYyUyMFNwYWNlJTIwdmFyaWFibGUlMjAob3ZlcnJpZGVzJTIwb3BlbmVudi55YW1sJTIwdmFyaWFibGVzJTNBKSUwQSUyNCUyMG9wZW5lbnYlMjBwdXNoJTIwLWUlMjBPUEVOU1BJRUxfR0FNRSUzRHRpY190YWNfdG9lJTIwLWUlMjBNQVhfU1RFUFMlM0QxMDAlMEElMEElMjMlMjBTZXQlMjBhJTIwcHJpdmF0ZSUyMFNwYWNlJTIwc2VjcmV0JTIwKHZhbHVlJTIwbmV2ZXIlMjBsb2dnZWQpJTBBJTI0JTIwb3BlbmVudiUyMHB1c2glMjAtLXNlY3JldCUyME9QRU5BSV9BUElfS0VZJTNEc2stLi4u",highlighted:`<span class="hljs-comment"># Push to HuggingFace Spaces from current directory (web interface enabled)</span> | |
| $ <span class="hljs-built_in">cd</span> my_env | |
| $ openenv push | |
| <span class="hljs-comment"># Push to HuggingFace repo and open a Pull Request</span> | |
| $ openenv push my-org/my-env --create-pr | |
| $ openenv push --repo-id my-org/my-env --create-pr | |
| <span class="hljs-comment"># Push to HuggingFace without web interface</span> | |
| $ openenv push --no-interface | |
| <span class="hljs-comment"># Push to Docker Hub</span> | |
| $ openenv push --registry docker.io/myuser | |
| <span class="hljs-comment"># Push to GitHub Container Registry</span> | |
| $ openenv push --registry ghcr.io/myorg | |
| <span class="hljs-comment"># Push to custom registry with web interface</span> | |
| $ openenv push --registry myregistry.io/path1/path2 --interface | |
| <span class="hljs-comment"># Push to specific HuggingFace repo</span> | |
| $ openenv push --repo-id my-org/my-env | |
| <span class="hljs-comment"># Push privately with custom base image</span> | |
| $ openenv push --private --base-image ghcr.io/huggingface/openenv-base:latest | |
| <span class="hljs-comment"># Push with GPU hardware</span> | |
| $ openenv push --hardware t4-medium | |
| <span class="hljs-comment"># Set a public Space variable (overrides openenv.yaml variables:)</span> | |
| $ openenv push -e OPENSPIEL_GAME=tic_tac_toe -e MAX_STEPS=100 | |
| <span class="hljs-comment"># Set a private Space secret (value never logged)</span> | |
| $ openenv push --secret OPENAI_API_KEY=sk-...`,lang:"bash",wrap:!1}),p(r,o)},$$slots:{default:!0}}),t(g);var H=e(g,2);l(H,{title:"openenv serve",local:"openenv.cli.commands.serve",headingTag:"h2"});var M=e(H,4),ce=a(M);n(ce,{name:"openenv.cli.commands.serve",anchor:"openenv.cli.commands.serve",source:"https://github.com/huggingface/openenv/blob/vr_1007/openenv/cli/commands/serve.py#L17",parameters:[{name:"env_path",val:": Annotated[str | None, typer.Argument(help='Path to the environment directory (default: current directory)')] = None"},{name:"port",val:": Annotated[int, typer.Option('--port', '-p', help='Port to serve on')] = 8000"},{name:"host",val:": Annotated[str, typer.Option('--host', help='Host to bind to')] = '0.0.0.0'"},{name:"reload",val:": Annotated[bool, typer.Option('--reload', help='Enable auto-reload on code changes')] = False"}]}),s(14),t(M);var O=e(M,2);l(O,{title:"openenv fork",local:"openenv.cli.commands.fork",headingTag:"h2"});var J=e(O,2),Q=a(J);n(Q,{name:"openenv.cli.commands.fork",anchor:"openenv.cli.commands.fork",source:"https://github.com/huggingface/openenv/blob/vr_1007/openenv/cli/commands/fork.py#L58",parameters:[{name:"source_space",val:`: Annotated[str, typer.Argument(help="Source Space ID in format 'owner/space-name' (e.g. org/my-openenv-space)")]`},{name:"repo_id",val:": Annotated[str | None, typer.Option('--repo-id', '-r', help='Target repo ID for the fork (default: created under your account with same name)')] = None"},{name:"private",val:": Annotated[bool, typer.Option('--private', help='Create the forked Space as private')] = False"},{name:"set_env",val:": Annotated[list[str], typer.Option('--set-env', '-e', help='Set Space variable (public). Can be repeated. Format: KEY=VALUE')] = []"},{name:"set_secret",val:": Annotated[list[str], typer.Option('--set-secret', '--secret', '-s', help='Set Space secret. Can be repeated. Format: KEY=VALUE')] = []"},{name:"hardware",val:": Annotated[str | None, typer.Option('--hardware', '-H', help='Request hardware (e.g. t4-medium, cpu-basic). See Hub docs for options.')] = None"}]});var pe=e(Q,6);v(pe,{anchor:"openenv.cli.commands.fork.example",children:(r,c)=>{var o=u(),d=e(m(o),2);i(d,{code:"JTI0JTIwb3BlbmVudiUyMGZvcmslMjBvd25lciUyRnNvdXJjZS1zcGFjZSUwQSUyNCUyMG9wZW5lbnYlMjBmb3JrJTIwb3duZXIlMkZzb3VyY2Utc3BhY2UlMjAtLXByaXZhdGUlMEElMjQlMjBvcGVuZW52JTIwZm9yayUyMG93bmVyJTJGc291cmNlLXNwYWNlJTIwLS1yZXBvLWlkJTIwbXl1c2VyJTJGbXktZm9yayUwQSUyNCUyMG9wZW5lbnYlMjBmb3JrJTIwb3duZXIlMkZzb3VyY2Utc3BhY2UlMjAtLXNldC1lbnYlMjBNT0RFTF9JRCUzRHVzZXIlMkZtb2RlbCUyMC0tc2V0LXNlY3JldCUyMEhGX1RPS0VOJTNEaGZfeHh4JTBBJTI0JTIwb3BlbmVudiUyMGZvcmslMjBvd25lciUyRnNvdXJjZS1zcGFjZSUyMC0taGFyZHdhcmUlMjB0NC1tZWRpdW0=",highlighted:`$ openenv fork owner/source-space | |
| $ openenv fork owner/source-space --private | |
| $ openenv fork owner/source-space --repo-id myuser/my-fork | |
| $ openenv fork owner/source-space --set-env MODEL_ID=user/model --set-secret HF_TOKEN=hf_xxx | |
| $ openenv fork owner/source-space --hardware t4-medium`,lang:"bash",wrap:!1}),p(r,o)},$$slots:{default:!0}}),t(J);var z=e(J,2);l(z,{title:"openenv skills",local:"openenv.cli.commands.skills.skills_add",headingTag:"h2"});var $=e(z,6);i($,{code:"b3BlbmVudiUyMHNraWxscyUyMGFkZCUyMC0tY2xhdWRlJTIwJTIwJTIwJTIwJTIzJTIwJUUyJTg2JTkyJTIwLmNsYXVkZSUyRnNraWxscyUyRm9wZW5lbnYtY2xpJTJGJTBBb3BlbmVudiUyMHNraWxscyUyMGFkZCUyMC0tY3Vyc29yJTIwJTIwJTIwJTIwJTIzJTIwJUUyJTg2JTkyJTIwLmN1cnNvciUyRnNraWxscyUyRm9wZW5lbnYtY2xpJTJGJTBBb3BlbmVudiUyMHNraWxscyUyMGFkZCUyMC0tY29kZXglMjAlMjAlMjAlMjAlMjAlMjMlMjAlRTIlODYlOTIlMjAuY29kZXglMkZza2lsbHMlMkZvcGVuZW52LWNsaSUyRiUwQW9wZW5lbnYlMjBza2lsbHMlMjBhZGQlMjAtLW9wZW5jb2RlJTIwJTIwJTIzJTIwJUUyJTg2JTkyJTIwLm9wZW5jb2RlJTJGc2tpbGxzJTJGb3BlbmVudi1jbGklMkY=",highlighted:`openenv skills add --claude <span class="hljs-comment"># → .claude/skills/openenv-cli/</span> | |
| openenv skills add --cursor <span class="hljs-comment"># → .cursor/skills/openenv-cli/</span> | |
| openenv skills add --codex <span class="hljs-comment"># → .codex/skills/openenv-cli/</span> | |
| openenv skills add --opencode <span class="hljs-comment"># → .opencode/skills/openenv-cli/</span>`,lang:"bash",wrap:!1});var P=e($,6);i(P,{code:"b3BlbmVudiUyMHNraWxscyUyMGFkZCUyMC0tY2xhdWRlJTIwLS1nbG9iYWwlMjAlMjAlMjMlMjAlRTIlODYlOTIlMjB+JTJGLmNsYXVkZSUyRnNraWxscyUyRm9wZW5lbnYtY2xpJTJG",highlighted:'openenv skills add --claude --global <span class="hljs-comment"># → ~/.claude/skills/openenv-cli/</span>',lang:"bash",wrap:!1});var D=e(P,4);i(D,{code:"b3BlbmVudiUyMHNraWxscyUyMGFkZCUyMC0tY2xhdWRlJTIwLS1mb3JjZQ==",highlighted:"openenv skills add --claude --force",lang:"bash",wrap:!1});var K=e(D,4);i(K,{code:"b3BlbmVudiUyMHNraWxscyUyMHByZXZpZXc=",highlighted:"openenv skills preview",lang:"bash",wrap:!1});var q=e(K,4);i(q,{code:"b3BlbmVudiUyMHNraWxscyUyMGFkZCUyMC0tZGVzdCUyMCUyRnBhdGglMkZ0byUyRm15LWFnZW50JTJGc2tpbGxzJTJG",highlighted:"openenv skills add --dest /path/to/my-agent/skills/",lang:"bash",wrap:!1});var T=e(q,2),me=a(T);n(me,{name:"openenv.cli.commands.skills.skills_add",anchor:"openenv.cli.commands.skills.skills_add",source:"https://github.com/huggingface/openenv/blob/vr_1007/openenv/cli/commands/skills.py#L143",parameters:[{name:"claude",val:": Annotated[bool, typer.Option('--claude', help='Install for Claude.')] = False"},{name:"codex",val:": Annotated[bool, typer.Option('--codex', help='Install for Codex.')] = False"},{name:"cursor",val:": Annotated[bool, typer.Option('--cursor', help='Install for Cursor.')] = False"},{name:"opencode",val:": Annotated[bool, typer.Option('--opencode', help='Install for OpenCode.')] = False"},{name:"global_",val:": Annotated[bool, typer.Option('--global', '-g', help='Install globally (user-level) instead of in the current project directory.')] = False"},{name:"dest",val:": Annotated[Path | None, typer.Option(help='Install into a custom destination (skills directory path).')] = None"},{name:"force",val:": Annotated[bool, typer.Option('--force', help='Overwrite existing skills in the destination.')] = False"}]}),s(2),t(T);var w=e(T,2),ve=a(w);n(ve,{name:"openenv.cli.commands.skills.skills_preview",anchor:"openenv.cli.commands.skills.skills_preview",source:"https://github.com/huggingface/openenv/blob/vr_1007/openenv/cli/commands/skills.py#L137",parameters:[]}),s(2),t(w);var ee=e(w,2);l(ee,{title:"API Reference",local:"api-reference",headingTag:"h1"});var ne=e(ee,2);l(ne,{title:"Entry point",local:"openenv.cli. main .main",headingTag:"h2"});var _=e(ne,2),ue=a(_);n(ue,{name:"openenv.cli.__main__.main",anchor:"openenv.cli.__main__.main",source:"https://github.com/huggingface/openenv/blob/vr_1007/openenv/cli/__main__.py#L66",parameters:[]}),s(2),t(_);var ae=e(_,2);l(ae,{title:"CLI helpers",local:"openenv.cli._cli_utils.validate_env_structure",headingTag:"h2"});var B=e(ae,2),he=a(B);n(he,{name:"openenv.cli._cli_utils.validate_env_structure",anchor:"openenv.cli._cli_utils.validate_env_structure",source:"https://github.com/huggingface/openenv/blob/vr_1007/openenv/cli/_cli_utils.py#L30",parameters:[{name:"env_dir",val:": Path"},{name:"strict",val:": bool = False"}],parametersDescription:[{anchor:"openenv.cli._cli_utils.validate_env_structure.env_dir",description:`<strong>env_dir</strong> (<code>Path</code>) — | |
| Path to the environment directory.`,name:"env_dir"},{anchor:"openenv.cli._cli_utils.validate_env_structure.strict",description:`<strong>strict</strong> (<code>bool</code>, <em>optional</em>, defaults to <code>False</code>) — | |
| If <code>True</code>, enforce all optional requirements.`,name:"strict"}],returnDescription:`<script context="module">export const metadata = 'undefined';<\/script> | |
| <p><code>list</code> of validation warnings (empty if all checks pass).</p> | |
| `,raiseDescription:`<script context="module">export const metadata = 'undefined';<\/script> | |
| <ul> | |
| <li><code>FileNotFoundError</code> — If required files are missing.</li> | |
| </ul> | |
| `,raiseType:`<script context="module">export const metadata = 'undefined';<\/script> | |
| <p><code>FileNotFoundError</code></p> | |
| `}),s(2),t(B);var te=e(B,2);l(te,{title:"Validation utilities",local:"openenv.cli._validation.validate_running_environment",headingTag:"h2"});var f=e(te,2),be=a(f);n(be,{name:"openenv.cli._validation.validate_running_environment",anchor:"openenv.cli._validation.validate_running_environment",source:"https://github.com/huggingface/openenv/blob/vr_1007/openenv/cli/_validation.py#L99",parameters:[{name:"base_url",val:": str"},{name:"timeout_s",val:": float = 5.0"}]}),s(4),t(f);var I=e(f,2),ye=a(I);n(ye,{name:"openenv.cli._validation.validate_multi_mode_deployment",anchor:"openenv.cli._validation.validate_multi_mode_deployment",source:"https://github.com/huggingface/openenv/blob/vr_1007/openenv/cli/_validation.py#L505",parameters:[{name:"env_path",val:": Path"}],returnDescription:`<script context="module">export const metadata = 'undefined';<\/script> | |
| <p><code>tuple</code> of <code>(is_valid, issues)</code> where <code>is_valid</code> is a <code>bool</code> and <code>issues</code> is a | |
| <code>list</code> of issue strings found during validation.</p> | |
| `}),s(6),t(I);var j=e(I,2),ge=a(j);n(ge,{name:"openenv.cli._validation.get_deployment_modes",anchor:"openenv.cli._validation.get_deployment_modes",source:"https://github.com/huggingface/openenv/blob/vr_1007/openenv/cli/_validation.py#L581",parameters:[{name:"env_path",val:": Path"}],returnDescription:`<script context="module">export const metadata = 'undefined';<\/script> | |
| <p><code>dict</code> mapping deployment mode names to whether they are supported.</p> | |
| `}),s(2),t(j);var U=e(j,2),Me=a(U);n(Me,{name:"openenv.cli._validation.format_validation_report",anchor:"openenv.cli._validation.format_validation_report",source:"https://github.com/huggingface/openenv/blob/vr_1007/openenv/cli/_validation.py#L610",parameters:[{name:"env_name",val:": str"},{name:"is_valid",val:": bool"},{name:"issues",val:": list"}],returnDescription:`<script context="module">export const metadata = 'undefined';<\/script> | |
| <p>formatted validation report.</p> | |
| `,returnType:`<script context="module">export const metadata = 'undefined';<\/script> | |
| <p><code>str</code></p> | |
| `}),s(2),t(U);var Z=e(U,2),Je=a(Z);n(Je,{name:"openenv.cli._validation.build_local_validation_json_report",anchor:"openenv.cli._validation.build_local_validation_json_report",source:"https://github.com/huggingface/openenv/blob/vr_1007/openenv/cli/_validation.py#L628",parameters:[{name:"env_name",val:": str"},{name:"env_path",val:": Path"},{name:"is_valid",val:": bool"},{name:"issues",val:": list"},{name:"deployment_modes",val:": dict[str, bool] | None = None"}]}),s(2),t(Z);var Te=e(Z,2);fe(Te,{source:"https://github.com/huggingface/openenv/blob/main/docs/source/reference/cli.md"}),s(2),p(oe,V),Ze()}export{xe as component}; | |
Xet Storage Details
- Size:
- 31.6 kB
- Xet hash:
- 6da869b805243f9e601fbb62d330f42caf02e73ef4e6a3d42381988477ad637a
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.