Skip to main content
blue.yaml is the source-controlled configuration for one Blue deployment. The binary default for BLUE_CONFIG_FILE is blue.yaml, but every documented container deployment uses the image’s fixed /etc/blue/blue.yaml; mount the file there. The file combines server runtime configuration and the organization policy seed, but Blue does not send the complete file to clients.
Treat the repository containing blue.yaml as deployment configuration, not secret storage. Commit environment references and immutable policy values. Put credentials in your secret manager and expose them to the workload through blue.existingSecret or your existing secret delivery system.

How values are resolved

Runtime settings use this precedence:
  1. A non-empty direct environment variable, such as HARNESS_DATABASE_URL.
  2. The corresponding scalar in blue.yaml.
  3. A built-in default, where the setting has one.
A YAML scalar can reference an environment variable with either supported form:
os.environ/NAME is used by generated exports and examples. env://NAME is accepted for compatibility. Startup fails when a referenced variable is absent. Boolean and numeric settings may be native YAML scalars or environment-backed strings. Managed repository credential fields also accept file://absolute/path, which is useful with secret-store CSI mounts:
file:// is not a general reference form for every runtime field. Use it for managed repository connection fields and gateway.secret_encryption.key.

Production starting point

The deployment bundle includes a minimal blue.yaml. A production-oriented governance-only configuration has this shape:
New production baselines use required: true, so clients refuse to launch from an expired cache when the governance service is unavailable. Existing revisions and an explicitly authored required: false remain unchanged during upgrades. The Helm values configure the public dashboard and API domains separately. Keep those values consistent with control_api.auth:

Configure control_api

Process and bootstrap settings

Bootstrap values initialize a new database. They are not a declarative user-management system for existing organizations; manage members and invitations through the dashboard or SCIM after startup.

Authentication endpoints

BETTER_AUTH_URL, BETTER_AUTH_SECRET, bootstrap password, and OIDC provider credentials are dashboard runtime variables supplied through the Helm secret; they are not replacements for the endpoint contract above.
Changing issuer, audience, client ID, or BETTER_AUTH_SECRET on an existing deployment invalidates authentication assumptions and may invalidate sessions or signing material. Treat those changes as planned identity migrations.

Identity lifecycle

mode accepts password or oidc. OIDC mode requires a SCIM bearer token because Blue uses directory provisioning rather than just-in-time user creation. group_role_mappings is a JSON object whose values are admin or member, for example {"Blue Admins":"admin"}. Configure provider ID, issuer, client ID, and client secret as dashboard environment variables. Follow Set up Okta SSO and SCIM for the complete lifecycle.

Blob and package storage

Use workload identity or ambient AWS credentials rather than static access keys. Keep session and package buckets separate because they have different retention and recovery requirements.

Request logs and managed repositories

gateway_request_logs.retention_days controls metadata retention for inference-proxy request logs. It does not store prompt or response bodies. Managed repository connections let administrators select packages from private GitHub or Bitbucket repositories without giving repository credentials to clients:
Supported providers are github, bitbucket_cloud, and bitbucket_data_center. GitHub requires app_id and private_key; Bitbucket requires token. Connection IDs must be unique and contain only letters, numbers, dashes, or underscores. The organizations map limits which repository namespaces each Blue organization may use. See Managed repositories for enterprise URLs, CA bundles, and artifact mirroring.

Configure optional gateway mode

Omit the entire gateway section for governance-only operation. Adding it connects Blue to an upstream inference gateway operated by your organization, enables gateway policy for every allowed agent, and requires a provisioner plus encrypted server-side credential storage. Blue does not bundle the upstream gateway. LiteLLM is the first and currently only supported gateway.type.
HARNESS_PROVISIONER_EXECUTABLE_PATH and HARNESS_PROVISIONER_EXECUTABLE_SHA256 override the corresponding custom-provisioner YAML fields. The inference proxy also requires HARNESS_GATEWAY_TYPE with the same value as gateway.type, plus HARNESS_GATEWAY_JWKS_URL, HARNESS_GATEWAY_JWT_ISSUER, and HARNESS_GATEWAY_JWT_AUDIENCE; it does not infer a gateway or trust domain from URLs. In Helm, set blue.gatewayType and the blue.inferenceJwt values when blue.enableInferenceProxy=true. The LiteLLM administrator key and inference JWT private key remain runtime secrets; do not put them in governance policy. See Bring your own gateway for the authenticated request path, key ring, and operational checks.

Configure the governance baseline

The governance section is the deployment-authored baseline delivered to clients after personalization. It controls: Per-agent managed settings are agent-native and version-aware:
Use Governance configuration for the complete client policy schema, package adapters, MCP transports, and harness-specific behavior.

Baseline reconciliation

On startup, the Control API compares:
  1. The baseline previously loaded from blue.yaml.
  2. The current organization revision, including dashboard edits.
  3. The newly mounted governance section.
Non-conflicting deployment changes create a new immutable revision. A dashboard-edited value wins when both the dashboard and the new deployment baseline changed the same path; startup reports the skipped path without logging secret values. Users, sessions, gateway selections, package artifacts, and other accumulated records are not replaced by blue.yaml. The Control API detects baseline changes from the normalized document, not from the authored revision string. You do not need to manually increment that seed value; use source control and deployment image tags to identify authored releases.
Make small, reviewable baseline changes and inspect startup reconciliation notices after deployment. Export the current secret-safe YAML from the dashboard before a large refactor so authored configuration reflects intentional dashboard state.

Configure the package catalog

package_catalog defines choices displayed on the dashboard’s Extensions page. Catalog entries are not automatically installed. When an administrator selects one, Blue copies its immutable recipe into an organization governance revision.
Every source must be immutable and SHA-256 pinned. Use platform_sources when helper binaries differ by operating system or architecture. Adapter paths must be archive-relative and identify only content Blue knows how to activate; package installation does not run arbitrary installer scripts.

Validate and roll out changes

1

Review secret boundaries

Confirm that database URLs, private keys, tokens, encryption material, bootstrap passwords, and gateway administrator keys are references rather than literals.
2

Validate YAML and deployment templates

Run the release bundle’s validation workflow. Locally, parse blue.yaml, lint the chart, and render Kubernetes resources:
3

Review infrastructure and image changes

Review the OpenTofu plan and the organization image diff. Pin the upstream Blue image to the intended release rather than relying on latest.
4

Deploy and inspect startup

Wait for the Helm rollout and inspect Control API logs for YAML parsing, missing references, migration failures, and baseline reconciliation notices.
5

Verify public behavior

Check the dashboard and Control API health endpoints, sign in as an administrator, then run blue setup, blue login, blue status, and a governed agent launch from a test workstation.
A complete rollout has healthy service probes, no unresolved environment references, the expected governance revision in the dashboard, and matching desired/applied revisions on a test client.