# ==================================================================== # Hermes (Jarvis): Environment Configuration Template # Copy this file to .env and fill in your keys. # ==================================================================== # ── REQUIRED ───────────────────────────────────────────────────────── # LLM inference via OpenRouter → https://openrouter.ai/keys # Supports any model: Gemini, GPT-4o, Claude, DeepSeek, Llama, etc. LLM_API_BASE=https://openrouter.ai/api/v1 OPENROUTER_API_KEY=your_openrouter_api_key_here LLM_MODEL=google/gemini-2.5-flash # Local model: LLM_MODEL=ollama/llama3 and LLM_API_BASE=http://host.docker.internal:11434/v1 # ── OPTIONAL: Per-agent model overrides ────────────────────────────── # Override the model used by each specialized agent role. # Falls back to LLM_MODEL if not set. # # Recommended combinations: # - Research: Fast & cheap (e.g., ollama/llama3, google/gemini-2.5-flash, deepseek/deepseek-chat) # - Code: High-reasoning models (e.g., deepseek/deepseek-r1, ollama/llama3, anthropic/claude-sonnet-4.5) # - Analyst: Fast & visually descriptive (e.g., ollama/llama3, google/gemini-2.5-flash, openai/gpt-4o) # - Planner: Highly structured JSON output (e.g., ollama/llama3, google/gemini-2.5-flash, openai/gpt-4o-mini) # AGENT_MODEL_RESEARCH=ollama/llama3 AGENT_MODEL_CODE=deepseek/deepseek-r1 AGENT_MODEL_ANALYST=ollama/llama3 AGENT_MODEL_PLANNER=ollama/llama3 # Model for specialists the core hires when no existing agent covers a request. # AGENT_MODEL_SPECIALIST=ollama/llama3 COMPLEXITY_ROUTING=false # ── AUTO-HIRE ──────────────────────────────────────────────────────── # When no agent covers a request, the core creates one in the same turn. # ask: create it and wait for confirmation (default). on: hire and run, hands-free. off: report the gap. AUTO_HIRE=ask AUTO_HIRE_MAX_PER_TURN=1 AUTO_HIRE_MAX_PER_DAY=10 AUTO_HIRE_ALLOW_RISKY=0 # Auto-hired agents with no use in this many days show up for cleanup. They are not deleted. AUTO_HIRE_UNUSED_DAYS=30 # ── SYSTEM BACKEND ─────────────────────────────────────────────────── PORT=8000 # ── TELEGRAM INTERFACE ─────────────────────────────────────────────── # Agents: all agents are accessible via Telegram # Create a bot via @BotFather → https://t.me/BotFather TELEGRAM_BOT_TOKEN=your_telegram_bot_token_here # Get your numeric chat ID via @userinfobot → https://t.me/userinfobot TELEGRAM_CHAT_ID=your_telegram_chat_id_here # Authorized admin user ID(s) that the bot will respond to (comma-separated if multiple; all others are blocked at code level) TELEGRAM_ADMIN_ID=your_telegram_admin_id_here # HS256 secret for OIDC JWT sessions. Leave empty to disable JWT login (OTP sessions still work). JWT_SECRET= # ── SEARCH AGENT & FOOTBALL ANALYST ───────────────────────────────── # Skill: web_search — powers web search, news, football results # SearXNG — open-source self-hosted metasearch SEARXNG_URL=http://localhost:8080 # ── CALENDAR & TASKS ─────────────────────────────────────────────── # Optional: Set path to your downloaded Google client_secret.json for Calendar GOOGLE_CLIENT_SECRET_PATH=~/.config/hermes/google_client_secret.json # ── SEARCH AGENT: WEATHER ──────────────────────────────────────────── # Skill: web_search (weather sub-feature) # OpenWeatherMap — free tier: 1,000 calls/day → https://home.openweathermap.org/api_keys OPENWEATHERMAP_API_KEY=your_openweathermap_api_key_here # ── DAILY PLANNER: TODOIST ─────────────────────────────────────────── # Skill: todoist_sync # Todoist → Settings → Integrations → Developer # → https://app.todoist.com/app/settings/integrations/developer TODOIST_API_TOKEN=your_todoist_token_here # ── DAILY PLANNER: GOOGLE CALENDAR ─────────────────────────────────── # Skill: google_calendar — OAuth2 setup (one-time, on host machine) # 1. Create Desktop OAuth 2.0 credentials at: # https://console.cloud.google.com/apis/credentials # 2. Download the JSON and place it in the project root as client_secret_*.json # 3. Run once on your host: python3 backend/google_auth.py # This generates google_token.json which is volume-mounted into Docker. # ── OBSIDIAN RAG SKILL ─────────────────────────────────────────────── # Skill: obsidian_rag — local knowledge base search & sync # Install "Local REST API" plugin in Obsidian: # → https://github.com/coddingtonbear/obsidian-local-rest-api OBSIDIAN_API_KEY=your_obsidian_local_rest_api_key_here OBSIDIAN_HOST=host.docker.internal OBSIDIAN_PORT=27124 OBSIDIAN_VAULT_PATH=/path/to/your/obsidian/vault # ── MARKET DATA PROVIDER ───────────────────────────────────────────── # Skill: market_monitor — real-time price alerts for crypto & stocks # # MARKET_DATA_PROVIDER controls which backend fetches prices. # http → Default. CoinGecko (crypto) + Yahoo Finance (stocks). # Zero config, zero API keys. Works out of the box. # → Resolved by an installed plugin via the market_data_provider(name) # hook (see backend/plugins.py). Falls back to http if none answers. MARKET_DATA_PROVIDER=http # ── DATABASE (OPTIONAL) ────────────────────────────────────────────── # ── DATABASE ─────────────────────────────────────────────── # PostgreSQL is the required and only supported database backend for Jarvis. # Example: # DATABASE_URL=postgresql://postgres:postgres@localhost:5432/hermes # ── STRIPE CONNECT MARKETPLACE ───────────────────────────────────────── STRIPE_PUBLISHABLE_KEY=your_stripe_publishable_key_here STRIPE_SECRET_KEY=your_stripe_secret_key_here STRIPE_WEBHOOK_SECRET=your_stripe_webhook_secret_here # ── HUGGING FACE TOKEN (FastEmbed / Vector Embeddings) ──────────────── HF_TOKEN=your_huggingface_token_here HUGGING_FACE_HUB_TOKEN=your_huggingface_token_here