Skip to content

Frona is configured through environment variables. All variables use the FRONA_ prefix and are organized by component.

General

VariableDefaultDescription
FRONA_SERVER_DATA_DIRdataBase data directory. Defaults for FRONA_CONFIG, database.path, storage.workspaces_path, and storage.files_path are derived from this path
FRONA_CONFIG{data_dir}/config.yamlPath to the YAML config file
FRONA_LOG_LEVEL--Log verbosity level
FRONA_LOG_CONFIG--Path to a custom log configuration file

Server

VariableDefaultDescription
FRONA_SERVER_PORT3001Port the backend API listens on
FRONA_SERVER_BASE_URL--Public base URL of the server (used for callbacks)
FRONA_SERVER_MAX_BODY_SIZE_BYTES104857600 (100 MB)Maximum request body size
FRONA_SERVER_CORS_ORIGINS--Comma-separated list of allowed CORS origins
FRONA_SERVER_MAX_CONCURRENT_TASKS10Maximum concurrent tasks across all agents
FRONA_SERVER_BACKEND_URL--Override backend API URL
FRONA_SERVER_FRONTEND_URL--Override frontend URL
FRONA_SERVER_ISSUER_URL--JWT token issuer URL
FRONA_SERVER_SANDBOX_DISABLEDfalseDisable sandbox (not recommended for production)
FRONA_SERVER_SANDBOX_MAX_AGENT_CPU_PCT95.0Maximum CPU percentage a single agent can use
FRONA_SERVER_SANDBOX_MAX_AGENT_MEMORY_PCT80.0Maximum memory percentage a single agent can use
FRONA_SERVER_SANDBOX_MAX_TOTAL_CPU_PCT98.0Maximum total CPU percentage all agents can use
FRONA_SERVER_SANDBOX_MAX_TOTAL_MEMORY_PCT90.0Maximum total memory percentage all agents can use
FRONA_SERVER_SANDBOX_TIMEOUT_SECS0Global sandbox execution timeout (0 = no timeout)
FRONA_SERVER_SSE_PENDING_EVENTS_SECS60How long to buffer SSE events after client disconnects
FRONA_SERVER_SHUTDOWN_TIMEOUT_SECS60Graceful shutdown timeout

Authentication

VariableDefaultDescription
FRONA_AUTH_ENCRYPTION_SECRET--Secret used to derive the AES-256 key that encrypts JWT signing keypairs at rest. Must be changed in production.
FRONA_AUTH_ACCESS_TOKEN_EXPIRY_SECS900 (15 min)Access token lifetime
FRONA_AUTH_REFRESH_TOKEN_EXPIRY_SECS604800 (7 days)Refresh token lifetime
FRONA_AUTH_PRESIGN_EXPIRY_SECS86400 (24 hours)Pre-signed URL lifetime

:::caution[Change the encryption secret in production] FRONA_AUTH_ENCRYPTION_SECRET is used to derive an AES-256 encryption key (via SHA-256) that protects the JWT signing keypairs stored in the database. It is not used directly for JWT signing — instead it encrypts the private keys that do the signing.

A built-in default is provided for local development, but you must set your own value in production. If the default is left in place and database files are ever exposed (backup leak, file traversal, shared host), an attacker could decrypt the signing keypairs and forge authentication tokens for any user.

Generate a strong random secret:

bash
openssl rand -base64 32

:::

SSO (OpenID Connect)

VariableDefaultDescription
FRONA_SSO_ENABLEDfalseEnable OIDC authentication
FRONA_SSO_AUTHORITY--OpenID Connect authority URL
FRONA_SSO_CLIENT_ID--OIDC client ID
FRONA_SSO_CLIENT_SECRET--OIDC client secret
FRONA_SSO_SCOPESopenid emailOpenID scopes to request
FRONA_SSO_DISABLE_LOCAL_AUTHfalseForce SSO-only authentication, disables local login
FRONA_SSO_SIGNUPS_MATCH_EMAILtrueMatch SSO signups to existing accounts by email
FRONA_SSO_ALLOW_UNKNOWN_EMAIL_VERIFICATIONtrueAccept unverified emails from the IdP
FRONA_SSO_CLIENT_CACHE_EXPIRATION0Client metadata cache expiration in seconds

Database

VariableDefaultDescription
FRONA_DATABASE_PATHdata/dbPath to the SurrealDB data directory

Browser

VariableDefaultDescription
FRONA_BROWSER_WS_URL--WebSocket URL of the Browserless instance
FRONA_BROWSER_PROFILES_PATH/profilesPath for storing browser profiles
FRONA_BROWSER_CONNECTION_TIMEOUT_MS30000Timeout for connecting to the browser
FRONA_BROWSER_API_TOKEN--Authentication token for the Browserless HTTP API
VariableDefaultDescription
FRONA_SEARCH_PROVIDER--Search provider: searxng, tavily, or brave
FRONA_SEARCH_SEARXNG_BASE_URL--Base URL of the SearXNG instance

Vault

