limited-student-10747
03/27/2026, 3:56 AMcalm-artist-7206
03/27/2026, 12:50 PMcalm-artist-7206
03/27/2026, 12:54 PMcalm-artist-7206
03/27/2026, 12:57 PMlimited-student-10747
03/30/2026, 8:41 PM## [v1.15.0] - 2026-03-26
This release brings ACP agent support to the remote runtime API, parallel tool execution, and several critical bug fixes including a security patch for LiteLLM.
### Key Highlights
- **ACP Agent Remote Runtime**: ACPAgent now works with RemoteRuntime via dedicated `/api/acp/conversations` endpoints, preserving backward compatibility for existing Agent-only flows (#2465) @simonrosenberg
- **Parallel Tool Execution**: Enable concurrent tool calls within agent steps via `TOOL_CONCURRENCY_LIMIT` environment variable (default: 1, fully backward-compatible) (#2390) @VascoSch92
- **OpenHands Cloud Credential Inheritance**: `OpenHandsCloudWorkspace` now provides `get_llm()` and `get_secrets()` methods to inherit user SaaS credentials in SDK-created conversations (#2409) @xingyaoww
### ✨ New Features
- Add support for GPT-5.4, Gemini 3.1, and MiniMax-M2.7 models (#2487) @juanmichelini, (#2276) @mayeco, (#2500) @juanmichelini
- Add `entry_command` field to `PluginManifest` for default plugin command invocation and `url` field to `PluginAuthor` for Claude Code schema parity (#2230) @jpshackelford, (#2546) @jpshackelford
- Add `after_timestamp` query parameter to WebSocket events endpoint for bi-directional event loading optimization (#1880) @jpshackelford
- Add AI disclosure policy requiring agents to identify generated content when posting to external services (#2476) @xingyaoww
- Add `OPENHANDS_BUILDKIT_CACHE_MODE`, `INSTALL_ACP`, `INSTALL_BOTO3` environment variables and `extra_build_args` to `BuildOptions` for granular build control (#2479, #2535, #2536, #2541) @simonrosenberg
- Add browser tool usage guidelines to system prompt to prevent ineffective CAPTCHA-solving loops (#2547) @VascoSch92
- Support pre-built base images for faster benchmark rebuilds via explicit Docker build targets (#2542) @simonrosenberg
- Upgrade `rich` package to 14.3.3 to address denial-of-service vulnerability (#2414) @yitao-li
### 🐛 Bug Fixes
- **Security**: Pin LiteLLM to exactly 1.80.10 to prevent installation of malicious wheel in 1.82.8 and fix run-eval workflow to use locked dependencies (#2558, #2559) @rbren, @simonrosenberg
- Fix Qwen3.5-Flash low submission rate by improving JSON argument parsing and adding corrective feedback for malformed tool calls (#2512) @juanmichelini
- Synchronize ACP telemetry writes and refresh remote conversation state before `run()` returns to prevent race conditions (#2460) @simonrosenberg
- Fix preflight LLM check to validate `reasoning_content` for thinking models and stop sending `reasoning_effort` to Kimi models (#2420, #2549) @juanmichelini, @enyst
- Fix Apptainer workspace cleanup to kill zombie child processes by creating new process group (#2450) @adityasoni9998
- Return browser action timeouts as `BrowserObservation` errors instead of fatal conversation exceptions (#2455) @neubig
- Use `asyncio.Event()` for thread-safe server initialization state (#2383) @ixchio
- Make API breakage workflows fail loudly when checks detect incompatibilities (#2432) @enyst
- Fix docstrings for MDX rendering compatibility and add OpenAPI tags to root endpoint (#2452, #2458) @rbren
- Add diagnostics for preflight LiteLLM proxy failures and use `/v1/models` health check endpoint (#2557, #2563) @simonrosenberg
- Normalize `instance_ids` workflow input by stripping spaces automatically (#2529) @simonrosenberg
### 📚 Documentation
- Clarify REST contract deprecation policy requiring 5 minor release runway and migration paths (#2433) @enyst
- Export `TokenUsage`, `page_iterator`, and `AsyncRemoteWorkspace` as public SDK APIs (#2445) @enyst
### 👥 New Contributors
- @dependabot[bot] made their first contribution in #2448
### 🔎 Small Fixes/Internal Changes
- @simonrosenberg: #2190, #2493, #2561, #2522
- @VascoSch92: #2502, #2504, #2480
- @neubig: #2430, #2382, #2360
- @enyst: #2508, #2507, #2524, #2457, #1990, #2434, #2435, #2442, #2443, #2451, #2464
- @dependabot[bot]: #2475, #2484, #2497, #2520, #2517, #2519, #2521, #2518
- @juanmichelini: #2483, #2324
- @aivong-openhands: #2501, #2427
- @all-hands-bot: #2567
- @mayeco: #2277
**Full Changelog**: <https://github.com/OpenHands/software-agent-sdk/compare/v1.14.0...v1.15.0>calm-artist-7206
03/30/2026, 8:46 PM@dependabot[bot] made their first contributionI doubt this is accurate 😅 👀
limited-student-10747
03/30/2026, 8:46 PMbetter-park-34863
03/30/2026, 8:51 PMOPENHANDS_BUILDKIT_CACHE_MODE, INSTALL_ACP, INSTALL_BOTO3 environment variables and extra_build_args to BuildOptions for granular build control
• Normalize instance_ids workflow input by stripping spaces automatically
• Use asyncio.Event() for thread-safe server initialization state
• Add entry_command field to PluginManifest for default plugin command invocation and url field to PluginAuthor for Claude Code schema parity
etc.calm-artist-7206
03/30/2026, 8:53 PMlimited-student-10747
03/30/2026, 8:54 PMcalm-artist-7206
03/30/2026, 8:55 PMentry_command field to PluginManifest for default plugin command invocation and url field to PluginAuthor for Claude Code schema parity << this is actually important and client developers and users may well know
• as you see, we're missing things
• I personally prefer to err on the side of crediting contributions, rather than risk missing themcalm-artist-7206
03/30/2026, 8:57 PMcalm-artist-7206
03/30/2026, 9:04 PMcalm-artist-7206
03/30/2026, 9:06 PMcalm-artist-7206
03/30/2026, 9:12 PMAddJust to elaborate a bit, because this is probably unclear within the long PR title: • this gives users and plugin developers the ability (or at least the initial definition of the ability) to start a conversation with an "autostarted" plugin. • that is, they don't even need to prompt, just click a button and OpenHands starts a predefined command • I just saw these days thatfield toentry_commandfor default plugin command invocationPluginManifest
codex app added plugins, with such "entry" too. Anthropic plugins don't have it afaik.
• in my understanding, this intuition or request comes from enterprises with hundreds/thousands of developers for which it would be handy to have a button to click or call to make, without re-promptinglimited-student-10747
03/30/2026, 9:13 PMchilly-france-44439
04/02/2026, 11:14 AMlimited-student-10747
04/02/2026, 11:59 AMlimited-student-10747
04/02/2026, 11:59 AMlimited-student-10747
04/02/2026, 2:31 PM## [v1.15.0] - 2026-03-26
This release brings parallel tool execution for significant performance improvements, ACP Agent support on the remote runtime API, and expanded model coverage including GPT-5.4, Gemini 3.1, and MiniMax-M2.7. It also includes critical security fixes for LiteLLM and the rich library.
### ✨ New Features
- Enable parallel tool execution with `TOOL_CONCURRENCY_LIMIT` environment variable for concurrent tool calls within agent steps, defaulting to 1 for backward compatibility (#2390) @VascoSch92
- Add ACP Agent support to RemoteRuntime API via dedicated `/api/acp/conversations` endpoints while preserving existing REST contract stability (#2465) @simonrosenberg
- Add credential inheritance to `OpenHandsCloudWorkspace` via `get_llm()` and `get_secrets()` methods for SDK-created conversations to inherit SaaS user credentials (#2409) @xingyaoww
- Add verified model support for GPT-5.4 (#2487) @juanmichelini, Gemini 3.1 (#2276) @mayeco, and MiniMax-M2.7 (#2500) @juanmichelini
- Add `entry_command` field to `PluginManifest` for default plugin invocation (#2230) @jpshackelford and `url` field to `PluginAuthor` for Claude Code schema parity (#2546) @jpshackelford
### 🐛 Bug Fixes
- Pin LiteLLM to exactly 1.80.10 to mitigate malicious wheel vulnerability in 1.82.8 (#2558) @rbren
- Fix Qwen3.5-Flash low submission rate by improving JSON argument parsing and adding corrective feedback for stuck conversations (#2512) @juanmichelini
- Fix Apptainer workspace cleanup to properly kill zombie child processes (#2450) @adityasoni9998
- Fix browser action timeouts to return `BrowserObservation` errors instead of fatal `TimeoutError` exceptions (#2455) @neubig
- Fix ACP telemetry race conditions by synchronizing writes onto a single path and refreshing remote conversation state before `run()` returns (#2460) @simonrosenberg
- Fix preflight check to validate `reasoning_content` for thinking models that output to reasoning instead of content (#2420) @juanmichelini
- Fix Kimi thinking models to stop sending unsupported `reasoning_effort` parameter (#2549) @enyst
- Use `asyncio.Event()` for thread-safe initialization state in server details router (#2383) @ixchio
- Upgrade rich package to 14.3.3 to address denial-of-service vulnerability in 14.3.2 (#2414) @yitao-li
### 📚 Documentation
- Establish docstring standards for MDX compatibility and fix key docstrings to prevent rendering issues in Mintlify (#2452) @rbren
### 👥 New Contributors
- @yitao-li made their first contribution in #2414
### 🔎 Small Fixes/Internal Changes
- @simonrosenberg: #2190, #2535, #2536, #2542, #2493, #2529, #2557, #2559, #2561, #2563, #2522
- @VascoSch92: #2502, #2547, #2480
- @enyst: #2432, #2508, #2507, #2524, #2457, #1990, #2433, #2434, #2435, #2442, #2443, #2445, #2451, #2464
- @rbren: #2458
- @neubig: #2430, #2382, #2360
- @dependabot[bot]: #2448, #2475, #2484, #2497, #2520, #2517, #2519, #2521, #2518
- @juanmichelini: #2483, #2324
- @aivong-openhands: #2501, #2427
- @all-hands-bot: #2567
- @mayeco: #2277
**Full Changelog**: <https://github.com/OpenHands/software-agent-sdk/compare/v1.14.0...v1.15.0>limited-student-10747
04/02/2026, 2:31 PMcalm-artist-7206
04/02/2026, 2:52 PMchilly-france-44439
04/02/2026, 3:19 PMchilly-france-44439
04/02/2026, 3:19 PMlimited-student-10747
04/02/2026, 3:36 PM