Environment Variables
Frona AI is configured through environment variables. All variables use the FRONA_ prefix and are organized by component.
General
Section titled “General”| Variable | Default | Description |
|---|---|---|
FRONA_SERVER_DATA_DIR | data | Base 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.yaml | Path to the YAML config file |
FRONA_LOG_LEVEL | — | Log verbosity level |
FRONA_LOG_CONFIG | — | Path to a custom log configuration file |
Server
Section titled “Server”| Variable | Default | Description |
|---|---|---|
FRONA_SERVER_PORT | 3001 | Port the backend API listens on |
FRONA_SERVER_BASE_URL | — | Public base URL of the server (used for callbacks) |
FRONA_SERVER_MAX_BODY_SIZE_BYTES | 104857600 (100 MB) | Maximum request body size |
FRONA_SERVER_CORS_ORIGINS | — | Comma-separated list of allowed CORS origins |
FRONA_SERVER_MAX_CONCURRENT_TASKS | 10 | Maximum concurrent tasks across all agents |
FRONA_SERVER_SANDBOX_DISABLED | false | Disable CLI sandboxing (not recommended for production) |
Authentication
Section titled “Authentication”| Variable | Default | Description |
|---|---|---|
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_SECS | 900 (15 min) | Access token lifetime |
FRONA_AUTH_REFRESH_TOKEN_EXPIRY_SECS | 604800 (7 days) | Refresh token lifetime |
FRONA_AUTH_PRESIGN_EXPIRY_SECS | 86400 (24 hours) | Pre-signed URL lifetime |
SSO (OpenID Connect)
Section titled “SSO (OpenID Connect)”| Variable | Default | Description |
|---|---|---|
FRONA_SSO_ENABLED | false | Enable 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_SCOPES | email profile offline_access | OpenID scopes to request |
FRONA_SSO_ONLY | false | Force SSO-only authentication, disables local login |
FRONA_SSO_SIGNUPS_MATCH_EMAIL | true | Match SSO signups to existing accounts by email |
FRONA_SSO_ALLOW_UNKNOWN_EMAIL_VERIFICATION | false | Accept unverified emails from the IdP |
FRONA_SSO_CLIENT_CACHE_EXPIRATION | 0 | Client metadata cache expiration in seconds |
Database
Section titled “Database”| Variable | Default | Description |
|---|---|---|
FRONA_DATABASE_PATH | data/db | Path to the SurrealDB data directory |
Browser
Section titled “Browser”| Variable | Default | Description |
|---|---|---|
FRONA_BROWSER_WS_URL | — | WebSocket URL of the Browserless instance |
FRONA_BROWSER_PROFILES_PATH | /profiles | Path for storing browser profiles |
FRONA_BROWSER_CONNECTION_TIMEOUT_MS | 30000 | Timeout for connecting to the browser |
Search
Section titled “Search”| Variable | Default | Description |
|---|---|---|
FRONA_SEARCH_PROVIDER | — | Search provider: searxng, tavily, or brave |
FRONA_SEARCH_SEARXNG_BASE_URL | — | Base URL of the SearXNG instance |
Storage
Section titled “Storage”| Variable | Default | Description |
|---|---|---|
FRONA_STORAGE_WORKSPACES_PATH | data/workspaces | Path for workspace file storage |
FRONA_STORAGE_FILES_PATH | data/files | Path for file uploads |
FRONA_STORAGE_SHARED_CONFIG_DIR | resources | Path for shared prompts and agent configs |
Scheduler
Section titled “Scheduler”| Variable | Default | Description |
|---|---|---|
FRONA_SCHEDULER_POLL_SECS | 60 | How often the scheduler checks for due tasks |
FRONA_SCHEDULER_SPACE_COMPACTION_SECS | 3600 (1 hour) | Interval for space context compaction |
FRONA_SCHEDULER_INSIGHT_COMPACTION_SECS | 7200 (2 hours) | Interval for memory insight compaction |
Inference
Section titled “Inference”| Variable | Default | Description |
|---|---|---|
FRONA_INFERENCE_MAX_TOOL_TURNS | 200 | Maximum tool call iterations per response |
FRONA_INFERENCE_DEFAULT_MAX_TOKENS | 8192 | Default max tokens for LLM responses |
FRONA_INFERENCE_COMPACTION_TRIGGER_PCT | 80 | Context usage percentage that triggers compaction |
FRONA_INFERENCE_HISTORY_TRUNCATION_PCT | 90 | Context usage percentage that triggers truncation |
Voice (Twilio)
Section titled “Voice (Twilio)”| Variable | Default | Description |
|---|---|---|
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 Provider
Section titled “LLM Provider”| Variable | Default | Description |
|---|---|---|
ANTHROPIC_API_KEY | — | API key for Anthropic (Claude) |
OPENAI_API_KEY | — | API key for OpenAI |
GROQ_API_KEY | — | API key for Groq |
OPENROUTER_API_KEY | — | API key for OpenRouter |
DEEPSEEK_API_KEY | — | API key for DeepSeek |
GEMINI_API_KEY | — | API key for Google Gemini |
COHERE_API_KEY | — | API key for Cohere |
MISTRAL_API_KEY | — | API key for Mistral |
PERPLEXITY_API_KEY | — | API key for Perplexity |
TOGETHER_API_KEY | — | API key for Together AI |
XAI_API_KEY | — | API key for xAI (Grok) |
HYPERBOLIC_API_KEY | — | API key for Hyperbolic |
MOONSHOT_API_KEY | — | API key for Moonshot |
MIRA_API_KEY | — | API key for Mira |
GALADRIEL_API_KEY | — | API key for Galadriel |
HUGGINGFACE_API_KEY | — | API key for Hugging Face |
OLLAMA_API_BASE_URL | — | Base URL for Ollama instance |
Model groups
Section titled “Model groups”Model groups are configured in the application config file rather than environment variables. Each group defines:
main: the primary model identifierfallbacks: a list of fallback modelsmax_tokens: token limit overridetemperature: temperature overridecontext_window: context window sizeretry: exponential backoff settings for retries