# denv > denv is the environment company. Environments you can version, fork per rollout, and grade apart from the agent: build one in Harbor, Inspect, OpenEnv, verifiers, HUD, Karotte, or your own framework, and denv runs it as a whole system, with its data, on your cloud or any sandbox. Agents run in it, get evaluated in it, and models train against it. We never own your compute or your data. denv is not a sandbox and not a task vendor. It is the platform that places an RL environment on a target the user connects (their own machines running the denvd sidecar, machines denv provisions on Hetzner or AWS, or hosted sandbox providers such as E2B, Daytona, Modal and Prime Sandboxes), versions it, snapshots it consistently, forks it per rollout, and runs the grader as a separate principal. Frameworks reach it through one sandbox API: create, exec, files, snapshot, fork, destroy. Vocabulary: Project (a repo with a kind) → Environment (a running stack; `alpha` by default; a fork is an environment with a parent version) → Deployment (a phased change with evidence) → Version (pinned image digests plus a consistent snapshot). A sandbox is an environment created for one episode. Protections by default for the rl-environment kind: the agent is never root; the verifier runs as a separate principal after the agent stops, on a fork; special files in submissions are refused; memory, pid and cpu caps on every service; egress denied and verified by a probe before every episode. ## Docs - [Quickstart](https://denv.ai/docs/tutorials/quickstart/): Deploy an environment, fork it, and grade it on your own machine in about five minutes. - [Connect a target](https://denv.ai/docs/how-to/connect-a-target/): Add somewhere for environments to run — your own machines, a cloud account denv provisions in, or a hosted sandbox provider. - [Deploy from GitHub on push](https://denv.ai/docs/how-to/push-to-deploy/): Connect a repository so every push to the default branch deploys alpha, with a check run that links to the phase log. - [Run a Harbor dataset on denv](https://denv.ai/docs/how-to/harbor/): Use denv as the Harbor environment backend so every trial gets a forked, protected environment. - [Use denv as an Inspect sandbox](https://denv.ai/docs/how-to/inspect/): Give every Inspect sample a forked denv environment with sandbox="denv". - [Run an OpenEnv environment on denv](https://denv.ai/docs/how-to/openenv/): Use DenvProvider to run an OpenEnv image as a denv sandbox and fork it mid-episode. - [Grade an episode with a separate verifier](https://denv.ai/docs/how-to/verify/): Declare a verifier in the compose file and run denv verify so the grader never shares a process tree with the agent. - [Snapshot and fork](https://denv.ai/docs/how-to/snapshot-and-fork/): Capture a running environment as a version, fork it per rollout, and roll back. - [denv CLI](https://denv.ai/docs/reference/cli/): Every denv command, subcommand, and flag, with the configuration the CLI reads. - [denvd sidecar](https://denv.ai/docs/reference/denvd/): The sidecar binary that runs on a host: verbs, flags, what it does on the machine, the install script, and the systemd unit. - [REST API](https://denv.ai/docs/reference/api/): Every route of the denv control plane, with auth, request and response shapes, and a curl example. - [Compose file and x-denv](https://denv.ai/docs/reference/compose/): The compose subset denv accepts, what it refuses and why, resource caps, the x-denv block, and the verifier contract. - [Python package](https://denv.ai/docs/reference/python/): The denv Python client and its Harbor, Inspect, and OpenEnv adapters, method by method. - [Control plane ↔ sidecar protocol](https://denv.ai/docs/reference/protocol/): The frames exchanged over a host's stream, every command kind with its payload and result, idempotency, and heartbeats. - [Deployments and phases](https://denv.ai/docs/reference/deployments/): Every deployment kind, its phases in order, what each phase records as evidence, and how failure is handled. - [Targets](https://denv.ai/docs/reference/targets/): Where environments run — sidecar hosts and hosted sandbox providers — with the capability table, placement rules, and join tokens. - [Control plane configuration](https://denv.ai/docs/reference/config/): Every flag and environment variable of denv-cp, the GitHub integrations it needs, and its CORS behaviour. - [Protections](https://denv.ai/docs/reference/protections/): The five protections an rl-environment gets by default — what enforces each, where the evidence is, and the exact strings you will see. - [Concepts](https://denv.ai/docs/explanation/concepts/): Projects, environments, deployments and versions, and why an environment is a system rather than a container. - [How snapshot and verify work](https://denv.ai/docs/explanation/snapshot-and-verify/): What happens when denv captures a running system, and why grading happens on a fork. - [Data handling](https://denv.ai/docs/explanation/data-handling/): What denv stores, what it never sees, and where your environments' data lives. ## Blog (the product spec, written for readers) - [Creating an environment on denv](https://denv.ai/blog/creating-an-environment/): Connect GitHub and a target. Describe the environment as a compose file. denv deploys it in phases, snapshots it, and lets you fork, replay, roll back, and hand it to any framework. - [Harbor on denv](https://denv.ai/blog/harbor/): Run any Harbor dataset with denv as the environment backend, import Harbor tasks as denv projects, and export denv environments as Harbor task directories. - [Inspect on denv](https://denv.ai/blog/inspect/): Use denv as an Inspect sandbox with sandbox="denv". Samples get a forked environment instead of a fresh container, and the eval log records what the environment was. - [OpenEnv on denv](https://denv.ai/blog/openenv/): Run OpenEnv environment images on denv with DenvProvider, fork them mid-episode, and export a denv version as an OpenEnv environment so every trainer that speaks OpenEnv can use it. - [verifiers (Prime Intellect) on denv](https://denv.ai/blog/verifiers/): Train with prime-rl against denv environments two ways — through verifiers' Harbor taskset with denv as the Harbor backend, or with a denv sandbox inside a verifiers environment. - [HUD on denv](https://denv.ai/blog/hud/): Run HUD environments on denv as a runtime, give HUD's MCP-driven agents a forkable world, and move HUD datasets between HUD and Harbor without leaving denv. - [Karotte on denv](https://denv.ai/blog/karotte/): Karotte's five protections, now with versions, snapshots, forks and multi-service worlds. Run Karotte environments inside denv and import them as denv projects. - [Training against denv environments](https://denv.ai/blog/trainers/): SkyRL, verl, rLLM, prime-rl, TRL and Tinker already read Harbor and OpenEnv. denv builds and runs the environment; the trainer reaches it through those two formats, and rollouts fork instead of rebuild. ## Code - [Backend: control plane, sidecar, CLI, Python adapters](https://github.com/opencrew-ai/denv-backend): Go control plane and `denvd` sidecar; `python/` holds the `denv` package with Harbor, Inspect and OpenEnv adapters and the framework conformance suite. - [Site](https://github.com/opencrew-ai/denv-frontend): this site, including the blog source under `content/blog/`. ## Optional - [Full text of every post](https://denv.ai/llms-full.txt): the same posts, concatenated as markdown. - [Sitemap](https://denv.ai/sitemap.xml) - [RSS](https://denv.ai/feed.xml)