Communitygithub.com

flox-environments

Créez des environnements de développement reproductibles et multiplateformes (macOS/Linux) avec Flox, un gestionnaire d'environnements déclaratif basé sur Nix. À utiliser pour configurer des chaînes d'outils pour n'importe quel langage, installer des dépendances système (compilateurs, bases de données, bibliothèques natives comme openssl/BLAS), épingler des versions exactes de paquets pour une équipe, exécuter des services locaux (PostgreSQL, Redis, Kafka), intégrer de nouveaux développeurs avec une seule commande, ou résoudre

Qu'est-ce que flox-environments ?

Flox est un gestionnaire d'environnements de développement déclaratif et reproductible, basé sur Nix, qui fonctionne à la fois sur macOS et Linux. Il permet de définir l'ensemble des outils et dépendences d'un projet (compilateurs, bases de données, interpréteurs, utilitaires CLI) dans un unique fichier TOML, sans avoir recours à des machines virtuelles ou des conteneurs. Ce skill est particulièrement utile pour les projets nécessitant une configuration complexe (système + langage), une reproductibilité stricte entre les machines des développeurs et le CI, et une gestion de versions précises. Il s'intègre parfaitement avec les agents d'IA comme Claude Code, Cursor ou Codex, car il permet d'installer des paquets sans droits sudo, de manière isolée par projet, et de versionner toutes les modifications avec git. Flox offre un accès à plus de 150 000 paquets via le catalogue Nix, et ses environnements peuvent être partagés via git ou FloxHub, y compris des environnements distants et la composition d'environnements de base.

Compatible avec✓Claude Code~Codex CLI~Cursor✓Antigravity
npx skills add https://github.com/affaan-m/everything-claude-code/tree/main/skills/flox-environments

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Environnements Flox

Flox crée des environnements de développement reproductibles définis dans un seul manifeste TOML. Chaque développeur de l'équipe obtient des paquets, des outils et une configuration identiques — sur macOS et Linux — sans conteneurs ni machines virtuelles. Construit sur Nix avec accès à plus de 150 000 paquets.

Quand activer ce skill

Utilisez ce skill lorsque l'utilisateur a un problème de gestion d'environnement — même s'il n'a pas mentionné Flox. Flox est l'outil approprié quand :

  • Le projet nécessite des paquets système (compilateurs, bases de données, outils CLI) en plus des dépendances spécifiques au langage
  • La reproductibilité est importante — la configuration doit fonctionner à l'identique sur la machine d'un collègue, dans le CI, ou sur un ordinateur neuf
  • L'utilisateur a besoin que plusieurs outils coexistent — par exemple, Python 3.11 + PostgreSQL 16 + Redis + Node.js dans un seul environnement
  • Le support multiplateforme est nécessaire (macOS et Linux à partir de la même configuration)
  • Les agents d'IA ont besoin d'installer des outils — Flox permet aux agents d'ajouter des paquets à un environnement lié à un projet sans sudo, sans polluer le système, et sans restrictions de bac à sable

Si l'utilisateur a seulement besoin d'un seul environnement d'exécution pour un langage sans dépendances système, les outils standard (nvm, pyenv, rustup seuls) peuvent suffire. Si une isolation complète au niveau du système d'exploitation est nécessaire, les conteneurs peuvent être plus appropriés. Flox se situe dans la zone idéale : des environnements déclaratifs et reproductibles sans la surcharge des conteneurs.

Prérequis : Flox doit d'abord être installé — voir flox.dev/docs pour macOS, Linux et Docker.

Concepts Fondamentaux

Les environnements Flox sont définis dans .flox/env/manifest.toml et activés avec flox activate. Le manifeste déclare les paquets, les variables d'environnement, les hooks de configuration et la configuration du shell — tout ce qui est nécessaire pour reproduire l'environnement n'importe où.

Chemins clés :

  • .flox/env/manifest.toml — Définition de l'environnement (à commiter)
  • $FLOX_ENV — Chemin d'exécution vers les paquets installés (comme /usr — contient bin/, lib/, include/)
  • $FLOX_ENV_CACHE — Stockage local persistant pour les caches, environnements virtuels, données (survit aux reconstructions)
  • $FLOX_ENV_PROJECT — Répertoire racine du projet (où se trouve .flox/)

Commandes Essentielles

