Configuration
OtoDock's settings live in two places, and knowing which is which keeps things simple:
config.env(.envon a Docker install) — deployment settings and secrets. Set once, rarely touched.- The dashboard — everything you tune day to day, under the Setup pages.
config.env: deployment and secrets
This is the file you created at install time — .env next to your compose file on a
Docker install, config.env in the repository root on a source install. On first boot
OtoDock appends its own generated secrets to it, and existing values are never
overwritten, so it's safe across upgrades.
It holds the things that belong with the deployment, not the UI:
Secrets — generated for you
On first run, OtoDock generates and stores its own secrets in this file (signing keys, push-notification keys — the database password is the one you set yourself at install). Don't change or share these — regenerating them logs everyone out, and they should never end up in version control.
Settings you may set
| Setting | What it's for |
|---|---|
DASHBOARD_PUBLIC_URL | The public address users reach OtoDock at (e.g. https://otodock.example.com). Drives login cookies, sign-in redirects, and links in notifications. |
PROXY_PORT | The port OtoDock listens on (default 8400). |
PROXY_BIND_IP | Which of the server's addresses port 8400 listens on. Empty (the default) means all of them. Set 127.0.0.1 when your reverse proxy runs on the same machine, so only the server itself can connect. |
TRUSTED_PROXY | The address your reverse proxy connects from (plain IPs or CIDRs, comma-separated). Set it behind a proxy so the sign-in protections see each visitor's own address. See Reverse proxy & HTTPS. |
TZ | The server's timezone — used for schedules and timestamps. Also changeable later in the dashboard. |
| Subnet overrides | If one of OtoDock's internal Docker ranges clashes with your LAN or VPN, override it: OTODOCK_NETWORK_SUBNET (10.200.0.0/24), OTODOCK_MCP_ADDRESS_POOL (10.201.0.0/16), OTODOCK_SOCKETPROXY_SUBNET (10.202.0.0/24), OTODOCK_DATA_SUBNET (10.203.0.0/24) and OTODOCK_INTERNAL_SUBNET (10.204.0.0/24). |
OTODOCK_PROXY_MEM_LIMIT | Caps the server container's memory. OtoDock plans how many agent sessions can run at once from the memory available to it — set this if the host shares its RAM with other workloads. |
OTODOCK_MAX_FILE_MB | Per-file cap for uploads and remote-machine sync (default 1024 — 1 GB). One knob governs chat attachments, workspace uploads, and file sync alike. |
OTO_AUDIOSOCKET_PUBLIC_HOST | Phone calls through a local PBX only: the LAN address where your PBX reaches the phone service (the Docker host's IP on your local network). The phone service's ports listen on this address, and only the server itself can reach them while it's unset. |
OTO_PHONE_BIND | Rarely needed. Only when the address in OTO_AUDIOSOCKET_PUBLIC_HOST isn't one this server owns, such as a hostname or an address your router forwards, set this to the server's own LAN IP so the phone service can listen. Never use 0.0.0.0 on a server the internet can reach, because the call-audio port has no password of its own. |
SANDBOX_TMP_SIZE_MB | Caps the private /tmp of each server-side agent session (its home, caches, and downloads), so a runaway job fails inside its own sandbox instead of eating the host's memory. Default 4096, never more than half the host's RAM; 0 removes the cap. |
LOOP_WATCHDOG_THRESHOLD_S | A diagnostic. When the server's main loop stalls for longer than this, the log records the code that is blocking. Default 2 seconds; 0 turns it off. Useful when a slow disk makes the dashboard freeze. |
OIDC_* | Single sign-on with an identity provider — see below. |
OTODOCK_MAX_SESSIONS_PER_USER | How many chats one person can have live at once. Default 8, or 0 for no limit. See Chat. |
TASK_MAX_ACTIVE_PER_USER / TASK_MAX_ACTIVE_PER_AGENT | How many scheduled and one-time tasks can be active at once: 25 per person across all their agents (admins aren't limited) and 100 per agent by default. 0 removes a limit. See Tasks. |
MAX_WEBHOOK_BODY_BYTES | The largest webhook event OtoDock accepts from an unverified sender (default 2 MB). Signed GitHub events and webhooks with a valid API key can be up to 25 MB. |
The database connection is handled for you: on a Docker install the compose file wires OtoDock to the bundled PostgreSQL, and on a source install the setup script configures a local one.
Single sign-on (OIDC)
SSO takes a handful of OIDC_* settings in the same file: set OIDC_ENABLED=true, your
provider's OIDC_DISCOVERY_URL, OIDC_CLIENT_ID, and OIDC_CLIENT_SECRET, and — to map
provider groups to OtoDock roles — OIDC_ROLE_ADMIN_GROUP / OIDC_ROLE_CREATOR_GROUP /
OIDC_ROLE_MEMBER_GROUP. The redirect URI derives from DASHBOARD_PUBLIC_URL
automatically (…/auth/callback). See
Users & Access for how roles work.
The dashboard: everything else
Most settings live in the web interface under Setup, take effect immediately, and need no restart:
- General — company name and platform-wide agent instructions.
- AI Engines — connect subscriptions, keys, and models (see Connecting your AI).
- OtoDock — your license.
- Audio — the speech-to-text and text-to-speech providers behind Voice.
- Phone — phone servers, call routes, and call behavior (see Phone Calls).
- Security — password policy, required two-factor sign-in, email (SMTP), bot protection, and sharing.
- System Settings — timezone, session timeouts, memory, storage quotas, retention, remote-machine policies, whether subscription usage is read from the providers, and automatic tool updates.
Where your data lives
OtoDock keeps your data on the machine you run it on. On a Docker Compose install, it lives in named volumes — the database, the agent files, and session state — so stopping and restarting the stack keeps everything intact. Back these up (see Upgrading & Backups).
Next steps
- Upgrading & Backups → — keep current and keep your data safe.
- Users & Access → — SSO, roles, and login security.
- Installation → — where
config.envis first created.