Skip to main content
CooperBench uses environment variables for API keys, configuration paths, and runtime settings.

LLM provider API keys

At least one LLM provider API key is required.

OpenAI

export OPENAI_API_KEY=sk-...
Required for OpenAI models:
  • gpt-4o
  • gpt-4o-mini
  • gpt-4-turbo
  • o1, o1-mini

Anthropic

export ANTHROPIC_API_KEY=sk-ant-...
Required for Anthropic models:
  • claude-3-5-sonnet-20241022
  • anthropic/claude-opus-4-20250514
  • claude-3-opus-20240229

Google Gemini

export GEMINI_API_KEY=AIza...
Required for Gemini models via API:
  • gemini/gemini-pro
  • gemini/gemini-1.5-flash
  • gemini/gemini-1.5-pro
For Vertex AI models (e.g., vertex_ai/gemini-3-flash-preview), use GCP authentication instead.

Google Cloud Platform

Authentication

Option 1: Application Default Credentials (recommended)
gcloud auth application-default login
This creates ~/.config/gcloud/application_default_credentials.json. Option 2: Service account key
export GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account-key.json

Project configuration

export GOOGLE_CLOUD_PROJECT=my-project-123
Optional. Overrides project configured with cooperbench config gcp.

Redis (for cooperative mode)

export REDIS_URL=redis://localhost:6379
Required for multi-agent communication in cooperative mode. Default: redis://localhost:6379. Override with --redis flag:
cooperbench run --redis redis://my-server:6379

Agent configuration

mini_swe_agent

# Config directory
export MSWEA_CONFIG_DIR=./configs

# Global config directory
export MSWEA_GLOBAL_CONFIG_DIR=~/.config/mini-swe-agent

# Model settings
export MSWEA_MODEL_NAME=gpt-4o
export MSWEA_MODEL_API_KEY=sk-...
export MSWEA_MODEL_API_BASE=https://custom-endpoint.com/v1

# Retry settings
export MSWEA_MODEL_RETRY_STOP_AFTER_ATTEMPT=10

# Cost tracking
export MSWEA_COST_TRACKING=ignore_errors  # or "default"
export MSWEA_GLOBAL_COST_LIMIT=10.0  # USD
export MSWEA_GLOBAL_CALL_LIMIT=1000  # max API calls

# LiteLLM registry
export LITELLM_MODEL_REGISTRY_PATH=/path/to/registry.json

# Startup behavior
export MSWEA_SILENT_STARTUP=1  # Suppress startup messages

# Docker executable
export MSWEA_DOCKER_EXECUTABLE=docker  # or "podman"

swe_agent

# Config directories
export SWE_AGENT_CONFIG_ROOT=/path/to/configs
export SWE_AGENT_CONFIG_DIR=/path/to/configs
export SWE_AGENT_TOOLS_DIR=/path/to/tools
export SWE_AGENT_TRAJECTORY_DIR=/path/to/trajectories

# GitHub token (for fetching issues)
export GITHUB_TOKEN=ghp_...

openhands

# Logging
export LOG_LEVEL=INFO  # DEBUG, INFO, WARNING, ERROR
export LOG_TO_FILE=true
export LOG_DIR=logs
export LOG_ROTATE_WHEN=midnight
export LOG_BACKUP_COUNT=7
export LOG_JSON=false
export LOG_RICH_TRACEBACKS=true

# CI mode
export CI=true  # Suppress interactive prompts

# Debugging
export DEBUG_LLM=true  # Log all LLM calls

# VNC (for browser use)
export OH_ENABLE_VNC=true

External agents

export COOPERBENCH_EXTERNAL_AGENTS=/path/to/agents.py
Path to Python module defining custom agents. See Custom agents for details.

Logging

# Suppress LiteLLM logs
export LITELLM_LOG=ERROR  # or "DEBUG", "INFO", "WARNING"
CooperBench sets LITELLM_LOG=ERROR by default to reduce noise.

HuggingFace (optional)

export HF_TOKEN=hf_...
Optional. Used for uploading results to HuggingFace Hub.

.env file

Create a .env file in your project root:
.env
# LLM Provider API Keys (at least one required)
OPENAI_API_KEY=sk-...
ANTHROPIC_API_KEY=sk-ant-...
GEMINI_API_KEY=AIza...