flox init                       # Créer un nouvel environnement
flox search <paquet> [--all]    # Rechercher des paquets
flox show <paquet>              # Afficher les versions disponibles
flox install <paquet>           # Ajouter un paquet
flox list                       # Lister les paquets installés
flox activate                   # Entrer dans l'environnement
flox activate -- <cmd>          # Exécuter une commande dans l'environnement sans sous-shell
flox edit                       # Modifier le manifeste de manière interactive

Structure du Manifeste

# .flox/env/manifest.toml

[install]
# Paquets à installer — le cœur de l'environnement
ripgrep.pkg-path = "ripgrep"
jq.pkg-path = "jq"

[vars]
# Variables d'environnement statiques
DATABASE_URL = "postgres://localhost:5432/monapp"

[hook]
# Scripts de configuration non interactifs (exécutés à chaque activation)
on-activate = """
  echo "Environnement prêt"
"""

[profile]
# Fonctions shell et alias (disponibles dans le shell interactif)
common = """
  alias dev="npm run dev"
"""

[options]
# Plateformes supportées
systems = ["x86_64-linux", "aarch64-linux", "x86_64-darwin", "aarch64-darwin"]

Schémas d'Installation de Paquets

Installation de Base

[install]
nodejs.pkg-path = "nodejs"
python.pkg-path = "python311"
rustup.pkg-path = "rustup"

Épinglage de Version

[install]
nodejs.pkg-path = "nodejs"
nodejs.version = "^20.0"          # Intervalle semver : dernière 20.x

postgres.pkg-path = "postgresql"
postgres.version = "16.2"         # Version exacte

Paquets Spécifiques à une Plateforme

[install]
# Outils Linux uniquement
valgrind.pkg-path = "valgrind"
valgrind.systems = ["x86_64-linux", "aarch64-linux"]

# Frameworks macOS
Security.pkg-path = "darwin.apple_sdk.frameworks.Security"
Security.systems = ["x86_64-darwin", "aarch64-darwin"]

# Outils GNU sur macOS (là où les BSD par défaut diffèrent)
coreutils.pkg-path = "coreutils"
coreutils.systems = ["x86_64-darwin", "aarch64-darwin"]

Résolution de Conflits de Paquets

Lorsque deux paquets installent le même binaire, utilisez priority (le nombre le plus bas gagne) :

[install]
gcc.pkg-path = "gcc12"
gcc.priority = 3

clang.pkg-path = "clang_18"
clang.priority = 5               # gcc gagne les conflits de fichiers

Utilisez pkg-group pour grouper les paquets qui doivent résoudre leurs versions ensemble :

[install]
python.pkg-path = "python311"
python.pkg-group = "python-stack"

pip.pkg-path = "python311Packages.pip"
pip.pkg-group = "python-stack"    # Se résout avec python

Recettes Spécifiques aux Langages

Python avec uv

[install]
python.pkg-path = "python311"
uv.pkg-path = "uv"

[vars]
UV_CACHE_DIR = "$FLOX_ENV_CACHE/uv-cache"
PIP_CACHE_DIR = "$FLOX_ENV_CACHE/pip-cache"

[hook]
on-activate = """
  venv="$FLOX_ENV_CACHE/venv"
  if [ ! -d "$venv" ]; then
    uv venv "$venv" --python python3
  fi
  if [ -f "$venv/bin/activate" ]; then
    source "$venv/bin/activate"
  fi

  if [ -f requirements.txt ] && [ ! -f "$FLOX_ENV_CACHE/.deps_installed" ]; then
    uv pip install --python "$venv/bin/python" -r requirements.txt --quiet
    touch "$FLOX_ENV_CACHE/.deps_installed"
  fi
"""

Node.js

[install]
nodejs.pkg-path = "nodejs"
nodejs.version = "^20.0"

[hook]
on-activate = """
  if [ -f package.json ] && [ ! -d node_modules ]; then
    npm install --silent
  fi
"""

Rust

[install]
rustup.pkg-path = "rustup"
pkg-config.pkg-path = "pkg-config"
openssl.pkg-path = "openssl"

[vars]
RUSTUP_HOME = "$FLOX_ENV_CACHE/rustup"
CARGO_HOME = "$FLOX_ENV_CACHE/cargo"

[profile]
common = """
  export PATH="$CARGO_HOME/bin:$PATH"
"""

Go

[install]
go.pkg-path = "go"
gopls.pkg-path = "gopls"
delve.pkg-path = "delve"

[vars]
GOPATH = "$FLOX_ENV_CACHE/go"
GOBIN = "$FLOX_ENV_CACHE/go/bin"

[profile]
common = """
  export PATH="$GOBIN:$PATH"
"""

