# Copy to .env and fill in. Never commit .env. # --- Data sources (public) --- # Materials Project: free key from https://next-gen.materialsproject.org/api MP_API_KEY= # Optional. OpenAlex meters API use against a daily budget: $0.10/day per IP without a key, # $1.00/day with a free account's key (https://openalex.org -> account -> API key). Literature # counts are fetched per query for the top-ranked candidates (about 50 searches, $0.05), so the # key matters only if you run more than a couple of queries a day on uncached candidates. OPENALEX_API_KEY= # Contact email sent with OpenAlex requests. Optional; no longer changes rate limits. OPENALEX_MAILTO= # --- Public deployment (optional) --- # A shared password in front of the whole web app, for a demo reachable from the internet. # Unset (the default) means no login page: a laptop or an air-gapped site does not need one. # One password for everyone, no accounts; it stops drive-by visitors, nothing more. # OXBOW_PASSWORD= # --- LLM edges (optional; the system runs fully without any of these) --- # Provider: none | anthropic | openai_compatible. The web assistant is driven by the model with # anthropic or openai_compatible and by rules with none; `oxide-triage chat` needs a model. LLM_PROVIDER=none # Anthropic (cloud). Only used when LLM_PROVIDER=anthropic. ANTHROPIC_API_KEY= # LLM_MODEL=claude-opus-5 # The assistant's own model (the web app and `oxide-triage chat`); latency matters more there. # AGENT_MODEL=claude-sonnet-5 # OpenAI (cloud). Only used when LLM_PROVIDER=openai_compatible and LLM_BASE_URL is unset. OPENAI_API_KEY= # LLM_MODEL=gpt-5-mini # A self-hosted, OpenAI-compatible server (vLLM, Ollama, llama.cpp) instead of OpenAI. # Set LLM_BASE_URL and the served model's name; nothing leaves the site. LLM_API_KEY is sent # as a bearer token only if the server wants one. # LLM_BASE_URL=http://localhost:11434/v1 # Ollama; vLLM serves on http://localhost:8000/v1 # LLM_MODEL=qwen3:8b # LLM_API_KEY= # --- Runtime --- # Path to the SQLite cache (inside the container this is a mounted volume) OXIDE_TRIAGE_CACHE=data/cache.sqlite # Force offline mode regardless of config (1/0) OXIDE_TRIAGE_OFFLINE=0 # Admin panel: 1 enables editing the site configuration and warming or extending the cache from # the browser (the demo fixture and the self-check need no flag). There is no per-user login; anyone who can reach the port can then change the policy. OXIDE_TRIAGE_ADMIN=0 # Site overrides file written by the admin panel (default: site.yaml next to the cache; off = disabled) # OXIDE_TRIAGE_SITE_CONFIG=data/site.yaml