> ## Documentation Index
> Fetch the complete documentation index at: https://allhandsai-dv-docs-agent-canvas-images-issue-768.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Release Notes

> Release notes for OpenHands Enterprise

## 0.55.0

This release centers on **daily conversation quotas** for Enterprise Server, which add a read-only usage page with a reset countdown, org-level exemptions, and self-service quota increase requests verified by work email. Enterprise installs also gain **dedicated sandbox node scheduling**, with declared app and sandbox node roles, affinity plumbing across all pod specs, a config option to turn it on, and a preflight check that warns when it is enabled without a matching node. Issue tracker coverage expanded through an org-scoped Jira Cloud resolver with an email-match mode and through Azure DevOps resolver webhook configuration. The Agent SDK added an Agent Plugins manifest loader, structured output, a pre-flight LLM validation endpoint, and read-at-use LLM provider connections, while the Runtime API now anchors runtime reaping, database pruning, and the idle-grace period on last activity rather than creation time. The remainder of the release covers extensive billing and credit-handling fixes and hardened Keycloak identity matching that keys on the Keycloak subject rather than email.

### Enterprise Server

#### Features

* feat(settings): increase LLM profile limit to 50 and make it configurable by @jpelletier1 in [https://github.com/OpenHands/enterprise/pull/114](https://github.com/OpenHands/enterprise/pull/114)
* feat: add cloud workspace file-listing endpoint (OHE-3053) by @lilagrc in [https://github.com/OpenHands/enterprise/pull/135](https://github.com/OpenHands/enterprise/pull/135)
* feat: Expose organization creation teaser UX by @malhotra5 in [https://github.com/OpenHands/enterprise/pull/151](https://github.com/OpenHands/enterprise/pull/151)
* feat: set SaaS default model to Kimi K3 and migrate GLM 5.2 settings by @juanmichelini in [https://github.com/OpenHands/enterprise/pull/190](https://github.com/OpenHands/enterprise/pull/190)
* feat: org-scope the Jira Cloud resolver and add email-match mode for OHE by @hieptl in [https://github.com/OpenHands/enterprise/pull/192](https://github.com/OpenHands/enterprise/pull/192)
* feat(frontend): add data-testid to changes refresh button by @tofarr in [https://github.com/OpenHands/enterprise/pull/203](https://github.com/OpenHands/enterprise/pull/203)
* feat: add daily conversation quota schema foundation by @neubig in [https://github.com/OpenHands/enterprise/pull/180](https://github.com/OpenHands/enterprise/pull/180)
* feat: add read-only quota usage page with reset countdown by @neubig in [https://github.com/OpenHands/enterprise/pull/199](https://github.com/OpenHands/enterprise/pull/199)
* feat: add work-email quota increase requests with self-service verification by @neubig in [https://github.com/OpenHands/enterprise/pull/200](https://github.com/OpenHands/enterprise/pull/200)
* feat: add org-level daily conversation quota exemptions by @neubig in [https://github.com/OpenHands/enterprise/pull/212](https://github.com/OpenHands/enterprise/pull/212)
* feat: accept Jira Cloud picker mentions of the service account by @ak684 in [https://github.com/OpenHands/enterprise/pull/223](https://github.com/OpenHands/enterprise/pull/223)
* feat(settings): auto-rotate invalid managed LLM keys on settings writes by @tofarr in [https://github.com/OpenHands/enterprise/pull/231](https://github.com/OpenHands/enterprise/pull/231)
* feat: migrate Kimi K3 settings to DeepSeek V4 Flash by @neubig in [https://github.com/OpenHands/enterprise/pull/253](https://github.com/OpenHands/enterprise/pull/253)

#### Bug Fixes

* fix: resolve LLM profile keys in /users/me expose-secrets response by @hieptl in [https://github.com/OpenHands/enterprise/pull/168](https://github.com/OpenHands/enterprise/pull/168)
* fix: handle null identity\_provider for direct Keycloak logins by @tofarr in [https://github.com/OpenHands/enterprise/pull/169](https://github.com/OpenHands/enterprise/pull/169)
* fix: URL-encode Redis password in authed URL for coredis/limits by @tofarr in [https://github.com/OpenHands/enterprise/pull/177](https://github.com/OpenHands/enterprise/pull/177)
* fix: close dropdown menu after selection when wrapped in a label by @hieptl in [https://github.com/OpenHands/enterprise/pull/176](https://github.com/OpenHands/enterprise/pull/176)
* fix: stop redacting the Jira DC base URL in agent output by @hieptl in [https://github.com/OpenHands/enterprise/pull/182](https://github.com/OpenHands/enterprise/pull/182)
* fix: inject Bitbucket DC server URL, repo URL, and token context into agent prompt by @hieptl in [https://github.com/OpenHands/enterprise/pull/183](https://github.com/OpenHands/enterprise/pull/183)
* fix(auth): make Keycloak HTTP retries configurable by @neubig in [https://github.com/OpenHands/enterprise/pull/186](https://github.com/OpenHands/enterprise/pull/186)
* fix: OHE-3100 : use sandbox\_spec.working\_dir instead of hardcoded /workspace by @tofarr in [https://github.com/OpenHands/enterprise/pull/188](https://github.com/OpenHands/enterprise/pull/188)
* fix(auth): make LiteLLM management timeout configurable by @neubig in [https://github.com/OpenHands/enterprise/pull/189](https://github.com/OpenHands/enterprise/pull/189)
* fix: handle null runtime context values by @ak684 in [https://github.com/OpenHands/enterprise/pull/112](https://github.com/OpenHands/enterprise/pull/112)
* fix: use agent server as conversation creation source by @malhotra5 in [https://github.com/OpenHands/enterprise/pull/156](https://github.com/OpenHands/enterprise/pull/156)
* fix: let managed LLM profiles take the org's current key on rotation by @dylan-openhands in [https://github.com/OpenHands/enterprise/pull/178](https://github.com/OpenHands/enterprise/pull/178)
* fix(budgets): persist maintenance updates by @saurya in [https://github.com/OpenHands/enterprise/pull/204](https://github.com/OpenHands/enterprise/pull/204)
* fix: let free-tier (no-credit) teams run \$0-cost models by @juanmichelini in [https://github.com/OpenHands/enterprise/pull/143](https://github.com/OpenHands/enterprise/pull/143)
* fix: protect personal organization billing credits by @saurya in [https://github.com/OpenHands/enterprise/pull/167](https://github.com/OpenHands/enterprise/pull/167)
* fix(budgets): prevent per-user allowance renewal on sync by @saurya in [https://github.com/OpenHands/enterprise/pull/205](https://github.com/OpenHands/enterprise/pull/205)
* fix: display usage monitoring timestamps in local time by @saurya in [https://github.com/OpenHands/enterprise/pull/208](https://github.com/OpenHands/enterprise/pull/208)
* fix: use verified repo provider in Jira Cloud conversation start request by @ak684 in [https://github.com/OpenHands/enterprise/pull/216](https://github.com/OpenHands/enterprise/pull/216)
* fix(billing): show personal-workspace credits without a member budget row by @aivong-openhands in [https://github.com/OpenHands/enterprise/pull/218](https://github.com/OpenHands/enterprise/pull/218)
* fix: clarify Jira email-visibility guidance with exact setting and delay by @ak684 in [https://github.com/OpenHands/enterprise/pull/222](https://github.com/OpenHands/enterprise/pull/222)
* fix(enterprise): match provisioned user on Keycloak sub, not email by @tofarr in [https://github.com/OpenHands/enterprise/pull/224](https://github.com/OpenHands/enterprise/pull/224)
* fix(enterprise): match on Keycloak sub in TOCTOU idempotent recovery too by @tofarr in [https://github.com/OpenHands/enterprise/pull/225](https://github.com/OpenHands/enterprise/pull/225)
* fix(enterprise): await session.merge in billing success callback by @tofarr in [https://github.com/OpenHands/enterprise/pull/226](https://github.com/OpenHands/enterprise/pull/226)
* fix: OHE-3127 : return null credits instead of 503 when budget is None by @tofarr in [https://github.com/OpenHands/enterprise/pull/228](https://github.com/OpenHands/enterprise/pull/228)
* fix: return 0 credits instead of None for users without a budget by @tofarr in [https://github.com/OpenHands/enterprise/pull/238](https://github.com/OpenHands/enterprise/pull/238)
* fix(settings): stop a member's settings save writing to the whole org by @jlav in [https://github.com/OpenHands/enterprise/pull/254](https://github.com/OpenHands/enterprise/pull/254)

#### Maintenance

* chore: remove dead localStorage feature-flag mechanism by @tofarr in [https://github.com/OpenHands/enterprise/pull/230](https://github.com/OpenHands/enterprise/pull/230)
* docs: Replace with Polyform License by @jpelletier1 in [https://github.com/OpenHands/enterprise/pull/240](https://github.com/OpenHands/enterprise/pull/240)

***

### Software Agent SDK

#### Features

* Feat: structured output by @luciobaiocchi in [https://github.com/OpenHands/software-agent-sdk/pull/4207](https://github.com/OpenHands/software-agent-sdk/pull/4207)
* agent-server: make conversation worktree root configurable by @xmrflipflop in [https://github.com/OpenHands/software-agent-sdk/pull/4362](https://github.com/OpenHands/software-agent-sdk/pull/4362)
* feat(observability): emit LLM and TOOL spans for ACP turns by @simonrosenberg in [https://github.com/OpenHands/software-agent-sdk/pull/4376](https://github.com/OpenHands/software-agent-sdk/pull/4376)
* feat: derive automation conversation tags in base RemoteWorkspace by @hieptl in [https://github.com/OpenHands/software-agent-sdk/pull/4414](https://github.com/OpenHands/software-agent-sdk/pull/4414)
* feat: emit canonical conversation telemetry from agent server by @malhotra5 in [https://github.com/OpenHands/software-agent-sdk/pull/4459](https://github.com/OpenHands/software-agent-sdk/pull/4459)
* feat(hooks): implement prompt-based evaluation by @onatozmenn in [https://github.com/OpenHands/software-agent-sdk/pull/4160](https://github.com/OpenHands/software-agent-sdk/pull/4160)
* feat(security): AST-backed shell command-name resolution (#2721 Phase 2b) by @eeee2345 in [https://github.com/OpenHands/software-agent-sdk/pull/3944](https://github.com/OpenHands/software-agent-sdk/pull/3944)
* feat: add public from\_persisted() entry point to AgentSettingsBase by @mvanhorn in [https://github.com/OpenHands/software-agent-sdk/pull/3503](https://github.com/OpenHands/software-agent-sdk/pull/3503)
* feat(sdk): add cleanup LLM profile for outward agent text by @smolpaws in [https://github.com/OpenHands/software-agent-sdk/pull/4344](https://github.com/OpenHands/software-agent-sdk/pull/4344)
* feat(llm): resolve provider-specific runtime metadata for routed models by @neubig in [https://github.com/OpenHands/software-agent-sdk/pull/4423](https://github.com/OpenHands/software-agent-sdk/pull/4423)
* feat: add pre-flight LLM validation endpoint (POST /api/profiles/{name}/validate) by @neubig in [https://github.com/OpenHands/software-agent-sdk/pull/4422](https://github.com/OpenHands/software-agent-sdk/pull/4422)
* feat: carry ConversationErrorEvent on ConversationRunError for automation callbacks by @neubig in [https://github.com/OpenHands/software-agent-sdk/pull/4458](https://github.com/OpenHands/software-agent-sdk/pull/4458)
* feat(plugin): add Agent Plugins manifest loader (root plugin.json, closed schema) by @VascoSch92 in [https://github.com/OpenHands/software-agent-sdk/pull/4474](https://github.com/OpenHands/software-agent-sdk/pull/4474)
* feat(file-router): add POST /file/create\_directory by @georgeglarson in [https://github.com/OpenHands/software-agent-sdk/pull/4482](https://github.com/OpenHands/software-agent-sdk/pull/4482)
* Add read-at-use LLM provider connections by @juanmichelini in [https://github.com/OpenHands/software-agent-sdk/pull/4492](https://github.com/OpenHands/software-agent-sdk/pull/4492)
* feat: Add deployment kind to agent-server telemetry by @malhotra5 in [https://github.com/OpenHands/software-agent-sdk/pull/4522](https://github.com/OpenHands/software-agent-sdk/pull/4522)
* feat(telemetry): identify automation conversations by @malhotra5 in [https://github.com/OpenHands/software-agent-sdk/pull/4529](https://github.com/OpenHands/software-agent-sdk/pull/4529)
* feat(tools): add structured task outcome preset by @malhotra5 in [https://github.com/OpenHands/software-agent-sdk/pull/4479](https://github.com/OpenHands/software-agent-sdk/pull/4479)
* feat(prompt): mention local conversation history by @neubig in [https://github.com/OpenHands/software-agent-sdk/pull/4527](https://github.com/OpenHands/software-agent-sdk/pull/4527)

#### Bug Fixes

* fix(mcp): close reconciliation gaps left by #4367 by @VascoSch92 in [https://github.com/OpenHands/software-agent-sdk/pull/4369](https://github.com/OpenHands/software-agent-sdk/pull/4369)
* fix(acp): recover credential monitor after transient errors by @simonrosenberg in [https://github.com/OpenHands/software-agent-sdk/pull/4403](https://github.com/OpenHands/software-agent-sdk/pull/4403)
* fix(sdk): make ACP auth failures self-diagnosing by @simonrosenberg in [https://github.com/OpenHands/software-agent-sdk/pull/4404](https://github.com/OpenHands/software-agent-sdk/pull/4404)
* fix(observability): record non-executed tool results by @simonrosenberg in [https://github.com/OpenHands/software-agent-sdk/pull/4415](https://github.com/OpenHands/software-agent-sdk/pull/4415)
* fix(agent-server): compose ConversationInfo off the event loop to avoid GC wedge by @neubig in [https://github.com/OpenHands/software-agent-sdk/pull/4417](https://github.com/OpenHands/software-agent-sdk/pull/4417)
* fix(agent-server): initialize observability after deferred env by @Shimada666 in [https://github.com/OpenHands/software-agent-sdk/pull/4426](https://github.com/OpenHands/software-agent-sdk/pull/4426)
* fix(settings): inherit condenser max\_tokens from LLM effective\_max\_input\_tokens by @vnktadithya in [https://github.com/OpenHands/software-agent-sdk/pull/4435](https://github.com/OpenHands/software-agent-sdk/pull/4435)
* fix(goal): don't halt the goal loop on a STUCK run by @all-hands-bot in [https://github.com/OpenHands/software-agent-sdk/pull/4381](https://github.com/OpenHands/software-agent-sdk/pull/4381)
* fix(llm): stop serializing calls through global config by @neubig in [https://github.com/OpenHands/software-agent-sdk/pull/4473](https://github.com/OpenHands/software-agent-sdk/pull/4473)
* fix(security-scan): improve release security scan comment by @all-hands-bot in [https://github.com/OpenHands/software-agent-sdk/pull/4397](https://github.com/OpenHands/software-agent-sdk/pull/4397)
* fix(profiles): repair v1 skills migration by @neubig in [https://github.com/OpenHands/software-agent-sdk/pull/4320](https://github.com/OpenHands/software-agent-sdk/pull/4320)
* fix(agent-server): base\_state.json as single source of truth for the agent (end meta.json duplication) by @enyst in [https://github.com/OpenHands/software-agent-sdk/pull/4440](https://github.com/OpenHands/software-agent-sdk/pull/4440)
* fix(sdk): cap condenser token limit by agent context by @neubig in [https://github.com/OpenHands/software-agent-sdk/pull/4461](https://github.com/OpenHands/software-agent-sdk/pull/4461)
* fix(agent-server): move bash event search off event loop and replace glob with scandir by @neubig in [https://github.com/OpenHands/software-agent-sdk/pull/4481](https://github.com/OpenHands/software-agent-sdk/pull/4481)
* fix: redact API key from validate\_profile error responses and logs by @all-hands-bot in [https://github.com/OpenHands/software-agent-sdk/pull/4506](https://github.com/OpenHands/software-agent-sdk/pull/4506)
* fix: make dict-entry secret redaction case-insensitive by @chintan-diwakar in [https://github.com/OpenHands/software-agent-sdk/pull/4508](https://github.com/OpenHands/software-agent-sdk/pull/4508)
* fix(agent-server): propagate out-of-band run failures as ConversationErrorEvent (#16686) by @VascoSch92 in [https://github.com/OpenHands/software-agent-sdk/pull/4535](https://github.com/OpenHands/software-agent-sdk/pull/4535)
* fix(sdk): normalize Kimi K3 vision metadata by @malhotra5 in [https://github.com/OpenHands/software-agent-sdk/pull/4567](https://github.com/OpenHands/software-agent-sdk/pull/4567)
* fix(agent): keep terminal prefix aliases from doubling an existing executable by @onatozmenn in [https://github.com/OpenHands/software-agent-sdk/pull/4471](https://github.com/OpenHands/software-agent-sdk/pull/4471)
* fix(sdk): resolve workspace default from active LLM profile by @neubig in [https://github.com/OpenHands/software-agent-sdk/pull/4497](https://github.com/OpenHands/software-agent-sdk/pull/4497)

#### Maintenance

* chore: drop the OpenHands/OpenHands bump-PR target from version-bump-prs.yml by @VascoSch92 in [https://github.com/OpenHands/software-agent-sdk/pull/4400](https://github.com/OpenHands/software-agent-sdk/pull/4400)
* refactor(plugin): extract PluginFormat strategy (prep for Agent Plugins support) by @jpshackelford in [https://github.com/OpenHands/software-agent-sdk/pull/4420](https://github.com/OpenHands/software-agent-sdk/pull/4420)
* chore(ci): collapse the auto-posted Agent Server images PR section by @smolpaws in [https://github.com/OpenHands/software-agent-sdk/pull/4442](https://github.com/OpenHands/software-agent-sdk/pull/4442)
* Add ready-for-dev issue and PR gates by @neubig in [https://github.com/OpenHands/software-agent-sdk/pull/4464](https://github.com/OpenHands/software-agent-sdk/pull/4464)
* test(terminal): stabilize Windows Ctrl-C cleanup assertion by @neubig in [https://github.com/OpenHands/software-agent-sdk/pull/4290](https://github.com/OpenHands/software-agent-sdk/pull/4290)
* perf(agent-server): cache unchanged conversation summaries by @neubig in [https://github.com/OpenHands/software-agent-sdk/pull/4483](https://github.com/OpenHands/software-agent-sdk/pull/4483)
* ci: re-run PR description check when new commits are pushed by @VascoSch92 in [https://github.com/OpenHands/software-agent-sdk/pull/4486](https://github.com/OpenHands/software-agent-sdk/pull/4486)
* Weekly test sweep: remove low-value tests + simplify by @enyst in [https://github.com/OpenHands/software-agent-sdk/pull/4484](https://github.com/OpenHands/software-agent-sdk/pull/4484)
* test(sdk): pin events\_to\_messages boundaries + fix responses\_reasoning\_item batch drop by @georgeglarson in [https://github.com/OpenHands/software-agent-sdk/pull/4526](https://github.com/OpenHands/software-agent-sdk/pull/4526)
* test(sdk): pin send\_message skill-activation wiring by @georgeglarson in [https://github.com/OpenHands/software-agent-sdk/pull/4536](https://github.com/OpenHands/software-agent-sdk/pull/4536)

***

### Runtime API

#### Bug Fixes

* fix: anchor runtime reaping and DB pruning on last activity, not creation time by @hieptl in [https://github.com/OpenHands/runtime-api/pull/707](https://github.com/OpenHands/runtime-api/pull/707)
* fix: anchor the idle-grace period on last\_state\_change, not created\_at by @hieptl in [https://github.com/OpenHands/runtime-api/pull/713](https://github.com/OpenHands/runtime-api/pull/713)
* fix: OHE-3100 : root-owned working\_dir subdirs on PVC via init container by @tofarr in [https://github.com/OpenHands/runtime-api/pull/714](https://github.com/OpenHands/runtime-api/pull/714)
* fix: reorder cleanup phases and resume expired deployment list tokens by @dylan-openhands in [https://github.com/OpenHands/runtime-api/pull/712](https://github.com/OpenHands/runtime-api/pull/712)

***

### Automation

#### Features

* feat(automation): tag local automation conversations by @neubig in [https://github.com/OpenHands/automation/pull/319](https://github.com/OpenHands/automation/pull/319)
* feat: sync automations to a git repository by @VascoSch92 in [https://github.com/OpenHands/automation/pull/327](https://github.com/OpenHands/automation/pull/327)
* feat: accept catalog bundle automations on the raw create path by @VascoSch92 in [https://github.com/OpenHands/automation/pull/346](https://github.com/OpenHands/automation/pull/346)

#### Bug Fixes

* fix: stop marking successful automation runs as FAILED by @hieptl in [https://github.com/OpenHands/automation/pull/331](https://github.com/OpenHands/automation/pull/331)

#### Maintenance

* chore: add success logging for tarball storage writes and deletes by @jpshackelford in [https://github.com/OpenHands/automation/pull/335](https://github.com/OpenHands/automation/pull/335)
* chore: remove QA changes workflow by @neubig in [https://github.com/OpenHands/automation/pull/340](https://github.com/OpenHands/automation/pull/340)

***

### OpenHands Cloud (Helm Chart)

#### Features

* feat: e2e: restructure for Keycloak admin + dual GitHub user flows by @tofarr in [https://github.com/OpenHands/OpenHands-Cloud/pull/1089](https://github.com/OpenHands/OpenHands-Cloud/pull/1089)
* feat: add configurable daily conversation limit to chart by @neubig in [https://github.com/OpenHands/OpenHands-Cloud/pull/1100](https://github.com/OpenHands/OpenHands-Cloud/pull/1100)
* feat: wire Jira Cloud email-match integration for Replicated installs by @ak684 in [https://github.com/OpenHands/OpenHands-Cloud/pull/1113](https://github.com/OpenHands/OpenHands-Cloud/pull/1113)
* feat: add org-management e2e suite with super-admin REST provisioning by @tofarr in [https://github.com/OpenHands/OpenHands-Cloud/pull/1122](https://github.com/OpenHands/OpenHands-Cloud/pull/1122)
* feat(replicated): declare app and sandbox node roles by @jlav in [https://github.com/OpenHands/OpenHands-Cloud/pull/1133](https://github.com/OpenHands/OpenHands-Cloud/pull/1133)
* feat(chart): add affinity plumbing to all pod specs by @jlav in [https://github.com/OpenHands/OpenHands-Cloud/pull/1134](https://github.com/OpenHands/OpenHands-Cloud/pull/1134)
* feat(replicated): gate dedicated sandbox nodes behind a config option by @jlav in [https://github.com/OpenHands/OpenHands-Cloud/pull/1135](https://github.com/OpenHands/OpenHands-Cloud/pull/1135)
* feat(preflight): warn when dedicated sandbox nodes are enabled with no sandbox node by @jlav in [https://github.com/OpenHands/OpenHands-Cloud/pull/1136](https://github.com/OpenHands/OpenHands-Cloud/pull/1136)
* feat(replicated): PLTF-3461 configure duplicate email checks by @aivong-openhands in [https://github.com/OpenHands/OpenHands-Cloud/pull/1139](https://github.com/OpenHands/OpenHands-Cloud/pull/1139)
* feat(azure-devops): wire the resolver webhook secret into the chart and KOTS config by @ak684 in [https://github.com/OpenHands/OpenHands-Cloud/pull/1160](https://github.com/OpenHands/OpenHands-Cloud/pull/1160)

#### Bug Fixes

* fix: Bound Laminar ClickHouse diagnostic log retention by @juanmichelini in [https://github.com/OpenHands/OpenHands-Cloud/pull/1031](https://github.com/OpenHands/OpenHands-Cloud/pull/1031)
* fix: wire installer SMTP config into Keycloak realm email by @hieptl in [https://github.com/OpenHands/OpenHands-Cloud/pull/1090](https://github.com/OpenHands/OpenHands-Cloud/pull/1090)
* fix(e2e): handle onboarding-form and 2FA auto-navigate race conditions by @tofarr in [https://github.com/OpenHands/OpenHands-Cloud/pull/1091](https://github.com/OpenHands/OpenHands-Cloud/pull/1091)
* fix(e2e): enable role during static discovery by @saurya in [https://github.com/OpenHands/OpenHands-Cloud/pull/1099](https://github.com/OpenHands/OpenHands-Cloud/pull/1099)
* fix(e2e): replace networkidle waits and fix Promise.race short-circuit by @tofarr in [https://github.com/OpenHands/OpenHands-Cloud/pull/1108](https://github.com/OpenHands/OpenHands-Cloud/pull/1108)
* fix(automation): keep events service available during node drains by @aivong-openhands in [https://github.com/OpenHands/OpenHands-Cloud/pull/1112](https://github.com/OpenHands/OpenHands-Cloud/pull/1112)
* fix: refresh changes panel when empty in VSCode integration test by @tofarr in [https://github.com/OpenHands/OpenHands-Cloud/pull/1114](https://github.com/OpenHands/OpenHands-Cloud/pull/1114)
* fix(e2e): order API keys spec after billing so new-user has credits by @tofarr in [https://github.com/OpenHands/OpenHands-Cloud/pull/1118](https://github.com/OpenHands/OpenHands-Cloud/pull/1118)
* fix(e2e): PLTF-3461 honor AUTH\_BASE\_URL for Keycloak admin URL by @aivong-openhands in [https://github.com/OpenHands/OpenHands-Cloud/pull/1126](https://github.com/OpenHands/OpenHands-Cloud/pull/1126)
* fix(chart): set the warm pool working dir to /workspace/project by @jlav in [https://github.com/OpenHands/OpenHands-Cloud/pull/1140](https://github.com/OpenHands/OpenHands-Cloud/pull/1140)
* fix(deploy): tolerate a restarting kotsadm in replicated\_deploy.sh by @dylan-openhands in [https://github.com/OpenHands/OpenHands-Cloud/pull/1141](https://github.com/OpenHands/OpenHands-Cloud/pull/1141)
* fix(e2e): PLTF-3461 move the credit-gated API key check into the billing suite by @aivong-openhands in [https://github.com/OpenHands/OpenHands-Cloud/pull/1143](https://github.com/OpenHands/OpenHands-Cloud/pull/1143)
* fix(ci): PLTF-3461 call the E2E trigger from each release workflow by @aivong-openhands in [https://github.com/OpenHands/OpenHands-Cloud/pull/1144](https://github.com/OpenHands/OpenHands-Cloud/pull/1144)

#### Maintenance

* test(e2e): add Playwright release harness by @saurya in [https://github.com/OpenHands/OpenHands-Cloud/pull/1048](https://github.com/OpenHands/OpenHands-Cloud/pull/1048)
* test(e2e): cover organization-scoped member API keys by @saurya in [https://github.com/OpenHands/OpenHands-Cloud/pull/1049](https://github.com/OpenHands/OpenHands-Cloud/pull/1049)
* test(e2e): add optional ReportPortal reporting by @saurya in [https://github.com/OpenHands/OpenHands-Cloud/pull/1088](https://github.com/OpenHands/OpenHands-Cloud/pull/1088)
* test(e2e): make returning/new-user roles opt-in via \*\_GITHUB\_USERNAME by @tofarr in [https://github.com/OpenHands/OpenHands-Cloud/pull/1092](https://github.com/OpenHands/OpenHands-Cloud/pull/1092)
* test(e2e): migrate Stripe credit purchase into billing suite by @tofarr in [https://github.com/OpenHands/OpenHands-Cloud/pull/1094](https://github.com/OpenHands/OpenHands-Cloud/pull/1094)
* test(e2e): migrate home avatar and user-menu tests by @tofarr in [https://github.com/OpenHands/OpenHands-Cloud/pull/1095](https://github.com/OpenHands/OpenHands-Cloud/pull/1095)
* test(e2e): remove example.spec.ts by @tofarr in [https://github.com/OpenHands/OpenHands-Cloud/pull/1096](https://github.com/OpenHands/OpenHands-Cloud/pull/1096)
* test(e2e): migrate API key creation and API access test by @tofarr in [https://github.com/OpenHands/OpenHands-Cloud/pull/1097](https://github.com/OpenHands/OpenHands-Cloud/pull/1097)
* test(e2e): migrate legacy conversation control tests by @tofarr in [https://github.com/OpenHands/OpenHands-Cloud/pull/1101](https://github.com/OpenHands/OpenHands-Cloud/pull/1101)
* ci: auto-deploy Replicated releases to internal instances by @dylan-openhands in [https://github.com/OpenHands/OpenHands-Cloud/pull/1123](https://github.com/OpenHands/OpenHands-Cloud/pull/1123)
* ci: PLTF-3461 run E2E after Replicated deploys by @aivong-openhands in [https://github.com/OpenHands/OpenHands-Cloud/pull/1129](https://github.com/OpenHands/OpenHands-Cloud/pull/1129)
* ci: name the Replicated release workflows consistently for README badges by @dylan-openhands in [https://github.com/OpenHands/OpenHands-Cloud/pull/1131](https://github.com/OpenHands/OpenHands-Cloud/pull/1131)
* ci: fix unparseable expression in deploy-replicated, lint workflows in CI by @dylan-openhands in [https://github.com/OpenHands/OpenHands-Cloud/pull/1132](https://github.com/OpenHands/OpenHands-Cloud/pull/1132)

***

## 0.45.0

This release introduces **Canvas Extensions**, a major new capability that enables installing, managing, and refreshing extensions with manifest support and persistent storage. The Agent SDK saw significant improvements with conversation error classification, accumulated LLM cost tracking, and observability enhancements including detached traces for delegate conversations. The Automation component was modernized with the retirement of the standalone frontend, enhanced preset metadata, and LLM cost tracking. Critical stability fixes addressed S3/MinIO silent truncation issues, improved CSP compatibility for the Monaco diff viewer, and enhanced secrets handling across the platform.

### Enterprise Server

#### Features

* feat: migrate existing managed MiniMax M2.7 settings to the GLM 5.2 default by @juanmichelini in [https://github.com/OpenHands/enterprise/pull/140](https://github.com/OpenHands/enterprise/pull/140)

#### Bug Fixes

* fix(sandbox): OHE-3021 : honor OH\_SANDBOX\_MAX\_NUM\_SANDBOXES in RemoteSandboxServiceInjector fallback by @tofarr in [https://github.com/OpenHands/enterprise/pull/153](https://github.com/OpenHands/enterprise/pull/153)
* fix: self-host Monaco so the diff viewer works under CSP by @hieptl in [https://github.com/OpenHands/enterprise/pull/155](https://github.com/OpenHands/enterprise/pull/155)
* fix: stop silent truncation of archived and shared conversations on S3/MinIO by @hieptl in [https://github.com/OpenHands/enterprise/pull/158](https://github.com/OpenHands/enterprise/pull/158)
* fix: stop surfacing Git provider token required errors for SSO-only users by @hieptl in [https://github.com/OpenHands/enterprise/pull/159](https://github.com/OpenHands/enterprise/pull/159)
* fix(s3 file store): OHE-3079 : paginate list\_objects\_v2 to avoid silent truncation at 1000 keys by @tofarr in [https://github.com/OpenHands/enterprise/pull/157](https://github.com/OpenHands/enterprise/pull/157)
* fix: redirect Automations sidebar icon to /canvas/automations by @hieptl in [https://github.com/OpenHands/enterprise/pull/162](https://github.com/OpenHands/enterprise/pull/162)

***

### Software Agent SDK

#### Features

* feat(llm): verify kimi-for-coding (Kimi Code membership) by @georgeglarson in [https://github.com/OpenHands/software-agent-sdk/pull/4150](https://github.com/OpenHands/software-agent-sdk/pull/4150)
* feat(sdk): classify conversation errors by @neubig in [https://github.com/OpenHands/software-agent-sdk/pull/4316](https://github.com/OpenHands/software-agent-sdk/pull/4316)
* feat: report accumulated LLM cost in the automation completion callback by @hieptl in [https://github.com/OpenHands/software-agent-sdk/pull/4311](https://github.com/OpenHands/software-agent-sdk/pull/4311)
* feat(agent-server): Canvas Extensions manifest and containment \[1/4] by @VascoSch92 in [https://github.com/OpenHands/software-agent-sdk/pull/4361](https://github.com/OpenHands/software-agent-sdk/pull/4361)
* feat(sdk): track requested\_ref alongside resolved\_ref in InstallationInfo \[2/4] by @VascoSch92 in [https://github.com/OpenHands/software-agent-sdk/pull/4375](https://github.com/OpenHands/software-agent-sdk/pull/4375)
* feat(agent-server): Canvas Extensions installation persistence \[3/4] by @VascoSch92 in [https://github.com/OpenHands/software-agent-sdk/pull/4364](https://github.com/OpenHands/software-agent-sdk/pull/4364)
* feat(agent-server): Canvas Extensions staged refresh (check/apply) \[4/4] by @VascoSch92 in [https://github.com/OpenHands/software-agent-sdk/pull/4374](https://github.com/OpenHands/software-agent-sdk/pull/4374)

#### Bug Fixes

* fix(sdk): respect subscription validator composition by @Sehlani042 in [https://github.com/OpenHands/software-agent-sdk/pull/3953](https://github.com/OpenHands/software-agent-sdk/pull/3953)
* fix(agent-server): keep secrets out of workspace persistence by @enyst in [https://github.com/OpenHands/software-agent-sdk/pull/3990](https://github.com/OpenHands/software-agent-sdk/pull/3990)
* fix(acp): surface Claude Opus 5 in Claude Code model picker by @nicolasdmolina in [https://github.com/OpenHands/software-agent-sdk/pull/4326](https://github.com/OpenHands/software-agent-sdk/pull/4326)
* fix: PATCH /api/settings loads the profile's LLM when setting active\_profile by @emmanuel-adu in [https://github.com/OpenHands/software-agent-sdk/pull/4319](https://github.com/OpenHands/software-agent-sdk/pull/4319)
* fix(git): demote expected command failures to debug by @neubig in [https://github.com/OpenHands/software-agent-sdk/pull/4341](https://github.com/OpenHands/software-agent-sdk/pull/4341)
* fix(sdk): nudge before hard-terminating on a repeating action-error pattern by @VascoSch92 in [https://github.com/OpenHands/software-agent-sdk/pull/4332](https://github.com/OpenHands/software-agent-sdk/pull/4332)
* fix(mcp): reconcile live agent tool snapshots by @Shimada666 in [https://github.com/OpenHands/software-agent-sdk/pull/4367](https://github.com/OpenHands/software-agent-sdk/pull/4367)
* fix(observability): mark utility LLM spans (title generation, ask\_agent) by @simonrosenberg in [https://github.com/OpenHands/software-agent-sdk/pull/4359](https://github.com/OpenHands/software-agent-sdk/pull/4359)
* fix(observability): give delegate conversations their own detached Laminar trace by @simonrosenberg in [https://github.com/OpenHands/software-agent-sdk/pull/4378](https://github.com/OpenHands/software-agent-sdk/pull/4378)
* fix(browser): a browser tool that cannot start should not fail the conversation by @onatozmenn in [https://github.com/OpenHands/software-agent-sdk/pull/4342](https://github.com/OpenHands/software-agent-sdk/pull/4342)
* fix(observability): keep the conversation object out of TOOL span input by @simonrosenberg in [https://github.com/OpenHands/software-agent-sdk/pull/4379](https://github.com/OpenHands/software-agent-sdk/pull/4379)

#### Maintenance

* chore(ci): remove QA Changes workflows by @VascoSch92 in [https://github.com/OpenHands/software-agent-sdk/pull/4299](https://github.com/OpenHands/software-agent-sdk/pull/4299)
* refactor(llm): add LiteLLM-backed provider abstraction by @enyst in [https://github.com/OpenHands/software-agent-sdk/pull/2363](https://github.com/OpenHands/software-agent-sdk/pull/2363)
* chore(sdk): deprecate AgentBase.model\_dump\_succint by @AzeelSajjad in [https://github.com/OpenHands/software-agent-sdk/pull/4328](https://github.com/OpenHands/software-agent-sdk/pull/4328)
* refactor(observability): stop depending on lmnr to propagate trace context into tool workers by @simonrosenberg in [https://github.com/OpenHands/software-agent-sdk/pull/4360](https://github.com/OpenHands/software-agent-sdk/pull/4360)
* test: stop ambient LMNR env vars deciding what the tracing tests measure by @simonrosenberg in [https://github.com/OpenHands/software-agent-sdk/pull/4390](https://github.com/OpenHands/software-agent-sdk/pull/4390)
* chore: remove deprecated features past their 1.41.0 removal deadline by @VascoSch92 in [https://github.com/OpenHands/software-agent-sdk/pull/4394](https://github.com/OpenHands/software-agent-sdk/pull/4394)

***

### Automation

#### Features

* feat: retire the standalone automation frontend by @hieptl in [https://github.com/OpenHands/automation/pull/284](https://github.com/OpenHands/automation/pull/284)
* feat: report the configured automation timeout cap by @neubig in [https://github.com/OpenHands/automation/pull/296](https://github.com/OpenHands/automation/pull/296)
* feat: record accumulated LLM cost per automation run by @hieptl in [https://github.com/OpenHands/automation/pull/280](https://github.com/OpenHands/automation/pull/280)
* feat: set descriptive titles on automation-born conversations by @hieptl in [https://github.com/OpenHands/automation/pull/312](https://github.com/OpenHands/automation/pull/312)
* feat: add generic preset metadata field to Automation model by @hieptl in [https://github.com/OpenHands/automation/pull/313](https://github.com/OpenHands/automation/pull/313)
* feat: add template provenance, idempotent enablement, and first-run outcome to presets by @hieptl in [https://github.com/OpenHands/automation/pull/322](https://github.com/OpenHands/automation/pull/322)

#### Bug Fixes

* fix: normalize SQLite telemetry timestamps by @Linxiushen in [https://github.com/OpenHands/automation/pull/301](https://github.com/OpenHands/automation/pull/301)
* fix: default FILE\_STORE to local instead of gcs by @neubig in [https://github.com/OpenHands/automation/pull/314](https://github.com/OpenHands/automation/pull/314)

***

### OpenHands Cloud (Helm Chart)

#### Features

* feat(chart): OHE-3021 : expose OH\_SANDBOX\_MAX\_NUM\_SANDBOXES as a ConfigOption by @tofarr in [https://github.com/OpenHands/OpenHands-Cloud/pull/1035](https://github.com/OpenHands/OpenHands-Cloud/pull/1035)

***

## 0.41.0

This release advances the **Agent Canvas** rollout with a new homepage banner and an updated Canvas build, and sets GLM 5.2 as the default model for SaaS deployments. The remainder of the release focuses on Codex authentication handling, secrets and settings reliability, and a range of stability fixes across the Enterprise Server and Helm charts.

### Enterprise Server

#### Features

* feat: set SaaS default model to GLM 5.2 by @juanmichelini in [https://github.com/OpenHands/enterprise/pull/89](https://github.com/OpenHands/enterprise/pull/89)
* feat: Add Agent Canvas homepage banner by @malhotra5 in [https://github.com/OpenHands/enterprise/pull/124](https://github.com/OpenHands/enterprise/pull/124)
* feat: expose observability fields on app conversations by @juanmichelini in [https://github.com/OpenHands/enterprise/pull/130](https://github.com/OpenHands/enterprise/pull/130)

#### Bug Fixes

* fix(frontend): wire Export CSV buttons on Usage & Monitoring Overview and Models tabs by @saurya in [https://github.com/OpenHands/enterprise/pull/78](https://github.com/OpenHands/enterprise/pull/78)
* fix: Pass pod security context from runtime-api warm configs to sandbox start by @tofarr in [https://github.com/OpenHands/enterprise/pull/108](https://github.com/OpenHands/enterprise/pull/108)
* fix: skip default CSP on FastAPI docs paths (OHE-2815) by @tofarr in [https://github.com/OpenHands/enterprise/pull/118](https://github.com/OpenHands/enterprise/pull/118)
* fix(settings): keep active LLM profile selected during updates by @saurya in [https://github.com/OpenHands/enterprise/pull/107](https://github.com/OpenHands/enterprise/pull/107)
* fix(enterprise): Fix 405 error when uploading files before conversation is ready by @jpelletier1 in [https://github.com/OpenHands/enterprise/pull/134](https://github.com/OpenHands/enterprise/pull/134)
* fix: propagate registered marketplaces to conversations by @tofarr in [https://github.com/OpenHands/enterprise/pull/126](https://github.com/OpenHands/enterprise/pull/126)
* fix(app-server): serialize secrets writes to fix lost-write race (OHE-3052) by @tofarr in [https://github.com/OpenHands/enterprise/pull/133](https://github.com/OpenHands/enterprise/pull/133)
* fix: load\_settings should show meta for secrets by @tofarr in [https://github.com/OpenHands/enterprise/pull/138](https://github.com/OpenHands/enterprise/pull/138)
* fix(enterprise): make POST /api/organizations/provision-user idempotent (OHE-2980) by @tofarr in [https://github.com/OpenHands/enterprise/pull/117](https://github.com/OpenHands/enterprise/pull/117)
* fix: validate Codex auth secrets on save by @simonrosenberg in [https://github.com/OpenHands/enterprise/pull/141](https://github.com/OpenHands/enterprise/pull/141)
* fix(app-server): pre-flight Codex credentials by @simonrosenberg in [https://github.com/OpenHands/enterprise/pull/139](https://github.com/OpenHands/enterprise/pull/139)

#### Maintenance

* chore(enterprise): enforce PostgreSQL-only migrations by @simonrosenberg in [https://github.com/OpenHands/enterprise/pull/95](https://github.com/OpenHands/enterprise/pull/95)

***

### Runtime API

#### Features

* feat(helm): add generic-device-plugin DaemonSet for FUSE support by @tofarr in [https://github.com/OpenHands/runtime-api/pull/685](https://github.com/OpenHands/runtime-api/pull/685)

#### Bug Fixes

* fix: resolve real service-account email for GCS URL signing by @jlav in [https://github.com/OpenHands/runtime-api/pull/686](https://github.com/OpenHands/runtime-api/pull/686)

#### Maintenance

* chore: PLTF-3242 Emit cleanup backlog/throughput counts as a structured log summary by @aivong-openhands in [https://github.com/OpenHands/runtime-api/pull/665](https://github.com/OpenHands/runtime-api/pull/665)
* build(deps): bump aiohttp from 3.13.4 to 3.14.1 by @dependabot\[bot] in [https://github.com/OpenHands/runtime-api/pull/680](https://github.com/OpenHands/runtime-api/pull/680)
* build(deps): bump ddtrace from 3.5.1 to 4.8.2 by @dependabot\[bot] in [https://github.com/OpenHands/runtime-api/pull/687](https://github.com/OpenHands/runtime-api/pull/687)
* build(deps): bump awscli from 1.44.38 to 1.44.78 by @dependabot\[bot] in [https://github.com/OpenHands/runtime-api/pull/689](https://github.com/OpenHands/runtime-api/pull/689)
* build(deps): bump pyasn1 from 0.6.3 to 0.6.4 by @dependabot\[bot] in [https://github.com/OpenHands/runtime-api/pull/688](https://github.com/OpenHands/runtime-api/pull/688)

***

### OpenHands Cloud (Helm Chart)

#### Features

* feat(charts): device-plugin subchart for kvm/fuse passthrough by @jlav in [https://github.com/OpenHands/OpenHands-Cloud/pull/1006](https://github.com/OpenHands/OpenHands-Cloud/pull/1006)
* feat(openhands): PLTF-1247 offer Valkey as an opt-in cache backend by @aivong-openhands in [https://github.com/OpenHands/OpenHands-Cloud/pull/1007](https://github.com/OpenHands/OpenHands-Cloud/pull/1007)
* feat(agent-canvas): bump chart image tag to 1.10.0 by @hieptl in [https://github.com/OpenHands/OpenHands-Cloud/pull/1024](https://github.com/OpenHands/OpenHands-Cloud/pull/1024)

#### Bug Fixes

* fix(budget-maintenance): disable cronjob until fixed image ships by @saurya in [https://github.com/OpenHands/OpenHands-Cloud/pull/999](https://github.com/OpenHands/OpenHands-Cloud/pull/999)
* fix(replicated): preserve Keycloak identity provider timeout by @ak684 in [https://github.com/OpenHands/OpenHands-Cloud/pull/1001](https://github.com/OpenHands/OpenHands-Cloud/pull/1001)
* fix: disable email changes for Replicated installs by @ak684 in [https://github.com/OpenHands/OpenHands-Cloud/pull/1002](https://github.com/OpenHands/OpenHands-Cloud/pull/1002)
* fix(rustfs): PLTF-1250 make the bundled store deployable when enabled by @aivong-openhands in [https://github.com/OpenHands/OpenHands-Cloud/pull/1010](https://github.com/OpenHands/OpenHands-Cloud/pull/1010)
* fix(charts): pass fuse\_s3\_mount through warm-runtimes configmap by @jlav in [https://github.com/OpenHands/OpenHands-Cloud/pull/1011](https://github.com/OpenHands/OpenHands-Cloud/pull/1011)
* fix(build): PLTF-1250 stop shipping Chart.yaml.bak in released charts by @aivong-openhands in [https://github.com/OpenHands/OpenHands-Cloud/pull/1013](https://github.com/OpenHands/OpenHands-Cloud/pull/1013)
* fix(build): PLTF-1250 restore Chart.lock after packaging by @aivong-openhands in [https://github.com/OpenHands/OpenHands-Cloud/pull/1014](https://github.com/OpenHands/OpenHands-Cloud/pull/1014)
* fix(charts)!: OHE-3033 durable automation package storage by @jlav in [https://github.com/OpenHands/OpenHands-Cloud/pull/1015](https://github.com/OpenHands/OpenHands-Cloud/pull/1015)
* fix(charts): restore the nested sandbox hostname default by @jlav in [https://github.com/OpenHands/OpenHands-Cloud/pull/1021](https://github.com/OpenHands/OpenHands-Cloud/pull/1021)
* fix(litellm-helm): bump default image tag to 1.94.1 for memory fix by @aivong-openhands in [https://github.com/OpenHands/OpenHands-Cloud/pull/1023](https://github.com/OpenHands/OpenHands-Cloud/pull/1023)
* fix(budget-maintenance): re-enable cronjob with 1.49.1 by @saurya in [https://github.com/OpenHands/OpenHands-Cloud/pull/1018](https://github.com/OpenHands/OpenHands-Cloud/pull/1018)

#### Maintenance

* chore: bump Agent Canvas chart image to 1.9.0 by @malhotra5 in [https://github.com/OpenHands/OpenHands-Cloud/pull/1009](https://github.com/OpenHands/OpenHands-Cloud/pull/1009)
* chore: add storage-lifetime and naming checks to the code-review skill by @jlav in [https://github.com/OpenHands/OpenHands-Cloud/pull/1016](https://github.com/OpenHands/OpenHands-Cloud/pull/1016)

## 0.36.1

This patch release was focused on stability fixes for the Enterprise Server, including preserving user sessions during transient network failures and giving deployments the ability to disable email changes.

### Enterprise Server

#### Bug Fixes

* fix(auth): preserve sessions during transient network failures by @ak684 in [https://github.com/OpenHands/enterprise/pull/81](https://github.com/OpenHands/enterprise/pull/81)
* fix: allow deployments to disable email changes by @ak684 in [https://github.com/OpenHands/enterprise/pull/110](https://github.com/OpenHands/enterprise/pull/110)
* fix(enterprise): fix broken import in run\_budget\_maintenance.py by @saurya in [https://github.com/OpenHands/enterprise/pull/80](https://github.com/OpenHands/enterprise/pull/80)

## 0.36.0

This release makes the **Agent Canvas** experience available to users at `your-openhands-instance.acmeco.com/canvas`.  As mentioned in 0.28.0 release notes, Agent Canvas will coexist with the current OpenHands Enterprise conversation interface for the time being. A future release will announce the deprecation date for the current interface, after which Agent Canvas will become the default UI.

Additionally, this release improves security and adds support for Bitbucket Data Center as a supported Git provider for Skills marketplace registrations. Improvements to database-pool resiliency, LLM usage-metrics accuracy, and runtime cleanup performance have also made it into this release.

### Enterprise Server

#### Features

* feat: Expose app and SDK versions in server info by @malhotra5 in [https://github.com/OpenHands/OpenHands/pull/15345](https://github.com/OpenHands/OpenHands/pull/15345)
* feat: surface sandbox start-failure reason in conversation start errors by @ak684 in [https://github.com/OpenHands/OpenHands/pull/14885](https://github.com/OpenHands/OpenHands/pull/14885)
* feat(settings): support title generation profile preference by @simonrosenberg in [https://github.com/OpenHands/OpenHands/pull/15366](https://github.com/OpenHands/OpenHands/pull/15366)
* feat: Allow disabling redis\_rate\_limiter via empty RATE\_LIMIT\_AUTH\_WINDOWS by @tofarr in [https://github.com/OpenHands/enterprise/pull/97](https://github.com/OpenHands/enterprise/pull/97)
* feat: Enforce CSP via middleware (OHE-2815) by @tofarr in [https://github.com/OpenHands/enterprise/pull/94](https://github.com/OpenHands/enterprise/pull/94)

#### Bug Fixes

* fix(app-server): support Bitbucket Data Center personal repos as marketplace sources by @ak684 in [https://github.com/OpenHands/OpenHands/pull/15334](https://github.com/OpenHands/OpenHands/pull/15334)
* fix(frontend): add jittered rate-limit backoff by @aivong-openhands in [https://github.com/OpenHands/OpenHands/pull/15236](https://github.com/OpenHands/OpenHands/pull/15236)
* fix: upgraded instances with no superadmin by @tofarr in [https://github.com/OpenHands/OpenHands/pull/15349](https://github.com/OpenHands/OpenHands/pull/15349)
* fix: clear member key on managed profile switch by @saurya in [https://github.com/OpenHands/OpenHands/pull/15356](https://github.com/OpenHands/OpenHands/pull/15356)
* fix(enterprise): avoid rotating keys on LiteLLM non-auth errors by @saurya in [https://github.com/OpenHands/OpenHands/pull/15267](https://github.com/OpenHands/OpenHands/pull/15267)
* fix(app-server): persist combined LLM usage metrics across all usage buckets by @ak684 in [https://github.com/OpenHands/OpenHands/pull/15354](https://github.com/OpenHands/OpenHands/pull/15354)
* fix(app-server): prevent webhook callbacks from starving the database pool by @ak684 in [https://github.com/OpenHands/OpenHands/pull/15379](https://github.com/OpenHands/OpenHands/pull/15379)
* fix: filter automation event forwarding by requested types by @malhotra5 in [https://github.com/OpenHands/OpenHands/pull/15388](https://github.com/OpenHands/OpenHands/pull/15388)
* fix: enforce cloud analytics consent from TOS by @malhotra5 in [https://github.com/OpenHands/enterprise/pull/79](https://github.com/OpenHands/enterprise/pull/79)
* fix(ci): use private bot PAT for pr-artifacts cleanup job by @jlav in [https://github.com/OpenHands/enterprise/pull/88](https://github.com/OpenHands/enterprise/pull/88)
* fix(enterprise): atomically migrate legacy empty tool settings by @simonrosenberg in [https://github.com/OpenHands/enterprise/pull/12](https://github.com/OpenHands/enterprise/pull/12)
* fix(settings): accept legacy detached MCP configs by @neubig in [https://github.com/OpenHands/enterprise/pull/93](https://github.com/OpenHands/enterprise/pull/93)

#### Maintenance

* test: PLTF-1269 split enterprise test\_user\_model into focused per-model tests by @aivong-openhands in [https://github.com/OpenHands/OpenHands/pull/13997](https://github.com/OpenHands/OpenHands/pull/13997)
* chore: Suppress verbose Laminar info logs by @tofarr in [https://github.com/OpenHands/OpenHands/pull/15374](https://github.com/OpenHands/OpenHands/pull/15374)
* chore: Unify release-please into a single semver release line by @mamoodi in [https://github.com/OpenHands/enterprise/pull/76](https://github.com/OpenHands/enterprise/pull/76)

***

### Software Agent SDK

#### Features

* feat: surface plugin contents in the agent-server plugins API by @hieptl in [https://github.com/OpenHands/software-agent-sdk/pull/4103](https://github.com/OpenHands/software-agent-sdk/pull/4103)
* Lazily hydrate persisted conversations by @neubig in [https://github.com/OpenHands/software-agent-sdk/pull/4100](https://github.com/OpenHands/software-agent-sdk/pull/4100)
* feat(agent-server): support deployment context on profile launches by @simonrosenberg in [https://github.com/OpenHands/software-agent-sdk/pull/4030](https://github.com/OpenHands/software-agent-sdk/pull/4030)
* feat(agent-server): sanitized product-analytics telemetry with split consent policy by @VascoSch92 in [https://github.com/OpenHands/software-agent-sdk/pull/4172](https://github.com/OpenHands/software-agent-sdk/pull/4172)
* feat: add opt-in persistent memory across sessions by @hieptl in [https://github.com/OpenHands/software-agent-sdk/pull/4178](https://github.com/OpenHands/software-agent-sdk/pull/4178)
* feat(marketplace): auto-load standalone marketplace skills by @ak684 in [https://github.com/OpenHands/software-agent-sdk/pull/4176](https://github.com/OpenHands/software-agent-sdk/pull/4176)
* feat(mcp): subscribe to tools/list\_changed for progressive-disclosure servers by @neubig in [https://github.com/OpenHands/software-agent-sdk/pull/3894](https://github.com/OpenHands/software-agent-sdk/pull/3894)
* feat(agent-server): persist parent/child conversation relationships by @VascoSch92 in [https://github.com/OpenHands/software-agent-sdk/pull/4188](https://github.com/OpenHands/software-agent-sdk/pull/4188)
* feat: expose agent\_context.load\_memory in the agent-settings schema by @hieptl in [https://github.com/OpenHands/software-agent-sdk/pull/4205](https://github.com/OpenHands/software-agent-sdk/pull/4205)
* feat: publish typed Agent Server OpenAPI contract by @neubig in [https://github.com/OpenHands/software-agent-sdk/pull/4229](https://github.com/OpenHands/software-agent-sdk/pull/4229)
* feat: automate TypeScript client contract handoff by @neubig in [https://github.com/OpenHands/software-agent-sdk/pull/4234](https://github.com/OpenHands/software-agent-sdk/pull/4234)
* feat(agent-server): add MCP settings CRUD endpoints by @neubig in [https://github.com/OpenHands/software-agent-sdk/pull/4294](https://github.com/OpenHands/software-agent-sdk/pull/4294)
* feat: add MCPServer.enabled to switch a server off without removing it by @hieptl in [https://github.com/OpenHands/software-agent-sdk/pull/4307](https://github.com/OpenHands/software-agent-sdk/pull/4307)

#### Bug Fixes

* fix(sdk): rehydrate persisted subscription LLMs by @lufen in [https://github.com/OpenHands/software-agent-sdk/pull/4092](https://github.com/OpenHands/software-agent-sdk/pull/4092)
* fix(observability): stamp tool\_call\_id onto the TOOL span by @simonrosenberg in [https://github.com/OpenHands/software-agent-sdk/pull/4010](https://github.com/OpenHands/software-agent-sdk/pull/4010)
* Fix REST API contract summary deduplication by @enyst in [https://github.com/OpenHands/software-agent-sdk/pull/3918](https://github.com/OpenHands/software-agent-sdk/pull/3918)
* fix(acp): bound ACP server startup with a timeout by @rsd-darshan in [https://github.com/OpenHands/software-agent-sdk/pull/4126](https://github.com/OpenHands/software-agent-sdk/pull/4126)
* fix(visualizer): show per-request token usage alongside cumulative by @luciobaiocchi in [https://github.com/OpenHands/software-agent-sdk/pull/4146](https://github.com/OpenHands/software-agent-sdk/pull/4146)
* fix(agent): apply filter\_tools\_regex to runtime tools by @VascoSch92 in [https://github.com/OpenHands/software-agent-sdk/pull/4186](https://github.com/OpenHands/software-agent-sdk/pull/4186)
* fix(sdk): accept boolean JSON Schema nodes in \_process\_schema\_node by @VascoSch92 in [https://github.com/OpenHands/software-agent-sdk/pull/4185](https://github.com/OpenHands/software-agent-sdk/pull/4185)
* fix(sdk): mask all registered secrets, not only exported ones by @VascoSch92 in [https://github.com/OpenHands/software-agent-sdk/pull/4191](https://github.com/OpenHands/software-agent-sdk/pull/4191)
* fix(acp): persist rotated Codex credentials by @simonrosenberg in [https://github.com/OpenHands/software-agent-sdk/pull/4124](https://github.com/OpenHands/software-agent-sdk/pull/4124)
* fix(settings): restore MCP schema migration by @neubig in [https://github.com/OpenHands/software-agent-sdk/pull/4013](https://github.com/OpenHands/software-agent-sdk/pull/4013)
* fix(terminal): submit multiline PowerShell commands on Windows by @VascoSch92 in [https://github.com/OpenHands/software-agent-sdk/pull/4155](https://github.com/OpenHands/software-agent-sdk/pull/4155)
* fix(agent-server): default bind host to loopback without a session API key by @neubig in [https://github.com/OpenHands/software-agent-sdk/pull/4180](https://github.com/OpenHands/software-agent-sdk/pull/4180)
* fix: parallel tool metrics by @luciobaiocchi in [https://github.com/OpenHands/software-agent-sdk/pull/4193](https://github.com/OpenHands/software-agent-sdk/pull/4193)
* fix(agent-server): /api/vscode/url without base\_url advertises the configured VSCode port by @harish-chandramowli in [https://github.com/OpenHands/software-agent-sdk/pull/4181](https://github.com/OpenHands/software-agent-sdk/pull/4181)
* fix(agent-server): require credential reactivation before cold load by @simonrosenberg in [https://github.com/OpenHands/software-agent-sdk/pull/4198](https://github.com/OpenHands/software-agent-sdk/pull/4198)
* fix(sdk): reject unknown event parents on append by @hxaxd in [https://github.com/OpenHands/software-agent-sdk/pull/4089](https://github.com/OpenHands/software-agent-sdk/pull/4089)
* fix(agent-server): redact LLM & condenser secrets in download-trajectory by @smolpaws in [https://github.com/OpenHands/software-agent-sdk/pull/4217](https://github.com/OpenHands/software-agent-sdk/pull/4217)
* fix: honor the stored memory preference on profile launches by @hieptl in [https://github.com/OpenHands/software-agent-sdk/pull/4223](https://github.com/OpenHands/software-agent-sdk/pull/4223)
* fix(agent-server): include server\_base\_path in the advertised VSCode URL by @harish-chandramowli in [https://github.com/OpenHands/software-agent-sdk/pull/4222](https://github.com/OpenHands/software-agent-sdk/pull/4222)
* fix(sdk): mark corrective nudge as environment event by @Sehlani042 in [https://github.com/OpenHands/software-agent-sdk/pull/3954](https://github.com/OpenHands/software-agent-sdk/pull/3954)
* fix(security): authenticate WebSockets outside URLs by @simonrosenberg in [https://github.com/OpenHands/software-agent-sdk/pull/4279](https://github.com/OpenHands/software-agent-sdk/pull/4279)
* fix(llm): generalize model capability resolution by @neubig in [https://github.com/OpenHands/software-agent-sdk/pull/4200](https://github.com/OpenHands/software-agent-sdk/pull/4200)
* fix(security): stop logging runtime command contents by @simonrosenberg in [https://github.com/OpenHands/software-agent-sdk/pull/4280](https://github.com/OpenHands/software-agent-sdk/pull/4280)

#### Maintenance

* chore(deps): bump starlette from 1.0.1 to 1.3.1 by @dependabot\[bot] in [https://github.com/OpenHands/software-agent-sdk/pull/4140](https://github.com/OpenHands/software-agent-sdk/pull/4140)
* chore(deps): bump pyjwt from 2.12.0 to 2.13.0 by @dependabot\[bot] in [https://github.com/OpenHands/software-agent-sdk/pull/4138](https://github.com/OpenHands/software-agent-sdk/pull/4138)
* chore(deps): bump tornado from 6.5.5 to 6.5.7 by @dependabot\[bot] in [https://github.com/OpenHands/software-agent-sdk/pull/4139](https://github.com/OpenHands/software-agent-sdk/pull/4139)
* chore(deps): bump python-multipart from 0.0.27 to 0.0.31 by @dependabot\[bot] in [https://github.com/OpenHands/software-agent-sdk/pull/4141](https://github.com/OpenHands/software-agent-sdk/pull/4141)
* chore(deps): bump cryptography from 46.0.7 to 48.0.1 by @dependabot\[bot] in [https://github.com/OpenHands/software-agent-sdk/pull/4142](https://github.com/OpenHands/software-agent-sdk/pull/4142)
* bump laminar to latest version, fix compat issues by @dinmukhamedm in [https://github.com/OpenHands/software-agent-sdk/pull/4179](https://github.com/OpenHands/software-agent-sdk/pull/4179)
* perf(agent-server): index conversation execution status for search/count by @VascoSch92 in [https://github.com/OpenHands/software-agent-sdk/pull/4201](https://github.com/OpenHands/software-agent-sdk/pull/4201)
* perf(agent-server): evict idle conversations from memory after a configurable TTL by @VascoSch92 in [https://github.com/OpenHands/software-agent-sdk/pull/4202](https://github.com/OpenHands/software-agent-sdk/pull/4202)
* Import SkillInfo from the SDK instead of redefining it in skills\_router by @onatozmenn in [https://github.com/OpenHands/software-agent-sdk/pull/4277](https://github.com/OpenHands/software-agent-sdk/pull/4277)
* Move duplicated LLM option blocks into common.py by @onatozmenn in [https://github.com/OpenHands/software-agent-sdk/pull/4276](https://github.com/OpenHands/software-agent-sdk/pull/4276)
* Share the Gemini edit/write\_file diff rendering by @onatozmenn in [https://github.com/OpenHands/software-agent-sdk/pull/4278](https://github.com/OpenHands/software-agent-sdk/pull/4278)

***

### Runtime API

#### Features

* feat(cleanup): paginate cleanup\_stuck\_pvcs PVC list by @tofarr in [https://github.com/OpenHands/runtime-api/pull/658](https://github.com/OpenHands/runtime-api/pull/658)
* feat: surface pod scheduling/image failure reason in sandbox status by @ak684 in [https://github.com/OpenHands/runtime-api/pull/615](https://github.com/OpenHands/runtime-api/pull/615)

#### Bug Fixes

* fix(cleanup): archive with actual conversation IDs by @simonrosenberg in [https://github.com/OpenHands/runtime-api/pull/654](https://github.com/OpenHands/runtime-api/pull/654)
* fix: reap runtimes stuck Pending/unschedulable by @ak684 in [https://github.com/OpenHands/runtime-api/pull/655](https://github.com/OpenHands/runtime-api/pull/655)
* fix: Optimize idle runtime cleanup pod listing by @tofarr in [https://github.com/OpenHands/runtime-api/pull/662](https://github.com/OpenHands/runtime-api/pull/662)

#### Maintenance

* perf(cleanup): page snapshot\_and\_delete\_idle\_pvcs over bound PVCs by @tofarr in [https://github.com/OpenHands/runtime-api/pull/660](https://github.com/OpenHands/runtime-api/pull/660)
* build(deps): bump starlette from 0.49.1 to 1.3.1 by @dependabot\[bot] in [https://github.com/OpenHands/runtime-api/pull/650](https://github.com/OpenHands/runtime-api/pull/650)

***

### Automation

#### Features

* feat: add automation server info endpoint by @malhotra5 in [https://github.com/OpenHands/automation/pull/248](https://github.com/OpenHands/automation/pull/248)
* feat: capture automation telemetry events by @malhotra5 in [https://github.com/OpenHands/automation/pull/254](https://github.com/OpenHands/automation/pull/254)
* feat: expose requested automation event types by @malhotra5 in [https://github.com/OpenHands/automation/pull/260](https://github.com/OpenHands/automation/pull/260)
* feat: expose automation capabilities and preflight validation by @hieptl in [https://github.com/OpenHands/automation/pull/270](https://github.com/OpenHands/automation/pull/270)

#### Bug Fixes

* fix: add server versions to telemetry by @malhotra5 in [https://github.com/OpenHands/automation/pull/256](https://github.com/OpenHands/automation/pull/256)
* fix: normalize MCP config shapes in automation presets by @malhotra5 in [https://github.com/OpenHands/automation/pull/257](https://github.com/OpenHands/automation/pull/257)
* fix: attribute PostHog events to automation actors by @neubig in [https://github.com/OpenHands/automation/pull/265](https://github.com/OpenHands/automation/pull/265)
* fix(security): keep injected secrets out of commands by @simonrosenberg in [https://github.com/OpenHands/automation/pull/267](https://github.com/OpenHands/automation/pull/267)

#### Maintenance

* chore: Add missing index on automation\_runs.automation\_id by @aivong-openhands in [https://github.com/OpenHands/automation/pull/250](https://github.com/OpenHands/automation/pull/250)

***

### OpenHands Cloud (Helm Chart)

#### Features

* feat: enable the pending-runtime reaper on OHE installs by @ak684 in [https://github.com/OpenHands/OpenHands-Cloud/pull/931](https://github.com/OpenHands/OpenHands-Cloud/pull/931)
* feat(charts): add external S3 file store support by @jlav in [https://github.com/OpenHands/OpenHands-Cloud/pull/946](https://github.com/OpenHands/OpenHands-Cloud/pull/946)
* feat(openhands): PLTF-3258 re-add fail guard for postgresql disabled without external database by @aivong-openhands in [https://github.com/OpenHands/OpenHands-Cloud/pull/948](https://github.com/OpenHands/OpenHands-Cloud/pull/948)
* feat: add SMTP and budget maintenance deployment wiring by @saurya in [https://github.com/OpenHands/OpenHands-Cloud/pull/780](https://github.com/OpenHands/OpenHands-Cloud/pull/780)
* feat: wire Agent Canvas through Replicated/Helm installs by @lilagrc in [https://github.com/OpenHands/OpenHands-Cloud/pull/954](https://github.com/OpenHands/OpenHands-Cloud/pull/954)
* feat(rustfs): PLTF-1250 optional in-cluster object store by @aivong-openhands in [https://github.com/OpenHands/OpenHands-Cloud/pull/983](https://github.com/OpenHands/OpenHands-Cloud/pull/983)
* feat(charts): adopt kubernetes recommended labels by @jlav in [https://github.com/OpenHands/OpenHands-Cloud/pull/960](https://github.com/OpenHands/OpenHands-Cloud/pull/960)
* feat(dns): add a simple single-wildcard hostname layout by @jlav in [https://github.com/OpenHands/OpenHands-Cloud/pull/985](https://github.com/OpenHands/OpenHands-Cloud/pull/985)

#### Bug Fixes

* fix(openhands): namespace-qualify bundled litellm url for sandboxes by @jlav in [https://github.com/OpenHands/OpenHands-Cloud/pull/937](https://github.com/OpenHands/OpenHands-Cloud/pull/937)
* fix(openhands): validate filestore values and test external S3 env by @jlav in [https://github.com/OpenHands/OpenHands-Cloud/pull/947](https://github.com/OpenHands/OpenHands-Cloud/pull/947)
* fix(openhands): PLTF-3258 scope render guards to enabled releases by @aivong-openhands in [https://github.com/OpenHands/OpenHands-Cloud/pull/950](https://github.com/OpenHands/OpenHands-Cloud/pull/950)
* fix: increase Replicated MinIO resource headroom by @ak684 in [https://github.com/OpenHands/OpenHands-Cloud/pull/970](https://github.com/OpenHands/OpenHands-Cloud/pull/970)
* fix(integrations-hub): default admin.emails to empty by @tofarr in [https://github.com/OpenHands/OpenHands-Cloud/pull/976](https://github.com/OpenHands/OpenHands-Cloud/pull/976)
* fix(budget-maintenance): disable the budget maintenance cronjob by default by @jlav in [https://github.com/OpenHands/OpenHands-Cloud/pull/978](https://github.com/OpenHands/OpenHands-Cloud/pull/978)
* fix(minio): PLTF-1250 stop the bundled bucket job purging data on every upgrade by @aivong-openhands in [https://github.com/OpenHands/OpenHands-Cloud/pull/981](https://github.com/OpenHands/OpenHands-Cloud/pull/981)
* fix(integrations-hub): derive public base URL by @neubig in [https://github.com/OpenHands/OpenHands-Cloud/pull/963](https://github.com/OpenHands/OpenHands-Cloud/pull/963)
* fix(litellm): PLTF-3363 bump pinned litellm image to 1.93.0 by @aivong-openhands in [https://github.com/OpenHands/OpenHands-Cloud/pull/987](https://github.com/OpenHands/OpenHands-Cloud/pull/987)
* fix(auth): extend Keycloak identity provider timeout by @ak684 in [https://github.com/OpenHands/OpenHands-Cloud/pull/975](https://github.com/OpenHands/OpenHands-Cloud/pull/975)
* fix(troubleshoot): PLTF-3264 unblock support bundle exec collectors on Helm installs by @aivong-openhands in [https://github.com/OpenHands/OpenHands-Cloud/pull/989](https://github.com/OpenHands/OpenHands-Cloud/pull/989)
* fix(replicated): PLTF-3264 include app and license info in support bundles by @aivong-openhands in [https://github.com/OpenHands/OpenHands-Cloud/pull/992](https://github.com/OpenHands/OpenHands-Cloud/pull/992)
* fix(replicated): PLTF-3264 pass the SDK its pull secret in map form by @aivong-openhands in [https://github.com/OpenHands/OpenHands-Cloud/pull/996](https://github.com/OpenHands/OpenHands-Cloud/pull/996)

#### Maintenance

* ci: PLTF-3287 sticky comment notify on openhands chart appVersion drift by @aivong-openhands in [https://github.com/OpenHands/OpenHands-Cloud/pull/951](https://github.com/OpenHands/OpenHands-Cloud/pull/951)
* chore(openhands-secrets): remove no-op config keys by @jlav in [https://github.com/OpenHands/OpenHands-Cloud/pull/871](https://github.com/OpenHands/OpenHands-Cloud/pull/871)
* chore(openhands): remove no-op values file keys by @jlav in [https://github.com/OpenHands/OpenHands-Cloud/pull/869](https://github.com/OpenHands/OpenHands-Cloud/pull/869)
* chore(openhands): pin redis master resources to effective values by @jlav in [https://github.com/OpenHands/OpenHands-Cloud/pull/868](https://github.com/OpenHands/OpenHands-Cloud/pull/868)
* revert: re-enable budget maintenance by default by @saurya in [https://github.com/OpenHands/OpenHands-Cloud/pull/982](https://github.com/OpenHands/OpenHands-Cloud/pull/982)

## 0.28.0

This release adds the embedded **Agent Canvas** endpoint (mounted under `your-openhands-instance.acmeco.com/canvas`). Agent Canvas will coexist with the current OpenHands Enterprise conversation interface for the time being. A future release will announce the deprecation date for the current interface, after which Agent Canvas will become the default UI; in the meantime, teams can begin experimenting with the new Agent Canvas experience and share feedback with the OpenHands product teams.

Additionally, this release brings better Helm chart validation and more configuration options to make installs easier to configure and validate. The rest of the release is focused on stability and maintenance fixes.

### Enterprise Server

#### Bug Fixes

* fix: retry idempotent runtime-api reads once on timeout by @ak684 in [https://github.com/OpenHands/OpenHands/pull/15266](https://github.com/OpenHands/OpenHands/pull/15266)
* fix(agent-profiles): honor profile settings in cloud launches by @simonrosenberg in [https://github.com/OpenHands/OpenHands/pull/15228](https://github.com/OpenHands/OpenHands/pull/15228)
* fix: Fix CVE-2026-53571: Update vite to 8.0.16, 7.3.5, 6.4.3 by @mamoodi in [https://github.com/OpenHands/OpenHands/pull/14982](https://github.com/OpenHands/OpenHands/pull/14982)
* fix: restore automations login redirects by @malhotra5 in [https://github.com/OpenHands/OpenHands/pull/15295](https://github.com/OpenHands/OpenHands/pull/15295)
* fix: Avoid logout on transient provider get\_user errors by @malhotra5 in [https://github.com/OpenHands/OpenHands/pull/15305](https://github.com/OpenHands/OpenHands/pull/15305)
* fix: treat Integrations Hub as a cross-app route by @malhotra5 in [https://github.com/OpenHands/OpenHands/pull/15324](https://github.com/OpenHands/OpenHands/pull/15324)
* fix: add managed LLM key refresh endpoint by @neubig in [https://github.com/OpenHands/OpenHands/pull/15023](https://github.com/OpenHands/OpenHands/pull/15023)
* fix(app-server): restore previous DB pool\_size default by @dylan-openhands in [https://github.com/OpenHands/OpenHands/pull/15333](https://github.com/OpenHands/OpenHands/pull/15333)
* fix: Debounce last\_used\_at writes in ApiKeyStore.validate\_api\_key by @tofarr in [https://github.com/OpenHands/OpenHands/pull/15331](https://github.com/OpenHands/OpenHands/pull/15331)
* fix(jira): allow conversations without repositories by @tofarr in [https://github.com/OpenHands/OpenHands/pull/15328](https://github.com/OpenHands/OpenHands/pull/15328)

***

### Runtime API

#### Bug Fixes

* fix: recycle pooled DB connections and bound pg8000 socket reads by @ak684 in [https://github.com/OpenHands/runtime-api/pull/640](https://github.com/OpenHands/runtime-api/pull/640)
* fix(cleanup): paginate deployment listing to stop OOM in cleanup job by @rbren in [https://github.com/OpenHands/runtime-api/pull/642](https://github.com/OpenHands/runtime-api/pull/642)
* fix(cleanup): hold archive concurrency slot until worker finishes (#643) by @aivong-openhands in [https://github.com/OpenHands/runtime-api/pull/644](https://github.com/OpenHands/runtime-api/pull/644)

#### Maintenance

* perf(cleanup): batch PVC snapshot waits instead of blocking serially by @jlav in [https://github.com/OpenHands/runtime-api/pull/648](https://github.com/OpenHands/runtime-api/pull/648)
* build(deps): bump python-multipart from 0.0.27 to 0.0.31 by @dependabot\[bot] in [https://github.com/OpenHands/runtime-api/pull/652](https://github.com/OpenHands/runtime-api/pull/652)
* build(deps): bump cryptography from 46.0.7 to 48.0.1 by @dependabot\[bot] in [https://github.com/OpenHands/runtime-api/pull/651](https://github.com/OpenHands/runtime-api/pull/651)

***

### OpenHands Cloud (Helm Chart)

#### Features

* feat(openhands): PLTF-3256 add values.schema.json for chart values validation by @aivong-openhands in [https://github.com/OpenHands/OpenHands-Cloud/pull/920](https://github.com/OpenHands/OpenHands-Cloud/pull/920)
* feat(openhands): PLTF-3257 add NOTES.txt post-install output to the openhands chart by @aivong-openhands in [https://github.com/OpenHands/OpenHands-Cloud/pull/922](https://github.com/OpenHands/OpenHands-Cloud/pull/922)
* feat: mount Agent Canvas under /canvas by @malhotra5 in [https://github.com/OpenHands/OpenHands-Cloud/pull/900](https://github.com/OpenHands/OpenHands-Cloud/pull/900)
* feat: Added environment variable for RUNTIME\_API\_BASE\_URL by @tofarr in [https://github.com/OpenHands/OpenHands-Cloud/pull/926](https://github.com/OpenHands/OpenHands-Cloud/pull/926)
* feat(openhands): PLTF-3258 add fail guard for ingress.enabled without ingress.host by @aivong-openhands in [https://github.com/OpenHands/OpenHands-Cloud/pull/923](https://github.com/OpenHands/OpenHands-Cloud/pull/923)
* feat: route Integrations Hub on the primary OpenHands host by @neubig in [https://github.com/OpenHands/OpenHands-Cloud/pull/899](https://github.com/OpenHands/OpenHands-Cloud/pull/899)
* feat: expose sandbox ephemeral-storage as a configurable field by @ak684 in [https://github.com/OpenHands/OpenHands-Cloud/pull/930](https://github.com/OpenHands/OpenHands-Cloud/pull/930)

#### Bug Fixes

* fix(release): make lint pass --app \[PLTF-3195] by @dylan-openhands in [https://github.com/OpenHands/OpenHands-Cloud/pull/898](https://github.com/OpenHands/OpenHands-Cloud/pull/898)
* fix: preserve Integrations Hub API auth responses by @neubig in [https://github.com/OpenHands/OpenHands-Cloud/pull/933](https://github.com/OpenHands/OpenHands-Cloud/pull/933)

#### Maintenance

* chore(postgres): remove obsolete emptyDir-to-PVC migration by @jlav in [https://github.com/OpenHands/OpenHands-Cloud/pull/919](https://github.com/OpenHands/OpenHands-Cloud/pull/919)

## 0.24.0

This release introduces a **Usage & Monitoring** dashboard, giving organization administrators visibility into AI spend and adoption across the organization. This dashboard provides high-level reports showing conversation counts, active sessions, and cost-per-conversation metrics, along with detailed conversation, user, and model-level breakdowns to help teams measure efficiency and ROI.

The new **Budgets** feature -- also enabled for organization admins -- enables org-level spending limits with configurable alert thresholds (e.g., 80%, 90%, 100%) delivered via email or Slack. Default budgets and override budgets allow administrators to manage individual user spending limits.

The **Settings → Agent** page enables the use of third-party agents -- like Claude Code or Codex -- on OpenHands Enterprise sandboxes through the ACP (Agent Canvas Protocol) framework.

Several additional Jira Cloud and Data CEnter enhancements have been made to improve overall integration experience.

### Enterprise Server

#### Features

* feat: implement semantic file chunking using tree-sitter AST parsing by @ysinghc in [https://github.com/OpenHands/OpenHands/pull/14699](https://github.com/OpenHands/OpenHands/pull/14699)
* feat(org): Add organization conversation admin dashboard by @saurya in [https://github.com/OpenHands/OpenHands/pull/14846](https://github.com/OpenHands/OpenHands/pull/14846)
* feat(app-server): capture production workspace state — initial snapshot at start + archive before delete (APP-2403) by @simonrosenberg in [https://github.com/OpenHands/OpenHands/pull/14953](https://github.com/OpenHands/OpenHands/pull/14953)
* feat(device-verify): align warning, button color, and add workspace dropdown by @tofarr in [https://github.com/OpenHands/OpenHands/pull/15031](https://github.com/OpenHands/OpenHands/pull/15031)
* feat(enterprise/auth): add super roles via user.role\_id with permission fallback by @chuckbutkus in [https://github.com/OpenHands/OpenHands/pull/14937](https://github.com/OpenHands/OpenHands/pull/14937)
* feat(org): expose caller permissions on GET /organizations/{id}/me by @VascoSch92 in [https://github.com/OpenHands/OpenHands/pull/15048](https://github.com/OpenHands/OpenHands/pull/15048)
* feat(api-keys): add optional active window (not\_before & expires\_at) by @tofarr in [https://github.com/OpenHands/OpenHands/pull/15085](https://github.com/OpenHands/OpenHands/pull/15085)
* feat(app-server): add repo/branch to Laminar trace metadata by @simonrosenberg in [https://github.com/OpenHands/OpenHands/pull/15059](https://github.com/OpenHands/OpenHands/pull/15059)
* feat: add parallel tool calls (tool\_concurrency\_limit) to agent settings by @VascoSch92 in [https://github.com/OpenHands/OpenHands/pull/14929](https://github.com/OpenHands/OpenHands/pull/14929)
* feat(api-keys): make 'unbound' org scope an explicit, first-class option by @tofarr in [https://github.com/OpenHands/OpenHands/pull/15096](https://github.com/OpenHands/OpenHands/pull/15096)
* feat(jira-dc): fix the integration panel so members get guidance, not the admin setup form by @ak684 in [https://github.com/OpenHands/OpenHands/pull/15040](https://github.com/OpenHands/OpenHands/pull/15040)
* feat: Add dynamic marketplace support for plugin registration by @HeyItsChloe in [https://github.com/OpenHands/OpenHands/pull/14887](https://github.com/OpenHands/OpenHands/pull/14887)
* feat(saas-auth): accept api\_key cookie as a fallback credential by @tofarr in [https://github.com/OpenHands/OpenHands/pull/15101](https://github.com/OpenHands/OpenHands/pull/15101)
* feat(enterprise/auth): super-admin management endpoint (grant/revoke/list) by @jpshackelford in [https://github.com/OpenHands/OpenHands/pull/15006](https://github.com/OpenHands/OpenHands/pull/15006)
* feat: rename admin dashboard to usage & monitoring by @saurya in [https://github.com/OpenHands/OpenHands/pull/15146](https://github.com/OpenHands/OpenHands/pull/15146)
* feat: add SMTP email service by @saurya in [https://github.com/OpenHands/OpenHands/pull/15144](https://github.com/OpenHands/OpenHands/pull/15144)
* feat: track user login timestamps by @saurya in [https://github.com/OpenHands/OpenHands/pull/15148](https://github.com/OpenHands/OpenHands/pull/15148)
* feat: surface email enabled for smtp/resend by @saurya in [https://github.com/OpenHands/OpenHands/pull/15185](https://github.com/OpenHands/OpenHands/pull/15185)
* feat: pass repository metadata to observability traces by @neubig in [https://github.com/OpenHands/OpenHands/pull/14431](https://github.com/OpenHands/OpenHands/pull/14431)
* feat(enterprise): Agent Profiles on the cloud/SaaS backend (#15044) by @simonrosenberg in [https://github.com/OpenHands/OpenHands/pull/15060](https://github.com/OpenHands/OpenHands/pull/15060)
* feat(backend): Add Budgets dashboard and expand Usage Dashboard by @saurya in [https://github.com/OpenHands/OpenHands/pull/15149](https://github.com/OpenHands/OpenHands/pull/15149)
* feat: budgets and usage monitoring UI by @saurya in [https://github.com/OpenHands/OpenHands/pull/15186](https://github.com/OpenHands/OpenHands/pull/15186)
* feat: surface email enabled for smtp/resend by @saurya in [https://github.com/OpenHands/OpenHands/pull/15214](https://github.com/OpenHands/OpenHands/pull/15214)
* feat(app-server): enrich final archive manifests and remove initial snapshots by @simonrosenberg in [https://github.com/OpenHands/OpenHands/pull/15058](https://github.com/OpenHands/OpenHands/pull/15058)
* feat(enterprise): make BYOR key alias pattern configurable by @tofarr in [https://github.com/OpenHands/OpenHands/pull/15232](https://github.com/OpenHands/OpenHands/pull/15232)

#### Bug Fixes

* fix(jira): make Jira Cloud and Jira DC HTTP timeouts configurable and consistent by @ak684 in [https://github.com/OpenHands/OpenHands/pull/15012](https://github.com/OpenHands/OpenHands/pull/15012)
* fix: Fix CVE-2026-44681: Update authlib to >=1.6.12 by @mamoodi in [https://github.com/OpenHands/OpenHands/pull/14983](https://github.com/OpenHands/OpenHands/pull/14983)
* fix: don't switch LLM profile before the conversation UUID exists (avoids 422) by @ak684 in [https://github.com/OpenHands/OpenHands/pull/14900](https://github.com/OpenHands/OpenHands/pull/14900)
* fix(enterprise): log automation HTTP response failures as errors by @wgu9 in [https://github.com/OpenHands/OpenHands/pull/15004](https://github.com/OpenHands/OpenHands/pull/15004)
* fix(enterprise): add alembic migration for execution\_status column by @tofarr in [https://github.com/OpenHands/OpenHands/pull/15030](https://github.com/OpenHands/OpenHands/pull/15030)
* fix(jira-dc): more forgiving repo + mention resolution for Data Center by @ak684 in [https://github.com/OpenHands/OpenHands/pull/15034](https://github.com/OpenHands/OpenHands/pull/15034)
* fix(device-verify): rename 'Workspace' dropdown to 'Organization' by @tofarr in [https://github.com/OpenHands/OpenHands/pull/15057](https://github.com/OpenHands/OpenHands/pull/15057)
* fix(jira-dc): don't org-gate a personal-workspace Jira DC integration by @ak684 in [https://github.com/OpenHands/OpenHands/pull/15036](https://github.com/OpenHands/OpenHands/pull/15036)
* fix: stream LLM tokens for cloud conversations and profile switches by @VascoSch92 in [https://github.com/OpenHands/OpenHands/pull/15021](https://github.com/OpenHands/OpenHands/pull/15021)
* fix: set email person property in PostHog during onboarding completion by @lilagrc in [https://github.com/OpenHands/OpenHands/pull/15070](https://github.com/OpenHands/OpenHands/pull/15070)
* fix: Timezones stored in the db do not have a timezone by @tofarr in [https://github.com/OpenHands/OpenHands/pull/15092](https://github.com/OpenHands/OpenHands/pull/15092)
* fix: add test for InMemoryRateLimiter.**init** to prevent duplicate assignment regression by @aivong-openhands in [https://github.com/OpenHands/OpenHands/pull/14729](https://github.com/OpenHands/OpenHands/pull/14729)
* fix(frontend): stop streamed deltas rendering twice and fragmenting in V1 chat by @shanemort1982 in [https://github.com/OpenHands/OpenHands/pull/15108](https://github.com/OpenHands/OpenHands/pull/15108)
* fix: crash when request.client is None in InMemoryRateLimiter by @rakshith1928 in [https://github.com/OpenHands/OpenHands/pull/15119](https://github.com/OpenHands/OpenHands/pull/15119)
* fix(sandbox-spec): fall back to defaults when runtime-api has no warm runtimes by @tofarr in [https://github.com/OpenHands/OpenHands/pull/15141](https://github.com/OpenHands/OpenHands/pull/15141)
* fix: settings page scroll layout by @saurya in [https://github.com/OpenHands/OpenHands/pull/15147](https://github.com/OpenHands/OpenHands/pull/15147)
* fix(app\_server): pass flat mcp\_config shape to SDK Agent by @tofarr in [https://github.com/OpenHands/OpenHands/pull/15159](https://github.com/OpenHands/OpenHands/pull/15159)
* fix: scroll settings sidebar so Skills is reachable in orgs by @hieptl in [https://github.com/OpenHands/OpenHands/pull/15138](https://github.com/OpenHands/OpenHands/pull/15138)
* fix(frontend): read SDK 1.31.x flat mcp\_config wire format by @tofarr in [https://github.com/OpenHands/OpenHands/pull/15165](https://github.com/OpenHands/OpenHands/pull/15165)
* fix(app\_server): derive agent server image from package version by @tofarr in [https://github.com/OpenHands/OpenHands/pull/15168](https://github.com/OpenHands/OpenHands/pull/15168)
* fix(app-server): pass index columns as a list in migration 013 by @VascoSch92 in [https://github.com/OpenHands/OpenHands/pull/15176](https://github.com/OpenHands/OpenHands/pull/15176)
* fix: default ENABLE\_ACP on so ACP agent settings show in OH Cloud by @hieptl in [https://github.com/OpenHands/OpenHands/pull/15183](https://github.com/OpenHands/OpenHands/pull/15183)
* fix: send authenticated marketplace URLs to agent-server by @hieptl in [https://github.com/OpenHands/OpenHands/pull/15187](https://github.com/OpenHands/OpenHands/pull/15187)
* fix: prevent webhook-driven DB connection leaks by @tofarr in [https://github.com/OpenHands/OpenHands/pull/15212](https://github.com/OpenHands/OpenHands/pull/15212)
* fix(frontend): mention SMTP env vars for budget alerts by @saurya in [https://github.com/OpenHands/OpenHands/pull/15218](https://github.com/OpenHands/OpenHands/pull/15218)
* fix(enterprise): cascade-delete conversation\_cost\_events on conversation delete by @tofarr in [https://github.com/OpenHands/OpenHands/pull/15220](https://github.com/OpenHands/OpenHands/pull/15220)
* fix: Enable LIFO database connection pooling by @tofarr in [https://github.com/OpenHands/OpenHands/pull/15225](https://github.com/OpenHands/OpenHands/pull/15225)
* fix(app-server): preserve observability context metadata by @hxaxd in [https://github.com/OpenHands/OpenHands/pull/15215](https://github.com/OpenHands/OpenHands/pull/15215)
* fix(app-server): preserve conversation created\_at across lifecycle webhooks by @Sujit-1509 in [https://github.com/OpenHands/OpenHands/pull/15243](https://github.com/OpenHands/OpenHands/pull/15243)
* fix(mcp): preserve SaaS credentials with encrypted storage by @simonrosenberg in [https://github.com/OpenHands/OpenHands/pull/15257](https://github.com/OpenHands/OpenHands/pull/15257)
* fix(frontend): restore cross-domain PostHog tracking by aligning client/server distinct\_id (WIP) by @lilagrc in [https://github.com/OpenHands/OpenHands/pull/15100](https://github.com/OpenHands/OpenHands/pull/15100)
* fix(app-server): lower DB pool defaults and make them env-tunable by @dylan-openhands in [https://github.com/OpenHands/OpenHands/pull/15270](https://github.com/OpenHands/OpenHands/pull/15270)
* fix(mcp): preserve MCP auth secrets stripped by settings GET round-trip by @jlav in [https://github.com/OpenHands/OpenHands/pull/15285](https://github.com/OpenHands/OpenHands/pull/15285)

#### Maintenance

* build: pin dependency versions exactly by @rbren in [https://github.com/OpenHands/OpenHands/pull/14384](https://github.com/OpenHands/OpenHands/pull/14384)
* ci: add release ready gate by @enyst in [https://github.com/OpenHands/OpenHands/pull/14987](https://github.com/OpenHands/OpenHands/pull/14987)
* ci: PLTF-2960 open a chart image-tag bump PR on cloud release by @aivong-openhands in [https://github.com/OpenHands/OpenHands/pull/15166](https://github.com/OpenHands/OpenHands/pull/15166)
* ci: PLTF-2960 sync chart appVersion with cloud image tag by @aivong-openhands in [https://github.com/OpenHands/OpenHands/pull/15219](https://github.com/OpenHands/OpenHands/pull/15219)
* ci: wait for the docker build before retagging images by @jlav in [https://github.com/OpenHands/OpenHands/pull/15213](https://github.com/OpenHands/OpenHands/pull/15213)
* chore: Update README.md by @rbren in [https://github.com/OpenHands/OpenHands/pull/15271](https://github.com/OpenHands/OpenHands/pull/15271)

***

### Software Agent SDK

#### Features

* feat(agent-server): expose repository metadata for workspace archives by @simonrosenberg in [https://github.com/OpenHands/software-agent-sdk/pull/3932](https://github.com/OpenHands/software-agent-sdk/pull/3932)
* feat: commit-history API — list commits and per-commit diffs by @hieptl in [https://github.com/OpenHands/software-agent-sdk/pull/4075](https://github.com/OpenHands/software-agent-sdk/pull/4075)
* feat(security): add ToolShieldLLMSecurityAnalyzer by @xli04 in [https://github.com/OpenHands/software-agent-sdk/pull/2911](https://github.com/OpenHands/software-agent-sdk/pull/2911)

#### Bug Fixes

* fix(skills): match keyword triggers on whole words only by @VascoSch92 in [https://github.com/OpenHands/software-agent-sdk/pull/4008](https://github.com/OpenHands/software-agent-sdk/pull/4008)
* fix(sdk): reconnect remote conversation websocket by @bozhnyukAlex in [https://github.com/OpenHands/software-agent-sdk/pull/3987](https://github.com/OpenHands/software-agent-sdk/pull/3987)
* fix(security): add a secret-disclosure consent rule to the agent security policy by @warmjademe in [https://github.com/OpenHands/software-agent-sdk/pull/3823](https://github.com/OpenHands/software-agent-sdk/pull/3823)
* fix(sdk): keep legacy history on resume when the stored tail is a non-tree artifact by @VascoSch92 in [https://github.com/OpenHands/software-agent-sdk/pull/4068](https://github.com/OpenHands/software-agent-sdk/pull/4068)
* fix: support GPT-5.6 across Codex authentication by @neubig in [https://github.com/OpenHands/software-agent-sdk/pull/4056](https://github.com/OpenHands/software-agent-sdk/pull/4056)
* fix: pick a display base ref that keeps committed work visible by @hieptl in [https://github.com/OpenHands/software-agent-sdk/pull/4065](https://github.com/OpenHands/software-agent-sdk/pull/4065)
* fix(mcp): validate secrets after parsing by @simonrosenberg in [https://github.com/OpenHands/software-agent-sdk/pull/4099](https://github.com/OpenHands/software-agent-sdk/pull/4099)
* fix(skills): make marketplaces additive to public skills by @rsd-darshan in [https://github.com/OpenHands/software-agent-sdk/pull/4087](https://github.com/OpenHands/software-agent-sdk/pull/4087)
* fix(mcp): preserve nested object properties in LLM-facing tool schema by @ixchio in [https://github.com/OpenHands/software-agent-sdk/pull/4011](https://github.com/OpenHands/software-agent-sdk/pull/4011)
* \[codex] fix ACP prompt argument order by @neubig in [https://github.com/OpenHands/software-agent-sdk/pull/3996](https://github.com/OpenHands/software-agent-sdk/pull/3996)

#### Maintenance

* ci(version-bump-prs): make PR-creation steps independent by @VascoSch92 in [https://github.com/OpenHands/software-agent-sdk/pull/4051](https://github.com/OpenHands/software-agent-sdk/pull/4051)
* ci: add release security-scan by @smolpaws in [https://github.com/OpenHands/software-agent-sdk/pull/4042](https://github.com/OpenHands/software-agent-sdk/pull/4042)
* chore(deps): bump MishaKav/pytest-coverage-comment from 1.7.2 to 1.10.0 by @dependabot\[bot] in [https://github.com/OpenHands/software-agent-sdk/pull/4046](https://github.com/OpenHands/software-agent-sdk/pull/4046)
* chore(deps): bump docker/setup-buildx-action from 4.0.0 to 4.2.0 by @dependabot\[bot] in [https://github.com/OpenHands/software-agent-sdk/pull/4045](https://github.com/OpenHands/software-agent-sdk/pull/4045)

***

### Runtime API

#### Features

* feat(logging): emit exc\_info and stack\_info as JSON arrays by @tofarr in [https://github.com/OpenHands/runtime-api/pull/635](https://github.com/OpenHands/runtime-api/pull/635)
* feat(cleanup): enrich final workspace archive manifests by @simonrosenberg in [https://github.com/OpenHands/runtime-api/pull/630](https://github.com/OpenHands/runtime-api/pull/630)

#### Bug Fixes

* fix: prevent DetachedInstanceError on Runtime accessed after session close by @tofarr in [https://github.com/OpenHands/runtime-api/pull/636](https://github.com/OpenHands/runtime-api/pull/636)

***

### OpenHands Cloud (Helm Chart)

#### Features

* feat: upgrade embedded cluster to 2.19.2+k8s-1.34 by @jlav in [https://github.com/OpenHands/OpenHands-Cloud/pull/821](https://github.com/OpenHands/OpenHands-Cloud/pull/821)
* feat: upgrade embedded cluster to 2.19.2+k8s-1.35 by @jlav in [https://github.com/OpenHands/OpenHands-Cloud/pull/822](https://github.com/OpenHands/OpenHands-Cloud/pull/822)
* feat: upgrade embedded cluster to 2.19.2+k8s-1.36 by @jlav in [https://github.com/OpenHands/OpenHands-Cloud/pull/826](https://github.com/OpenHands/OpenHands-Cloud/pull/826)
* feat(sysbox): default sandbox isolation on the embedded cluster by @jlav in [https://github.com/OpenHands/OpenHands-Cloud/pull/770](https://github.com/OpenHands/OpenHands-Cloud/pull/770)
* feat: PLTF-3196 Configure global OpenHands resolver label by @aivong-openhands in [https://github.com/OpenHands/OpenHands-Cloud/pull/807](https://github.com/OpenHands/OpenHands-Cloud/pull/807)
* feat: PLTF-2960 sync metadata with image tag bumps by @aivong-openhands in [https://github.com/OpenHands/OpenHands-Cloud/pull/828](https://github.com/OpenHands/OpenHands-Cloud/pull/828)
* feat: Add replicated vendor portal links in release workflows by @dylan-openhands in [https://github.com/OpenHands/OpenHands-Cloud/pull/833](https://github.com/OpenHands/OpenHands-Cloud/pull/833)
* feat: PLTF-3198 enable the Replicated SDK by default for helm installs by @aivong-openhands in [https://github.com/OpenHands/OpenHands-Cloud/pull/895](https://github.com/OpenHands/OpenHands-Cloud/pull/895)
* feat(replicated): add OEM User Creation Flow advanced option by @jpshackelford in [https://github.com/OpenHands/OpenHands-Cloud/pull/914](https://github.com/OpenHands/OpenHands-Cloud/pull/914)

#### Bug Fixes

* fix(postgres): raise embedded postgres memory limit to avoid OOM by @jlav in [https://github.com/OpenHands/OpenHands-Cloud/pull/829](https://github.com/OpenHands/OpenHands-Cloud/pull/829)
* fix: improve integrations-hub Datadog and probe configuration by @neubig in [https://github.com/OpenHands/OpenHands-Cloud/pull/862](https://github.com/OpenHands/OpenHands-Cloud/pull/862)
* fix(openhands): stop warm-runtimes job pods matching the runtime-api Service selector by @ak684 in [https://github.com/OpenHands/OpenHands-Cloud/pull/867](https://github.com/OpenHands/OpenHands-Cloud/pull/867)
* fix(openhands): mirror agentServerEnv into warm-runtime env so warm pools stay claimable by @ak684 in [https://github.com/OpenHands/OpenHands-Cloud/pull/866](https://github.com/OpenHands/OpenHands-Cloud/pull/866)
* fix: set default agent-server tag back to 1.36.0-python by @jlav in [https://github.com/OpenHands/OpenHands-Cloud/pull/908](https://github.com/OpenHands/OpenHands-Cloud/pull/908)

#### Maintenance

* ci: PLTF-2920 dispatch staging chart bumps after publish by @aivong-openhands in [https://github.com/OpenHands/OpenHands-Cloud/pull/801](https://github.com/OpenHands/OpenHands-Cloud/pull/801)
* refactor(openhands): rename gitlab webhook install cronjob by @jlav in [https://github.com/OpenHands/OpenHands-Cloud/pull/865](https://github.com/OpenHands/OpenHands-Cloud/pull/865)
* ci: PLTF-3193 dispatch development chart bumps after publish by @aivong-openhands in [https://github.com/OpenHands/OpenHands-Cloud/pull/843](https://github.com/OpenHands/OpenHands-Cloud/pull/843)
* test: PLTF-1257 helm-unittest setup by @aivong-openhands in [https://github.com/OpenHands/OpenHands-Cloud/pull/894](https://github.com/OpenHands/OpenHands-Cloud/pull/894)
* chore: add CODEOWNERS by @jlav in [https://github.com/OpenHands/OpenHands-Cloud/pull/878](https://github.com/OpenHands/OpenHands-Cloud/pull/878)