VariableDefaultDescription
FRONA_VAULT_ONEPASSWORD_SERVICE_ACCOUNT_TOKEN--1Password service account token
FRONA_VAULT_ONEPASSWORD_VAULT_ID--1Password default vault ID
FRONA_VAULT_BITWARDEN_CLIENT_ID--Bitwarden personal API key client ID
FRONA_VAULT_BITWARDEN_CLIENT_SECRET--Bitwarden personal API key client secret
FRONA_VAULT_BITWARDEN_MASTER_PASSWORD--Bitwarden master password
FRONA_VAULT_BITWARDEN_SERVER_URL--Bitwarden server URL (for self-hosted instances)
FRONA_VAULT_HASHICORP_ADDRESS--HashiCorp Vault server address
FRONA_VAULT_HASHICORP_TOKEN--HashiCorp Vault auth token
FRONA_VAULT_HASHICORP_MOUNT--HashiCorp Vault KV2 mount path (default: secret)
FRONA_VAULT_KEEPASS_PATH--Path to KeePass .kdbx file
FRONA_VAULT_KEEPASS_PASSWORD--KeePass master password
FRONA_VAULT_KEEPER_APP_KEY--Keeper Secrets Manager app key

Storage

VariableDefaultDescription
FRONA_STORAGE_WORKSPACES_PATHdata/workspacesPath for workspace file storage
FRONA_STORAGE_FILES_PATHdata/filesPath for file uploads
FRONA_STORAGE_SHARED_CONFIG_DIRresourcesPath for shared prompts and agent configs
FRONA_STORAGE_SKILLS_DIRdata/skillsPath for installed shared skills
FRONA_STORAGE_CACHE_DIRdata/system/cachePath for system caches

Scheduler

VariableDefaultDescription
FRONA_SCHEDULER_POLL_SECS60How often the scheduler checks for due tasks
FRONA_SCHEDULER_SPACE_COMPACTION_SECS3600 (1 hour)Interval for space context compaction
FRONA_SCHEDULER_MEMORY_COMPACTION_SECS7200 (2 hours)Interval for memory compaction

Inference

VariableDefaultDescription
FRONA_INFERENCE_MAX_TOOL_TURNS200Maximum tool call iterations per response
FRONA_INFERENCE_DEFAULT_MAX_TOKENS8192Default max tokens for LLM responses
FRONA_INFERENCE_COMPACTION_TRIGGER_PCT80Context usage percentage that triggers compaction
FRONA_INFERENCE_HISTORY_TRUNCATION_PCT90Context usage percentage that triggers truncation

Voice (Twilio)

VariableDefaultDescription
FRONA_VOICE_PROVIDER--Voice provider. Currently only twilio is supported
FRONA_VOICE_TWILIO_ACCOUNT_SID--Twilio account SID
FRONA_VOICE_TWILIO_AUTH_TOKEN--Twilio auth token
FRONA_VOICE_TWILIO_FROM_NUMBER--Twilio phone number for outbound calls (E.164 format)
FRONA_VOICE_TWILIO_VOICE_ID--Twilio voice ID for text-to-speech
FRONA_VOICE_TWILIO_SPEECH_MODEL--Twilio speech recognition model
FRONA_VOICE_CALLBACK_BASE_URL--Public URL for Twilio callbacks (overrides server.base_url)

LLM Providers

Frona supports 17 LLM providers. Set the API key for any provider you want to use. Providers are auto-discovered from environment variables on startup. At least one is required.

VariableProvider
ANTHROPIC_API_KEYAnthropic (Claude)
OPENAI_API_KEYOpenAI (GPT)
GROQ_API_KEYGroq
OPENROUTER_API_KEYOpenRouter
DEEPSEEK_API_KEYDeepSeek
GEMINI_API_KEYGoogle Gemini
COHERE_API_KEYCohere
MISTRAL_API_KEYMistral
PERPLEXITY_API_KEYPerplexity
TOGETHER_API_KEYTogether AI
XAI_API_KEYxAI (Grok)
HYPERBOLIC_API_KEYHyperbolic
MOONSHOT_API_KEYMoonshot
MIRA_API_KEYMira
GALADRIEL_API_KEYGaladriel
HUGGINGFACE_API_KEYHugging Face
OLLAMA_API_BASE_URLOllama (self-hosted, no API key needed)

You can also configure providers via the config file or the setup wizard.

Apps

VariableDefaultDescription
FRONA_APP_PORT_RANGE_START4000Start of the port range for app allocation
FRONA_APP_PORT_RANGE_END4100End of the port range for app allocation
FRONA_APP_HEALTH_CHECK_TIMEOUT_SECS30Maximum time to wait for an app to become healthy
FRONA_APP_MAX_RESTART_ATTEMPTS2Restart attempts before marking a crashed app as failed
FRONA_APP_HIBERNATE_AFTER_SECS259200 (3 days)Inactivity duration before auto-hibernating an app

Cache

VariableDefaultDescription
FRONA_CACHE_ENTITY_TTL_SECS300 (5 min)Time-to-live for cached entities
FRONA_CACHE_ENTITY_MAX_CAPACITY1000Maximum number of cached entities

Model groups

Model groups cannot be set via environment variables. They must be configured in the config file. Each group defines a provider, model, fallbacks, and provider-specific parameters like thinking budgets and sampling settings.