opencode-agent values¶
Every value of chart opencode-agent 0.6.0, read from values.yaml and values.schema.json. A map is listed with its keys; a map without a description of its own is listed by its keys only. Every value has a default: the chart installs with none given.
| Value | Type | Default | Description |
|---|---|---|---|
team |
string | "" |
Team of the tenant the app serves: the chart puts every object into <tenant>-<team>, a namespace the team already has. Empty: the release namespace |
tenant |
string | "" |
Tenant the app belongs to; required with team |
person.name |
string | "" |
short lowercase name; objects are named <name>-agent. Empty: the release name |
person.email |
string | "" |
Git identity; also the UI owner when oauth.ownerEmail is empty |
person.role |
string | "" |
one line appended to the agent instructions, for example "I am sales" |
route.host |
string | "" |
empty: OpenShift assigns a host under the default application domain |
route.labels |
object | {} |
extra labels on the Route only, for example to pick a router shard |
route.timeout |
string | 3600s |
the UI streams over SSE; the router must not cut idle streams |
route.annotations |
object | used when a host is set; certificate issued by cert-manager | |
route.annotations.cert-manager.io/issuer-kind |
string | ClusterIssuer |
|
route.annotations.cert-manager.io/issuer-name |
string | letsencrypt |
|
oauth.ownerEmail |
string | "" |
OpenShift user name (an email) of the only person admitted to the UI. Empty: person.email; both empty: everyone who may edit the project |
oauth.allowedGroups |
array | [] |
OpenShift groups admitted, strictly (with an owner: the owner must be in one) |
oauth.loginClusterRole |
string | "" |
ClusterRole holding the verb login on services/proxy that allowedGroups are bound to. Empty: the chart's own Role, which only an installer holding that verb (a cluster admin) can create |
secrets.type |
string | kubernetes |
kubernetes: Secrets from the values below. externalSecret: from a secret store One of: kubernetes, externalSecret. |
secrets.cookieSecret |
string | "" |
empty: generated once and kept on upgrade. A value that is not 16, 24 or 32 characters long is hashed to 32 |
secrets.serverPassword |
string | "" |
password between the UI proxy, the A2A adapter and OpenCode. Empty: generated once |
secrets.a2aToken |
string | "" |
bearer token the A2A adapter accepts. Empty: generated once |
secrets.gitToken |
string | "" |
access token for git.url, sent to the host of git.url only |
secrets.externalSecret.storeKind |
string | ClusterSecretStore |
One of: ClusterSecretStore, SecretStore. |
secrets.externalSecret.storeName |
string | "" |
|
secrets.externalSecret.refreshInterval |
string | 1h |
|
secrets.externalSecret.items |
object | one vault item per secret; the value is read from the item's password. Empty name: <name>-agent-<secret> | |
secrets.externalSecret.items.cookieSecret |
string | "" |
|
secrets.externalSecret.items.serverPassword |
string | "" |
|
secrets.externalSecret.items.a2aToken |
string | "" |
|
secrets.externalSecret.items.gitToken |
string | "" |
|
git.url |
string | "" |
repository cloned into /workspace on first start; empty: no clone. The token is secrets.gitToken |
git.branch |
string | main |
branch of the first clone |
gateway.upstream |
string | "" |
model and A2A gateway the token proxy forwards to, for example https://api.example.com |
gateway.audience |
string | "" |
audience of the agent's ServiceAccount token. Empty: the host of upstream |
a2a.gatewayNamespace |
string | "" |
namespace of the gateway's HTTPRoutes that publish A2A. Empty: none |
a2a.allowedHosts |
array | [] |
inbound Host header allowlist (A2A_ALLOWED_HOSTS); empty disables the check |
a2a.publicUrl |
string | "" |
Agent Card base URL. Empty: the in-cluster Service URL |
a2a.peers |
array | [] |
agents this agent may call with the a2a_call tool: a name, or {name: <agent>, namespace: <namespace>}; the namespace defaults to the release namespace. Each is reached at <gateway.upstream origin>/a2a/<namespace>/<name>/ through the token proxy. Empty: no A2A tools |
a2a.version |
string | 2.0.0+hoolia.2 |
opencode-a2a release with the OpenCode 2.x API (OPENCODE_API_VERSION=v2) |
a2a.package |
string | opencode-a2a @ https://github.com/hoolia/opencode-a2a/archive/refs/tags/v2.0.... |
pip requirement the adapter image installs; a source archive needs no git |
a2a.tenantAuth |
object | Callers of the agent's tenant reach it with their own bearer JWT, next to the static credentials: a ServiceAccount token from a namespace <tenant> or <tenant>-, or an OIDC token whose groups claim holds <tenant> or <tenant>-. kagent forwards its caller's token. Needs the adapter version above or later | |
a2a.tenantAuth.enabled |
boolean | true |
|
a2a.tenantAuth.tenant |
string | "" |
empty: the release namespace up to its first "-" |
a2a.tenantAuth.kubernetesIssuer |
string | https://kubernetes.default.svc |
the cluster's ServiceAccount token issuer; empty: none |
a2a.tenantAuth.oidcIssuers |
array | [] |
OIDC issuers, for example https://login.example/realms/<realm> |
a2a.baseImage |
string | registry.access.redhat.com/ubi10/python-312-minimal |
the A2A task store needs SQLite 3.35 or later (RETURNING); UBI 9 ships 3.34 |
a2a.image |
string | "" |
prebuilt adapter image; required when builds.enabled is false |
a2a.resources |
object | adapter container requests and limits | |
a2a.resources.requests.cpu |
string | 50m |
|
a2a.resources.requests.memory |
string | 192Mi |
|
a2a.resources.limits.memory |
string | 512Mi |
|
opencode.version |
string | 2.1.1 |
OpenCode release; 2.x migrates the session store in place, see backup-db.sh |
opencode.baseImage |
string | ghcr.io/anomalyco/opencode |
OpenCode image the build starts from |
opencode.image |
string | "" |
prebuilt image with the toolset and /tools/kubernetes-mcp-server, used when builds.enabled is false. Empty: baseImage:version |
opencode.plugins |
array | [] |
npm plugins OpenCode installs on start, for example a model provider plugin |
opencode.npmScopes |
object | {} |
"@scope": <registry URL> for those installs, written to ~/.npmrc |
opencode.env |
object | {} |
extra environment for the opencode container (name: value) |
opencode.disabledProviders |
array | ["opencode"] |
providers off by default; opencode is opencode.ai's public inference, outside your gateway. A user turns one back on with an allow policy in ~/.config/opencode/opencode.json |
opencode.config |
object | {} |
merged over the generated opencode.json |
opencode.resources |
object | opencode container requests and limits; an agent at work peaks near 10 cores | |
opencode.resources.requests.cpu |
string | 500m |
|
opencode.resources.requests.memory |
string | 2Gi |
|
opencode.resources.limits.cpu |
string | 8 |
|
opencode.resources.limits.memory |
string | 16Gi |
|
tools.goImage |
string | docker.io/library/golang:1.26-alpine |
Go image that builds the odf CLI, which has no binary release, from source |
tools.odfRepository |
string | https://github.com/red-hat-storage/odf-cli |
Git repository of the odf CLI; the newest commit of its default branch is built |
kubernetesMcpServer.image |
string | quay.io/containers/kubernetes_mcp_server:v0.0.67 |
image the kubernetes-mcp-server binary is copied from |
builds.enabled |
boolean | true |
build the opencode (with the toolset) and opencode-a2a images in the project |
builds.registry |
string | image-registry.openshift-image-registry.svc:5000 |
registry of the cluster, where the builds push and the pod pulls |
builds.nodeSelector |
object | {} |
node labels for the build pods; a build writes several Gi of layers to the node |
builds.resources |
object | build pod requests and limits; compiling the odf CLI needs several Gi | |
builds.resources.requests.cpu |
string | 100m |
|
builds.resources.requests.memory |
string | 256Mi |
|
builds.resources.limits.memory |
string | 6Gi |
|
oauthProxy.image |
string | image-registry.openshift-image-registry.svc:5000/openshift/oauth-proxy:v4.4 |
OpenShift oauth-proxy in front of the UI; the cluster keeps this tag current |
oauthProxy.port |
integer | 4180 |
UI port of the pod |
oauthProxy.resources |
object | login proxy requests and limits | |
oauthProxy.resources.requests.cpu |
string | 10m |
|
oauthProxy.resources.requests.memory |
string | 32Mi |
|
oauthProxy.resources.limits.memory |
string | 256Mi |
|
uiProxy.port |
integer | 4097 |
loopback port oauth-proxy sends the UI to; runs on tokenProxy.image |
uiProxy.resources |
object | UI proxy requests and limits | |
uiProxy.resources.requests.cpu |
string | 10m |
|
uiProxy.resources.requests.memory |
string | 32Mi |
|
uiProxy.resources.limits.memory |
string | 256Mi |
|
tokenProxy.image |
string | registry.access.redhat.com/ubi9/python-312-minimal |
image that runs the token proxy script |
tokenProxy.port |
integer | 8099 |
loopback port OpenCode sends model and A2A calls to |
tokenProxy.agentToken |
object | calls under paths carry the agent's own OpenID Connect token instead of the ServiceAccount token: a client_credentials grant at tokenUrl, authenticated with a ServiceAccount token for audience (federated client authentication). Empty: off | |
tokenProxy.agentToken.tokenUrl |
string | "" |
|
tokenProxy.agentToken.audience |
string | "" |
usually the realm's issuer URL |
tokenProxy.agentToken.paths |
array | ["/mcp"] |
|
tokenProxy.resources |
object | token proxy requests and limits | |
tokenProxy.resources.requests.cpu |
string | 10m |
|
tokenProxy.resources.requests.memory |
string | 32Mi |
|
tokenProxy.resources.limits.memory |
string | 256Mi |
|
nodeSelector |
object | {} |
node labels and affinity of the agent pod; the OpenCode image is several Gi |
affinity |
object | {} |
|
agentLabels |
object | {} |
labels on the kagent Agent, for example the one a platform uses to register the ServiceAccount kagent creates for it as an OpenID Connect client |
serviceAccount.name |
string | "" |
empty: <name>-agent, created by kagent; another name is created by the chart |
serviceAccount.labels |
object | {} |
labels on a ServiceAccount the chart creates, for example the one a platform uses to register it as an OpenID Connect client |
storage.size |
string | 20Gi |
work tree, OpenCode home and session store |
storage.accessMode |
string | ReadWriteMany |
the only accepted mode: a rolling update starts the new pod before the old one stops One of: ReadWriteMany. |
storage.className |
string | "" |
empty: the default storage class |
networkPolicy.enabled |
boolean | true |
admit the UI from the router and A2A from the listed namespaces only |
networkPolicy.a2aNamespaces |
array | [] |
more namespaces that may call A2A on 8080; a2a.gatewayNamespace always may |