C/C++

[install]
gcc.pkg-path = "gcc13"
gcc.pkg-group = "compilers"

# IMPORTANT : gcc seul n'expose pas les en-têtes libstdc++ — vous avez besoin de gcc-unwrapped
gcc-unwrapped.pkg-path = "gcc-unwrapped"
gcc-unwrapped.pkg-group = "libraries"

cmake.pkg-path = "cmake"
cmake.pkg-group = "build"

gnumake.pkg-path = "gnumake"
gnumake.pkg-group = "build"

gdb.pkg-path = "gdb"
gdb.systems = ["x86_64-linux", "aarch64-linux"]

Hooks et Profil

Hooks — Configuration Non Interactive

Les hooks s'exécutent à chaque activation. Gardez-les rapides et idempotents. Règle générale : si cela doit se faire automatiquement, mettez-le dans [hook] ; si l'utilisateur doit pouvoir le taper, mettez-le dans [profile].

[hook]
on-activate = """
  setup_database() {
    if [ ! -d "$FLOX_ENV_CACHE/pgdata" ]; then
      initdb -D "$FLOX_ENV_CACHE/pgdata" --no-locale --encoding=UTF8
    fi
  }
  setup_database
"""

Profil — Configuration Interactive du Shell

Le code du profil est disponible dans la session shell de l'utilisateur.

[profile]
common = """
  dev() { npm run dev; }
  test() { npm run test -- "$@"; }
"""

Anti-Patterns

Chemins Absolus

# MAUVAIS — ne fonctionne pas sur d'autres machines
[vars]
PROJECT_DIR = "/home/alice/projects/monapp"

# BON — utilisez les variables d'environnement Flox
[vars]
PROJECT_DIR = "$FLOX_ENV_PROJECT"

Utiliser exit dans les Hooks

# MAUVAIS — tue le shell
[hook]
on-activate = """
  if [ ! -f config.json ]; then
    echo "Configuration manquante"
    exit 1
  fi
"""

# BON — retour du hook, ne quittez pas
[hook]
on-activate = """
  if [ ! -f config.json ]; then
    echo "Configuration manquante — exécutez d'abord la configuration"
    return 1
  fi
"""

Stocker des Secrets dans le Manifeste

# MAUVAIS — le manifeste est commité dans git
[vars]
API_KEY = "<défini à l'exécution>"

# BON — référencer une configuration externe ou passer à l'exécution
# Utilisez : API_KEY="<votre-clé-api>" flox activate
[vars]
API_KEY = "${API_KEY:-}"

Hooks Lents Sans Gardes d'Idempotence

# MAUVAIS — réinstalle à chaque activation
[hook]
on-activate = """
  pip install -r requirements.txt
"""

# BON — ignorer si déjà installé
[hook]
on-activate = """
  if [ ! -f "$FLOX_ENV_CACHE/.deps_installed" ]; then
    uv pip install -r requirements.txt --quiet
    touch "$FLOX_ENV_CACHE/.deps_installed"
  fi
"""

Mettre des Commandes Utilisateur dans les Hooks

# MAUVAIS — les fonctions du hook ne sont pas disponibles dans le shell interactif
[hook]
on-activate = """
  deploy() { kubectl apply -f k8s/; }
"""

# BON — utilisez [profile] pour les fonctions invocables par l'utilisateur
[profile]
common = """
  deploy() { kubectl apply -f k8s/; }
"""

Exemple Full-Stack

Un environnement complet pour une API Python avec PostgreSQL :

[install]
python.pkg-path = "python311"
uv.pkg-path = "uv"
postgresql.pkg-path = "postgresql_16"
redis.pkg-path = "redis"
jq.pkg-path = "jq"
curl.pkg-path = "curl"

[vars]
UV_CACHE_DIR = "$FLOX_ENV_CACHE/uv-cache"
DATABASE_URL = "postgres://localhost:5432/monapp"
REDIS_URL = "redis://localhost:6379"

[hook]
on-activate = """
  if [ ! -d "$FLOX_ENV_CACHE/pgdata" ]; then
    initdb -D "$FLOX_ENV_CACHE/pgdata" --no-locale --encoding=UTF8
  fi

  venv="$FLOX_ENV_CACHE/venv"
  if [ ! -d "$venv" ]; then
    uv venv "$venv" --python python3
  fi
  if [ -f "$venv/bin/activate" ]; then
    source "$venv/bin/activate"
  fi

  if [ -f requirements.txt ] && [ ! -f "$FLOX_ENV_CACHE/.deps_installed" ]; then
    uv pip install --python "$venv/bin/python" -r requirements.txt --quiet
    touch "$FLOX_ENV_CACHE/.deps_installed"
  fi
"""

