Skip to main content
OpenCluster uses safe defaults for server addresses, local authentication, logs, telemetry, investigation limits, concurrency, retention, retries, request timeouts, and shutdown. A normal installation supplies database, AI, and encryption files plus its public URL. Supply the bootstrap credential only for initial setup, then remove it. OpenCluster resolves configuration in this order:
  1. Built-in defaults.
  2. The optional YAML file named by OC_CONFIG_FILE.
  3. OC_* environment variables.
Environment variables override only the corresponding file values. Unknown YAML fields, invalid values, and additional YAML documents stop startup instead of being ignored.

Minimal configuration

Direct alternatives are the same names without _FILE, for example OC_AI_API_KEY. Use direct values for local development and mounted files for production when practical. Never set both forms of one secret. Remove the bootstrap input after initial setup.

Configuration file

Set OC_CONFIG_FILE to load product-oriented YAML. Plaintext secrets are not accepted in YAML; reference mounted files instead:
Omit optional sections that the deployment does not use. Values are strings except relay.spkiPins (an array), ai.contextWindow, ai.maxOutputTokens, investigations.workers, and investigations.maxPendingPerOrganization (integers). session.lifetime is a Go duration such as 12h. Relative secret paths in YAML are resolved from the configuration file’s directory. _FILE environment paths remain process-relative. An environment list setting such as OC_RELAY_SPKI_PINS replaces the entire YAML list.

Applying changes

Configuration and secret files are read once at startup. A file update does not reload a running process. For Compose, recreate the control plane with docker compose -f deploy/compose/compose.yaml up -d --force-recreate control-plane. For Helm, ordinary values change the Deployment and trigger rollout. After updating an existing Secret, run kubectl rollout restart deployment/<release>-opencluster, then kubectl rollout status deployment/<release>-opencluster. Confirm /readyz and a bounded Investigation before considering the change complete. Set OC_LOG_LEVEL to debug, info, warn, or error; the default is info. Use OC_OTLP_ENDPOINT when exporting traces to a collector. Local authentication is always available. OIDC is enabled when its issuer, client ID, and client secret are all configured; a partial OIDC configuration stops startup. Relay is optional and listens separately from HTTP; customer Relays initiate outbound connections and pin the configured control-plane key. OC_SESSION_LIFETIME_SECONDS is deployment-owned and defaults to 43,200 seconds. Organizations start with 90 days of audit retention and can configure it independently; browser credential lifetime remains deployment-owned.

Model provider

OSS v0.1 supports deployment-level Anthropic or Z.AI credentials. Set OC_AI_PROVIDER to anthropic or zai, set OC_AI_MODEL to an exact model identifier accepted by that provider, and set OC_AI_API_KEY_FILE to the mounted credential file. Organization-level BYOK is not part of the OSS v0.1 contract. OpenCluster supplies the exact context and maximum output limits for the shipped model IDs: claude-sonnet-5, claude-opus-5, claude-haiku-4-5-20251001, and glm-4.7.

Advanced: custom models

For a custom provider model ID, set both OC_AI_CONTEXT_WINDOW_SIZE and OC_AI_MAX_OUTPUT_SIZE. These advanced overrides may lower a shipped model’s limits but cannot exceed its published capacity. Restart the control plane, wait for /readyz, and run one bounded Investigation. Startup proves that the file is readable; only a completed Investigation proves that the selected provider and model satisfy the structured result contract. For authentication, quota, rate-limit, or unsupported-model errors, correct the provider account or model and start a new Investigation. OpenCluster sends bounded Investigation context, Tool summaries, and the structured result contract. It does not persist or expose model chain-of-thought. Review the security model and the provider’s retention, regional processing, and training terms before production use.

Environment reference

The OSS binary uses one mounted AI deployment for every Organization. Back up retained installation data before replacing a pre-release deployment. This baseline requires a fresh application database and does not import retained data from an older schema. The shared HTTP server allows 10 seconds for headers, 30 seconds to read a request, 30 seconds to write a response, and 60 seconds for an idle connection. Restart after a change, then verify /healthz, /readyz, sign-in, Organization access, Integration verification, and one bounded Investigation.

Webhook admission limits

Each control-plane process allows a shared burst of 600 webhook requests and restores 10 requests per second before authentication. This protects both alert and Slack intake; changing an Integration identifier or forwarding header does not create fresh capacity. During overload, alert webhooks receive 503 and Slack receives 429; both include Retry-After. The budget is process-wide and multiplies across replicas. Integration identifiers and credentials do not create separate in-memory quotas. The metrics endpoint exposes oc.webhooks.requests by surface and bounded result, oc.webhooks.alert_events for newly committed Alert Events, and oc.webhooks.slack_ack_duration for Slack acknowledgement latency. OC_MAX_PENDING_INVESTIGATIONS_PER_ORGANIZATION separately bounds the durable pending Investigation queue; its default is 100. Automatic alert Investigations, manual Investigations, and Conversation turns share this Organization-wide capacity across replicas. Claimed Investigations no longer consume pending capacity. When a model provider is configured, an alert delivery that opens new Incidents must fit all their automatic Investigations. If the current backlog cannot fit them, the whole delivery is refused with 503 and Retry-After; a delivery needing more slots than the configured limit receives permanent 400. Without a model provider, alert intake records Incident state without reserving Investigation capacity.