Skip to content

Configuration reference

This page is generated from internal/config/keys.go. Edits will be overwritten on the next build — change the registry in the source repository and rerun just docs-build.

Editable in UI marks whether the key can be set at runtime from the /admin/config page. Keys with — must be set via the config file or environment variables.

When UI change takes effect describes what happens after you save from the admin UI:

  • immediate — the value is applied across all instances via Postgres LISTEN/NOTIFY without restart. Reserved for keys whose consuming code reads through config.Overlay on every use.
  • after restart — the change is persisted to the database and the API returns restart_required: true; the new value takes effect on the next process restart. Covers both keys labeled as restart-class and keys labeled hot whose consumer hasn’t yet been wired to the overlay.
  • not editable — the API rejects the change; set this key via the config file or environment variables instead.

Keys marked 🔒 are sensitive. Their values are redacted from logs and the /admin/config UI.

See Configuration for precedence, file search paths, and environment-variable mapping.

KeyTypeDefaultEditable in UIWhen UI change takes effectDescription
ai.anthropic.api_key 🔒string""✓after restartAnthropic API key
ai.anthropic.modelstring"claude-sonnet-4-20250514"✓after restartAnthropic model name
ai.bedrock.access_key_idstring""✓after restartAWS access key id for Bedrock. If set, uses static credentials; otherwise the AWS default credential chain (IAM role, env, IMDS, EKS Pod Identity) is used.
ai.bedrock.endpointstring""✓after restartOptional Bedrock Runtime endpoint URL override (VPC endpoint, FIPS, custom)
ai.bedrock.modelstring""✓after restartBedrock model id (e.g. anthropic.claude-3-5-sonnet-20241022-v2:0, meta.llama3-1-70b-instruct-v1:0, mistral.mistral-large-2407-v1:0). Inference-profile ids and ARNs are also accepted.
ai.bedrock.profilestring""✓after restartShared config / credentials file profile name. Ignored when access_key_id is set.
ai.bedrock.regionstring""✓after restartAWS region for Bedrock (e.g. us-east-1, us-west-2)
ai.bedrock.secret_access_key 🔒string""✓after restartAWS secret access key (paired with access_key_id)
ai.bedrock.session_token 🔒string""✓after restartOptional AWS session token (paired with static keys when assuming a role)
ai.checkpoint_retentionduration"720h"✓after restartCheckpoint retention before reclamation
ai.embedding.auto_migratebooltrue—not editableWhen provider/model differs from the active embedding state, auto-start the re-embedding migration on serve startup. Set false to stay on the active model; flip back to true (or set during a maintenance window) when ready to migrate. (Auto-migrate is consulted only during startup)
ai.embedding.batch_sizeint64✓after restartMax texts per Embed batch
ai.embedding.modelstring""✓after restartEmbedding model id
ai.embedding.ollama.endpointstring""✓after restartOllama base URL (default http://localhost:11434)
ai.embedding.openai.api_key 🔒string""✓after restartOpenAI embedding API key
ai.embedding.openai.dimensionsint0✓after restartOpenAI Matryoshka dimension override (3-small/large only)
ai.embedding.openai.endpointstring""✓after restartOpenAI embedding endpoint override
ai.embedding.openai_compatible.api_key 🔒string""✓after restartOpenAI-compatible API key
ai.embedding.openai_compatible.dimensionint0✓after restartOutput vector dimension (required for openai_compatible)
ai.embedding.openai_compatible.endpointstring""✓after restartOpenAI-compatible /v1/embeddings URL
ai.embedding.providerstring""✓after restartEmbedding provider (openai, ollama, openai_compatible). Empty disables embeddings.
ai.embedding.request_timeoutduration"60s"✓after restartPer-HTTP-call deadline for embed requests
ai.enabledboolfalse✓after restartEnable AI subsystem
ai.health_poll_intervalduration"5m"✓after restartAI health check poll interval
ai.max_run_durationduration"30m"✓after restartMaximum active time per agent run, pinned when the run starts. Time paused waiting on a human (ask_requester, a Slack triage approval card) does not count; pauses are bounded by the agent spec’s pause timeout and pause-loop limit instead.
ai.providerstring"anthropic"✓after restartAI provider (anthropic, openai, ollama, bedrock)
ai.provider_retry.max_attemptsint5✓after restartMost times an agent run sends one provider request when it keeps failing with a transient error (429, 5xx, connection failure), the first included. Between attempts the run waits durably (a shutdown parks it and the wait resumes elsewhere), which does not count toward ai.max_run_duration. 1 disables retries; when attempts run out the run fails.
ai.provider_retry.max_waitduration"60s"✓after restartLongest single wait between provider retry attempts. The wait is the provider’s Retry-After when sent, otherwise exponential backoff with jitter from 1s; either is capped at this value.
ai.resolver_confidence_thresholdfloat640.8✓after restartMinimum confidence for autonomous resolution
KeyTypeDefaultEditable in UIWhen UI change takes effectDescription
auth.bootstrap_admin_emailstring""—not editableIf set with auth.bootstrap_admin_password, create this admin on first start. Idempotent. (Bootstrap admin is consulted only during startup)
auth.bootstrap_admin_namestring"Admin"—not editableDisplay name for the env-bootstrapped admin user. (Bootstrap admin is consulted only during startup)
auth.bootstrap_admin_password 🔒string""—not editableInitial password for the env-bootstrapped admin (>=8 chars). Only used if the user does not already exist. (Bootstrap admin is consulted only during startup)
auth.local_auth_enabledbooltrue✓immediateAllow local password authentication
auth.login_lockout_durationduration"15m"✓immediateLogin lockout duration
auth.login_max_attemptsint5✓immediateMax failed login attempts before lockout
auth.session_absolute_timeoutduration"8h"✓immediateSession absolute timeout
auth.session_idle_timeoutduration"30m"✓immediateSession idle timeout
KeyTypeDefaultEditable in UIWhen UI change takes effectDescription
database.auto_migratebooltrue—not editableApply pending goose migrations automatically on serve startup. Set false to require a separate docket migrate up step (recommended for scaled deployments). (Auto-migrate is consulted only during startup)
database.max_connsint25✓after restartMaximum database connections
database.url 🔒string""—not editablePostgreSQL connection URL (Database connection cannot be changed at runtime)
KeyTypeDefaultEditable in UIWhen UI change takes effectDescription
dbos.executor_idstring""—not editableDBOS executor ID for this instance. Must be unique among running instances; empty generates hostname + UUIDv7 at startup. The DBOS__VMID environment variable takes precedence. (Per-instance identity; a value shared through the database would make instances re-run each other’s workflows)
KeyTypeDefaultEditable in UIWhen UI change takes effectDescription
email.enabledboolfalse✓after restartEnable email integration
KeyTypeDefaultEditable in UIWhen UI change takes effectDescription
server.hoststring""—not editableHTTP listen host (Server bind address cannot be changed at runtime)
server.portint8080—not editableHTTP listen port (Server bind port cannot be changed at runtime)
server.shutdown_predrain_delayduration"5s"✓after restartOn SIGTERM, how long to keep serving while reporting /readyz as not-ready, so load balancers can deregister this instance before draining begins
server.shutdown_timeoutduration"30s"✓after restartGraceful shutdown timeout
KeyTypeDefaultEditable in UIWhen UI change takes effectDescription
sla.default_resolution_threshold_minutesint480✓after restartDefault resolution SLA threshold (minutes)
sla.default_response_threshold_minutesint60✓after restartDefault response SLA threshold (minutes)
sla.sweeper_intervalduration"1m"✓after restartSLA sweeper check interval
KeyTypeDefaultEditable in UIWhen UI change takes effectDescription
slack.client_id 🔒string""✓after restartSlack app client ID
slack.client_secret 🔒string""✓after restartSlack app client secret
slack.enabledboolfalse✓after restartEnable Slack integration
slack.signing_secret 🔒string""✓after restartSlack signing secret
slack.triage_timeoutduration"15m"✓after restartSlack triage escalation timeout
KeyTypeDefaultEditable in UIWhen UI change takes effectDescription
telemetry.enabledboolfalse—not editableEnable OpenTelemetry (Telemetry must be configured before startup)