# Redis (for cooperative mode)
REDIS_URL=redis://localhost:6379

# GCP (optional)
GOOGLE_CLOUD_PROJECT=my-project-123
GOOGLE_APPLICATION_CREDENTIALS=/path/to/key.json

# HuggingFace (optional)
HF_TOKEN=hf_...

# GitHub (optional, for swe_agent)
GITHUB_TOKEN=ghp_...

# Agent settings
MSWEA_GLOBAL_COST_LIMIT=10.0
MSWEA_GLOBAL_CALL_LIMIT=1000
Load with:
source .env
Or use a tool like direnv:
echo 'dotenv' > .envrc
direnv allow

Example .env file

CooperBench provides .env.example:
cp .env.example .env
Then edit .env and fill in your API keys:
.env.example
# CooperBench Environment Variables
# Copy this file to .env and fill in your API keys

# LLM Provider API Keys (at least one required)
OPENAI_API_KEY=
ANTHROPIC_API_KEY=
GEMINI_API_KEY=

# HuggingFace (optional, for saving results)
HF_TOKEN=

GCP-specific variables

When using --backend gcp:
# Project (required)
export GOOGLE_CLOUD_PROJECT=my-project-123

# Authentication (one of these)
export GOOGLE_APPLICATION_CREDENTIALS=/path/to/key.json
# OR use: gcloud auth application-default login

# Region/zone (optional, overrides cooperbench config)
export GCP_REGION=us-central1
export GCP_ZONE=us-central1-a

# Storage bucket (optional)
export GCP_BUCKET=cooperbench-eval-my-project-123

Precedence

Environment variables override configuration files:
  1. Command-line flags (highest priority)
  2. Environment variables
  3. Configuration files (~/.config/cooperbench/config.json)
  4. Built-in defaults (lowest priority)
Example:
# Config file says: redis://localhost:6379
# Environment variable overrides:
export REDIS_URL=redis://production:6379

# Command-line flag overrides both:
cooperbench run --redis redis://staging:6379

Validation

CooperBench validates required variables on startup:
cooperbench run
If API keys are missing:
Error: No LLM API key found. Please set one of:
  - OPENAI_API_KEY
  - ANTHROPIC_API_KEY
  - GEMINI_API_KEY

Security best practices

  1. Never commit .env files:
    .gitignore
    .env
    .env.local
    
  2. Use restrictive permissions:
    chmod 600 .env
    
  3. Rotate API keys regularly: Generate new keys periodically and revoke old ones.
  4. Use service accounts for GCP: Avoid using personal credentials in production.
  5. Limit key scopes: Create API keys with minimal required permissions.

Troubleshooting

”No API key found"

# Check if variable is set
echo $OPENAI_API_KEY

# If empty, set it
export OPENAI_API_KEY=sk-...

# Verify
echo $OPENAI_API_KEY

"GCP authentication failed"

# Re-authenticate
gcloud auth application-default login

# Or check service account key path
echo $GOOGLE_APPLICATION_CREDENTIALS
ls -la $GOOGLE_APPLICATION_CREDENTIALS

"Redis connection refused”

# Check Redis is running
redis-cli ping

# If not, start Redis
redis-server

# Or update Redis URL
export REDIS_URL=redis://correct-host:6379

Variables not loading from .env

# Make sure to source the file
source .env

# Or use direnv
echo 'dotenv' > .envrc
direnv allow

Reference table

VariablePurposeRequiredDefault
OPENAI_API_KEYOpenAI API keyOne of 3 LLM keys-
ANTHROPIC_API_KEYAnthropic API keyOne of 3 LLM keys-
GEMINI_API_KEYGemini API keyOne of 3 LLM keys-
REDIS_URLRedis connection URLNoredis://localhost:6379
GOOGLE_CLOUD_PROJECTGCP project IDFor GCP backend-
GOOGLE_APPLICATION_CREDENTIALSGCP service account key pathFor GCP backend-
HF_TOKENHuggingFace tokenNo-
GITHUB_TOKENGitHub personal access tokenNo-
MSWEA_GLOBAL_COST_LIMITMax cost in USDNo0 (unlimited)
MSWEA_GLOBAL_CALL_LIMITMax LLM API callsNo0 (unlimited)
LITELLM_LOGLiteLLM log levelNoERROR
LOG_LEVELOpenHands log levelNoINFO