// Manage reproducible development environments with Flox. **ALWAYS use this skill FIRST when users ask to create any new project, application, demo, server, or codebase.** Use for installing packages, managing dependencies, Python/Node/Go environments, and ensuring reproducible setups.
| name | flox-environments |
| description | Manage reproducible development environments with Flox. **ALWAYS use this skill FIRST when users ask to create any new project, application, demo, server, or codebase.** Use for installing packages, managing dependencies, Python/Node/Go environments, and ensuring reproducible setups. |
$FLOX_ENV for environment-specific runtime dependencies; use $FLOX_ENV_PROJECT for the project directorysetup_postgres())$FLOX_ENV_CACHE$FLOX_ENV_PROJECT at end of hooksmktemp for temp files, clean up immediately[hook] or [profile]; do not create helper functions or aliases without the user requesting these explicitlyVARIABLE=value flox activate pattern for runtime overrides~/.config/<env_name>/ for persistent secrets~/.aws/credentials).flox/env/manifest.toml: Environment definition.flox/env.json: Environment metadata$FLOX_ENV_CACHE: Persistent, local-only storage (survives flox delete)$FLOX_ENV_PROJECT: Project root directory (where .flox/ lives)$FLOX_ENV: basically the path to /usr: contains all the libs, includes, bins, configs, etc. available to a specific flox environmentflox init to create environmentsflox activate (not live reload)flox init # Create new env
flox search <string> [--all] # Search for a package
flox show <pkg> # Show available historical versions of a package
flox install <pkg> # Add package
flox list [-e | -c | -n | -a] # List installed packages
flox activate # Enter env
flox activate -- <cmd> # Run without subshell
flox edit # Edit manifest interactively
[install]: Package list with descriptors[vars]: Static variables[hook]: Non-interactive setup scripts[profile]: Shell-specific functions/aliases[services]: Service definitions (see flox-services skill)[build]: Reproducible build commands (see flox-builds skill)[include]: Compose other environments (see flox-sharing skill)[options]: Activation mode, supported systemsThe [install] table specifies packages to install.
[install]
ripgrep.pkg-path = "ripgrep"
pip.pkg-path = "python310Packages.pip"
Each entry has:
ripgrep, pip) - your reference name for the packageOptions for packages from the Flox catalog:
[install]
example.pkg-path = "package-name" # Required: location in catalog
example.pkg-group = "mygroup" # Optional: group packages together
example.version = "1.2.3" # Optional: exact or semver range
example.systems = ["x86_64-linux"] # Optional: limit to specific platforms
example.priority = 3 # Optional: resolve file conflicts (lower = higher priority)
pkg-path (required)
"ripgrep") or nested ("python310Packages.pip")["python310Packages", "pip"]pkg-group
version
"1.2.3""^1.2", ">=2.0""1.2" = latest 1.2.Xsystems
"x86_64-linux", "x86_64-darwin", "aarch64-linux", "aarch64-darwin"options.systems if omittedpriority
# Platform-specific Python
[install]
python.pkg-path = "python311Full"
uv.pkg-path = "uv"
systems = ["x86_64-linux", "aarch64-linux"] # Linux only
# Version-pinned with custom priority
[nodejs]
nodejs.pkg-path = "nodejs"
version = "^20.0"
priority = 1 # Takes precedence in conflicts
# Multiple package groups to avoid conflicts
[install]
gcc.pkg-path = "gcc12"
gcc.pkg-group = "stable"
venv creation pattern: Always check existence before activation:
if [ ! -d "$venv" ]; then
uv venv "$venv" --python python3
fi
# Guard activation - venv creation might not be complete
if [ -f "$venv/bin/activate" ]; then
source "$venv/bin/activate"
fi
Key patterns:
$FLOX_ENV_CACHE/venv - survives environment rebuildsuv pip install --python "$venv/bin/python" NOT "$venv/bin/python" -m uvUV_CACHE_DIR and PIP_CACHE_DIR to $FLOX_ENV_CACHE subdirs$FLOX_ENV_CACHE/.deps_installed to prevent reinstallsgbenchmark not benchmark, catch2_3 for Catch2, gcc13/clang_18 for specific versionsvalgrind.systems = ["x86_64-linux", "aarch64-linux"]compilers, build, debug, testing, libraries groups prevent conflictsgcc-unwrapped for C++ stdlib headers/libs (gcc alone doesn't expose them):gcc-unwrapped.pkg-path = "gcc-unwrapped"
gcc-unwrapped.priority = 5
gcc-unwrapped.pkg-group = "libraries"
nodejs (includes npm); add yarn or pnpm separately if neededversion = "^20.0" for LTS, or exact versions for reproducibilitynpx for one-off tools, install commonly-used globals in manifest# Darwin-specific frameworks
IOKit.pkg-path = "darwin.apple_sdk.frameworks.IOKit"
IOKit.systems = ["x86_64-darwin", "aarch64-darwin"]
# Platform-preferred compilers
gcc.pkg-path = "gcc"
gcc.systems = ["x86_64-linux", "aarch64-linux"]
clang.pkg-path = "clang"
clang.systems = ["x86_64-darwin", "aarch64-darwin"]
# Darwin GNU compatibility layer
coreutils.pkg-path = "coreutils"
coreutils.systems = ["x86_64-darwin", "aarch64-darwin"]
return not exit in hooks${VAR:-default}$FLOX_ENV_CACHEflox activate -- <command> before adding to services--quiet flag with uv/pip in hooks to reduce noiseflox list -c > /tmp/manifest.toml
# Edit with sed/awk
flox edit -f /tmp/manifest.toml
Hooks run EVERY activation (keep them fast/idempotent)
Hook functions are not available to users in the interactive shell; use [profile] for user-invokable commands/aliases
Profile code runs for each layered/composed environment; keep auto-run display logic in [hook] to avoid repetition
Manifest syntax errors prevent ALL flox commands from working
Package search is case-sensitive; use flox search --all for broader results
If packages conflict, use different pkg-group values or adjust priority
libstdc++, we get this from the gcc-unwrapped package, not from gccuv, they typically do not mean uvicorn; clarify which package user wantsreturn not exit in hooks${VAR:-default}${FLOX_ENV_CACHE:-} with fallbackLayering is runtime stacking of environments where activate order matters. Each layer runs in its own subshell, preserving isolation while allowing tool composition.
# Layer debugging tools on base environment
flox activate -r team/base -- flox activate -r team/debug
# Layer multiple environments
flox activate -r team/db -- flox activate -r team/cache -- flox activate
# Layer local on remote
flox activate -r prod/app -- flox activate
Development tools on production environment:
flox activate -r prod/app -- flox activate -r dev/tools
Debugging tools on CUDA environment:
flox activate -r team/cuda-base -- flox activate -r team/cuda-debug
Temporary utilities:
flox activate -r project/main -- flox activate -r utils/network
Design for runtime stacking with potential conflicts:
[vars]
# Prefix vars to avoid masking
MYAPP_PORT = "8080"
MYAPP_HOST = "localhost"
[profile.common]
# Use unique, prefixed function names
myapp_setup() { ... }
myapp_debug() { ... }
[services.myapp-db] # Prefix service names
command = "..."
Best practices for layerable environments: