Skip to content

Frona is configured through a YAML config file at data/config.yaml. You can change the path by setting the FRONA_CONFIG environment variable.

Environment variables with the FRONA_ prefix override values from the config file. For example, FRONA_SERVER_PORT=9999 overrides server.port in the YAML. See Configuration for the environment variable reference.

Server

General server settings.

yaml
server:
  port: 3001
  base_url: https://frona.example.com
  backend_url: http://localhost:3001
  frontend_url: http://localhost:3000
  static_dir: /app/static
  issuer_url: https://frona.example.com
  max_concurrent_tasks: 10
  sandbox_disabled: false
  sandbox_max_agent_cpu_pct: 95.0
  sandbox_max_agent_memory_pct: 80.0
  sandbox_max_total_cpu_pct: 98.0
  sandbox_max_total_memory_pct: 90.0
  sandbox_timeout_secs: 0
  sse_pending_events_secs: 60
  cors_origins: https://app.example.com
  max_body_size_bytes: 104857600
  shutdown_timeout_secs: 60
FieldTypeDefaultDescription
portinteger3001HTTP server port
base_urlstring--Public-facing base URL, used for callbacks and links
backend_urlstring--Override backend API URL
frontend_urlstring--Override frontend URL
static_dirstring/app/staticDirectory serving the frontend static files
issuer_urlstring--JWT token issuer URL
max_concurrent_tasksinteger10Maximum concurrent background tasks across all agents
sandbox_disabledbooleanfalseDisable CLI/Python/Node.js sandboxing. Not recommended for production
sandbox_max_agent_cpu_pctfloat95.0Maximum CPU percentage a single agent can use
sandbox_max_agent_memory_pctfloat80.0Maximum memory percentage a single agent can use
sandbox_max_total_cpu_pctfloat98.0Maximum total CPU percentage all agents can use
sandbox_max_total_memory_pctfloat90.0Maximum total memory percentage all agents can use
sandbox_timeout_secsinteger0Global sandbox execution timeout. 0 means no timeout
sse_pending_events_secsinteger60How long to buffer SSE events after client disconnects
cors_originsstring--Allowed CORS origins
max_body_size_bytesinteger104857600 (100 MB)Maximum HTTP request body size
shutdown_timeout_secsinteger60Graceful shutdown timeout

Auth

Authentication and token settings.

yaml
auth:
  encryption_secret: change-this-in-production
  access_token_expiry_secs: 900
  refresh_token_expiry_secs: 604800
  presign_expiry_secs: 86400
FieldTypeDefaultDescription
encryption_secretstringdev-secret-change-in-productionSecret used to derive the AES-256 key that encrypts JWT signing keypairs at rest. Must be changed in production
access_token_expiry_secsinteger900 (15 min)How long access tokens are valid
refresh_token_expiry_secsinteger604800 (7 days)How long refresh tokens are valid
presign_expiry_secsinteger86400 (24 hours)How long pre-signed URLs are valid

:::caution[Change the encryption secret in production] 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 single sign-on. Disabled by default.

yaml
sso:
  enabled: true
  authority: https://auth.example.com
  client_id: your-client-id
  client_secret: your-client-secret
  scopes: openid email
  disable_local_auth: false
  signups_match_email: true
  allow_unknown_email_verification: true
  client_cache_expiration: 0
FieldTypeDefaultDescription
enabledbooleanfalseEnable OIDC authentication
authoritystring--OpenID Connect authority URL
client_idstring--OAuth client ID
client_secretstring--OAuth client secret
scopesstringopenid emailOpenID scopes to request
disable_local_authbooleanfalseForce SSO-only authentication. Disables local login
signups_match_emailbooleantrueMatch SSO signups to existing accounts by email
allow_unknown_email_verificationbooleantrueAccept emails not verified by the identity provider
client_cache_expirationinteger0Client metadata cache expiration in seconds

Database

yaml
database:
  path: data/db
FieldTypeDefaultDescription
pathstringdata/dbPath to the SurrealDB data directory

Browser

Headless Chrome configuration for browser automation. Optional. If not configured, browser tools are unavailable.

yaml
browser:
  ws_url: ws://browserless:3333
  profiles_path: /profiles
  connection_timeout_ms: 30000
  api_token: your-browserless-token
