Configuration options¶
Every agentSandbox.* option (201 total), generated from the kubenix modules via nixosOptionsDoc — this reference cannot drift from the code.
Type to filter; click an option to jump to its full entry.
agentSandbox.agent.availableModelsattribute set of attribute set of (submodule)The model catalog, PROVIDER-FIRST: provider -> model id -> options. Model ids are provider-specific namespaces — "goose" runs Bedrock ids (us.anthropic.…) wh…
agentSandbox.agent.availableModels...default booleanThis provider's default model (at most one per provider; else the group's first entry).
agentSandbox.agent.availableModels...hint stringDeployment guidance shown to the agent by the `list_models` MCP tool, steering when to pick this model (e.g. fast/cheap vs slow/powerful). Empty = no hint.
agentSandbox.agent.builtinSkillsbooleanShip the platform's own skills, each only when the capability it documents is enabled (e.g. scooter-grafana only with broker.grafana.enable). Set false to su…
agentSandbox.agent.claudeCode.tokenSecretstringWhen `agent.provider = "claude-code"`, the name of the Secret holding the long-lived subscription OAuth token (`claude setup-token`) under key `token`. Wired…
agentSandbox.agent.modelnull or stringDEPRECATED — use `availableModels.
agentSandbox.agent.namestringDisplay name the agent goes by (AGENT_NAME) — its identity in the UI + prompt.
agentSandbox.agent.remoteAgent.bridgeUrlstringPUBLIC base URL of the BYOC controller's ingress — what the user's container dials (`/byoc/ws/
agentSandbox.agent.remoteAgent.enablebooleanBring-your-own-Claude remote agents (the Settings UI + agent-host mint/status routes). Defaults to `byoc.enable`: the controller and the host-side routes are…
agentSandbox.agent.remoteAgent.imagestringThe ghcr container image the Settings one-liner tells users to `docker run` (REMOTE_AGENT_IMAGE).
agentSandbox.agent.remoteAgent.joinSecretstringName of the Secret holding the HS256 signing key (key `secret`) the agent-host uses to sign + verify owner-bound join tokens. ONE server-side key (not per-us…
agentSandbox.agent.skillsattribute set of stringMarkdown skills injected into the agent as .goosehints (filename -> content). Rendered to a ConfigMap mounted at SKILLS_DIR on the agent-host and read per co…
agentSandbox.auth.albRegionnull or stringRegion for the ALB public-key endpoint. REQUIRED when albVerify = true (no silent default — the public-key host is region-specific).
agentSandbox.auth.albVerifybooleanalb-oidc: verify the x-amzn-oidc-data JWT signature (fetch ALB's public key) before trusting its claims.
agentSandbox.auth.emailHeaderstringheader mode: request header carrying the user's email (optional; set by the ingress).
agentSandbox.auth.modeone of "header", "alb-oidc"Identity source: `header` (default; a proxy sets userHeader/emailHeader) or `alb-oidc` (AWS ALB OIDC).
agentSandbox.auth.subEmailMapattribute set of stringOptional static map of user id (OIDC sub) -> email, seeding the learned identity store.
agentSandbox.auth.userHeaderstringheader mode: request header carrying the authenticated user id (set by the ingress).
agentSandbox.broker.aws.accountsattribute set of attribute set of anythingThe account registry: alias -> { account_id, broker_role_arn, enabled, description?, allowed_policy?, allowed_managed_policies?, region?, approvers?, auto_ap…
agentSandbox.broker.aws.agentHostUrlstringAgent-host URL — the broker notifies it to raise the approval interrupt.
agentSandbox.broker.aws.approverClaimone of "email", "id", "name"Which identity claim authorizes an approver — must match how the FGA `approver` tuples are seeded (accounts..approvers, conventionally emails). The agent-…
agentSandbox.broker.aws.brokerPrincipalArnstringThe broker's IRSA role ARN — the principal the dynamic roles trust.
agentSandbox.broker.aws.enablebooleanEnable the AWS permissions provider (request/approve/provision dynamic IAM roles).
agentSandbox.broker.aws.externalIdstringSTS ExternalId used when the broker assumes each account's base role.
agentSandbox.broker.aws.fga.authorizationModelIdstringOpenFGA authorization-model id (optional; latest used if empty).
agentSandbox.broker.aws.fga.enablebooleanEnforce per-account approver authorization via OpenFGA. Deploys an openfga server.
agentSandbox.broker.aws.serviceAccountRoleArnstringIRSA role ARN annotated on the broker SA (eks.amazonaws.com/role-arn). Usually == brokerPrincipalArn.
agentSandbox.broker.datadog.apiKeySecretsubmoduleSecret holding the Datadog API key. Injected as DATADOG_API_KEY. The secret must exist in the broker namespace.
agentSandbox.broker.datadog.appKeySecretsubmoduleSecret holding the Datadog application key. Injected as DATADOG_APP_KEY. The secret must exist in the broker namespace.
agentSandbox.broker.datadog.enablebooleanEnable the Datadog provider (http-proxy to api.
agentSandbox.broker.datadog.sitestringDatadog site/region host suffix (datadoghq.com | datadoghq.eu | us3.datadoghq.com | us5.datadoghq.com | ap1.datadoghq.com | ddog-gov.com). Upstream is https:…
agentSandbox.broker.githubApp.enablebooleanEnable the GitHub provider, backed by a GitHub App (vends installation tokens for git/HTTPS + the API).
agentSandbox.broker.githubApp.installationIdstringGitHub App installation ID (GITHUB_APP_INSTALLATION_ID).
agentSandbox.broker.githubApp.privateKeySecretsubmoduleSecret holding the GitHub App private key (PEM). The secret must exist in the broker namespace.
agentSandbox.broker.gitlab.enablebooleanEnable the GitLab provider (transparent http-proxy to gitlab.com with the token injected).
agentSandbox.broker.gitlab.tokenSecretsubmoduleSecret holding the GitLab token (glpat-…). Injected as GITLAB_TOKEN. The secret must exist in the broker namespace.
agentSandbox.broker.grafana.enablebooleanEnable the Grafana provider (http-proxy to a Grafana stack with a service-account token injected).
agentSandbox.broker.grafana.tokenSecretsubmoduleSecret holding a Grafana service-account token. Injected as GRAFANA_TOKEN. The secret must exist in the broker namespace.
agentSandbox.broker.grafana.tokenSecret.keystringSecret key holding the Grafana service-account token.
agentSandbox.broker.grafana.urlstringBase URL of the Grafana stack. Upstream for /grafana/*; a trailing slash is stripped.
agentSandbox.broker.jiraSiteUrlstringThe Jira SITE base URL, used to build a human /browse/{KEY} link when the broker auto-links an issue an agent creates via the Jira proxy (the create-issue AP…
agentSandbox.broker.shares.enablebooleanEnable static-share publishing (/shares + /s/
agentSandbox.broker.shares.frameAncestorsstringCSP frame-ancestors allowlist for embedding a served share in an
agentSandbox.broker.shares.publicBaseUrlstringExternal origin used to build the returned share URL (SHARES_PUBLIC_BASE_URL). Empty -> defaults to https://
agentSandbox.broker.slack.botTokenSecretsubmoduleSecret holding the Slack bot token (xoxb-…). Injected as SLACK_BOT_TOKEN. The secret must exist in the broker namespace.
agentSandbox.broker.slack.enablebooleanEnable the Slack provider (http-proxy to slack.com/api with the bot token injected).
agentSandbox.broker.testProviderbooleanEnable the `test` (whoami) provider for credential e2e tests.
agentSandbox.byoc.ingress.annotationsattribute set of stringAnnotations on the BYOC Ingress — controller/cert config WITHOUT auth. The endpoint must accept an unauthenticated WebSocket upgrade from the user's containe…
agentSandbox.byoc.ingress.classNamestringspec.ingressClassName (the controller). Empty = cluster default.
agentSandbox.byoc.ingress.enablebooleanExpose /byoc/ via a standard Ingress so a user's container can dial in. Default ON when the controller is enabled — a BYOC controller nothing can reach is no…
agentSandbox.byoc.ingress.hoststringPublic hostname for the BYOC connect path (/byoc). Defaults to the UI's own ingress host: this is a SEPARATE Ingress object carrying only the /byoc path with…
agentSandbox.byoc.ingress.tlsSecretNamestringTLS secret for the ingress host (empty = controller default).
agentSandbox.byoc.joinSecretNamestringSecret holding key `secret` — the HMAC key for join tokens. The agent-host MINTS with the same key the controller VERIFIES with, so by default this is litera…
agentSandbox.byoc.traceTunnelbooleanEmit a per-frame trace of the MCP tunnel (`[tunnel.trace] …`): the JSON-RPC method, direction, byte counts and HTTP status of every stream, correlated by str…
agentSandbox.conversationController.agentHostReplicassigned integeragent-host StatefulSet replicas when the controller is enabled (multi-replica).
agentSandbox.conversationController.assets.accessModestringAccess mode of the assets PVC. ReadWriteMany because the multi-replica agent-host fleet all write assets and pods may land on different nodes (see #471). Lef…
agentSandbox.conversationController.assets.enablebooleanProvision a dedicated PVC for asset storage (uploaded images, future media). BYTES-ONLY PVC: asset metadata (conversation_id, asset_id, mime_type, size, sha2…
agentSandbox.conversationController.assets.hostPathnull or stringSingle-node escape hatch (e.g. k3d/odin, which have no RWX provisioner): back the assets PVC with a hostPath PV at this path so a ReadWriteMany claim binds.…
agentSandbox.conversationController.assets.sizestringSize of the dedicated assets PVC (10Gi ≈ 2000 images at 5MB each).
agentSandbox.conversationController.assets.storageClassNamenull or stringstorageClassName for the assets PVC (null = cluster default). Point at an RWX class (EFS/NFS) on a real multi-node cluster. Ignored when hostPath is set.
agentSandbox.conversationController.autoscalebooleanThe controller autoscales the agent-host Deployment to fit conversation demand (desired = ceil(top-level conversations / podCap), clamped to [minReplicas, ma…
agentSandbox.conversationController.historyMirror.accessModestringAccess mode of the mirror PVC. ReadWriteMany is required for the real multi-writer mirror (all pods append). Left configurable only for the degenerate replic…
agentSandbox.conversationController.historyMirror.enablebooleanProvision the shared history-mirror PVC + wire MIRROR_STATE_PATH into agent-host. On by default: cross-pod history revival is the point of multi-replica. Set…
agentSandbox.conversationController.historyMirror.hostPathnull or stringSingle-node escape hatch (e.g. odin, which has no RWX provisioner): back the mirror with a hostPath PV at this path so a ReadWriteMany PVC binds. All agent-h…
agentSandbox.conversationController.historyMirror.retainForMigrationbooleanKeep the mirror PVC provisioned while the event log migrates to Postgres, even once agent-host has stopped writing to it. The migration reads every conversat…
agentSandbox.conversationController.historyMirror.storageClassNamenull or stringstorageClassName for the mirror PVC (null = cluster default). Point at an RWX class (EFS/NFS) on a real cluster. Ignored when hostPath is set.
agentSandbox.conversationController.maxReplicassigned integerAutoscaler ceiling — never scale the agent-host above this.
agentSandbox.conversationController.metricsPortsigned integerPort the controller serves Prometheus /metrics on (conversations-per-pod).
agentSandbox.conversationController.minReplicassigned integerAutoscaler floor — never scale the agent-host below this (a warm fleet).
agentSandbox.conversationController.orphanGraceSecondssigned integerOnly reap a Sandbox with no owning Conversation if it's older than this many seconds — long enough that a normal create has registered its Conversation CR (t…
agentSandbox.conversationController.podCapsigned integerMax conversations assigned to one agent-host pod before it's considered full.
agentSandbox.conversationController.reapOrphansbooleanReap orphaned Sandboxes — those with no owning Conversation CR — destroying the whole per-conversation tree (Sandbox + its ServiceAccount + module ConfigMap)…
agentSandbox.conversationController.replicassigned integerController replicas (leader-elected; >1 for availability, only the leader reconciles).
agentSandbox.conversationController.routerReplicassigned integerRouter replicas (stateless proxy; fronts the agent-host Service).
agentSandbox.conversationController.scaleDownCooldownSecondssigned integerWait this long between scale-DOWNs (hysteresis; scale-up is immediate).
agentSandbox.idleSuspendMssigned integerIdle window before the agent-host auto-suspends a conversation (drops the sandbox pod, keeps the PVCs). The agent-host owns the activity signal, so it self-m…
agentSandbox.pullPolicyone of "Always", "IfNotPresent", "Never"imagePullPolicy for the platform Deployments. IfNotPresent suits side-loaded kind/k3s images; Always suits a registry-backed cluster.
agentSandbox.registryPrefixstringRegistry/repository prefix prepended to the default image names (agent-host, agent-broker, agent-webhooks, agent-sandbox-os). Defaults to the published ghcr…
agentSandbox.retentionMaxAgeMssigned integerRetention reap: DESTROY (end — pod + PVCs + record) an UNSTARRED conversation that has been inactive (no prompt/event) longer than this. Age is measured from…
agentSandbox.sandboxResourcesnull or (attribute set)Resource requests/limits for each conversation's sandbox pod, as {requests = {cpu, memory}; limits = {cpu, memory};}. null = the agent-host default (Guarante…
agentSandbox.sandboxRuntimeClassnull or stringRuntimeClass for the per-conversation sandbox pod (the systemd-PID-1 image). A cgroup-delegating runtime (e.g. crun) gives the sandbox's systemd a writable c…
agentSandbox.sandboxViaBrokerbooleanRoute the sandbox LIFECYCLE (create/suspend/resume/destroy + sizing) through the BROKER instead of the agent-host touching k8s directly (the control-plane mo…
agentSandbox.serviceAccountRoleArnnull or stringIRSA role ARN annotated onto the agent-host ServiceAccount (eks.amazonaws.com/role-arn). The role's trust policy must allow system:serviceaccount:
agentSandbox.statelessReplicassigned integerReplica count for the STATELESS platform services — the broker, scheduler, webhooks, and UI. Defaults to 2 so a node drain / consolidation can't take a whole…
agentSandbox.deployTools.configFilesattribute set of strings concatenated with "\n"Config FILES to mount into every sandbox, as a flat directory at `/etc/agent-sandbox/config/`. Keys are plain filenames (no slashes), values are file content…
agentSandbox.deployTools.envattribute set of stringExtra env vars a deployment's tools need, set on each sandbox. Values may contain newlines, `;`, and `=` — they're carried to the pod as JSON (SCOOTER_ENV),…
agentSandbox.deployTools.sandboxManifestOverlayattribute set of anythingA recursive PATCH deep-merged on top of the broker-generated per-conversation Sandbox manifest — so a deployment can change the pod manifest (nodeSelector, t…
agentSandbox.deployTools.scooterConfigMapnull or stringA deployment's .scooter ConfigMap to mount at /etc/agent-sandbox/scooter.
agentSandbox.deployTools.tokenAudienceslist of stringExtra projected SA token audiences a deployment's tools need (mounted at /var/run/secrets/
agentSandbox.eventBackfill.enablebooleanWhether to enable the one-shot event backfill Job (history mirror PVC → Postgres). Turn ON to run the migration, verify the report shows all conversations OK…
agentSandbox.eventBackfill.imagestringThe agent-host image (it carries the compiled dist/scripts/runEventBackfill.js and its deps). Defaults to the same image agent-host runs, so the backfill loa…
agentSandbox.eventBackfill.mirrorPathstringPath inside the mounted history mirror PVC where conversation directories live. Each conversation is a directory named by its ID, containing an events.jsonl…
agentSandbox.ingress.annotationsattribute set of stringAnnotations on the chat Ingress — controller-specific config (cert, scheme, AUTH, the trusted identity header, external-dns hostname, …). SECURITY: the agent…
agentSandbox.ingress.classNamestringspec.ingressClassName (the controller). Empty = the cluster's default IngressClass. e.g. "alb", "nginx", "traefik".
agentSandbox.ingress.enablebooleanExpose the agent-host (AG-UI/API + UI) via a standard Ingress. On by default so a deploy is reachable by hostname out of the box. SECURITY: the module auth-g…
agentSandbox.ingress.tlsbooleanAdd a spec.tls entry for `host`. Needed for cert-manager (the tls block triggers issuance) and for controllers that read spec.tls. Deployers that terminate T…
agentSandbox.ingress.tlsSecretNamestringThe TLS Secret holding the cert for `host` (populated by cert-manager, your CD, etc.). Empty + tls=true emits a spec.tls entry WITHOUT a secretName (some con…
agentSandbox.legacyStateMigration.enablebooleanWhether to enable the one-shot legacy-state migration Job (old per-pod RWO PVCs -> shared mirror). Turn ON for the cutover, run once (with agent-host scaled…
agentSandbox.legacyStateMigration.imagestringA tiny image with a POSIX shell + cp (busybox) for the copy Job.
agentSandbox.legacyStateMigration.legacyPvcslist of stringThe legacy StatefulSet per-pod RWO PVC names to migrate FROM (named `state-agent-host-
agentSandbox.dbMigrate.enablebooleanRun the shared-database migration Job on deploy (applies lib/sql migrations via Atlas). Only databases with an Atlas schema that are also provisioned (a post…
agentSandbox.ui.enablebooleanDeploy the conversation UI (nginx serving the assistant-ui build and proxying /agui + /sessions + the management API to the agent-host). When enabled, the in…
agentSandbox.observability.browserTelemetry.collectorUrlnull or stringOTLP/HTTP base URL of the collector that receives browser telemetry. HTTP, not gRPC — browsers cannot speak OTLP/gRPC. NO DEFAULT, deliberately. A plausible-…
agentSandbox.observability.browserTelemetry.enablebooleanLet the UI send OTLP traces to a collector, proxied same-origin through the UI's nginx at /telemetry/. OFF by default. Same-origin on purpose: the browser ho…
agentSandbox.observability.browserTelemetry.sampleRatiofloating point numberFraction of browser traces to record (0.0-1.0). 1.0 while debugging; lower it if the UI's live event stream produces more spans than the collector should carry.
agentSandbox.observability.otel.enablebooleanEmit OpenTelemetry metrics (run count/latency, tokens, derived cost, sandbox population) over OTLP. OFF by default. The OTLP endpoint + headers come from the…
agentSandbox.observability.otel.envattribute set of stringStandard OTEL_EXPORTER_OTLP_* env vars passed through to the agent-host (the OTel SDK reads them directly). Point these at your collector / vendor endpoint.…
agentSandbox.observability.otel.environmentnull or stringdeployment.environment resource attribute on every metric.
agentSandbox.observability.otel.pricingattribute set of (submodule)Per-model price table, USD per 1,000,000 tokens, for cost derivation. Rendered to a ConfigMap mounted into the agent-host and read at start. A model absent h…
agentSandbox.observability.otel.pricing..cachedReadPerMillion null or signed integer or floating point numberThis option has no description.
agentSandbox.observability.otel.pricing..cachedWritePerMillion null or signed integer or floating point numberThis option has no description.
agentSandbox.observability.otel.pricing..inputPerMillion signed integer or floating point numberThis option has no description.
agentSandbox.observability.otel.pricing..outputPerMillion signed integer or floating point numberThis option has no description.
agentSandbox.postgres.externalnull or (submodule)Point every consumer at an EXTERNAL Postgres (RDS, etc.) instead of the in-cluster pod. Setting this SKIPS the in-cluster Deployment/PVC/Service; the provisi…
agentSandbox.postgres.external.passwordSecretsubmoduleSecret + key holding the external admin password.
agentSandbox.postgres.external.sslmodenull or stringsslmode appended to consumer DSNs (e.g. require).
agentSandbox.postgres.imagestringPostgres image for the in-cluster server (ignored when `external` is set).
agentSandbox.postgres.kubectlImagestringImage for the provisioning Job's secret-creating initContainer (needs kubectl + a shell + coreutils).
agentSandbox.postgres.readers..grants list of (submodule)Per-database sets of tables this role may SELECT from (tables) and read-write (writeTables).
agentSandbox.postgres.readers..grants.*.tables list of stringThe tables to grant SELECT on (must match owners.toml readers).
agentSandbox.postgres.readers..grants.*.writeTables list of stringTables to also grant INSERT/UPDATE/DELETE on (must match owners.toml writers). Role default stays read-only; the writer opens a pool that overrides it.
agentSandbox.postgres.readers..user stringThe login role name (read-only by default; writeTables opt into writes).
agentSandbox.scheduler.logLevelstringRoot log level (LOG_LEVEL) — INFO logs task fires/spawns; DEBUG is verbose.
agentSandbox.scheduler.relayKeystringAPI key gating the /tasks API (Bearer). Empty = auth disabled (local only). For a real deploy, set via a Secret + envFrom, not inline.
agentSandbox.scheduler.runRetentionDayssigned integerTTL for task_runs in days; 0 disables the sweep (no DELETE).
agentSandbox.warmStore.goldenExprstringThe golden seed: a Nix expression / installable spec the warm Job builds into the overlay upper (via the sandbox image's nix, landing in `upper/` + registere…
agentSandbox.warmStore.leaseSecondssigned integerLeader-election Lease duration; the holder must renew within this window.
agentSandbox.warmStore.maxTotalsigned integerCap total `ready` pool PVCs for the current tag (LRU-evict the coldest past this).
agentSandbox.warmStore.minReadysigned integerKeep at least this many `ready` pool PVCs warmed for the current image tag.
agentSandbox.warmStore.reconcileIntervalsigned integerSeconds between reconcile passes (also the Lease renew cadence; < leaseSeconds).
agentSandbox.warmStore.replicassigned integerController replicas. Default 1: the controller is leader-elected (only the leader reconciles), so a 2nd replica only buys faster failover — not worth it for…
agentSandbox.warmStore.storagestringSize of each pool PVC (the overlay upper). Match the per-conversation scooter-rw size.
agentSandbox.warmStore.storageClassstringStorageClass for POOL volumes. MUST have `reclaimPolicy: Retain`: on a Delete class removing a PVC destroys its PV, so nothing is ever recycled and the pool…
agentSandbox.warmStore.storageProvisionernull or stringProvisioner backing the pool StorageClass — a Retain variant of the cluster's normal one, so no new CSI driver is needed (e.g. `ebs.csi.aws.com` on EKS). nul…
agentSandbox.webhooks.ingress.annotationsattribute set of stringAnnotations on the webhooks Ingress — controller/cert config WITHOUT auth (the endpoint must accept unauthenticated provider POSTs).
agentSandbox.webhooks.ingress.classNamestringspec.ingressClassName (the controller). Empty = cluster default.
agentSandbox.webhooks.ingress.tlsbooleanAdd a spec.tls entry for `host` (cert-manager / controllers that read spec.tls).
agentSandbox.webhooks.ingress.tlsSecretNamestringTLS Secret for `host` (empty + tls=true emits spec.tls without a secretName).
agentSandbox.webhooks.labelTriggerstringIssue/PR label name that triggers a conversation (GitHub/GitLab).
agentSandbox.webhooks.managerUrlstringPublic UI base URL for the 'View conversation' deep-links (AGENT_MANAGER_URL).
agentSandbox.webhooks.mentionPatternstringText the agent looks for to treat a comment/message as a request. GitHub @
agentSandbox.webhooks.secretNamestringName of a Secret (same namespace) envFrom-mounted for provider creds.