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.
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.
For the human maintainer of this environment. Do not run these commands
on the user's behalf — relay them.
DEPRECATED: this skill is frozen and has moved to
flox/flox-skills.flox/flox-agentic receives no further updates and will be archived on
2026-09-30.
The seven skills here were consolidated into flox (reproducible
environments, with reference guides for services, builds, containers,
publishing, sharing, and CUDA). The maintained plugin also ships floxify
for onboarding an existing repo to Flox.
To migrate, a person should run claude plugin marketplace add flox/flox-skills and claude plugin install flox@flox-skills, then remove
this one with claude plugin uninstall flox@flox-agentic and claude plugin marketplace remove flox-agentic.
Flox Environments Guide
Working Style & Structure
Use modular, idempotent bash functions in hooks
Never, ever use absolute paths. Flox environments are designed to be reproducible. Use Flox's environment variables instead
I REPEAT: NEVER, EVER USE ABSOLUTE PATHS. Don't do it. Use $FLOX_ENV for environment-specific runtime dependencies; use $FLOX_ENV_PROJECT for the project directory
Name functions descriptively (e.g., setup_postgres())
Consider using gum for styled output when creating environments for interactive use; this is an anti-pattern in CI
Put persistent data/configs in $FLOX_ENV_CACHE
Return to $FLOX_ENV_PROJECT at end of hooks
Use mktemp for temp files, clean up immediately
Do not over-engineer: e.g., do not create unnecessary echo statements or superfluous comments; do not print unnecessary information displays in [hook] or [profile]; do not create helper functions or aliases without the user requesting these explicitly
Configuration & Secrets
Support VARIABLE=value flox activate pattern for runtime overrides
Never store secrets in manifest; use:
Environment variables
~/.config/<env_name>/ for persistent secrets
Existing config files (e.g., ~/.aws/credentials)
Installing Flox
Do NOT suggest install.flox.dev, flox.dev/install, or any curl | bash
one-liner — none of these exist.
Install Flox from flox.dev/download or via a package manager:
Flox uses nixpkgs as its upstream; packages are usually named the same; unlike nixpkgs, Flox Catalog has millions of historical package-version combinations
$FLOX_ENV: basically the path to /usr: contains all the libs, includes, bins, configs, etc. available to a specific flox environment
Always use flox init to create environments
Manifest changes take effect on next flox activate (not live reload)
Core Commands
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
Manifest Structure
[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 systems
The [install] Section
Package Installation Basics
The [install] table specifies packages to install.
Use descriptive, prefixed function names in composed envs
Cache downloads in $FLOX_ENV_CACHE
Test activation with flox activate -- <command> before adding to services
Use --quiet flag with uv/pip in hooks to reduce noise
Editing Manifests Non-Interactively
flox list -c > /tmp/manifest.toml
# Edit with sed/awk
flox edit -f /tmp/manifest.toml
Common Pitfalls
Hooks Run Every Activation
Hooks run EVERY activation (keep them fast/idempotent)
Hook vs Profile Functions
Hook functions are not available to users in the interactive shell; use [profile] for user-invokable commands/aliases
Profile Code in Layered Environments
Profile code runs for each layered/composed environment; keep auto-run display logic in [hook] to avoid repetition
Manifest Syntax Errors
Manifest syntax errors prevent ALL flox commands from working
Package Search Case Sensitivity
Package search is case-sensitive; use flox search --all for broader results
Troubleshooting Tips
Package Conflicts
If packages conflict, use different pkg-group values or adjust priority
Tricky Dependencies
If we need libstdc++, we get this from the gcc-unwrapped package, not from gcc
If user is working with python and requests uv, they typically do not mean uvicorn; clarify which package user wants
Hook Issues
Use return not exit in hooks
Define env vars with ${VAR:-default}
Guard FLOX_ENV_CACHE usage: ${FLOX_ENV_CACHE:-} with fallback
Environment Layering
What is Layering?
Layering is runtime stacking of environments where activate order matters. Each layer runs in its own subshell, preserving isolation while allowing tool composition.