# Open Design — core service configuration. # Without any API key the core auto-falls back to the deterministic mock provider # (full stack and all test loops work key-less). # ── Providers (ADR-010) ────────────────────────────────────────────────────── # Recommended for experimentation: one OpenRouter key covers the whole catalog. # OPENROUTER_API_KEY=sk-or-v1-... # Quality reference: # ANTHROPIC_API_KEY=sk-ant-... # anthropic | openrouter | mock # (default: anthropic if its key is set, else openrouter if its key is set, else mock) # LLM_PROVIDER=openrouter # Any OpenAI-compatible endpoint works (direct DeepSeek/Qwen/Moonshot, local vLLM/Ollama): # OPENROUTER_BASE_URL=https://openrouter.ai/api/v1 # ── Models, switchable per role ───────────────────────────────────────────── # Defaults are data-driven (docs/EVALS-LOG.md): kimi-k2.5 won the model matrix. # Generator: writes the design code (vision not required). # GENERATOR_MODEL=moonshotai/kimi-k2.5 # budget/speed alt: deepseek/deepseek-v3.2 # Critic: judges screenshots — MUST be vision-capable. # CRITIC_MODEL=google/gemini-2.5-flash # For anthropic provider both default to claude-opus-4-8. # ── QA loop tuning (ADR-002) ──────────────────────────────────────────────── # Anthropic's harness uses 5–15 verifier iterations; with cheap models more # iterations compensate weaker taste — try 5–8. # INNER_LOOP_MAX=2 # VERIFIER_MAX_ITERATIONS=3 # ── Service ───────────────────────────────────────────────────────────────── # PORT=8787 # DATA_DIR=./data