Configuration (env)
Copy .env.example → .env. The only required variable is an LLM key.
| Variable | Default | Purpose |
|---|---|---|
LLM_PROFILE | anthropic | anthropic | openrouter | mixed — which provider profile (per-tier default models) |
LLM_ROUTING | — | Per-role preset: fast (Groq worker) | volume (OpenRouter worker) — see Role routing |
ANTHROPIC_API_KEY | — | API key for the Anthropic profile |
OPENROUTER_API_KEY | — | API key for the OpenRouter profile (cheaper) |
GROQ_API_KEY | — | API key for the Groq worker (used by LLM_ROUTING=fast) |
QA_TESTCASE_LANG | English | Language for generated test cases, e.g. Ukrainian / uk |
BROWSER_BACKEND | lib | lib (in-process Playwright) | cli — how the browser is driven |
BROWSER_CHANNEL | — | chrome to use real Chrome (helps with OAuth) |
MAX_REPAIR | 2 | Max self-repair attempts per failing spec (keep-best) |
LANGFUSE_BASE_URL | — | Langfuse — cloud or self-hosted (optional) |
LANGFUSE_PUBLIC_KEY | — | Langfuse public key |
LANGFUSE_SECRET_KEY | — | Langfuse secret key |
Minimal .env
Section titled “Minimal .env”ANTHROPIC_API_KEY=sk-ant-...Role routing
Section titled “Role routing”By default each profile uses its own per-tier models. LLM_ROUTING optionally layers a cheap
worker over any profile while keeping the strong reasoner — one flag picks where the
mechanical steps (identify elements, generate code, repair) run:
LLM_ROUTING | Worker | Notes |
|---|---|---|
| unset (default) | the profile’s own per-tier models | no routing |
fast | Groq llama-3.3-70b-versatile | lowest latency / cost (needs GROQ_API_KEY) |
volume | OpenRouter deepseek/deepseek-chat | model breadth (needs OPENROUTER_API_KEY) |
In every preset the reasoner — designing test cases and the
Pilot verdict — stays on Anthropic claude-opus-4-8 for judgment
quality. Override any role with CAIRN_ROLE_WORKER / CAIRN_ROLE_REASONER=provider:model, or pass
--routing <preset> on explore / design / automate to set it per run. Per-run, per-role cost
(tokens + $) is printed in the run summary — see
ADR 0011.
Going further
Section titled “Going further”- Steer the design pass with domain knowledge files & prompt overrides
- Saved sessions live in
.auth/<name>.storageState.json— capture them withcairn session capture --url <url> --name <name>