FieldTypeDefaultDescription
ws_urlstring--WebSocket URL of the Browserless instance
profiles_pathstring/profilesDirectory for storing browser profiles
connection_timeout_msinteger30000 (30s)Timeout for connecting to the browser service
api_tokenstring--Authentication token for the Browserless HTTP API

Web search provider configuration. Optional. If not configured, search tools are unavailable.

yaml
search:
  provider: searxng
  searxng_base_url: http://searxng:8080
FieldTypeDefaultDescription
providerstring--Search provider: searxng, tavily, or brave
searxng_base_urlstring--Base URL of the SearXNG instance

Vault

External vault provider configuration. Credentials set here create system-managed vault connections that sync automatically on startup. See Vault Providers for details.

yaml
vault:
  onepassword_service_account_token: ops_...
  onepassword_vault_id: abc123
  bitwarden_client_id: user.xxx
  bitwarden_client_secret: xxx
  bitwarden_master_password: xxx
  bitwarden_server_url: https://vault.example.com
  hashicorp_address: http://localhost:8200
  hashicorp_token: hvs.xxx
  hashicorp_mount: secret
  keepass_path: /path/to/vault.kdbx
  keepass_password: xxx
  keeper_app_key: xxx
FieldTypeDefaultDescription
onepassword_service_account_tokenstring--1Password service account token
onepassword_vault_idstring--1Password default vault ID
bitwarden_client_idstring--Bitwarden personal API key client ID
bitwarden_client_secretstring--Bitwarden personal API key client secret
bitwarden_master_passwordstring--Bitwarden master password
bitwarden_server_urlstring--Bitwarden server URL (for self-hosted)
hashicorp_addressstring--HashiCorp Vault server address
hashicorp_tokenstring--HashiCorp Vault auth token
hashicorp_mountstringsecretHashiCorp Vault KV2 mount path
keepass_pathstring--Path to KeePass .kdbx file
keepass_passwordstring--KeePass master password
keeper_app_keystring--Keeper Secrets Manager app key

Storage

File storage paths.

yaml
storage:
  workspaces_path: data/workspaces
  files_path: data/files
  shared_config_dir: resources
  skills_dir: data/skills
  cache_dir: data/system/cache
FieldTypeDefaultDescription
workspaces_pathstringdata/workspacesDirectory for agent workspace files
files_pathstringdata/filesDirectory for file uploads and attachments
shared_config_dirstringresourcesDirectory containing shared prompts and agent configurations
skills_dirstringdata/skillsDirectory for installed shared skills
cache_dirstringdata/system/cacheDirectory for system caches (skill registry, etc.)

Scheduler

Background job intervals.

yaml
scheduler:
  poll_secs: 60
  space_compaction_secs: 3600
  memory_compaction_secs: 7200
FieldTypeDefaultDescription
poll_secsinteger60 (1 min)How often the scheduler checks for due tasks
space_compaction_secsinteger3600 (1 hour)Interval for space context compaction
memory_compaction_secsinteger7200 (2 hours)Interval for memory compaction

Inference

LLM inference settings.

yaml
inference:
  max_tool_turns: 200
  default_max_tokens: 8192
  compaction_trigger_pct: 80
  history_truncation_pct: 90
FieldTypeDefaultDescription
max_tool_turnsinteger200Maximum tool call iterations per agent response
default_max_tokensinteger8192Default max tokens for LLM responses
compaction_trigger_pctinteger80Context usage percentage that triggers message compaction
history_truncation_pctinteger90Context usage percentage that triggers history truncation

Voice

Twilio voice call configuration. Optional. If not configured, voice tools are unavailable.

yaml
voice:
  provider: twilio
  twilio_account_sid: your-account-sid
  twilio_auth_token: your-auth-token
  twilio_from_number: "+15551234567"
  twilio_voice_id: Polly.Matthew
  twilio_speech_model: enhanced
  callback_base_url: https://frona.example.com
FieldTypeDefaultDescription
providerstring--Voice provider. Currently only twilio is supported
twilio_account_sidstring--Twilio account SID
twilio_auth_tokenstring--Twilio auth token
twilio_from_numberstring--Twilio phone number for outbound calls (E.164 format)
twilio_voice_idstring--Twilio voice ID for text-to-speech
twilio_speech_modelstring--Twilio speech recognition model
callback_base_urlstring--Public URL for Twilio callbacks. Overrides server.base_url for voice

Providers

