| # AxonHub Configuration Example | |
| # Copy this file to config.yml and modify as needed | |
| # Server configuration | |
| server: | |
| host: "0.0.0.0" # Server host (env: AXONHUB_SERVER_HOST) | |
| port: 8090 # Server port (env: AXONHUB_SERVER_PORT) | |
| name: "AxonHub" # Server name (env: AXONHUB_SERVER_NAME) | |
| base_path: "" # Base path for API routes (env: AXONHUB_SERVER_BASE_PATH) | |
| request_timeout: "30s" # Request timeout duration (env: AXONHUB_SERVER_REQUEST_TIMEOUT) | |
| llm_request_timeout: "600s" # LLM request timeout duration (env: AXONHUB_SERVER_LLM_REQUEST_TIMEOUT) | |
| trace: | |
| thread_header: "AH-Thread-Id" # Thread ID header name (env: AXONHUB_SERVER_TRACE_THREAD_HEADER) | |
| trace_header: "AH-Trace-Id" # Trace ID header name (env: AXONHUB_SERVER_TRACE_TRACE_HEADER) | |
| extra_trace_headers: [] # Extra trace headers (env: AXONHUB_SERVER_TRACE_EXTRA_TRACE_HEADERS) | |
| extra_trace_body_fields: [] # Extra trace body fields (env: AXONHUB_SERVER_TRACE_EXTRA_TRACE_BODY_FIELDS) | |
| claude_code_trace_enabled: false # Enable extracting trace IDs from Claude Code request metadata (env: AXONHUB_SERVER_TRACE_CLAUDE_CODE_TRACE_ENABLED) | |
| codex_trace_enabled: false # Enable extracting trace IDs from Codex Session_id header (env: AXONHUB_SERVER_TRACE_CODEX_TRACE_ENABLED) | |
| debug: false # Enable debug mode (env: AXONHUB_SERVER_DEBUG) | |
| cors: | |
| enabled: true # Enable CORS middleware (env: AXONHUB_SERVER_CORS_ENABLED) | |
| debug: false # Enable CORS debug logging (env: AXONHUB_SERVER_CORS_DEBUG) | |
| allowed_origins: # Allowed origins for CORS (env: AXONHUB_SERVER_CORS_ALLOWED_ORIGINS) | |
| - "http://localhost:3000" | |
| - "http://localhost:5173" | |
| allowed_methods: # Allowed HTTP methods (env: AXONHUB_SERVER_CORS_ALLOWED_METHODS) | |
| - "GET" | |
| - "POST" | |
| - "DELETE" | |
| - "PATCH" | |
| - "PUT" | |
| - "OPTIONS" | |
| - "HEAD" | |
| allowed_headers: # Allowed headers (env: AXONHUB_SERVER_CORS_ALLOWED_HEADERS) | |
| - "Content-Type" | |
| - "Authorization" | |
| - "X-API-Key" | |
| - "X-Goog-Api-Key" | |
| - "X-Project-ID" | |
| - "AH-Thread-Id" | |
| - "AH-Trace-Id" | |
| # Add any other headers your frontend sends | |
| exposed_headers: [] # Exposed headers (env: AXONHUB_SERVER_CORS_EXPOSED_HEADERS) | |
| allow_credentials: true # Allow credentials (env: AXONHUB_SERVER_CORS_ALLOW_CREDENTIALS) | |
| max_age: 1m # Max age for preflight cache in seconds (env: AXONHUB_SERVER_CORS_MAX_AGE) | |
| # Database configuration | |
| db: | |
| dialect: "sqlite3" # Database dialect: sqlite3, postgres, mysql (env: AXONHUB_DB_DIALECT) | |
| dsn: "file:axonhub.db?cache=shared&_fk=1" # Database connection string (env: AXONHUB_DB_DSN) | |
| debug: false # Enable database debug logging (env: AXONHUB_DB_DEBUG) | |
| # Cache configuration | |
| cache: | |
| # One of: memory, redis, two-level (memory + redis) | |
| mode: "memory" # (env: AXONHUB_CACHE_MODE) | |
| # Memory cache configuration | |
| memory: | |
| expiration: "5s" # Memory cache TTL (env: AXONHUB_CACHE_MEMORY_EXPIRATION) | |
| cleanup_interval: "10m" # Memory cache cleanup interval (env: AXONHUB_CACHE_MEMORY_CLEANUP_INTERVAL) | |
| # Redis cache configuration | |
| redis: | |
| # Simple mode: Use addr for plain host:port | |
| addr: "" # Redis address (host:port) (env: AXONHUB_CACHE_REDIS_ADDR) | |
| # URL mode: Use url for full redis:// or rediss:// URLs (takes priority over addr) | |
| # Supported formats: | |
| # - "redis://127.0.0.1:6379" | |
| # - "rediss://127.0.0.1:6380" (auto-enables TLS) | |
| # - "redis://user:pass@127.0.0.1:6379/0" | |
| url: "" # Redis URL (env: AXONHUB_CACHE_REDIS_URL) | |
| # Optional overrides (apply to both addr and url modes) | |
| username: "" # Overrides URL username (env: AXONHUB_CACHE_REDIS_USERNAME) | |
| password: "" # Overrides URL password (env: AXONHUB_CACHE_REDIS_PASSWORD) | |
| db: 0 # Overrides URL /db (env: AXONHUB_CACHE_REDIS_DB) | |
| tls: false # Enable TLS for addr mode (env: AXONHUB_CACHE_REDIS_TLS) | |
| tls_insecure_skip_verify: false # Skip TLS cert verification (env: AXONHUB_CACHE_REDIS_TLS_INSECURE_SKIP_VERIFY) | |
| expiration: "30m" # Redis cache TTL (env: AXONHUB_CACHE_REDIS_EXPIRATION) | |
| # Logging configuration | |
| log: | |
| name: "axonhub" # Logger name (env: AXONHUB_LOG_NAME) | |
| debug: false # Enable debug logging (env: AXONHUB_LOG_DEBUG) | |
| level: "info" # Log level: debug, info, warn, error, panic, fatal (env: AXONHUB_LOG_LEVEL) | |
| level_key: "level" # Key name for log level field (env: AXONHUB_LOG_LEVEL_KEY) | |
| time_key: "time" # Key name for timestamp field (env: AXONHUB_LOG_TIME_KEY) | |
| caller_key: "label" # Key name for caller info field (env: AXONHUB_LOG_CALLER_KEY) | |
| function_key: "" # Key name for function field (env: AXONHUB_LOG_FUNCTION_KEY) | |
| name_key: "logger" # Key name for logger name field (env: AXONHUB_LOG_NAME_KEY) | |
| encoding: "json" # Log encoding: json, console, console_json (env: AXONHUB_LOG_ENCODING) | |
| includes: [] # Logger names to include (env: AXONHUB_LOG_INCLUDES) | |
| excludes: [] # Logger names to exclude (env: AXONHUB_LOG_EXCLUDES) | |
| output: "stdio" # Output target: file or stdio (env: AXONHUB_LOG_OUTPUT) | |
| file: # File-based logging configuration (env prefix: AXONHUB_LOG_FILE_*) | |
| path: "logs/axonhub.log" # Log file path (env: AXONHUB_LOG_FILE_PATH) | |
| max_size: 100 # Max size in MB before rotation (env: AXONHUB_LOG_FILE_MAX_SIZE) | |
| max_age: 30 # Max age in days to retain (env: AXONHUB_LOG_FILE_MAX_AGE) | |
| max_backups: 10 # Max number of old log files to retain (env: AXONHUB_LOG_FILE_MAX_BACKUPS) | |
| local_time: true # Use local time for rotated files (env: AXONHUB_LOG_FILE_LOCAL_TIME) | |
| # Metrics configuration | |
| metrics: | |
| enabled: false # Enable metrics collection (env: AXONHUB_METRICS_ENABLED) | |
| exporter: | |
| type: "oltphttp" # Metrics exporter type: prometheus, console (env: AXONHUB_METRICS_EXPORTER_TYPE) | |
| endpoint: "localhost:8080" # Metrics exporter endpoint (env: AXONHUB_METRICS_EXPORTER_ENDPOINT) | |
| insecure: true # Enable insecure connection (env: AXONHUB_METRICS_EXPORTER_INSECURE) | |
| # Garbage Collection configuration | |
| gc: | |
| cron: "0 2 * * *" # Cron expression for GC execution (env: AXONHUB_GC_CRON) | |
| # This example runs daily at 2:00 AM | |
| # Format: minute hour day month day_of_week | |
| # Examples: | |
| # "0 2 * * *" - Daily at 2:00 AM | |
| # "0 3 * * 0" - Weekly on Sunday at 3:00 AM | |
| # "0 4 1 * *" - Monthly on 1st day at 4:00 AM | |
| # Provider Quota configuration | |
| provider_quota: | |
| check_interval: "20m" # Interval for checking provider quota status (env: AXONHUB_PROVIDER_QUOTA_CHECK_INTERVAL) | |
| # Supported values: 1m, 2m, 3m, 4m, 5m, 6m, 10m, 12m, 15m, 20m, 30m, 1h, 2h, etc. | |
| # Default: 20m | |
| # Longer intervals reduce API calls but show less fresh quota data | |
| # Environment Variable Examples: | |
| # export AXONHUB_SERVER_PORT=8080 | |
| # export AXONHUB_DB_DSN="postgres://user:pass@localhost/axonhub?sslmode=disable" | |
| # export AXONHUB_LOG_LEVEL="debug" | |
| # export AXONHUB_LOG_ENCODING="console" | |
| # export AXONHUB_LOG_OUTPUT="stdio" # or "file" | |
| # export AXONHUB_LOG_FILE_PATH="/var/log/axonhub/axonhub.log" | |
| # export AXONHUB_LOG_FILE_MAX_SIZE=200 | |
| # export AXONHUB_LOG_FILE_MAX_AGE=14 | |
| # export AXONHUB_LOG_FILE_MAX_BACKUPS=7 | |
| # export AXONHUB_SERVER_TRACE_HEADER="X-Trace-ID" | |
| # export AXONHUB_METRICS_ENABLED=false | |
| # export AXONHUB_GC_CRON="0 3 * * 0" # Run weekly on Sunday at 3:00 AM | |