# ===== EJClaw Environment Configuration ===== # Copy this file to .env and fill in the values. # Single unified service manages all three Discord bots in one process. # --- Discord bots (canonical role-fixed names) --- DISCORD_OWNER_BOT_TOKEN= # Owner bot DISCORD_REVIEWER_BOT_TOKEN= # Reviewer bot DISCORD_ARBITER_BOT_TOKEN= # Arbiter bot # Old service-based token names are no longer accepted. # Rename any existing values to the three canonical role-based keys above. # --- Agent type configuration --- OWNER_AGENT_TYPE=codex # codex | claude-code REVIEWER_AGENT_TYPE=claude-code # claude-code | codex # --- API keys --- CLAUDE_CODE_OAUTH_TOKENS= # Canonical comma-separated Claude Code OAuth tokens (use one value for single-account too) CLAUDE_CODE_OAUTH_TOKEN= # Legacy single-token fallback GROQ_API_KEY= # Voice transcription (Groq Whisper, free: console.groq.com) # --- Bot identity --- ASSISTANT_NAME=claude # Trigger name (@claude) # --- Claude model --- CLAUDE_MODEL=claude-opus-4-6 # Claude model CLAUDE_EFFORT=high # Claude effort level CLAUDE_THINKING=adaptive # Claude thinking mode # --- Codex model --- CODEX_MODEL=gpt-5.4 # Codex model CODEX_EFFORT=xhigh # Codex reasoning effort # --- Usage dashboard --- STATUS_CHANNEL_ID= # Discord channel ID for live status updates # STATUS_SHOW_ROOMS=true # Show room status in dashboard # STATUS_SHOW_ROOM_DETAILS=false # Show detailed room info # --- Fallback provider (when Claude/Codex both unavailable) --- # FALLBACK_ENABLED=true # Enable fallback provider # FALLBACK_PROVIDER_NAME=kimi # Provider name for logging # FALLBACK_BASE_URL= # OpenAI-compatible API base URL # FALLBACK_AUTH_TOKEN= # API token for fallback provider # FALLBACK_MODEL=kimi-k2.5 # Fallback model # FALLBACK_SMALL_MODEL=kimi-k2.5 # Fallback small model # FALLBACK_COOLDOWN_MS=600000 # Cooldown between fallback attempts (10min) # --- Per-role model overrides (paired rooms) --- # Override global CLAUDE_MODEL/CODEX_MODEL per role. # Model is injected based on each role's agent type (claude-code → CLAUDE_MODEL, codex → CODEX_MODEL). # OWNER_MODEL=gpt-5.4 # Owner model override # OWNER_EFFORT=xhigh # Owner effort override # OWNER_FALLBACK_ENABLED=true # Fall back to codex on Claude failure (default: true) # # REVIEWER_MODEL=claude-opus-4-6 # Reviewer model override # REVIEWER_EFFORT=high # Reviewer effort override # REVIEWER_FALLBACK_ENABLED=true # Fall back to codex on Claude failure (default: true) # # ARBITER_MODEL=claude-sonnet-4-6 # Arbiter model override # ARBITER_EFFORT=high # Arbiter effort override # ARBITER_FALLBACK_ENABLED=true # Fall back to codex on Claude failure (default: true) # --- Mixture of Agents (MoA) --- # Queries external API models in parallel before arbiter runs. # Their opinions are injected into the arbiter's prompt for better judgment. # The SDK arbiter (subscription-based, no extra cost) aggregates all perspectives. # MOA_ENABLED=true # MOA_REF_MODELS=kimi,glm # Comma-separated reference model names # MOA_KIMI_MODEL=kimi-k2.5 # Kimi model # MOA_KIMI_BASE_URL=https://api.kimi.com/coding # Kimi API endpoint # MOA_KIMI_API_KEY=sk-kimi-xxx # Kimi API key # MOA_GLM_MODEL=glm-4-plus # GLM model # MOA_GLM_BASE_URL=https://open.bigmodel.cn/api/paas/v4 # GLM API endpoint # MOA_GLM_API_KEY=xxx # GLM API key # --- Advanced --- # MAX_CONCURRENT_AGENTS=5 # Max parallel agent processes # SESSION_COMMAND_ALLOWED_SENDERS= # Comma-separated Discord user IDs for session commands