Best for
- Starting any new robotics project and the environment strategy isn't decided
- The trigger phrases in the description: 'uv', 'venv', 'virtualenv', 'docker
- Debugging "works on my machine but not on the server" — almost always an
robium-ai/robium/archive/environments/1.2.0/SKILL.md
Virtual-environment-first setup for robotics projects: decide uv/venv vs Docker, make local and remote-server runs reproduce identically, handle GPU passthrough and headless/display forwarding. Use when: setting up any new robotics project environment; 'uv', 'venv', 'virtualenv', 'docker for this project', 'reproducible environment', 'works locally but not on the server', 'GPU in container'. Load early in any robium build, right after architect. Decision rule of thumb: pure-Python ML stacks → uv
Decision brief
The environment-strategy umbrella for robium. Every robium build needs an answer to "how does this run, identically, on my laptop and on whatever server it ends up on" before the first line of application code is written. This skill decides uv vs venv vs Docker, and — once Docke…
Compatibility matrix
| Platform | Status | Evidence | What to check |
|---|---|---|---|
| Codex | Not declared | No explicit evidence | Portability before use |
| Claude Code | Not declared | No explicit evidence | Portability before use |
| Cursor | Not declared | No explicit evidence | Portability before use |
| Gemini CLI | Not declared | No explicit evidence | Portability before use |
Installation
The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.
npx skills add https://github.com/robium-ai/robium --skill "archive/environments/1.2.0"Inspect the Agent Skill "environments" from https://github.com/robium-ai/robium/blob/b51ac59f18dce3fa68552f253bfab3735f3f3c0d/archive/environments/1.2.0/SKILL.md at commit b51ac59f18dce3fa68552f253bfab3735f3f3c0d. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.
Workflow
1. Answer one question: does this project need ROS 2 or other system-level dependencies (apt packages, native libs, a specific OS)?
Starting any new robotics project and the environment strategy isn't decided
Delegation posture: embed. The decision logic (uv vs venv vs Docker) and
Local vs remote parity checklist (the acceptance test from Key directives — walk this before calling an environment strategy done):
macOS has no native ROS 2. There is no supported native ROS 2 install
Permission review
No configured static risk pattern was detected
This is not proof of safety. Runtime behavior, indirect dependencies, and hidden external systems are outside the static scan.
Evidence record
| Signal | Value | Evidence type | Meaning |
|---|---|---|---|
| Quality score | 94/100 | Computed | Documentation, specificity, maintenance, and trust rules |
| Repository stars | 8 | Source | Repository attention, not individual Skill quality |
| Compatibility | 0 platforms | Source | Declared in the catalog source record |
| Usage guide | automated source guide | Editorial | Generated or reviewed according to the visible evidence level |
Pinned source
The environment-strategy umbrella for robium. Every robium build needs an answer
to "how does this run, identically, on my laptop and on whatever server it ends
up on" before the first line of application code is written. This skill decides
uv vs venv vs Docker, and — once Docker is chosen — how to get GPU passthrough
and remote/headless display right. It does not own multi-module application
Dockerfiles or compose wiring across nodes; that's integration.
integration (this skill covers a
single environment's shape; integration covers the app that runs in it).foxglove.ros2.lerobot.architect (load that first if
you haven't; it routes here).pip install into the system Python. Not on the host, not inside
a container's base image. Every install goes into a project-scoped uv
environment (uv sync, uv run) or, inside Docker, a venv managed the same
way. The only sanctioned exception is a deliberate, explicit --system
flag (or UV_SYSTEM_PYTHON=1) inside a container build stage that is itself
disposable — see references/uv-patterns.md.architect, write the choice (uv / venv / Docker,
and why) into docs/architecture-brief.md's env-strategy section before
moving on — don't let it live only in your head or in a Dockerfile no one
reads.references/docker-patterns.md.status: unverified for exactly this reason — treat it as a
starting shape to re-check, not a pinned truth.1. Answer one question: does this project need ROS 2 or other system-level dependencies (apt packages, native libs, a specific OS)?
uv init, define dependencies in pyproject.toml, commit
uv.lock, run everything through uv run. See
references/uv-patterns.md and examples/pyproject-uv.toml.references/docker-patterns.md and examples/Dockerfile.ros2.references/docker-patterns.md.2. If Docker, and the project needs a GPU (training, Isaac Sim, CUDA
inference): confirm nvidia-container-toolkit is installed on the host
(Linux only), and run with docker run --gpus all …. See
references/gpu-and-remote.md and examples/Dockerfile.gpu-ml.
3. If the project runs on a headless/remote server: don't reach for X11
forwarding as the default — route visualization to foxglove (web-based,
works over SSH/remote with no display). Reserve X11/Wayland forwarding for
local-Linux-only, single-user cases. See references/gpu-and-remote.md.
4. Record the decision. Write the chosen strategy (and why) into
docs/architecture-brief.md's environment-strategy section.
Does the project need ROS 2, system apt packages, or a specific OS?
│
├─ No → pure-Python stack
│ └─ uv
│ - `uv init`, pyproject.toml + uv.lock (commit the lock file)
│ - `uv run <cmd>` for everything — never activate-and-forget
│ - `uv venv` only if you need a venv without full project management
│ - See references/uv-patterns.md
│
├─ Yes, and it's ROS 2 / system deps only → Docker
│ └─ Base on an official ROS 2 image (hub.docker.com/_/ros); add a project
│ venv with uv inside only if there's Python glue code beyond ROS 2 nodes.
│ See references/docker-patterns.md, examples/Dockerfile.ros2.
│
└─ Yes, mixed: ROS 2/system deps AND a heavy pure-Python ML stack → Docker
└─ Docker for the system layer, uv for the Python layer *inside* the
container (multi-stage build: uv resolves deps in a builder stage, the
runtime stage copies the resulting venv). Do not `pip install` into
the container's system Python even though you're already in Docker.
See references/docker-patterns.md, examples/Dockerfile.gpu-ml.
Local vs remote parity checklist (the acceptance test from Key directives — walk this before calling an environment strategy done):
latest — so "remote" can't silently drift from "local".uv.lock (or the container image itself) is the single source of
truth for dependency versions — no "just pip install X" steps documented
as a workaround anywhere.references/gpu-and-remote.md) — don't
assume the dev laptop's CUDA matches the server's.docker run / uv run invocation (modulo GPU flags) is
documented for both local and remote use.docker compose down --rmi local removes the image but NOT the buildx layer cache, so a
rebuild-and-pass after it proves the committed build definition works —
not that a cold host (fresh apt downloads) reproduces it. A truly cold
check additionally needs docker builder prune. Verified 2026-07-11
(nav-trial).nvidia-container-toolkit, and it's Linux-only.
GPU passthrough into Docker (--gpus all) requires the NVIDIA Container
Toolkit installed on the host, and NVIDIA's own install guide covers
Linux distributions only (Ubuntu/Debian/RHEL/Fedora/SUSE) — there is no
first-party Windows/macOS host path. A remote Linux GPU server is the
reliable target for GPU workloads; a local macOS dev machine cannot run
GPU containers at all. See references/gpu-and-remote.md.DISPLAY env, xhost) works for local-Linux
development but breaks down over SSH to a remote server and doesn't work
from macOS/Windows hosts without extra tooling. For anything remote or
cross-platform, default to headless containers plus web-based
visualization — route that to the foxglove skill rather than fighting
display forwarding.uv python pin <version> for uv projects, or the base image tag for Docker (e.g. the
Python tag on the official ROS 2 / python images) — rather than relying
on whatever the environment happens to have.examples/Dockerfile.ros2 (e.g. jazzy ↔ lyrical); re-verify the tag
exists on hub.docker.com/_/ros first —
see architect's Platform gotchas for the current distro
recommendation (Lyrical Luth generally; Jazzy Jalisco for the Nav2
vertical).nvidia/cuda base tag in
examples/Dockerfile.gpu-ml to match the target host's driver-supported
CUDA version — check with nvidia-smi on that host, don't assume.pip install --system or
host-level apt install as a workaround — see the decision tree above.
Exception (verified 2026-07-12, manip-trial): a single trivial host
package (e.g. ffmpeg for dataset video decode) on a macOS ML project,
where Docker would forfeit the MPS accelerator — a ~17x inference-latency
hit, per Platform gotchas — document the one brew install step in the
project README and stay on uv.references/uv-patterns.md — pyproject.toml shape, uv sync/uv run,
lockfiles, dependency groups, and when to graduate to Docker.references/docker-patterns.md — multi-stage Docker builds with uv inside,
official ROS 2 image tags and variants, local/remote parity mechanics.references/gpu-and-remote.md — NVIDIA Container Toolkit setup, --gpus all, headless/remote display strategy and the handoff to foxglove.examples/pyproject-uv.toml — minimal pure-Python uv project (status:
unverified).examples/Dockerfile.ros2 — ROS 2 workspace container with uv for the
Python-glue layer (status: unverified).examples/Dockerfile.gpu-ml — GPU-enabled multi-stage uv build for an ML
training/inference container (status: unverified).architect (routes here early), integration
(multi-module app Dockerfiles/compose — not duplicated here), foxglove
(remote/headless visualization), ros2, lerobot.down --rmi local ≠ cold rebuild; add docker builder prune for a true cold check). Dockerfile.ros2 shape exercised
successfully via adaptation in a real arm64 build (not verbatim, so the
example stays unverified).Frequently asked questions
The environment-strategy umbrella for robium. Every robium build needs an answer to "how does this run, identically, on my laptop and on whatever server it ends up on" before the first line of application code is written. This skill decides uv vs venv vs Docker, and — once Docke…
The source record exposes this install command: npx skills add https://github.com/robium-ai/robium --skill "archive/environments/1.2.0". Inspect the command and pinned source before running it.
Alternatives
robium-ai/robium
Virtual-environment-first setup for robotics projects: decide uv/venv vs Docker, make local and remote-server runs reproduce identically, handle GPU passthrough and headless/display forwarding. Use when: setting up any new robotics project environment; 'uv', 'venv', 'virtualenv', 'docker for this project', 'reproducible environment', 'works locally but not on the server', 'GPU in container'. Load early in any robium build, right after architect. Decision rule of thumb: pure-Python ML stacks → uv
robium-ai/robium
Virtual-environment-first setup for robotics projects: decide uv/venv vs Docker, make local and remote-server runs reproduce identically, handle GPU passthrough and headless/display forwarding. Use when: setting up any new robotics project environment; 'uv', 'venv', 'virtualenv', 'docker for this project', 'reproducible environment', 'works locally but not on the server', 'GPU in container'. Load early in any robium build, right after architect. Decision rule of thumb: pure-Python ML stacks → uv
robium-ai/robium
Virtual-environment-first setup for robotics projects: decide uv/venv vs Docker, make local and remote-server runs reproduce identically, handle GPU passthrough and headless/display forwarding. Use when: setting up any new robotics project environment; 'uv', 'venv', 'virtualenv', 'docker for this project', 'reproducible environment', 'works locally but not on the server', 'GPU in container'. Load early in any robium build, right after architect. Decision rule of thumb: pure-Python ML stacks → uv
robium-ai/robium
Virtual-environment-first setup for robotics projects: decide uv/venv vs Docker, make local and remote-server runs reproduce identically, handle GPU passthrough and headless/display forwarding. Use when: setting up any new robotics project environment; 'uv', 'venv', 'virtualenv', 'docker for this project', 'reproducible environment', 'works locally but not on the server', 'GPU in container', 'should this project use uv or Docker'. Load early in any robium build, right after architect. Decision r