AgoraDocs
GitHub

Configuration#

Everything lives in one file: config.json in the server's data dir, created on first boot. Any key can also be set as an AGORA_* environment variable (Railway-friendly); env values are written into config.json at boot, so unsetting one later keeps the last value.

config.json reference#

Key Default Meaning
admin_key generated Operator credential (?token= or Authorization: Bearer). Printed on first boot.
admin_login_enabled true false hides admin-key login controls in the clients (env: AGORA_ADMIN_LOGIN_ENABLED).
session_secret generated Signs session tokens; rotate it to sign everyone out.
username me Display name of the bootstrap local user.
bind 127.0.0.1 0.0.0.0 accepts LAN/remote connections — read Staying safe on a network first.
port 4470 Falls back to an ephemeral port if taken (env: PORT).
require_tls false Refuse plaintext outbound connections to non-loopback hosts.
connections [] Outbound Pantheo endpoints — managed from the Connections pane, not by hand.
pairing_tokens [] Dial-in agent credentials — likewise managed from the UI.
max_file_mb 10 Per-attachment upload cap.
max_video_mb 100 Cap for video attachments (MP4, MOV, M4V, WebM).
google_client_id "" Google OAuth client id — see Sign in with Google.
google_client_secret "" Google OAuth client secret — see Sign in with Google.
google_allowed_emails [] Google admission list — see Google allowlist.
apple_allowed_emails [] Apple admission list — see Apple allowlist.
apple_bundle_id "" iOS bundle id — see Sign in with Apple.
public_url "" Public https origin, used to build the OAuth redirect URI.
map_style_url "" MapLibre style URL for map artifacts; empty uses the built-in default, "none" disables external tiles.
ai.voice / ai.search defaults Instance-admin AI settings (keys, models, enable flags). Set from the AI & voice panel in the clients, or leave empty and supply process-env fallbacks.

Voice and Ask AI#

Instance admins configure these in the product (Settings on web/desktop, Settings → AI & voice on mobile): Features for providers/models and Enabled toggles, Credentials for API keys and Codex OAuth. Values persist under ai in config.json. Process-env fallbacks are resolved at read time only — they are never folded into config.json on boot (so a Railway restart cannot overwrite a UI-set key). Clients advertise voice / Ask AI from the Enabled flags alone; missing credentials fail with a clear error when used.

Env (fallback) Feature
OPENAI_API_KEY Voice TTS and OpenAI STT; also Ask AI when provider is openai
GROQ_API_KEY Voice STT and TTS when that half is set to groq
ANTHROPIC_API_KEY Ask AI when provider is anthropic

Voice STT / TTS providers (Features tab): openai or groq. Groq TTS uses Orpheus (canopylabs/orpheus-v1-english or canopylabs/orpheus-arabic-saudi; wav only; 200-character chunks). Accent (american / british / arabic) is stored once and applied on every provider: OpenAI gpt-4o-mini-tts follows it via speech instructions; Groq maps Arabic onto the Arabic Orpheus model and English accents onto English voices. Models and voices stay per provider so switching does not leak a foreign id.

Ask AI providers (set in the UI Features tab):

Provider Auth (Credentials tab)
anthropic Anthropic API key (config or ANTHROPIC_API_KEY)
openai OpenAI API key shared with voice (config or OPENAI_API_KEY)
codex Codex OAuth via PKCE — Authorize Codex in Credentials (loopback on desktop/localhost; paste the redirected URL when hosted). Model list is fetched live from the Codex catalog when linked.

Models are chosen per provider in the Features tab. If a call fails (bad key, expired OAuth, unknown model), Ask AI / voice returns an explicit error naming the provider and model.