# Hermes Agent Environment Configuration # Copy this file to .env and fill in your API keys # ============================================================================= # LLM PROVIDER (OpenRouter) # ============================================================================= # OpenRouter provides access to many models through one API # All LLM calls go through OpenRouter - no direct provider keys needed # Get your key at: https://openrouter.ai/keys OPENROUTER_API_KEY= # Default model to use (OpenRouter format: provider/model) # Examples: anthropic/claude-opus-4.6, openai/gpt-4o, google/gemini-2.0-flash, zhipuai/glm-4-plus LLM_MODEL=anthropic/claude-opus-4.6 # ============================================================================= # TOOL API KEYS # ============================================================================= # Firecrawl API Key - Web search, extract, and crawl # Get at: https://firecrawl.dev/ FIRECRAWL_API_KEY= # Nous Research API Key - Vision analysis and multi-model reasoning # Get at: https://inference-api.nousresearch.com/ NOUS_API_KEY= # FAL.ai API Key - Image generation # Get at: https://fal.ai/ FAL_KEY= # ============================================================================= # TERMINAL TOOL CONFIGURATION (mini-swe-agent backend) # ============================================================================= # Backend type: "local", "singularity", "docker", "modal", or "ssh" # - local: Runs directly on your machine (fastest, no isolation) # - ssh: Runs on remote server via SSH (great for sandboxing - agent can't touch its own code) # - singularity: Runs in Apptainer/Singularity containers (HPC clusters, no root needed) # - docker: Runs in Docker containers (isolated, requires Docker + docker group) # - modal: Runs in Modal cloud sandboxes (scalable, requires Modal account) TERMINAL_ENV=local # Container images (for singularity/docker/modal backends) TERMINAL_DOCKER_IMAGE=nikolaik/python-nodejs:python3.11-nodejs20 TERMINAL_SINGULARITY_IMAGE=docker://nikolaik/python-nodejs:python3.11-nodejs20 TERMINAL_MODAL_IMAGE=nikolaik/python-nodejs:python3.11-nodejs20 # Working directory for terminal commands # For local backend: "." means current directory (resolved automatically) # For remote backends (ssh/docker/modal/singularity): use an absolute path # INSIDE the target environment, or leave unset for the backend's default # (/root for modal, / for docker, ~ for ssh). Do NOT use a host-local path. # Usually managed by config.yaml (terminal.cwd) — uncomment to override # TERMINAL_CWD=. # Default command timeout in seconds TERMINAL_TIMEOUT=60 # Cleanup inactive environments after this many seconds TERMINAL_LIFETIME_SECONDS=300 # ============================================================================= # SSH REMOTE EXECUTION (for TERMINAL_ENV=ssh) # ============================================================================= # Run terminal commands on a remote server via SSH. # Agent code stays on your machine, commands execute remotely. # # SECURITY BENEFITS: # - Agent cannot read your .env file (API keys protected) # - Agent cannot modify its own code # - Remote server acts as isolated sandbox # - Can safely configure passwordless sudo on remote # # TERMINAL_SSH_HOST=192.168.1.100 # TERMINAL_SSH_USER=agent # TERMINAL_SSH_PORT=22 # TERMINAL_SSH_KEY=~/.ssh/id_rsa # ============================================================================= # SUDO SUPPORT (works with ALL terminal backends) # ============================================================================= # If set, enables sudo commands by piping password via `sudo -S`. # Works with: local, docker, singularity, modal, and ssh backends. # # SECURITY WARNING: Password stored in plaintext. Only use on trusted machines. # # ALTERNATIVES: # - For SSH backend: Configure passwordless sudo on the remote server # - For containers: Run as root inside the container (no sudo needed) # - For local: Configure /etc/sudoers for specific commands # - For CLI: Leave unset - you'll be prompted interactively with 45s timeout # # SUDO_PASSWORD=your_password_here # ============================================================================= # MODAL CLOUD BACKEND (Optional - for TERMINAL_ENV=modal) # ============================================================================= # Modal uses CLI authentication, not environment variables. # Run: pip install modal && modal setup # This will authenticate via browser and store credentials locally. # No API key needed in .env - Modal handles auth automatically. # ============================================================================= # BROWSER TOOL CONFIGURATION (agent-browser + Browserbase) # ============================================================================= # Browser automation requires Browserbase cloud service for remote browser execution. # This allows the agent to navigate websites, fill forms, and extract information. # # STEALTH MODES: # - Basic Stealth: ALWAYS active (random fingerprints, auto CAPTCHA solving) # - Advanced Stealth: Requires BROWSERBASE_ADVANCED_STEALTH=true (Scale Plan only) # Browserbase API Key - Cloud browser execution # Get at: https://browserbase.com/ BROWSERBASE_API_KEY= # Browserbase Project ID - From your Browserbase dashboard BROWSERBASE_PROJECT_ID= # Enable residential proxies for better CAPTCHA solving (default: true) # Routes traffic through residential IPs, significantly improves success rate BROWSERBASE_PROXIES=true # Enable advanced stealth mode (default: false, requires Scale Plan) # Uses custom Chromium build to avoid bot detection altogether BROWSERBASE_ADVANCED_STEALTH=false # Browser session timeout in seconds (default: 300) # Sessions are cleaned up after this duration of inactivity BROWSER_SESSION_TIMEOUT=300 # Browser inactivity timeout - auto-cleanup inactive sessions (default: 120 = 2 min) # Browser sessions are automatically closed after this period of no activity BROWSER_INACTIVITY_TIMEOUT=120 # ============================================================================= # SESSION LOGGING # ============================================================================= # Session trajectories are automatically saved to logs/ directory # Format: logs/session_YYYYMMDD_HHMMSS_UUID.json # Contains full conversation history in trajectory format for debugging/replay # ============================================================================= # VOICE TRANSCRIPTION & OPENAI TTS # ============================================================================= # Required for voice message transcription (Whisper) and OpenAI TTS voices. # Uses OpenAI's API directly (not via OpenRouter). # Named HERMES_OPENAI_API_KEY to avoid interference with OpenRouter. # Get at: https://platform.openai.com/api-keys HERMES_OPENAI_API_KEY= # ============================================================================= # SLACK INTEGRATION # ============================================================================= # Slack Bot Token - From Slack App settings (OAuth & Permissions) # Get at: https://api.slack.com/apps # SLACK_BOT_TOKEN=xoxb-... # Slack App Token - For Socket Mode (App-Level Tokens in Slack App settings) # SLACK_APP_TOKEN=xapp-... # Slack allowed users (comma-separated Slack user IDs) # SLACK_ALLOWED_USERS= # ============================================================================= # RESPONSE PACING # ============================================================================= # Human-like delays between message chunks on messaging platforms. # Makes the bot feel less robotic. # HERMES_HUMAN_DELAY_MODE=off # off | natural | custom # HERMES_HUMAN_DELAY_MIN_MS=800 # Min delay in ms (custom mode) # HERMES_HUMAN_DELAY_MAX_MS=2500 # Max delay in ms (custom mode) # ============================================================================= # LEGACY/OPTIONAL API KEYS # ============================================================================= # Morph API Key - For legacy Hecate terminal backend (terminal-hecate tool) # Get at: https://morph.so/ MORPH_API_KEY= # Hecate VM Settings (only if using terminal-hecate tool) HECATE_VM_LIFETIME_SECONDS=300 HECATE_DEFAULT_SNAPSHOT_ID=snapshot_p5294qxt # ============================================================================= # DEBUG OPTIONS # ============================================================================= WEB_TOOLS_DEBUG=false VISION_TOOLS_DEBUG=false MOA_TOOLS_DEBUG=false IMAGE_TOOLS_DEBUG=false # ============================================================================= # CONTEXT COMPRESSION (Auto-shrinks long conversations) # ============================================================================= # When conversation approaches model's context limit, middle turns are # automatically summarized to free up space. # # CONTEXT_COMPRESSION_ENABLED=true # Enable auto-compression (default: true) # CONTEXT_COMPRESSION_THRESHOLD=0.85 # Compress at 85% of context limit # CONTEXT_COMPRESSION_MODEL=google/gemini-2.0-flash-001 # Fast model for summaries # ============================================================================= # RL TRAINING (Tinker + Atropos) # ============================================================================= # Run reinforcement learning training on language models using the Tinker API. # Requires the rl-server to be running (from tinker-atropos package). # Tinker API Key - RL training service # Get at: https://tinker-console.thinkingmachines.ai/keys TINKER_API_KEY= # Weights & Biases API Key - Experiment tracking and metrics # Get at: https://wandb.ai/authorize WANDB_API_KEY= # RL API Server URL (default: http://localhost:8080) # Change if running the rl-server on a different host/port # RL_API_URL=http://localhost:8080