Skip to content

opencode-agent changelog

0.6.0

Released 2026-10-26.

Changes

Google Workspace, Microsoft 365 and Azure CLIs in the image

The OpenCode image the chart builds now carries gws (Google Workspace CLI 0.22.5), m365 (CLI for Microsoft 365 11.11.0) and az (Azure CLI 2.91.0), next to aws (AWS CLI v2) that it already had. The three are pinned to these releases; the gws download is checked against its published digest. The build runs each of them once and fails when one does not start.

The image holds no credential for them. Log in from the agent's terminal: gws auth login, m365 setup once and then m365 login, aws configure sso, az login --use-device-code. The login stays in the home directory on the agent's volume, and the agent then acts with your rights in that service.

The image grows by about 700 MB, mostly the Azure CLI and the CLI for Microsoft 365.

Upgrade

Nothing to do. With builds.enabled the upgrade starts a new image build, and the agent restarts on the new image when it is done. With builds.enabled false, the image in opencode.image decides which tools the agent has.

0.5.2

Released 2026-10-25.

Changes

Room for an agent at work

The opencode container now requests 500m CPU and 2Gi and is limited to 8 CPU and 16Gi, so a busy agent is neither killed for memory nor throttled hard. The sizes follow measured usage of the agents on the platform with generous headroom. The proxy sidecars may use 256Mi instead of 128Mi.

0.5.1

Released 2026-10-25.

Changes

Token proxy: agent identity through the tenant realm

The token proxy copy follows images/agent-identity/token-proxy.py. With AGENT_TOKEN_VIA_URL set, the agent first gets a token from its tenant's own realm with its ServiceAccount token, and that token is the client assertion for the shared realm. Without the variable nothing changes.

0.5.0

Released 2026-10-25.

Changes

Apps of a team

team and tenant put every object of the chart into <tenant>-<team>, the namespace of the tenant's team, so an app ordered for a team runs next to the team's agents and MCP servers. Without team the chart renders into the release namespace as before.

0.4.2

Released 2026-10-25.

Changes

Labels on the Agent

agentLabels puts labels on the kagent Agent. kagent creates the agent's ServiceAccount itself, so a platform that registers ServiceAccounts as OpenID Connect clients reads its label from the Agent instead; with tokenProxy.agentToken the agent then carries its own token on MCP calls.

Upgrade

Nothing changes until agentLabels is set.

0.4.1

Released 2026-10-25.

Changes

The agent's own token for MCP servers

The token proxy can carry the agent's own OpenID Connect token on MCP calls. With tokenProxy.agentToken.tokenUrl set, calls under tokenProxy.agentToken.paths (default /mcp) get a token from a client_credentials grant at that endpoint, authenticated with a short-lived ServiceAccount token for tokenProxy.agentToken.audience (federated client authentication). No secret is stored; the token is kept until shortly before it expires. Model calls keep the ServiceAccount token. serviceAccount.labels puts labels on the ServiceAccount, for example the one a platform uses to register it as a client of the realm.

Upgrade

Nothing changes until tokenProxy.agentToken.tokenUrl is set. The pod restarts once, because the token proxy script changed.

0.4.0

Released 2026-10-24.

Changes

Admit the tenant's callers by JWT

kagent forwards the Authorization header of whoever chats with an agent to the agent's A2A adapter. The adapter knew only the per-agent static credential, so kagent's chat got 401 from every opencode agent. With a2a.tenantAuth (on by default) the adapter also admits a bearer JWT of the agent's tenant: a ServiceAccount token from a namespace or -, or an OIDC token from one of a2a.tenantAuth.oidcIssuers whose groups claim holds or -. The static credential keeps working, so agent-to-agent calls are unchanged.

The adapter default moves to opencode-a2a 2.0.0+hoolia.2, the first release with this support. A prebuilt a2a.image must be that release or later, or a2a.tenantAuth.enabled set to false.

0.3.6

Released 2026-10-22.

Changes

Bind login groups to a ClusterRole

Kubernetes refuses a Role that grants permissions the creator does not hold. A project admin, and the project's Argo CD with admin, do not hold the verb login, so the group lockdown of 0.1.2, 0.3.5 and 0.2.1 failed to sync for them ("attempting to grant RBAC permissions not currently held"). oauth.loginClusterRole names a ClusterRole holding that verb; allowedGroups are bound to it in a RoleBinding -app-login, which needs only bind on that ClusterRole. roleRef is immutable, hence the new binding name. Empty keeps the chart's own Role for cluster admins.

0.3.5

Released 2026-10-22.

Changes

