data/config.yaml. The first startup generates it from the default template. The example below is kept aligned with src/langbot/templates/config.yaml.
Most self-hosted deployments only need to change public URLs, databases/vector stores, object storage, and Box Runtime. Keep capacity and Cloud safety limits at their defaults unless you understand their operational impact.
Complete default configuration
Configuration groups
API, WebUI, and invitations
api.portis the HTTP API and WebUI port.api.webhook_prefixis the public base URL used to generate platform callback URLs; production deployments normally set it to the HTTPS reverse-proxy origin.- Set
api.webui_urlwhen the browser UI and API use different origins. OAuth redirects trust only this server-side value andwebhook_prefix, never requestHostorOriginheaders. api.global_api_keyauthenticates the HTTP Service API and built-in MCP server throughX-API-KeyorAuthorization: Bearer, without a login session or a database-backedlbk_key. Empty means disabled.workspace.invitations.public_web_urlcontrols invitation links and falls back toapi.webui_url, thenapi.webhook_prefix. Email delivery is optional; chooseresendorsmtp, or leaveproviderempty for link-only invitations.
Admission and capacity limits
concurrencybounds running and queued pipeline work globally and per Workspace.webhooksbounds enabled destinations per Workspace and instance-wide outbound requests. Full request admission fails open rather than retaining an unbounded task queue.cloud.directorycontains operational safety ceilings for one logical Cloud instance, not subscription entitlements. Oversized authoritative directory updates are rejected atomically instead of being truncated. Most self-hosted deployments should keep these defaults.system.blocking_executor,task_retention,session_retention,websocket_retention, andresponse_limitsbound process-local workers, cached records, sockets, and upstream output.- Values under
system.limitationare instance limits;-1means unlimited.force_box_session_id_templateis intended for SaaS sandbox confinement and should remain empty for normal self-hosting.
Databases and vector stores
database.useselects SQLite or PostgreSQL. A non-emptydatabase.postgresql.urloverrides the structured connection fields and preserves TLS/query options.- PostgreSQL pool and timeout settings bound shared runtime resources.
database.cloud_migration.operator_dsn_envnames the environment variable containing the operator-only migration DSN; keep that role separate from the runtime role. vdb.useselects the vector backend. Configure only the selected backend.runtime_cache_limitbounds process-local collection/index handles.vdb.pgvector.use_business_databasereusesdatabase.postgresql;allowed_dimensionscontrols the partial ANN indexes created by release migrations.- Valkey Search requires a Valkey server with the Search module, such as
valkey/valkey-bundle:9.1.0.
Storage, plugins, MCP, and monitoring
storage.max_object_read_bytescaps objects materialized into Core memory. Cleanup limits bound file scans, ands3.max_concurrencybounds synchronous boto3 operations delegated to worker threads.plugin.workerdefines hard per-installation and instance-wide budgets. Plugin manifests cannot raise them. Restart-window settings suppress Runtime restart storms.mcp.lifecycle_concurrencybounds MCP startup/shutdown bursts.mcp.stdio.enabledcan disable local stdio transports without disabling HTTP/SSE MCP servers.- Monitoring query and cleanup limits prevent large pages, exports, offsets, or backlogs from monopolizing memory or PostgreSQL.
Box sandbox
box.enabledis the master switch. Disabling it also disables native sandbox tools, Skill add/edit, and stdio MCP, while read-only Skill listing and HTTP/SSE MCP remain available.box.backendselectslocal,docker,nsjail, ore2b;runtime.endpointconnects an external WebSocket Runtime.box.limitsbounds sessions, processes, workspace scans, retained admission fences, and RPC file size.box.admissionis the Cloud v2 hard-admission policy. OSS defaults torequired: false; pipelines, Workspace entitlements, and tool calls cannot relax Runtime-owned limits.box.localcontrols workspace roots and mount allowlists. In Docker deployments, use an absolutehost_rootthat the Box container can mount.box.default_memory_mbis the default nsjail cgroup limit for each stdio MCP process. Node.js MCP servers usually need more memory than Python servers; too little commonly produces exit code137.
LangBot Space
space.url, models_gateway_api_url, and oauth_authorize_url control Space OAuth/API and MaaS endpoints. The two disable_* flags independently disable model service use and telemetry.
Environment-variable overrides
Convert a nested key to uppercase and join levels with double underscores:API__PORT→api.portWORKSPACE__INVITATIONS__PUBLIC_WEB_URL→workspace.invitations.public_web_urlCONCURRENCY__PENDING_QUERIES_PER_WORKSPACE→concurrency.pending_queries_per_workspaceDATABASE__POSTGRESQL__POOL_SIZE→database.postgresql.pool_sizeSTORAGE__CLEANUP__MAX_FILES_PER_RUN→storage.cleanup.max_files_per_runPLUGIN__WORKER__MAX_TOTAL_MEMORY_MB→plugin.worker.max_total_memory_mbMCP__STDIO__ENABLED→mcp.stdio.enabledBOX__DEFAULT_MEMORY_MB→box.default_memory_mb
data/config.yaml.
In Docker deployments, set unified
BOX__* variables on the langbot service. LangBot sends Box configuration to langbot_box through INIT RPC; variables set directly on langbot_box are not read.