[profile]
common = """
  serve() { uvicorn app.main:app --reload --host 0.0.0.0 --port 8000; }
  migrate() { alembic upgrade head; }
"""

[services]
postgres.command = "postgres -D $FLOX_ENV_CACHE/pgdata -k $FLOX_ENV_CACHE"
redis.command = "redis-server --port 6379 --daemonize no"

[options]
systems = ["x86_64-linux", "aarch64-linux", "x86_64-darwin", "aarch64-darwin"]

Activation avec les services : flox activate --start-services

Partage d'Environnement

Les environnements Flox sont natifs git. Commitez le répertoire .flox/ et chaque collaborateur obtient le même environnement :

git add .flox/
git commit -m "Ajout de l'environnement Flox"
# Les collègues exécutent simplement :
git clone <repo> && cd <repo> && flox activate

Pour des environnements de base réutilisables entre projets, poussez vers FloxHub :

flox push                         # Pousser l'environnement vers FloxHub
flox activate -r proprietaire/env   # Activer un environnement distant n'importe où

Composez des environnements avec [include] :

[include]
base.floxhub = "myorg/python-base"

[install]
# Ajouts spécifiques au projet par-dessus la base
fastapi.pkg-path = "python311Packages.fastapi"

Assistance IA et Codage d'Ambiance (Vibe Coding)

Flox est idéal pour le développement assisté par IA et les workflows de codage d'ambiance. Lorsqu'un agent d'IA a besoin d'un outil qui n'est pas disponible dans l'environnement actuel — un compilateur, une base de données, un linter, un utilitaire CLI — il peut l'ajouter au manifeste Flox du projet sans nécessiter de droits sudo, sans polluer les paquets système, et sans restriction de bac à sable.

Pourquoi c'est important pour les agents :

  • Aucun sudo requis — flox install fonctionne entièrement dans l'espace utilisateur, donc les agents peuvent ajouter des paquets sans permissions élevées
  • Limité au projet — les paquets sont installés uniquement dans l'environnement du projet, pas globalement, donc différents projets peuvent avoir différentes versions sans conflit
  • Adapté aux bacs à sable — les agents s'exécutant dans des environnements cloisonnés ou restreints peuvent toujours installer les outils dont ils ont besoin via Flox
  • Réversible — chaque modification est capturée dans manifest.toml, donc les paquets indésirables peuvent être supprimés proprement sans laisser de trace système
  • Reproductible — lorsqu'un agent configure un environnement, cette configuration exacte est commitée dans git et fonctionne pour tout le monde

Modèle de workflow pour l'agent :

# L'agent découvre qu'il a besoin d'un outil (par exemple jq pour le traitement JSON)
flox search jq                    # Vérifier que le paquet existe
flox install jq                   # Installer dans l'environnement du projet

# Ou pour plus de contrôle, éditer le manifeste directement
tmp_manifest="$(mktemp)"
flox list -c > "$tmp_manifest"
# Ajouter le paquet à la section [install], puis appliquer
flox edit -f "$tmp_manifest"

# Exécuter une commande avec l'outil disponible
flox activate -- jq '.results[]' data.json

Cela fait de Flox un choix naturel pour tout workflow où Claude Code ou d'autres agents d'IA ont besoin de configurer les outils du projet à la volée.

Débogage

flox list -c                      # Afficher le manifeste brut
flox activate -- which python     # Vérifier quel binaire est résolu
flox activate -- env | grep FLOX  # Voir les variables d'environnement Flox
flox search <paquet> --all        # Recherche de paquets plus large (sensible à la casse)

Problèmes courants :

  • Paquet non trouvé : La recherche est sensible à la casse — essayez flox search --all
  • Conflits de fichiers entre paquets : Ajoutez priority au paquet qui doit gagner
  • Échecs de hook : Utilisez return pas exit ; protégez avec ${FLOX_ENV_CACHE:-}
  • Dépendances obsolètes : Supprimez le fichier de drapeau $FLOX_ENV_CACHE/.deps_installed

Compétences Connexes

