Claude-skill-registry flox-services
Running services and background processes in Flox environments. Use for service configuration, network services, logging, database setup, and service debugging.
git clone https://github.com/majiayu000/claude-skill-registry
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/flox-services" ~/.claude/skills/majiayu000-claude-skill-registry-flox-services && rm -rf "$T"
skills/data/flox-services/SKILL.mdFlox Services Guide
Running Services in Flox Environments
- Start with
orflox activate --start-servicesflox activate -s - Define
,is-daemon
for background processesshutdown.command - Keep services running using
tail -f /dev/null - Use
to manage (must be in activated env)flox services status/logs/restart - Service commands don't inherit hook activations; explicitly source/activate what you need
Core Commands
flox activate -s # Start services flox services status # Check service status flox services logs <service> # View service logs flox services restart <service> # Restart a service flox services stop <service> # Stop a service
Network Services Pattern
Always make host/port configurable via vars:
[services.webapp] command = '''exec app --host "$APP_HOST" --port "$APP_PORT"''' [vars] APP_HOST = "0.0.0.0" # Network-accessible APP_PORT = "8080"
Service Logging Pattern
Always pipe to
$FLOX_ENV_CACHE/logs/ for debugging:
[services.myapp] command = ''' mkdir -p "$FLOX_ENV_CACHE/logs" exec app 2>&1 | tee -a "$FLOX_ENV_CACHE/logs/app.log" '''
Python venv Pattern for Services
Services must activate venv independently:
[services.myapp] command = ''' [ -f "$FLOX_ENV_CACHE/venv/bin/activate" ] && \ source "$FLOX_ENV_CACHE/venv/bin/activate" exec python-app "$@" '''
Or use venv Python directly:
[services.myapp] command = '''exec "$FLOX_ENV_CACHE/venv/bin/python" app.py'''
Using Packaged Services
Override package's service by redefining with same name.
Database Service Examples
PostgreSQL
[services.postgres] command = ''' mkdir -p "$FLOX_ENV_CACHE/postgres" if [ ! -d "$FLOX_ENV_CACHE/postgres/data" ]; then initdb -D "$FLOX_ENV_CACHE/postgres/data" fi exec postgres -D "$FLOX_ENV_CACHE/postgres/data" \ -k "$FLOX_ENV_CACHE/postgres" \ -h "$POSTGRES_HOST" \ -p "$POSTGRES_PORT" ''' is-daemon = true [vars] POSTGRES_HOST = "localhost" POSTGRES_PORT = "5432" POSTGRES_USER = "myuser" POSTGRES_DB = "mydb"
Redis
[services.redis] command = ''' mkdir -p "$FLOX_ENV_CACHE/redis" exec redis-server \ --bind "$REDIS_HOST" \ --port "$REDIS_PORT" \ --dir "$FLOX_ENV_CACHE/redis" ''' is-daemon = true [vars] REDIS_HOST = "127.0.0.1" REDIS_PORT = "6379"
MongoDB
[services.mongodb] command = ''' mkdir -p "$FLOX_ENV_CACHE/mongodb" exec mongod \ --dbpath "$FLOX_ENV_CACHE/mongodb" \ --bind_ip "$MONGODB_HOST" \ --port "$MONGODB_PORT" ''' is-daemon = true [vars] MONGODB_HOST = "127.0.0.1" MONGODB_PORT = "27017"
Web Server Examples
Node.js Development Server
[services.dev-server] command = ''' exec npm run dev -- --host "$DEV_HOST" --port "$DEV_PORT" ''' [vars] DEV_HOST = "0.0.0.0" DEV_PORT = "3000"
Python Flask/FastAPI
[services.api] command = ''' source "$FLOX_ENV_CACHE/venv/bin/activate" exec python -m uvicorn main:app \ --host "$API_HOST" \ --port "$API_PORT" \ --reload ''' [vars] API_HOST = "0.0.0.0" API_PORT = "8000"
Simple HTTP Server
[services.web] command = '''exec python -m http.server "$WEB_PORT"''' [vars] WEB_PORT = "8000"
Environment Variable Convention
Use variables like
POSTGRES_HOST, POSTGRES_PORT to define where services run.
These store connection details separately:
is the hostname or IP address (e.g.,*_HOST
,localhost
)db.example.com
is the network port number (e.g.,*_PORT
,5432
)6379
This pattern ensures users can override them at runtime:
POSTGRES_HOST=db.internal POSTGRES_PORT=6543 flox activate -s
Use consistent naming across services so the meaning is clear to any system or person reading the variables.
Service with Shutdown Command
[services.myapp] command = '''exec myapp start''' is-daemon = true [services.myapp.shutdown] command = '''myapp stop'''
Dependent Services
Services can wait for other services to be ready:
[services.db] command = '''exec postgres -D "$FLOX_ENV_CACHE/postgres"''' is-daemon = true [services.api] command = ''' # Wait for database until pg_isready -h localhost -p 5432; do sleep 1 done exec python -m uvicorn main:app ''' [vars] POSTGRES_HOST = "localhost" POSTGRES_PORT = "5432"
Service Health Checks
[services.api] command = ''' # Health check function health_check() { curl -sf http://localhost:8000/health > /dev/null } exec python -m uvicorn main:app --host 0.0.0.0 --port 8000 '''
Best Practices
- Log service output to
$FLOX_ENV_CACHE/logs/ - Test activation with
before adding to servicesflox activate -- <command> - When debugging services, run the exact command from manifest manually first
- Always make host/port configurable via vars for network services
- Use
to replace the shell process with the service commandexec - Services must activate venv inside service command, not rely on hook activation
- Use
for background processes that should detachis-daemon = true
Debugging Service Issues
Check Service Status
flox services status
View Service Logs
flox services logs myservice
Run Service Command Manually
flox activate # Copy the exact command from manifest and run it
Check if Service is Listening
# Check if port is open lsof -i :8000 netstat -an | grep 8000 # Test connection curl http://localhost:8000 nc -zv localhost 8000
Common Pitfalls
Services Don't Preserve State
Services see fresh environment (no preserved state between restarts). Store persistent data in
$FLOX_ENV_CACHE.
Service Commands Don't Inherit Hook Activations
Explicitly source/activate what you need inside the service command.
Forgetting to Create Directories
Always
mkdir -p for data directories in service commands.
Port Conflicts
Use configurable ports via variables to avoid conflicts with other services.
Related Skills
- flox-environments - Environment basics and package installation
- flox-sharing - Composing environments with shared services
- flox-containers - Running services in containers