# Copy to .env and fill in. The loop runs WITHOUT a key using a mock reasoner. # --- LLM provider --- # LLM_PROVIDER: gemini | anthropic (auto-detected from whichever key is set, # Gemini preferred, if left blank). Provider with a missing key => mock reasoner. LLM_PROVIDER=gemini GEMINI_API_KEY= GEMINI_MODEL=gemini-2.5-flash ANTHROPIC_API_KEY= LLM_MODEL=claude-sonnet-4-6 # Force the offline mock reasoner even if a key is set: # USE_MOCK_LLM=1 # Scoring thresholds (design Phase 5) PRIORITY_THRESHOLD=0.72 STANDARD_THRESHOLD=0.45 # --- Exa.ai news/web harvester --- # Without a key, the news connector falls back to data/fixtures.json. EXA_API_KEY= EXA_ENABLED=1 # Hard ceilings to stay inside the free plan (~20,000 req/month). The connector # refuses to call Exa once either cap is reached. Monthly count persists in # output/state/exa_usage.json and resets at the start of each calendar month. EXA_MONTHLY_REQUEST_CAP=1000 EXA_PER_RUN_REQUEST_CAP=25 EXA_RESULTS_PER_QUERY=5 EXA_LOOKBACK_DAYS=45 # Scope news to each account's own domain (1, default) to cut ticker/analyst # noise, or search the broad web (0). Override per run: loop --no-domain-filter EXA_DOMAIN_FILTER=1