LLM provider API keys and endpoints. Providers can also be auto-discovered from environment variables (e.g., ANTHROPIC_API_KEY, OPENAI_API_KEY).

yaml
providers:
  anthropic:
    api_key: sk-ant-...
    enabled: true
  openai:
    api_key: sk-...
    enabled: true
  ollama:
    base_url: http://localhost:11434/v1
    enabled: true
FieldTypeDefaultDescription
api_keystring--API key for the provider
base_urlstring--Custom base URL (for self-hosted models like Ollama)
enabledbooleantrueWhether this provider is active

Supported providers: anthropic, openai, groq, openrouter, deepseek, gemini, cohere, mistral, perplexity, together, xai, hyperbolic, moonshot, mira, galadriel, huggingface, ollama.

Models

Model groups define which LLM an agent uses. Each group is tagged with a provider and has a primary model, optional fallbacks, and provider-specific parameters.

Model groups cannot be set via environment variables. They must be configured in the config file.

Common fields

These fields are available for all providers:

FieldTypeDefaultDescription
providerstringrequiredProvider name (see below)
modelstringrequiredModel ID (without provider prefix)
fallbackslist[]Fallback model groups tried in order if the primary fails
max_tokensinteger--Maximum tokens to generate per response
temperaturefloat--Sampling temperature (0.0-2.0)
context_windowinteger--Override context window size
retry.max_retriesinteger10Maximum retry attempts on failure
retry.initial_backoff_msinteger1000 (1s)Initial backoff between retries
retry.backoff_multiplierfloat2.0Exponential backoff multiplier
retry.max_backoff_msinteger60000 (60s)Maximum backoff duration

Anthropic

yaml
models:
  primary:
    provider: anthropic
    model: claude-sonnet-4-5-20250514
    max_tokens: 8192
    thinking:
      type: enabled
      budget_tokens: 10000
    top_p: 0.9
    top_k: 40

Additional fields: thinking (with type and budget_tokens), top_p, top_k, stop_sequences.

OpenAI, Groq, OpenRouter, DeepSeek, xAI, Together, Hyperbolic

These providers share the same parameter set:

yaml
models:
  coding:
    provider: openai
    model: gpt-4o
    max_tokens: 8192
    top_p: 0.9
    reasoning_effort: high

Additional fields: top_p, min_p, frequency_penalty, presence_penalty, seed, max_completion_tokens, reasoning_effort, logprobs, top_logprobs, stop.

Gemini

yaml
models:
  reasoning:
    provider: gemini
    model: gemini-2.5-pro
    thinking_config:
      thinking_budget: 10000
      include_thoughts: true

Additional fields: thinking_config (with thinking_budget and include_thoughts), top_p, top_k, stop_sequences, candidate_count.

Ollama

yaml
models:
  local:
    provider: ollama
    model: llama3.1
    num_ctx: 8192
    num_predict: 4096

Additional fields: think, num_ctx, num_predict, num_batch, num_keep, num_thread, num_gpu, top_k, top_p, min_p, repeat_penalty, repeat_last_n, frequency_penalty, presence_penalty, mirostat, mirostat_eta, mirostat_tau, tfs_z, seed, stop, use_mmap, use_mlock.

Generic

For any other provider. Only common fields are available.

yaml
models:
  custom:
    provider: generic
    model: my-model

Apps

Settings for agent-deployed applications.

yaml
app:
  port_range_start: 4000
  port_range_end: 4100
  health_check_timeout_secs: 30
  max_restart_attempts: 2
  hibernate_after_secs: 259200
FieldTypeDefaultDescription
port_range_startinteger4000Start of the port range for app allocation
port_range_endinteger4100End of the port range for app allocation
health_check_timeout_secsinteger30Maximum time to wait for an app to become healthy during deployment
max_restart_attemptsinteger2How many times to restart a crashed app before marking it as failed
hibernate_after_secsinteger259200 (3 days)Inactivity duration before auto-hibernating an app

Cache

Entity caching settings.

yaml
cache:
  entity_ttl_secs: 300
  entity_max_capacity: 1000
FieldTypeDefaultDescription
entity_ttl_secsinteger300 (5 min)Time-to-live for cached entities
entity_max_capacityinteger1000Maximum number of cached entities

Sensitive values

These fields are automatically redacted in logs: auth.encryption_secret, sso.client_secret, voice.twilio_account_sid, voice.twilio_auth_token, all vault.* credential fields, and all providers[*].api_key values.