# ============================================================================= # Turnstone environment overrides — ALL OPTIONAL for the dev stack. # # `docker compose up` from a clone works with zero config: every value below # has a built-in (insecure) default. Copy this file to `.env` only to override. # # The PRODUCTION stack (turnstone/deploy/compose.yaml) has no baked-in secrets # and DOES require TURNSTONE_JWT_SECRET and POSTGRES_PASSWORD. # # Note: for a turnstone process running on bare metal (not in a container), # put secrets in ~/.config/turnstone/config.toml (chmod 0600), not the # environment. See docs/docker.md "Join a bare-metal host". # ============================================================================= # -- LLM backend -------------------------------------------------------------- # Optional: nodes boot without an LLM. Add real model backends from the console # UI (Models tab). These only set the bootstrap default a node starts with. # LLM_BASE_URL=http://host.docker.internal:8000/v1 # OPENAI_API_KEY=dummy # ANTHROPIC_API_KEY=sk-ant-... # set instead of OPENAI_API_KEY for Anthropic # TURNSTONE_SEARXNG_URL=http://searxng:8080 # web_search backend (default: bundled service; set to an external SearxNG) # MODEL= # default model alias # -- Secrets ------------------------------------------------------------------ # The dev stack defaults these to INSECURE values. Always set real ones for # anything reachable beyond localhost. Generate the JWT secret with: # python -c "import secrets; print(secrets.token_hex(32))" # TURNSTONE_JWT_SECRET= # POSTGRES_PASSWORD= # -- Database ----------------------------------------------------------------- # Defaults to the bundled PostgreSQL (shared by every service — required for # the console to discover nodes). Override to point at an external database: # TURNSTONE_DB_BACKEND=postgresql # POSTGRES_USER=turnstone # TURNSTONE_DB_URL=postgresql+psycopg://turnstone:@postgres:5432/turnstone # -- Ports / networking ------------------------------------------------------- # The dashboard is reached via Caddy only (HTTP/2 avoids the browser's # 6-connection cap on the console's SSE streams). Both stacks expose the same # two host ports; everything else is proxied through the console. # CONSOLE_HTTPS_PORT=8443 # Caddy (dashboard HTTPS) # POSTGRES_PORT=5432 # exposed for bare-metal host joins # POSTGRES_BIND=127.0.0.1 # set 0.0.0.0 to let another machine join # -- Workspace ---------------------------------------------------------------- # Bind-mount a host directory the model can read/write at /workspace: # WORKSPACE_MOUNT=/path/to/your/project # -- Agent behavior ----------------------------------------------------------- # SKIP_PERMISSIONS=true # auto-approve all tool calls (dev only) # MCP_CONFIG=/workspace/mcp.json # MCP server config file # -- Channel gateway (Discord / Slack) ---------------------------------------- # TURNSTONE_DISCORD_TOKEN= # TURNSTONE_DISCORD_GUILD=0 # TURNSTONE_SLACK_TOKEN=xoxb-... # TURNSTONE_SLACK_APP_TOKEN=xapp-... # -- Production image tag ------------------------------------------------------ # TURNSTONE_IMAGE_TAG=latest # pin the ghcr.io image (production stack)