Les compétences suivantes sont disponibles dans le cadre du plugin Flox Claude Code pour une intégration plus poussée :

  • flox-services — Gestion des services, configuration de bases de données, processus en arrière-plan
  • flox-builds — Constructions reproductibles et empaquetage avec Flox
  • flox-containers — Création de conteneurs Docker/OCI à partir d'environnements Flox
  • flox-sharing — Composition d'environnements, environnements distants, modèles d'équipe
  • flox-cuda — Environnements de développement CUDA et GPU

Apprenez-en plus et installez sur flox.dev/docs

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

accessibility

Design, implement, and audit inclusive digital products using WCAG 2.2 Level AA. Use when building or auditing UI that must meet WCAG 2.2 Level AA, or when reviewing a change for keyboard, contrast, or screen-reader support.

affaan-m/claude-api

Anthropic Claude API patterns for Python and TypeScript. Covers Messages API, streaming, tool use, vision, extended thinking, batches, prompt caching, and Claude Agent SDK. Use when building applications with the Claude API or Anthropic SDKs.

affaan-m/everything-claude-code

End-to-end marketing campaign planning and execution. Covers audience research, positioning, campaign angle definition, landing page copy, email sequences, social posts, ad copy, short-form video scripts, and content calendars. Use as the orchestration layer for multi-channel product launches. Use when planning or executing a multi-channel product launch, or producing landing page, email, social, or ad copy.

affaan-m/everything-claude-code

Development conventions and patterns for everything-claude-code. JavaScript project with conventional commits.

affaan-m/everything-claude-code-conventions

Development conventions and patterns for everything-claude-code. JavaScript project with conventional commits.

affaan-m/frontend-design

Create distinctive, production-grade frontend interfaces with high design quality. Use when the user asks to build web components, pages, or applications and the visual direction matters as much as the code quality.

affaan-m/gget

gget CLI and Python workflow for quick genomic database queries, sequence lookup, BLAST-style searches, enrichment checks, and reproducible bioinformatics evidence logs.

affaan-m/literature-review

Systematic literature-review workflow for academic, biomedical, technical, and scientific topics, including search planning, source screening, synthesis, citation checks, and evidence logging.

affaan-m/motion-ui

Production-ready UI motion system for React/Next.js. Use when implementing animations, transitions, or motion patterns.

affaan-m/project-guidelines-example

Example project-specific skill template based on a real production application.

affaan-m/pubmed-database

Direct PubMed and NCBI E-utilities search workflows for biomedical literature, MeSH queries, PMID lookup, citation retrieval, and API-backed literature monitoring.

affaan-m/scholar-evaluation

Structured scholarly-work evaluation for papers, proposals, literature reviews, methods sections, evidence quality, citation support, and research-writing feedback.

affaan-m/uspto-database

USPTO patent and trademark data workflow for official record lookup, PatentSearch queries, TSDR checks, assignment data, and reproducible IP research logs.

agent-architecture-audit

Full-stack diagnostic for agent and LLM applications. Audits the 12-layer agent stack for wrapper regression, memory pollution, tool discipline failures, hidden repair loops, and rendering corruption. Produces severity-ranked findings with code-first fixes. Essential for developers building agent applications, autonomous loops, or any LLM-powered feature. Use when an agent or LLM feature misbehaves and the failing layer is unknown, or before shipping an agent stack.

agent-eval

Head-to-head comparison of coding agents (Claude Code, Aider, Codex, etc.) on custom tasks with pass rate, cost, time, and consistency metrics. Use when choosing between coding agents, or when a change to an agent setup needs measured pass rate, cost, and time rather than an impression.

agent-harness-construction

Design and optimize AI agent action spaces, tool definitions, and observation formatting for higher completion rates. Use when defining or revising an agent

agentic-engineering

Operate as an agentic engineer using eval-first execution, decomposition, and cost-aware model routing. Use when planning or executing engineering work that agents will carry out end to end.

agentic-os

Build persistent multi-agent operating systems on Claude Code. Covers kernel architecture, specialist agents, slash commands, file-based memory, scheduled automation, and state management without external databases. Use when building a persistent multi-agent system on Claude Code with its own memory, commands, and scheduling.

agent-introspection-debugging

Structured self-debugging workflow for AI agent failures using capture, diagnosis, contained recovery, and introspection reports. Use when an agent run fails and you need a reproducible diagnosis instead of a retry.

agent-payment-x402

Add x402 payment execution to AI agents with per-task budgets, spending controls, and non-custodial wallets. Supports Base through agentwallet-sdk and X Layer through OKX Payments / OKX Agent Payments Protocol. Use when an agent must pay for something itself and needs per-task budgets, spending controls, and a non-custodial wallet.

Skills associés