openhands 0.1.2 (Agent Canvas 1.30.0), owner or group login lockdown (#34)

Agent Canvas 1.30.0 binds the frontend through STATIC_SERVER_BIND_HOST instead of a literal --host ::, so the loopback patch rewrites both assignments (the build still asserts two hits). The volume claim template drops the version label: Kubernetes refuses any change there, so every appVersion bump failed the StatefulSet update. A cookie secret that is not 16, 24 or 32 characters long is hashed to 32, as in opencode-agent and openwebui, so a 48-character generated value works.

opencode-agent 0.3.5 and openwebui 0.2.1: with neither oauth.ownerEmail nor person.email set, the login proxy drops the emails file and admits everyone who may get services/proxy on the UI Service, which admin and edit grant. A team instance from a managed Template needs no e-mail. Open WebUI then allows sign-up with role user; the first user is admin. With an owner set the render is unchanged.

Every chart now offers two lockdowns. oauth.ownerEmail admits that one user (emails file). oauth.allowedGroups admits only members of those groups: the login Role grants the verb login on services/proxy of the UI Service and the login proxy checks that verb. The previous check, get on services/proxy, is also held by admin and edit, so any project editor passed a group lockdown. With neither set, project editors log in. openhands gains oauth.ownerEmail.

Verified on berry-ai with the authorization.openshift.io SAR the proxy sends: a grncloud-engineering member is allowed login, a grncloud-admins project admin and an outsider are refused, the same admin is allowed get.

The group lockdown checks the verb login, which only the login Role grants; the tests asserted the previous verb get.

0.3.4

Released 2026-10-22.

Changes

opencode-agent 0.3.4 turns on formatter and todo (#32)

The generated opencode.json uses the OpenCode 2 keys: update disable replaces autoupdate, formatter formats edited files, experimental.todo gives the agent a visible to-do list, worktree.directory keeps worktrees on the volume and watcher.ignore skips dependency and build trees. The opencode container gets no probe: the new pod waits for the old pod's workspace lock and kagent's Deployment rolls.

0.3.3

Released 2026-10-21.

Changes

opencode-agent 0.3.3 sends no body on 204 and 304 (#26)

The UI and token proxies framed every response without a length as chunked, including 204 and 304, and wrote the closing chunk after them. Those responses have no body, so oauth-proxy read the stray chunk as the start of the next response and failed that request: the web UI showed no providers. Responses without a body now go out without chunked framing.

openwebui carries the same token proxy as opencode-agent and CI requires the copies to match. A regression test covers 204 and 304 on a reused connection.

0.3.2

Released 2026-10-21.

Changes

opencode-agent 0.3.2 turns opencode's provider off (#25)

OpenCode enables opencode.ai's public inference with the key "public" on every agent, so a prompt could leave through it instead of the gateway. opencode.disabledProviders (default [opencode]) writes disabled_providers into the generated opencode.json. A user's own global config outranks it, so an allow policy there turns the provider back on.

0.3.1

Released 2026-10-21.

Changes

opencode-agent 0.3.1 trusts the work tree volume in git (#24)

0.3.0

Released 2026-10-20.

Changes

Run opencode-agent on OpenCode 2 (#19)

OpenCode 2.1.1 replaces opencode web with opencode serve and accepts HTTP Basic only for the user "opencode". oauth-proxy sends the person as the Basic user, so a new ui-proxy container hands the UI to OpenCode with OpenCode's own credential; it keeps the Host header for terminals and tunnels WebSocket upgrades.

The A2A adapter comes from the hoolia/opencode-a2a fork with the OpenCode 2 API, built from its source archive. OpenCode 2 migrates opencode.db in place, so backup-db.sh keeps one copy of the 1.x store under the work tree lock before the first 2.x start.

setup-helm "latest" falls back to Helm 3.18.4 when its release lookup fails, and Helm 3 words the schema error differently, so the access mode test failed now and then. Helm is pinned and the test accepts both wordings.

semgrep 1.182.0 has no musl wheel; uv built its sdist, which lacks semgrep-core, so every new OpenCode image build failed its tool check.

0.2.3

Released 2026-10-20.

Changes

Let opencode-agent choose its nodes (#17)

Chart 0.2.3. builds.nodeSelector places the image builds, nodeSelector and affinity place the agent pod. The 5.7G toolset image built once per agent pushed a small-disk node into DiskPressure, which evicted the builds and an agent pod.

0.2.2

Released 2026-10-20.

Changes

Add security scanners to opencode-agent (#15)

Chart 0.2.2. The OpenCode image carries opa, conftest, trivy, grype, syft, kube-linter, hadolint, shellcheck, kubeconform, cosign, semgrep, checkov, sonar-scanner (on Alpine's OpenJDK 21), renovate and snyk, each at the newest release when the image is built.

0.2.1

Released 2026-10-20.

Changes

Add MCP runtimes and more CLIs to opencode-agent (#14)

Chart 0.2.1. The OpenCode image can run project-defined local MCP servers (node, npm, npx, uv, uvx) and carries go, terraform, packer, ansible-core with common collections, hf, fastapi, uvicorn, gh, promtool, gitleaks, rclone, kubectl-mariadb, kubectl-mdba and database clients. The A2A adapter keeps its SQLite task store in an emptyDir: during a rolling update two adapters on one shared file failed with "locking protocol" and the new pod never became ready.

0.2.0

Released 2026-10-20.

Changes

Add toolset and A2A peers to opencode-agent (#12)

Chart 0.2.0. The OpenCode image now carries a command-line toolset at the newest upstream releases (oc, kubectl, helm, argocd, virtctl, odf and more); the build runs every tool once as a non-root user and fails when one does not start. a2a.peers renders A2A_PEERS for the model plugin's a2a_list_agents and a2a_call tools, and the agent instructions describe those tools only when they exist; they no longer point the model at a tool that is not registered.

0.1.1

Released 2026-10-19.

Changes

Show the work tree in the project picker (#10)

The OpenCode web UI keeps its open projects in the browser, so a new browser starts with none and New session does nothing. Add project offers a picker rooted at HOME, which was /workspace/.home and did not contain the work tree, so the repository could not be picked.

HOME is now /workspace, the parent of the work tree. The XDG directories stay under /workspace/.home, so sessions and settings are kept. Release 0.1.1.

0.1.0

Released 2026-10-18.

Changes

Add chart opencode-agent (#9)