PostgreSQL connection string. It may go through a transaction pooler such as PgBouncer when DATABASE_DIRECT_URL is set.
DATABASE_DIRECT_URL
DATABASE_URL
A direct connection to PostgreSQL, set when DATABASE_URL goes through a transaction pooler. The workflow engine's locks and live updates use it, in a pool of up to 6 connections.
DATABASE_POOL_SIZE
10
The most connections the server's main pool opens on DATABASE_URL. Sign-in holds up to 2 more. Without a pooler, keep the total under the database's max_connections, less what its host reserves.
Where a browser reaches the API, without its /api path. Links in emails and OAuth redirects start here, so it must not be a container-internal address.
WEB_APP_URL
PUBLIC_URL
Where the web app is served, when it is hosted apart from the API. Invite links and connection sign-ins return here.
CONTENT_ORIGIN
unset
An origin of its own for bot-made HTML pages, e.g. https://pages.example-content.com, pointed at the same server. It serves pages only, isolated from the app's cookies and site; a separate domain isolates best. Its hostname must differ from the app's, and a proxy in front must pass the request's Host header through unchanged, which is how the server tells the two apart. Unset, pages are written into their frame instead.
SUGABOTS_SKIP_MIGRATIONS
false
Docker image only. Set to true to skip applying pending migrations on start.
Who may create an account. closed: nobody signs themselves up; people arrive by invitation to a workspace, except the first account on a new installation. referral: also anybody with a member's referral link. open: anybody.
REQUIRE_EMAIL_VERIFICATION
false
Whether a new account must open a link in its inbox before it gets a session. With the console email provider, the link is printed to the server's console.
Whether the addresses a workspace gives, for its model and search providers and its connections, may be plain HTTP or on a local network such as localhost or your LAN. Unsafe because plain HTTP is unencrypted and a workspace can then reach whatever else is on your network. Turn it on for a self-hosted install using Ollama, LM Studio, vLLM, local MCP servers and the like; keep it off on an installation serving other people's workspaces.
ALLOW_PRIVATE_WEB_FETCH_NETWORK
false
Whether an agent's web_fetch tool may read pages at private addresses. Turn it on for a self-hosted install whose agents should read an intranet.
ALLOW_PRIVATE_MODEL_PROVIDER_NETWORK
false
Deprecated: use ALLOW_UNSAFE_WORKSPACE_URLS, which takes precedence when both are set. Still read, with a warning in the logs.
console, which prints each email to the server's log, webhook or resend.
EMAIL_WEBHOOK_URL
Required for webhook
Receives each email as JSON: from, to, cc, bcc and replyTo as {email, name} addresses, subject, and text and/or html. Must use HTTPS in production, and answer with a 2xx status within 15 seconds.
EMAIL_WEBHOOK_TOKEN
None
For webhook. Sent as a bearer token with each delivery.
Where files are kept, such as tool results too large to hand a model whole. postgres keeps them in the database, up to 100 MiB each. filesystem keeps them on disk, for a single server. Choose before any files are kept: changing it doesn't move them.
BLOB_STORE_FILESYSTEM_ROOT
Required for filesystem
The directory files are kept under. In the Docker image, mount a volume at /data/files. A folder from the server must be writable by uid 1000. Back it up with the database.
THREAD_FILE_MAX_BYTES
The blob store's limit
The largest file a thread keeps, in bytes, when lower than what the blob store keeps.