Skip to main content
Version: Next

Agent Manager

Helm chart for WSO2 Agent Management Platform - Deploy, manage, and govern AI agents at scale

helm install agent-manager oci://ghcr.io/wso2/helm-charts/wso2-agent-manager \
--namespace <namespace> --create-namespace \
--values my-values.yaml

agentManagerService​

ParameterDescriptionTypeDefault
agentManagerServiceAgent Manager Service Configurationobject
agentManagerService.enabledInstall the control-plane API.booleantrue
agentManagerService.replicaCountNumber of pod replicas to runinteger1
agentManagerService.imageContainer image for the control-plane API.object
agentManagerService.image.repositoryContainer image repositorystring"ghcr.io/wso2/amp-api"
agentManagerService.image.tagContainer image tag. Defaults to the chart's appVersion when emptystring"0.0.0-dev"
agentManagerService.image.pullPolicyImage pull policy (Always, IfNotPresent, or Never)string"IfNotPresent"
agentManagerService.serviceReachable externally via the control-plane gateway (see ocIngress); set type to LoadBalancer to restore a dedicated external endpoint.object
agentManagerService.service.typeKubernetes Service type (ClusterIP, NodePort, or LoadBalancer)string"ClusterIP"
agentManagerService.service.portPort the Service listens oninteger9000
agentManagerService.service.targetPortContainer port the Service forwards tointeger8080
agentManagerService.service.annotationsAnnotations added to the Serviceobject{}
agentManagerService.gatewayMgtServiceInternal gateway-management (xDS) endpoint. In-cluster AI gateways reach it via cluster DNS; set type to LoadBalancer only when external gateways must connect from outside the cluster.object
agentManagerService.gatewayMgtService.typeService type for the gateway-management endpoint.string"ClusterIP"
agentManagerService.gatewayMgtService.portPort the gateway-management Service listens on.integer9243
agentManagerService.gatewayMgtService.targetPortContainer port the gateway-management Service forwards to.integer9243
agentManagerService.ocIngressHostname the API is served on via the OpenChoreo control-plane gateway (see the top-level ocIngress block)object
agentManagerService.ocIngress.hostnameHostname routed to this component through the gatewaystring"api.amp.localhost"
agentManagerService.ocIngress.requestTimeoutGateway request timeout for API routes; /mcp streams are exempt (no timeout)string"60s"
agentManagerService.ocIngress.gatewayMgmtExposes the gateway-management (xDS/WebSocket) endpoint through the control-plane gateway so external AI gateways connect without a dedicated LoadBalancer. The WebSocket stays healthy behind the gateway because the server pings every connection every 20s.object
agentManagerService.ocIngress.gatewayMgmt.enabledExpose the gateway-management endpoint through the gateway.booleantrue
agentManagerService.ocIngress.gatewayMgmt.hostnamesHostnames external gateways use. host.docker.internal serves gateways started via the console's Docker quick start on the same machine.arraysee values.yaml
agentManagerService.ocIngress.gatewayMgmt.caConfigMapNameConfigMap holding the CA (key ca.crt) that validates the endpoint's TLS certificate on the gateway->service hop. Published automatically by the tls-certs job; set this when certificates.certificatesSecret supplies your own certificate.string""
agentManagerService.internalServerInternal server configurationobject
agentManagerService.internalServer.tlsEnabledEnable TLS for the internal server. When false, serves plain HTTP.booleantrue
agentManagerService.resourcesCompute resources for the control-plane API.object
agentManagerService.resources.requestsResources reserved at scheduling time.object
agentManagerService.resources.requests.memoryMemory the container requests at scheduling timestring"256Mi"
agentManagerService.resources.requests.cpuCPU the container requests at scheduling timestring"250m"
agentManagerService.resources.limitsMaximum resources the container may use.object
agentManagerService.resources.limits.memoryMaximum memory the container may use before it is OOM-killedstring"512Mi"
agentManagerService.resources.limits.cpuMaximum CPU the container may usestring"500m"
agentManagerService.autoscalingHorizontal Pod Autoscaler settings for the control-plane API.object
agentManagerService.autoscaling.enabledEnable the Horizontal Pod Autoscalerbooleantrue
agentManagerService.autoscaling.minReplicasMinimum replicas the autoscaler may scale down tointeger1
agentManagerService.autoscaling.maxReplicasMaximum replicas the autoscaler may scale up tointeger10
agentManagerService.autoscaling.targetCPUUtilizationPercentageTarget average CPU utilisation that triggers scalinginteger80
agentManagerService.autoscaling.targetMemoryUtilizationPercentageTarget average memory utilisation that triggers scalingnullnull
agentManagerService.livenessProbeHealth checksobject
agentManagerService.livenessProbe.tcpSocketTCP socket check used as the liveness probe.object
agentManagerService.livenessProbe.tcpSocket.portPort probed by the TCP socket health checkinteger8080
agentManagerService.livenessProbe.initialDelaySecondsSeconds to wait before the first liveness probeinteger15
agentManagerService.livenessProbe.periodSecondsSeconds between liveness probesinteger10
agentManagerService.readinessProbeReadiness probe deciding when the pod may receive traffic.object
agentManagerService.readinessProbe.tcpSocketTCP socket check used as the readiness probe.object
agentManagerService.readinessProbe.tcpSocket.portPort probed by the TCP socket health checkinteger8080
agentManagerService.readinessProbe.initialDelaySecondsSeconds to wait before the first readiness probeinteger5
agentManagerService.readinessProbe.periodSecondsSeconds between readiness probesinteger10
agentManagerService.configApplication configurationobject
agentManagerService.config.serverHostAddress the API binds to inside the container.string"0.0.0.0"
agentManagerService.config.logLevelMinimum severity written to the log.string"INFO"
agentManagerService.config.autoMaxProcsEnabledMatch Go's thread count to the container's CPU limit.string"true"
agentManagerService.config.authHeaderHeader the API reads the caller's bearer token from.string"Authorization"
agentManagerService.config.dbOperationTimeoutSeconds a database operation may run before it is cancelled.integer30
agentManagerService.config.healthCheckTimeoutSeconds a health check may take before it is treated as failed.integer5
agentManagerService.config.corsAllowedOriginOrigins allowed to call the API from a browser. Narrow this in production.string"*"
agentManagerService.config.auditAudit trail. Every state-changing API call, every authorization denial and every rejected token is written to stdout as structured JSON tagged log_type=audit, for the cluster log pipeline to collect. Retention is NOT provided by this service. Route these records to an index or bucket with a retention period that matches your audit obligations — the observability plane's default log retention is far shorter than the evidence period most audits require.object
agentManagerService.config.audit.enabledBoolean, not a quoted string, so setting it to false actually disables recording — see the AUDIT_ENABLED note in the service ConfigMap.booleantrue
agentManagerService.config.audit.bufferSizeQueued events. On overflow, events are dropped and counted rather than blocking the request that produced them.integer4096
agentManagerService.config.audit.batchSizeAudit events buffered before a write is flushed.integer200
agentManagerService.config.audit.flushIntervalMsMilliseconds before a partial audit batch is flushed anyway.integer1000
agentManagerService.config.amObserverURLIn-cluster URL the agent-manager-service uses to query trace data server-side.string"http://amp-observer.openchoreo-observability-plane.svc.cluster.local:9098"
agentManagerService.config.amObserverPublicURLExternally reachable observer URL returned to out-of-cluster clients (e.g. the CLI) via /api/v1/config. No internal fallback: unset means clients surface "observer not configured".string""
agentManagerService.config.tlsEnabledTLS Configurationbooleanfalse
agentManagerService.config.apiKeyAPI Key configurationobject
agentManagerService.config.apiKey.headerHeader the API key is read from.string"X-API-Key"
agentManagerService.config.apiKey.valueEmpty by default so the chart's own randAlphaNum(32) fallback (see templates/agent-manager-service/secret.yaml) generates a real value — the same pattern encryptionKey below already uses correctly. Set this explicitly, or prefer existingSecret, for production.string""
agentManagerService.config.apiKey.existingSecretSecret holding the API key.string""
agentManagerService.config.apiKey.existingSecretKeyKey to read from existingSecret. Applies ONLY when existingSecret is set; the chart-managed Secret always uses the fixed key "api-key".string"api-key"
agentManagerService.config.encryptionKeyEncryption key for secrets at rest (hex-encoded 32-byte AES-256 key) Must be exactly 64 hex characters. Auto-generated if not provided.object
agentManagerService.config.encryptionKey.valueKey material set inline. Prefer an existing Secret in real deployments.string""
agentManagerService.config.encryptionKey.existingSecretSecret holding the encryption key.string""
agentManagerService.config.encryptionKey.existingSecretKeyKey to read from existingSecret. Applies ONLY when existingSecret is set; the chart-managed Secret always uses the fixed key "encryption-key".string"encryption-key"
agentManagerService.config.thunderAskSecretShared secret Caddy presents on the on-demand-TLS ask endpoint (/internal/thunder-ask) so that trusted Caddy traffic can be told apart from the public internet, which reaches the same path through the api host's catch-all route. Auto-generated if not provided; deployments.vm's install-vm.sh reads the generated value back out to configure Caddy.object
agentManagerService.config.thunderAskSecret.valueSecret set inline. Prefer an existing Secret in real deployments.string""
agentManagerService.config.thunderAskSecret.existingSecretSecret holding the value.string""
agentManagerService.config.thunderAskSecret.existingSecretKeyKey within that Secret.string"thunder-ask-secret"
agentManagerService.config.kubeconfigKubeconfig (empty for in-cluster, or provide config)string""
agentManagerService.config.otelOpenTelemetry configurationobject
agentManagerService.config.otel.traceContentRecord request and response bodies on spans. Disable where payloads may be sensitive.string"true"
agentManagerService.config.otel.exporterEndpointkgateway-routed vhost ("<env>-<org>.gateway.localhost") — independent of the namespace the api-platform gateway runtime is deployed in.string"http://default-default.gateway.localhost:19080/otel"
agentManagerService.config.otel.defaultInstrumentationVersionPlatform default AMP instrumentation version. Must exist in the effective catalog (embedded baseline ∪ additionalInstrumentationVersions); otherwise the server fails to start.string"0.4.1"
agentManagerService.config.otel.additionalInstrumentationVersionsOperator-supplied catalog extension entries, added on top of the bundled baseline. For air-gapped installs, point imageRepository at the internal mirror. Example: - version: "0.5.0" traceloopSdk: "0.65.0" pythonVersions: ["3.10","3.11","3.12","3.13"] imageRepository: "my-mirror.example/amp-python-instrumentation-provider"array[]
agentManagerService.config.keyManagerKey Manager configuration Token audiences accepted by this service. Console/CLI logins arrive with aud=urn:wso2:amp (the amp resource server's identifier — keep in sync with 60-amp-resource-server.yaml in the Thunder extension chart); MCP logins arrive with serverPublicURL plus "/mcp" (no trailing slash, per the MCP spec's canonical-URI guidance), which the chart appends automatically — list only client IDs here.object
agentManagerService.config.keyManager.issuerIssuer claim that incoming tokens must carry.string"http://thunder.amp.localhost:8080"
agentManagerService.config.keyManager.audienceAccepted token audiences, as a comma-separated list.string"urn:wso2:amp,amp-console-client,amp-api-client,amp-publisher-*,amctl,am-mcp"
agentManagerService.config.keyManager.jwksUrlJSON Web Key Set used to verify token signatures.string"http://amp-thunder-extension-service.amp-thunder.svc.cluster.local:8090/oauth2/jwks"
agentManagerService.config.serverPublicURLExternally reachable base URL of this service. Used as the resource identifier in RFC 9728 protected resource metadata. Routed through the OpenChoreo control-plane gateway (see ocIngress). Must stay in sync with the thunder extension's thunder.bootstrap.agentManagerMcpBaseUrl; keyManager.audience above picks this up on its own.string"http://api.amp.localhost:8080"
agentManagerService.config.oauthAuthorizationServersComma-separated absolute http/https URLs advertised in RFC 9728 protected resource metadata. Empty by design: falls back to keyManager.issuer above. Startup validation only checks the URLs are well-formed, so a stale value here silently advertises the wrong issuer. Set only if it must differ.string""
agentManagerService.config.thunderHostBaseDomainDomain suffix env-Thunder developer-facing hostnames are built from: "<handle>.<thunderHostBaseDomain>". Override on custom-domain / sslip.io installs so the reported identity-provider endpoints match the actual env-Thunder hosts.string"amp.localhost"
agentManagerService.config.agentsBaseDomainBase domains for agent-facing hostnames. add-environment.sh prefixes "<env>-<org>." onto gatewayBaseDomain; agentsBaseDomain is used as-is (its own env/org prefixing happens later, in the gateway extension chart's HTTPRoute template). Override on custom-domain / sslip.io installs, or added environments resolve nowhere.string"am-gateway.localhost"
agentManagerService.config.gatewayBaseDomainBase domain that per-environment gateway hostnames are derived from.string"gateway.localhost"
agentManagerService.config.agentsHttpPortPort each agent-facing listener variant serves. Behind a single TLS front door both are 443; on a plane gateway they are typically 80 and 443. Set them to what the environment.gateway.http/https.port overrides on the platform-resources chart say, so an added environment advertises the same pair as the default one.string"19080"
agentManagerService.config.agentsHttpsPortPort agents are reached on over HTTPS.string"443"
agentManagerService.config.gatewayVhostSchemeScheme and port the gateway vhost above is published on. The defaults describe a local k3d install (plain http on the node port). Set these to https/443 wherever a front proxy terminates TLS, or added environments publish a reachable hostname on a port that is not listening.string"http"
agentManagerService.config.gatewayVhostPortPort the gateway virtual host serves on.string"19080"
agentManagerService.config.oauthScopesSupportedComma-separated list of OAuth 2.0 scopes supported by this resource, advertised in RFC 9728 protected resource metadata.string"amp:llm-proxy:deploy,amp:mcp-server:create,amp:org:invite-member,amp:role:delete,amp:monitor:read,amp:agent:env-production,amp:git-secret:delete,amp:llm-provider:delete,amp:mcp-server:configure-guardrail,amp:deployment-pipeline:create,amp:deployment-pipeline:read,amp:deployment-pipeline:update,amp:deployment-pipeline:delete,amp:gateway:delete,amp:group:delete,amp:llm-proxy:update,amp:monitor:score-read,amp:llm-provider-template:update,amp:agent:build,amp:agent:rollback,amp:agent:token-manage,amp:evaluator:read,amp:llm-provider-template:read,amp:monitor:create,amp:agent:suspend,amp:gateway:token-manage,amp:git-secret:read,amp:mcp-server:connect,amp:mcp-server:api-key-manage,amp:mcp-server:read,amp:observability:log-read,amp:group:create,amp:observability:trace-read,amp:org:remove-member,amp:agent:env-non-production,amp:group:read,amp:llm-provider-template:create,amp:project:delete,amp:agent:create,amp:evaluator:create,amp:llm-provider:read,amp:org:modify-settings,amp:catalog:read,amp:environment:update,amp:group:update,amp:llm-proxy:delete,amp:project:read,amp:data-plane:read,amp:agent:read,amp:environment:read,amp:llm-provider:configure-guardrail,amp:observability:build-log-read,amp:org:assign-role,amp:project:update,amp:mcp-server:delete,amp:environment:delete,amp:evaluator:update,amp:git-secret:create,amp:monitor:execute,amp:llm-provider:api-key-manage,amp:gateway:read,amp:agent:update,amp:llm-provider-template:delete,amp:monitor:delete,amp:org:view,amp:llm-provider:create,amp:mcp-server:update,amp:org:manage-idp,amp:role:read,amp:role:update,amp:agent:delete,amp:gateway:create,amp:llm-provider:deploy,amp:llm-proxy:api-key-manage,amp:monitor:update,amp:org:manage-service-account,amp:role:create,amp:evaluator:delete,amp:llm-provider:connect,amp:llm-provider:update,amp:llm-proxy:read,amp:monitor:score-publish,amp:observability:metric-read,amp:project:create,amp:repository:read,amp:gateway:update,amp:environment:create,amp:llm-proxy:create,amp:agent:api-key-manage,amp:agent-kind:read,amp:agent-kind:create,amp:agent-kind:update,amp:agent-kind:delete,amp:profile:read,amp:profile:update-attributes,amp:scope:create,amp:scope:read,amp:scope:update,amp:scope:delete,amp:agent-identity:read,amp:agent-identity:create,amp:agent-identity:update,amp:agent-identity:delete"
agentManagerService.config.isOnPremDeploymentOn-premise deployment flagstring"true"
agentManagerService.config.oidcOIDC configuration for Thunder integrationobject
agentManagerService.config.oidc.tokenUrlToken endpoint the API requests its own token from.string"http://amp-thunder-extension-service.amp-thunder.svc.cluster.local:8090/oauth2/token"
agentManagerService.config.oidc.clientIdOAuth 2.0 client ID for those outbound calls.string"amp-api-client"
agentManagerService.config.oidc.clientSecretOAuth 2.0 client secret. Prefer an existing Secret in real deployments.string"amp-api-client-secret"
agentManagerService.config.jwtSigningJWT Signing configurationobject
agentManagerService.config.jwtSigning.privateKeyPathPath to the signing private key inside the container.string"/app/keys/private.pem"
agentManagerService.config.jwtSigning.publicKeysConfigPath to the public key set published for verification.string"/app/keys/public-keys-config.json"
agentManagerService.config.jwtSigning.activeKeyIdKey ID used for new signatures. Older keys stay valid for verification.string"key-1"
agentManagerService.config.jwtSigning.defaultExpiryDefault lifetime of an issued token.string"2160h"
agentManagerService.config.jwtSigning.issuerIssuer claim stamped on issued tokens.string"agent-manager-service"
agentManagerService.config.jwtSigning.defaultEnvironmentEnvironment assumed when a request does not name one.string"default"
agentManagerService.config.githubGitHub configuration for repository API accessobject
agentManagerService.config.github.tokenToken set inline. Prefer an existing Secret in real deployments.string""
agentManagerService.config.github.existingSecretSecret holding the GitHub token.string""
agentManagerService.config.github.existingSecretKeyKey within that Secret.string"github-token"
agentManagerService.config.openChoreoOpenChoreo API configurationobject
agentManagerService.config.openChoreo.baseURLIn-cluster base URL of the OpenChoreo API.string"http://openchoreo-api.openchoreo-control-plane:8080"
agentManagerService.config.secretManagerSecret Manager configurationobject
agentManagerService.config.secretManager.providerSecret manager implementation to use.string"openbao"
agentManagerService.config.secretManager.baseURLBase URL of the secret manager.string""
agentManagerService.config.openbaoOpenBao KV store configuration (for user deployment secrets)object
agentManagerService.config.openbao.urlOpenBao URL (uses the default OpenBao that comes with OpenChoreo)string"http://openbao.openbao.svc.cluster.local:8200"
agentManagerService.config.openbao.pathKV secrets engine pathstring"secret"
agentManagerService.config.openbao.versionOpenBao KV engine version.string"v2"
agentManagerService.config.openbao.tokenOpenBao token (for dev mode, use "root"). When set, it is stored in the chart-managed Secret and injected via secretKeyRef — never as a plaintext env var in the pod spec. For production, use existingSecret to reference an externally-managed Secret containing the token instead.string"root"
agentManagerService.config.openbao.existingSecretSecret holding the OpenBao access token.string""
agentManagerService.config.openbao.existingSecretKeyKey to read from existingSecret. Applies ONLY when existingSecret is set; the chart-managed Secret always uses the fixed key "openbao-token".string"openbao-token"
agentManagerService.config.workflowPlaneOpenbaoWorkflow Plane OpenBao configuration (for Git Secrets) Used to fetch git credentials for private repository accessobject
agentManagerService.config.workflowPlaneOpenbao.urlWorkflow plane OpenBao URLstring"http://openbao.openbao.svc.cluster.local:8200"
agentManagerService.config.workflowPlaneOpenbao.pathKV mount path git credentials are read from.string"secret"
agentManagerService.config.workflowPlaneOpenbao.tokenOpenBao token. When set, it is stored in the chart-managed Secret and injected via secretKeyRef — never as a plaintext env var in the pod spec. For production, use existingSecret instead.string"root"
agentManagerService.config.workflowPlaneOpenbao.existingSecretSecret holding that instance's access token.string""
agentManagerService.config.workflowPlaneOpenbao.existingSecretKeyKey to read from existingSecret. Applies ONLY when existingSecret is set. The chart-managed Secret packs both OpenBao tokens into one Secret, so this token is stored there under the distinct key "workflow-plane-openbao-token".string"openbao-token"
agentManagerService.config.gatewayManifestCacheGateway-reported policy manifest cache. Manifests are large and every gateway re-pushes its whole manifest on a fixed heartbeat, so they are cached in-process rather than persisted to the database.object
agentManagerService.config.gatewayManifestCache.backend"memory" (default) is process-local — safe ONLY when replicaCount is 1. Set to "redis" whenever this chart is deployed with more than one replica: an in-memory cache would leave replicas disagreeing on which policies gateways report, since each replica only observes the manifest pushes routed to it.string"memory"
agentManagerService.config.gatewayManifestCache.redisRedis backing the manifest cache.object
agentManagerService.config.gatewayManifestCache.redis.hostRedis hostname. Empty disables the cache.string""
agentManagerService.config.gatewayManifestCache.redis.portRedis port.integer6379
agentManagerService.config.gatewayManifestCache.redis.dbRedis database index.integer0
agentManagerService.config.gatewayManifestCache.redis.tlsEnabledConnect to Redis over TLS.booleanfalse
agentManagerService.config.gatewayManifestCache.redis.passwordRedis password. When set, it is stored in the chart-managed Secret and injected via secretKeyRef — never as a plaintext env var in the pod spec. For production, use existingSecret to reference an externally-managed Secret containing the password instead. Leave both empty for a password-less Redis (e.g. local/dev).string""
agentManagerService.config.gatewayManifestCache.redis.existingSecretSecret holding the Redis password.string""
agentManagerService.config.gatewayManifestCache.redis.existingSecretKeyKey to read from existingSecret. Applies ONLY when existingSecret is set; the chart-managed Secret always uses the fixed key "gateway-manifest-cache-redis-password".string"gateway-manifest-cache-redis-password"
agentManagerService.config.perAgentResourceLimitsAgent resource limits — operator-configured upper bounds enforced on PUT /resource-configsobject
agentManagerService.config.perAgentResourceLimits.maxReplicasMost replicas a single agent may scale to.integer10
agentManagerService.config.perAgentResourceLimits.maxCPUMost CPU a single agent may request.string"500m"
agentManagerService.config.perAgentResourceLimits.maxMemoryMost memory a single agent may request.string"512Mi"
agentManagerService.config.thunderThunder admin API configuration (for per-org publisher credential provisioning and the identity APIs: users, roles, groups). When baseURL is empty, the static amp-publisher-client credentials are used instead for publisher provisioning, and the identity APIs are unavailable.object
agentManagerService.config.thunder.baseURLMust be the PUBLIC URL, same as keyManager.issuer above. Every admin API request asks for a token scoped to Thunder's System resource server via an RFC 8707 "resource" parameter derived from this value (client.go's SystemResourceIdentifier), and Thunder only recognizes the public URL as that resource server's registered identifier — any other value fails with invalid_target. This does NOT need to be directly dialable from the pod; see resolveToHost below for that.string"http://thunder.amp.localhost:8080"
agentManagerService.config.thunder.resolveToHostThe host:port this service actually connects to for every Thunder request (baseURL's host is still sent as the HTTP Host header, and still drives the resource-identifier above). Needed here because baseURL is a *.localhost hostname that only resolves via the host machine's own DNS/hosts setup — it doesn't resolve from inside this pod. Leave empty only if baseURL is itself directly dialable from the pod (e.g. a real in-cluster DNS name).string"amp-thunder-extension-service.amp-thunder.svc.cluster.local:8090"
agentManagerService.config.thunder.clientIdOAuth2 client ID of the system app (with Administrator role)string"amp-system-client"
agentManagerService.config.thunder.clientSecretOAuth2 client secret of the system appstring"amp-system-client-secret"
agentManagerService.config.thunder.existingSecretReference to an existing secret containing the Thunder client secretstring""
agentManagerService.config.thunder.existingSecretKeyKey within the existing Secret holding the client secret.string"thunder-client-secret"
agentManagerService.certificatesCertificate configurationobject
agentManagerService.certificates.certificatesSecretREQUIRED: Kubernetes secret name containing TLS certificates Expected keys in secret: cert.pem (certificate), key.pem (private key) Example creation: kubectl create secret generic amp-tls-certs \ from-file=cert.pem=/path/to/cert.pem \ from-file=key.pem=/path/to/key.pem For development, leave empty to generate self-signed certs at runtime (insecure)string""
agentManagerService.agentWorkloadDefaults applied to every agent workload the platform deploys.object
agentManagerService.agentWorkload.corsDefault CORS policy on agent endpoints. Overridable per agent.object
agentManagerService.agentWorkload.cors.allowedOriginBrowser origins allowed to call agent endpoints. Narrow this in production.string"*"
agentManagerService.agentWorkload.cors.allowedMethodsHTTP methods allowed on cross-origin requests.string"GET,POST,PUT,DELETE,PATCH,OPTIONS"
agentManagerService.agentWorkload.cors.allowedHeadersRequest headers allowed on cross-origin requests.string"authorization,Content-Type,Origin,X-API-Key"
agentManagerService.agentWorkload.cors.allowCredentialsAllow cross-origin requests to carry credentials.booleanfalse
agentManagerService.podAnnotationsPod-level configurationsobject{}
agentManagerService.podLabelsLabels added to the podobject{}
agentManagerService.podSecurityContextPod security context - defaults to fsGroup: 1000 if not specified Note: If you encounter "too many open files" errors, this is typically caused by the Kubernetes client watching too many resources. Consider: 1. Reducing the number of watched resources in the application 2. Implementing resource filtering in watchers 3. Increasing limits at the node/cluster levelobject{}
agentManagerService.securityContextContainer security context - defaults to secure settings if not specifiedobject{}
agentManagerService.nodeSelectorNode labels the pod must match to be scheduledobject{}
agentManagerService.tolerationsTaints the pod toleratesarray[]
agentManagerService.affinityAffinity and anti-affinity rules for pod schedulingobject{}

commonLabels​

ParameterDescriptionTypeDefault
commonLabelsCommon labels to add to all resourcesobject{}

console​

ParameterDescriptionTypeDefault
consoleConsole (Frontend) Configurationobject
console.enabledInstall the console.booleantrue
console.replicaCountNumber of pod replicas to runinteger1
console.imageContainer image for the console.object
console.image.repositoryContainer image repositorystring"ghcr.io/wso2/amp-console"
console.image.tagContainer image tag. Defaults to the chart's appVersion when emptystring"0.0.0-dev"
console.image.pullPolicyImage pull policy (Always, IfNotPresent, or Never)string"Always"
console.serviceReachable externally via the control-plane gateway (see ocIngress); set type to LoadBalancer to restore a dedicated external endpoint.object
console.service.typeKubernetes Service type (ClusterIP, NodePort, or LoadBalancer)string"ClusterIP"
console.service.portPort the Service listens oninteger3000
console.service.targetPortContainer port the Service forwards tointeger3000
console.ocIngressHostname the Console is served on via the OpenChoreo control-plane gateway (see the top-level ocIngress block)object
console.ocIngress.hostnameHostname routed to this component through the gatewaystring"console.amp.localhost"
console.resourcesCompute resources for the console.object
console.resources.requestsResources reserved at scheduling time.object
console.resources.requests.memoryMemory the container requests at scheduling timestring"128Mi"
console.resources.requests.cpuCPU the container requests at scheduling timestring"100m"
console.resources.limitsMaximum resources the console may use.object
console.resources.limits.memoryMaximum memory the container may use before it is OOM-killedstring"256Mi"
console.resources.limits.cpuMaximum CPU the container may usestring"200m"
console.autoscalingHorizontal Pod Autoscaler settings for the console.object
console.autoscaling.enabledEnable the Horizontal Pod Autoscalerbooleanfalse
console.autoscaling.minReplicasMinimum replicas the autoscaler may scale down tointeger1
console.autoscaling.maxReplicasMaximum replicas the autoscaler may scale up tointeger10
console.autoscaling.targetCPUUtilizationPercentageTarget average CPU utilisation that triggers scalinginteger80
console.autoscaling.targetMemoryUtilizationPercentageTarget average memory utilisation that triggers scalingnullnull
console.livenessProbeHealth checksnullnull
console.readinessProbeReadiness probe for the console. Unset uses the image default.nullnull
console.configFrontend configurationobject
console.config.authAuthentication (set to "" to disable)object
console.config.auth.clientIdOAuth 2.0 client ID the console authenticates with.string"amp-console-client"
console.config.auth.baseUrlIdentity provider the console redirects users to.string"http://thunder.amp.localhost:8080"
console.config.auth.scopesScopes the console requests at login.string"openid profile email amp:llm-proxy:deploy amp:mcp-server:create amp:org:invite-member amp:role:delete amp:monitor:read amp:agent:env-production amp:git-secret:delete amp:llm-provider:delete amp:mcp-server:configure-guardrail amp:deployment-pipeline:create amp:deployment-pipeline:read amp:deployment-pipeline:update amp:deployment-pipeline:delete amp:gateway:delete amp:group:delete amp:llm-proxy:update amp:monitor:score-read amp:llm-provider-template:update amp:agent:build amp:agent:rollback amp:agent:token-manage amp:evaluator:read amp:llm-provider-template:read amp:monitor:create amp:agent:suspend amp:gateway:token-manage amp:git-secret:read amp:mcp-server:connect amp:mcp-server:api-key-manage amp:mcp-server:read amp:observability:log-read amp:group:create amp:observability:trace-read amp:org:remove-member amp:agent:env-non-production amp:group:read amp:llm-provider-template:create amp:project:delete amp:agent:create amp:evaluator:create amp:llm-provider:read amp:org:modify-settings amp:catalog:read amp:environment:update amp:group:update amp:llm-proxy:delete amp:project:read amp:data-plane:read amp:agent:read amp:environment:read amp:llm-provider:configure-guardrail amp:observability:build-log-read amp:org:assign-role amp:project:update amp:mcp-server:delete amp:environment:delete amp:evaluator:update amp:git-secret:create amp:monitor:execute amp:llm-provider:api-key-manage amp:gateway:read amp:agent:update amp:llm-provider-template:delete amp:monitor:delete amp:org:view amp:llm-provider:create amp:mcp-server:update amp:org:manage-idp amp:role:read amp:role:update amp:agent:delete amp:gateway:create amp:llm-provider:deploy amp:llm-proxy:api-key-manage amp:monitor:update amp:org:manage-service-account amp:role:create amp:evaluator:delete amp:llm-provider:connect amp:llm-provider:update amp:llm-proxy:read amp:monitor:score-publish amp:observability:metric-read amp:project:create amp:repository:read amp:gateway:update amp:environment:create amp:llm-proxy:create amp:agent:api-key-manage amp:agent-kind:read amp:agent-kind:create amp:agent-kind:update amp:agent-kind:delete amp:profile:read amp:profile:update-attributes amp:scope:create amp:scope:read amp:scope:update amp:scope:delete amp:agent-identity:read amp:agent-identity:create amp:agent-identity:update amp:agent-identity:delete"
console.config.auth.signInRedirectURLURL the identity provider returns users to after sign-in.string"http://console.amp.localhost:8080/login"
console.config.auth.signOutRedirectURLURL the identity provider returns users to after sign-out.string"http://console.amp.localhost:8080/login"
console.config.auth.existingSecretSecret holding the console's client secret.string""
console.config.auth.validateIDTokenVerify the ID token signature in the browser.string"false"
console.config.auth.clockToleranceClock skew tolerated when validating tokens, in seconds.integer300
console.config.disableAuthDisable auth for developmentstring"false"
console.config.apiBaseUrlBackend API URLs (will be auto-configured if empty) Routed through the OpenChoreo control-plane gateway (see ocIngress).string"http://api.amp.localhost:8080"
console.config.gatewayControlPlaneUrlGateway control plane URL rendered into external-gateway setup commands. Routed through the OpenChoreo control-plane gateway (see agentManagerService.ocIngress.gatewayMgmt); host.docker.internal lets a gateway container on the same machine reach it.string"http://host.docker.internal:8080"
console.config.gatewayVersionGateway version for setup commands (default: v1.0.0)string"v1.0.0"
console.config.ampVersionAgent Manager release version — pins the deployment-script git tag (amp/vX.Y.Z). Placeholder is substituted with the real release version by the release pipeline (.github/scripts/update-helm-charts.sh); dev builds fall back to main.string"0.0.0-dev"
console.config.docsVersionDocumentation version the console's in-product doc links point at, used as the path segment after /docs/. "latest" tracks the newest released docs. The release pipeline (.github/scripts/update-helm-charts.sh) pins this to the matching versioned docs (vX.Y.x, or the exact version for a pre-release) for final and pre-release builds. Release candidates and nightlies keep "latest", because no docs version is cut for them.string"latest"
console.config.instrumentationUrlTrace-export URL shown to external agent developers. kgateway-routed vhost — independent of the gateway runtime's namespace; no port-forward.string"http://default-default.gateway.localhost:19080/otel"
console.config.agentManagerInternalBaseUrlCluster-internal URLs the API Platform Gateway uses to reach Agent Manager when add-environment.sh installs a new gateway. The Create Environment drawer pipes these into the rendered curl|bash command so the gateway is configured for in-cluster service discovery.string"http://amp-api.wso2-amp.svc.cluster.local:9000"
console.config.agentManagerInternalCpHostIn-cluster address the console's server-side calls use.string"amp-api-gateway-manager.wso2-amp.svc.cluster.local:9243"
console.config.thunderHostBaseDomainBase domain env-Thunder instances are hosted under, and whether this deployment serves them over TLS. Mirrors agentManagerService.config's own thunderHostBaseDomain/tlsEnabled — kept in sync so the Create Environment drawer's rendered command matches this deployment. VM/production installs override both (see deployments/vm/lib-vm.sh).string"amp.localhost"
console.config.tlsEnabledServe the console over HTTPS.string"false"
console.config.guardrailsCatalogUrlGuardrails catalog URL for fetching available guardrail policiesstring"https://db720294-98fd-40f4-85a1-cc6a3b65bc9a-prod.e1-us-east-azure.choreoapis.dev/api-platform/policy-hub-api/policy-hub-public/v1.0/policies?categories=AI,Guardrails&limit=50"
console.config.guardrailsDefinitionBaseUrlGuardrails definition base URL for fetching policy definitionsstring"https://db720294-98fd-40f4-85a1-cc6a3b65bc9a-prod.e1-us-east-azure.choreoapis.dev/api-platform/policy-hub-api/policy-hub-public/v1.0/policies"
console.config.guardrailCapabilitiesGuardrail capability flags — enable policies that require external system configuration. OOTB policies are always shown regardless of these flags.object
console.config.guardrailCapabilities.awsBedrockOffer AWS Bedrock guardrails. Allowed values: Unlocks: aws-bedrock-guardrail.booleanfalse
console.config.guardrailCapabilities.azureContentSafetyOffer Azure AI Content Safety guardrails. Allowed values: Unlocks: azure-content-safety-content-moderation.booleanfalse
console.config.guardrailCapabilities.graniteGuardianOffer Granite Guardian guardrails. Allowed values: Unlocks: granite-guardian-prompt-injection.booleanfalse
console.config.guardrailCapabilities.nemoGuardOffer NVIDIA NeMo Guardrails. Allowed values: Unlocks: nvidia-nemoguard-content-safety.booleanfalse
console.config.guardrailCapabilities.semanticGuardrailsOffer semantic guardrails. Allowed values: Unlocks: semantic-prompt-guard, semantic-cache.booleanfalse
console.config.featureFlagsFeature flags.object
console.config.featureFlags.enablePrivateRepoSupportShows the private Git repository option when building agents from source.booleantrue
console.config.featureFlags.enableIdentityProviderManagedModeWhen true, identity provider management calls the REST API directly instead of rendering the self-hosted manage-identity-provider.sh script snippet.booleanfalse
console.config.featureFlags.enableProfileManagementWhen false, the Profile Settings text fields and Save Changes button are hidden/disabled, and the Change Password tab is disabled.booleantrue
console.config.featureFlags.enableUserManagementWhen false, the Add User, Invite User, Create Role, and Create Group buttons on the Settings page are disabled.booleantrue
console.podAnnotationsPod-level configurationsobject{}
console.podLabelsLabels added to the podobject{}
console.podSecurityContextPod security context - optional, no defaults to allow image to use its own user If you need to set fsGroup or other pod-level security settings, specify them hereobject{}
console.securityContextContainer security context - defaults to secure settings (without runAsUser to allow image default) If you need to set runAsUser or other container-level security settings, specify them hereobject{}
console.nodeSelectorNode labels the pod must match to be scheduledobject{}
console.tolerationsTaints the pod toleratesarray[]
console.affinityAffinity and anti-affinity rules for pod schedulingobject{}

dbMigration​

ParameterDescriptionTypeDefault
dbMigrationDatabase Migration Job Configurationobject
dbMigration.enabledRun the migration job.booleantrue
dbMigration.imageContainer image for the migration job.object
dbMigration.image.repositoryContainer image repositorystring"ghcr.io/wso2/amp-api"
dbMigration.image.tagContainer image tag. Defaults to the chart's appVersion when emptystring"0.0.0-dev"
dbMigration.image.pullPolicyImage pull policy (Always, IfNotPresent, or Never)string"IfNotPresent"
dbMigration.resourcesCompute resources for the migration job.object
dbMigration.resources.requestsResources reserved at scheduling time.object
dbMigration.resources.requests.memoryMemory the container requests at scheduling timestring"128Mi"
dbMigration.resources.requests.cpuCPU the container requests at scheduling timestring"100m"
dbMigration.resources.limitsMaximum resources the migration job may use.object
dbMigration.resources.limits.memoryMaximum memory the container may use before it is OOM-killedstring"256Mi"
dbMigration.resources.limits.cpuMaximum CPU the container may usestring"200m"
dbMigration.backoffLimitRetries before the migration job is marked failed.integer3
dbMigration.podSecurityContextPod-level security settings for the migration job.object{}
dbMigration.securityContextContainer-level security settings for the migration job.object{}

global​

ParameterDescriptionTypeDefault
globalDefault values for agent-management-platformobject
global.imagePullSecretsSecrets used to pull images from a private registryarray[]
global.storageClassStorageClass applied to every chart component that needs storagestring""

hookServiceAccount​

ParameterDescriptionTypeDefault
hookServiceAccountServiceAccount used only by the pre-install/pre-upgrade hook Jobs. This is the sole subject of the scoped RBAC Role. The SA and the Role/RoleBinding are only rendered when at least one hook Job is enabled, so no unused grant is left standing. With create: false, name must point at an existing ServiceAccount (rendering fails fast otherwise).object
hookServiceAccount.createCreate the hook ServiceAccount.booleantrue
hookServiceAccount.nameName of the hook ServiceAccount. Generated when empty. Allowed values: defaults to "<fullname>-hooks" (e.g. amp-hooks).string""
hookServiceAccount.annotationsAnnotations added to the hook ServiceAccount.object{}

jwtKeysGeneration​

ParameterDescriptionTypeDefault
jwtKeysGenerationJWT Keys Generation Job Configurationobject
jwtKeysGeneration.enabledRun the key generation job.booleantrue
jwtKeysGeneration.backoffLimitRetries before the key generation job is marked failed.integer3
jwtKeysGeneration.resourcesCompute resources for the key generation job.object
jwtKeysGeneration.resources.requestsResources reserved at scheduling time.object
jwtKeysGeneration.resources.requests.memoryMemory the container requests at scheduling timestring"64Mi"
jwtKeysGeneration.resources.requests.cpuCPU the container requests at scheduling timestring"50m"
jwtKeysGeneration.resources.limitsMaximum resources the job may use.object
jwtKeysGeneration.resources.limits.memoryMaximum memory the container may use before it is OOM-killedstring"128Mi"
jwtKeysGeneration.resources.limits.cpuMaximum CPU the container may usestring"100m"
jwtKeysGeneration.podSecurityContextSecurity context for JWT keys generation job Allows root access for apk package installation (openssl, kubectl)object
jwtKeysGeneration.podSecurityContext.runAsNonRootRequire the container to run as a non-root userbooleanfalse
jwtKeysGeneration.podSecurityContext.runAsUserUID the pod's containers run asinteger0
jwtKeysGeneration.podSecurityContext.fsGroupSupplemental group applied to mounted volumesinteger0
jwtKeysGeneration.securityContextContainer-level security settings for the job.object
jwtKeysGeneration.securityContext.runAsNonRootRequire the container to run as a non-root userbooleanfalse
jwtKeysGeneration.securityContext.runAsUserUID the container runs asinteger0
jwtKeysGeneration.securityContext.allowPrivilegeEscalationAllow a process to gain more privileges than its parentbooleanfalse
jwtKeysGeneration.securityContext.capabilitiesLinux capabilities adjusted for the job's container.object
jwtKeysGeneration.securityContext.capabilities.dropLinux capabilities removed from the containerarraysee values.yaml
jwtKeysGeneration.securityContext.readOnlyRootFilesystemMount the container root filesystem read-onlybooleanfalse

jwtSigning​

ParameterDescriptionTypeDefault
jwtSigningJWT Signing Keys Configurationobject
jwtSigning.existingSecretSpecify an existing secret containing JWT keys (optional) If not specified, keys will be auto-generated by the jwt-keys-generation jobstring""

ocIngress​

ParameterDescriptionTypeDefault
ocIngressOpenChoreo ingress configuration — routes the Console and Agent Manager API through the OpenChoreo control-plane kgateway (gateway-default) so they do not need their own LoadBalancer services.object
ocIngress.enabledExpose this component through the gatewaybooleantrue
ocIngress.gatewayNameGateway that serves this routestring"gateway-default"
ocIngress.gatewayNamespaceNamespace containing the gateway that serves those routes.string"openchoreo-control-plane"

postgresql​

ParameterDescriptionTypeDefault
postgresqlPostgreSQL Database Configurationobject
postgresql.enabledInstall the bundled PostgreSQL. Turn off to point at an external database.booleantrue
postgresql.externalConnection details for an external database, used when the bundled one is disabled.object
postgresql.external.hostHostname of the external database.string""
postgresql.external.portPort the external database listens on.integer5432
postgresql.external.databaseDatabase name to connect to.string"agentmanager"
postgresql.external.usernameUsername used to connect.string"agentmanager"
postgresql.external.passwordPassword used to connect. Prefer an existing Secret in real deployments.string""
postgresql.external.existingSecretSecret holding the database password, used instead of setting it inline.string""
postgresql.external.existingSecretPasswordKeyKey within that Secret holding the password.string"password"
postgresql.external.sslModeTLS for the client -> database hop (libpq "sslmode"). One of disable, allow, prefer, require, verify-ca, verify-full. Empty keeps the driver default ("prefer"), which negotiates TLS when the server offers it but silently falls back to plaintext when it does not. Set "require" to refuse an unencrypted connection; use verify-ca or verify-full to also validate the server certificate.string""
postgresql.external.sslRootCertPath to a PEM CA bundle inside the container for verify-ca/verify-full, or the literal "system" to validate against the image trust store (sufficient when the database certificate chains to a public CA). Mount a private CA through the top-level volumes/volumeMounts values.string""
postgresql.authImage configuration - use stable PostgreSQL 16 imageobject
postgresql.auth.databaseDatabase created at first start.string"agentmanager"
postgresql.auth.usernameApplication user created at first start.string"agentmanager"
postgresql.auth.passwordPassword for the application user. Change this before any real deployment.string"agentmanager"
postgresql.primarySettings for the bundled PostgreSQL primary.object
postgresql.primary.persistencePersistent storage for the database.object
postgresql.primary.persistence.enabledPersist data on a PersistentVolumeClaim instead of the pod filesystembooleantrue
postgresql.primary.persistence.sizeSize of the PersistentVolumeClaimstring"10Gi"
postgresql.primary.resourcesCompute resources for the database pod.object
postgresql.primary.resources.requestsResources reserved at scheduling time.object
postgresql.primary.resources.requests.memoryMemory the container requests at scheduling timestring"256Mi"
postgresql.primary.resources.requests.cpuCPU the container requests at scheduling timestring"250m"
postgresql.primary.resources.limitsMaximum resources the database may use.object
postgresql.primary.resources.limits.memoryMaximum memory the container may use before it is OOM-killedstring"512Mi"
postgresql.primary.resources.limits.cpuMaximum CPU the container may usestring"500m"

rbac​

ParameterDescriptionTypeDefault
rbacRBAC Configuration Scoped to exactly what the pre-install/pre-upgrade hook Jobs (TLS certs, JWT keys) do: read/create/patch Secrets in the release namespace. The amp-api service itself makes no Kubernetes API calls.object
rbac.createCreate the Role and RoleBinding.booleantrue
rbac.rulesRules granted by the Role.arraysee values.yaml

serviceAccount​

ParameterDescriptionTypeDefault
serviceAccountIngress Configuration ServiceAccount Configurationobject
serviceAccount.createCreate a ServiceAccount for this componentbooleantrue
serviceAccount.nameName of the ServiceAccount to use. Generated when emptystring"agent-management-platform"
serviceAccount.annotationsAnnotations added to the ServiceAccountobject{}
serviceAccount.automountAutomount the ServiceAccount API token into the podbooleanfalse

tlsCertsGeneration​

ParameterDescriptionTypeDefault
tlsCertsGenerationTLS Certificates Generation Job Configurationobject
tlsCertsGeneration.enabledRun the certificate generation job.booleantrue
tlsCertsGeneration.backoffLimitRetries before the certificate job is marked failed.integer3
tlsCertsGeneration.resourcesCompute resources for the certificate job.object
tlsCertsGeneration.resources.requestsResources reserved at scheduling time.object
tlsCertsGeneration.resources.requests.memoryMemory the container requests at scheduling timestring"64Mi"
tlsCertsGeneration.resources.requests.cpuCPU the container requests at scheduling timestring"50m"
tlsCertsGeneration.resources.limitsMaximum resources the job may use.object
tlsCertsGeneration.resources.limits.memoryMaximum memory the container may use before it is OOM-killedstring"128Mi"
tlsCertsGeneration.resources.limits.cpuMaximum CPU the container may usestring"100m"
tlsCertsGeneration.podSecurityContextSecurity context for TLS certs generation job Allows root access for apk package installation (openssl, kubectl)object
tlsCertsGeneration.podSecurityContext.runAsNonRootRequire the container to run as a non-root userbooleanfalse
tlsCertsGeneration.podSecurityContext.runAsUserUID the pod's containers run asinteger0
tlsCertsGeneration.podSecurityContext.fsGroupSupplemental group applied to mounted volumesinteger0
tlsCertsGeneration.securityContextContainer-level security settings for the job.object
tlsCertsGeneration.securityContext.runAsNonRootRequire the container to run as a non-root userbooleanfalse
tlsCertsGeneration.securityContext.runAsUserUID the container runs asinteger0
tlsCertsGeneration.securityContext.allowPrivilegeEscalationAllow a process to gain more privileges than its parentbooleanfalse
tlsCertsGeneration.securityContext.capabilitiesLinux capabilities adjusted for the job's container.object
tlsCertsGeneration.securityContext.capabilities.dropLinux capabilities removed from the containerarraysee values.yaml
tlsCertsGeneration.securityContext.readOnlyRootFilesystemMount the container root filesystem read-onlybooleanfalse

volumeMounts​

ParameterDescriptionTypeDefault
volumeMountsGlobal volume mounts and volumes (optional)array[]

volumes​

ParameterDescriptionTypeDefault
volumesExtra volumes mounted into the control-plane API, for example a private CA bundle.array[]