MAESTRO: Add .env.example with all environment variables from spec

Includes all 13 env vars organized into 7 groups: Database, Redis,
Server, Auth, Default LLM Endpoint, Limits, Storage, and MCP.
Production-only variables are commented out; single-container defaults
work out of the box.
This commit is contained in:
John Lightner 2026-04-07 01:41:22 -05:00
parent cb4af5f707
commit 4a0e4b6c65
2 changed files with 70 additions and 1 deletions

68
.env.example Normal file
View file

@ -0,0 +1,68 @@
# PromptLooper — Environment Variables
# Copy to .env and adjust values for your deployment.
# =============================================================================
# Database
# =============================================================================
# PostgreSQL connection string for production mode.
# When not set, PromptLooper uses SQLite at DATA_DIR/promptlooper.db (single-container mode).
# DATABASE_URL=postgresql://promptlooper:promptlooper@promptlooper-db:5432/promptlooper
# =============================================================================
# Redis
# =============================================================================
# Redis connection string for Celery task queue and pub/sub (live dashboard).
# When not set, PromptLooper uses an in-process queue (single-container mode).
# REDIS_URL=redis://promptlooper-redis:6379/0
# =============================================================================
# Server
# =============================================================================
# Bind address and port for the HTTP server.
HOST=0.0.0.0
PORT=8400
# =============================================================================
# Authentication
# =============================================================================
# Secret key used to sign JWT tokens. Auto-generated on first boot if not set.
# IMPORTANT: Set this to a long random string in production.
# JWT_SECRET=change-me-to-a-random-secret
# Static API key for programmatic access (MCP, scripts, CI).
# When not set, API key auth is disabled — only JWT login works.
# API_KEY=
# =============================================================================
# Default LLM Endpoint
# =============================================================================
# Pre-configured LLM endpoint URL (OpenAI-compatible API).
# Users can add more endpoints via the UI or API; this is a convenience default.
# DEFAULT_ENDPOINT_URL=http://localhost:11434/v1
# API key for the default endpoint, if required.
# DEFAULT_ENDPOINT_KEY=
# =============================================================================
# Limits
# =============================================================================
# Maximum number of runs executing in parallel.
MAX_CONCURRENT_RUNS=4
# Token budget per sweep. 0 = unlimited.
MAX_TOKENS_PER_SWEEP=0
# =============================================================================
# Storage
# =============================================================================
# Directory for SQLite database and file storage (single-container mode).
DATA_DIR=/data
# =============================================================================
# MCP Server
# =============================================================================
# Enable the Model Context Protocol server for agent-driven workflows.
MCP_ENABLED=true
# Port for the MCP server (separate from the main API).
MCP_PORT=8401

View file

@ -8,7 +8,8 @@ Set up the PromptLooper repository, Docker infrastructure, and basic project ske
- [x] Create the full directory structure as defined in the spec's Project Structure section. Every directory should exist with a placeholder __init__.py or .gitkeep as appropriate. Include backend/, frontend/, docker/, alembic/, and all subdirectories. - [x] Create the full directory structure as defined in the spec's Project Structure section. Every directory should exist with a placeholder __init__.py or .gitkeep as appropriate. Include backend/, frontend/, docker/, alembic/, and all subdirectories.
> Created all directories: backend/ (with routers/, engine/adapters/, engine/scorers/, mcp/, websocket/, tests/), frontend/src/ (pages/, components/, api/), docker/, alembic/versions/. Python packages have __init__.py, non-Python dirs have .gitkeep. > Created all directories: backend/ (with routers/, engine/adapters/, engine/scorers/, mcp/, websocket/, tests/), frontend/src/ (pages/, components/, api/), docker/, alembic/versions/. Python packages have __init__.py, non-Python dirs have .gitkeep.
- [ ] Create .env.example with all environment variables from the spec's Environment Variables table, with sensible defaults and comments explaining each group. Include DATABASE_URL, REDIS_URL, JWT_SECRET, DEFAULT_ENDPOINT_URL, MAX_CONCURRENT_RUNS, and all others. - [x] Create .env.example with all environment variables from the spec's Environment Variables table, with sensible defaults and comments explaining each group. Include DATABASE_URL, REDIS_URL, JWT_SECRET, DEFAULT_ENDPOINT_URL, MAX_CONCURRENT_RUNS, and all others.
> Created .env.example with all 13 environment variables organized into 7 groups (Database, Redis, Server, Auth, Default LLM Endpoint, Limits, Storage, MCP). Production-only vars (DATABASE_URL, REDIS_URL, JWT_SECRET, API_KEY, DEFAULT_ENDPOINT_*) are commented out with explanatory notes. Single-container defaults work out of the box.
- [ ] Create docker-compose.yml following XPLTD conventions: project name xpltd_promptlooper, network promptlooper (172.33.0.0/24), PostgreSQL on port 5434, Redis, API service, worker service, and web service on port 8400. Use bind mounts under /vmPool/r/services/promptlooper_* for persistent data. Model this after Chrysopedia's docker-compose.yml patterns. - [ ] Create docker-compose.yml following XPLTD conventions: project name xpltd_promptlooper, network promptlooper (172.33.0.0/24), PostgreSQL on port 5434, Redis, API service, worker service, and web service on port 8400. Use bind mounts under /vmPool/r/services/promptlooper_* for persistent data. Model this after Chrysopedia's docker-compose.yml patterns.