BOAT_BASE_URL=https://boat.dev/api/v1 # Optional PEM bundle for outbound HTTPS. scripts/dev.sh detects system roots. # For HTTPS inspection, add your administrator-provided CA to the bundle. SSL_CERT_FILE= # Boat is optional: leave BOAT_API_KEY empty to run without it. If you set it, # HOOK_TOKEN and PERMISSION_HOOK_BASE_URL below are required too. BOAT_API_KEY= # Required if your API key belongs to a personal account that also has an # org/team on a paid plan -- sandbox creation bills to the personal account # (and 402s) unless the org is attached here. Find the id via `box org list` # or the Boat dashboard. BOAT_ORG_ID= # Optional free web search and page fetching for Claude tasks. No Parallel key. PARALLEL_SEARCH_ENABLED=false # Database. PostgreSQL (the POSTGRES_* values below, started by Docker) is the # default. To use SQLite instead -- no Docker, one local file -- uncomment # DATABASE_BACKEND (and optionally SQLITE_PATH; default ~/.open-dots/open-dots.db). # SQLite is experimental: see docs/SETUP.md before using it with Boat sandboxes. # DATABASE_BACKEND=sqlite # SQLITE_PATH= POSTGRES_USER=vadoo POSTGRES_PASSWORD=vadoo POSTGRES_DB=vadoo POSTGRES_HOST=localhost POSTGRES_PORT=5432 # scripts/dev.sh creates and saves this key if it is missing; keep it between runs. # For manual setup, generate with: # uv run python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())" TOKEN_ENCRYPTION_KEYS= # From @BotFather on Telegram. Optional if you only need the REST API. TELEGRAM_BOT_TOKEN= # Your bot's @username (without the @), shown to web UI users as a clickable # link. Purely cosmetic. TELEGRAM_BOT_USERNAME= # Origin(s) allowed to call this API from a browser, comma-separated. FRONTEND_ORIGINS=http://localhost:3000 # Owner authentication (docs/AUTH.md). Host names this server answers to; add # your public name when self-hosting. Set the owner passphrase on first start # from this machine, or with: uv run python -m app.auth.cli set-passphrase TRUSTED_HOSTS=localhost,127.0.0.1,[::1] # off (default) | programs (scripts on this machine skip sign-in) | all (development) LOOPBACK_TRUST=off # scripts/dev.sh replaces this placeholder with a persistent random webhook secret. # For manual setup: python -c "import secrets; print(secrets.token_urlsafe(32))" HOOK_TOKEN=your-secret-token-here PERMISSION_HOOK_BASE_URL=your-public-url-here # Optional: run Claude through your own locally installed, signed-in `claude` # CLI instead of a Boat sandbox. Chat-only (no tools) for now. Off by default; # only usable from this machine (loopback). See docs/SETUP.md. LOCAL_EXECUTION_ENABLED=false # LOCAL_CLAUDE_CLI_PATH= # LOCAL_WORKSPACE_ROOT= # Let local Claude use tools (files, commands). Each tool call waits for your # Allow/Deny in the web page. Off = chat-only. See docs/SETUP.md. LOCAL_TOOLS_ENABLED=false # Optional Linux server filesystem/PID isolation for engine turns. Off by default. # Requires bubblewrap and user namespaces; a failed check never starts unboxed. # Network stays unrestricted unless the separate preview below is enabled. TURN_SANDBOX_ENABLED=false # Optional private network namespace with a public HTTP(S)-only egress gate. # Requires the Linux sandbox above. CLI proxy support and real Linux lifecycle # remain unqualified. No direct DNS, UDP or private-network access is available. TURN_SANDBOX_NETWORK_ENABLED=false TURN_SANDBOX_READONLY_PATHS= TURN_SANDBOX_WRITABLE_PATHS= # Optional audio transcription (requires ffmpeg and ffprobe). No media is uploaded # until the person explicitly consents to OpenAI processing. AUDIO_TRANSCRIPTION_API_KEY= AUDIO_TRANSCRIPTION_MODEL=gpt-transcribe