This release fixes issues for SREs watching stability and regressions.
✓ No known CVEs patched in this version
Topics
ReleasePort's take
Moderate signalVersion v0.17.1 resolves numerous bugs across sandboxes, sessions, realtime agents, core components, and extensions.
Why it matters: Apply v0.17.1 to eliminate extraction limits in sandboxes, skip corrupt session/MongoDB items, preserve timestamps and tool IDs, and fix validation/opt‑in handling; no measurable severity threshold is provided.
Summary
AI summaryFixed a variety of bugs across sandboxes, tracing, sessions, realtime agents, core modules, and extensions.
Changes in this release
| Type | Severity | Summary | CVE |
|---|---|---|---|
| Bugfix | Medium |
Sandbox archive extraction is limited Sandbox archive extraction is limited Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Bugfix | Medium |
Realtime tool approvals are scoped by qualified key Realtime tool approvals are scoped by qualified key Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Bugfix | Medium |
Git repository subpaths are validated Git repository subpaths are validated Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Bugfix | Medium |
Corrupt items are skipped during session pop Corrupt items are skipped during session pop Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Bugfix | Medium |
Corrupt MongoDB documents are skipped in pop Corrupt MongoDB documents are skipped in pop Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Bugfix | Medium |
Chat completions server state is rejected Chat completions server state is rejected Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Bugfix | Medium |
Existing transcript is preserved over stale delta Existing transcript is preserved over stale delta Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Bugfix | Medium |
AudioInput.to_base64 no longer mutates buffer AudioInput.to_base64 no longer mutates buffer Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Bugfix | Medium |
Required hosted tool IDs preserved in sessions Required hosted tool IDs preserved in sessions Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Bugfix | Medium |
Created timestamp preserved across Redis writes Created timestamp preserved across Redis writes Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Bugfix | Medium |
Realtime output sent for unknown tool calls Realtime output sent for unknown tool calls Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Bugfix | Medium |
Output audio content parts preserved in events Output audio content parts preserved in events Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Bugfix | Medium |
Nested handoff history content is preserved Nested handoff history content is preserved Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Bugfix | Medium |
Assertion in handoff replaced with UserError Assertion in handoff replaced with UserError Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Bugfix | Medium |
Tool guardrail results preserved across handoffs Tool guardrail results preserved across handoffs Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Bugfix | Medium |
Chat completions response validation is opt-in Chat completions response validation is opt-in Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Bugfix | Medium |
Unsupported Chat Completions reusable prompts rejected Unsupported Chat Completions reusable prompts rejected Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Bugfix | Medium |
Realtime event iterators awakened on close Realtime event iterators awakened on close Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Bugfix | Medium |
RealtimeAgent fields validated in __post_init__ RealtimeAgent fields validated in __post_init__ Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Bugfix | Medium |
Invalid input_text parts skipped in realtime Invalid input_text parts skipped in realtime Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Bugfix | Medium |
Content blocks not duplicated in any-llm splits Content blocks not duplicated in any-llm splits Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Bugfix | Medium |
Content blocks not duplicated in litellm splits Content blocks not duplicated in litellm splits Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Bugfix | Medium |
BatchTraceProcessor worker alive on errors BatchTraceProcessor worker alive on errors Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Bugfix | Medium |
Failed status preserved across apply_patch Failed status preserved across apply_patch Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Bugfix | Medium |
Request usage entries preserved on Usage.add Request usage entries preserved on Usage.add Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Bugfix | Medium |
Cancelled guardrail tasks awaited on tripwire Cancelled guardrail tasks awaited on tripwire Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Bugfix | Medium |
Last response_id preserved on conversation resume Last response_id preserved on conversation resume Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Bugfix | Medium |
Approval checker skipped when status resolved Approval checker skipped when status resolved Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Bugfix | Medium |
HandoffInputData items preserved in remove_all_tools HandoffInputData items preserved in remove_all_tools Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Bugfix | Medium |
Tracing shutdown is best-effort on exit Tracing shutdown is best-effort on exit Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Bugfix | Medium |
Empty GitRepo subpaths allowed as repository root Empty GitRepo subpaths allowed as repository root Source: granite4.1:30b@2026-05-24-audit Confidence: low |
— |
| Bugfix | Medium |
GitRepo root subpath aliases preserved GitRepo root subpath aliases preserved Source: granite4.1:30b@2026-05-24-audit Confidence: low |
— |
| Bugfix | Medium |
Sandbox provider error details are included Sandbox provider error details are included Source: granite4.1:30b@2026-05-24-audit Confidence: low |
— |
| Bugfix | Medium |
max_output_tokens exposed on RealtimeSessionModelSettings max_output_tokens exposed on RealtimeSessionModelSettings Source: granite4.1:30b@2026-05-24-audit Confidence: low |
— |
| Bugfix | Medium |
UserError raised for input_type without on_handoff (realtime) UserError raised for input_type without on_handoff (realtime) Source: granite4.1:30b@2026-05-24-audit Confidence: low |
— |
| Bugfix | Medium |
None audio.input/audio.output treated as unset (realtime) None audio.input/audio.output treated as unset (realtime) Source: granite4.1:30b@2026-05-24-audit Confidence: low |
— |
| Bugfix | Medium |
MongoDB metadata timestamps tracked MongoDB metadata timestamps tracked Source: granite4.1:30b@2026-05-24-audit Confidence: low |
— |
| Bugfix | Medium |
Multi-choice chat streams aligned with strict validation Multi-choice chat streams aligned with strict validation Source: granite4.1:30b@2026-05-24-audit Confidence: low |
— |
| Bugfix | Medium |
Chat custom tool calls explicitly rejected Chat custom tool calls explicitly rejected Source: granite4.1:30b@2026-05-24-audit Confidence: low |
— |
| Bugfix | Medium |
Model retry backoff settings validated Model retry backoff settings validated Source: granite4.1:30b@2026-05-24-audit Confidence: low |
— |
Full changelog
What's Changed
Sandboxes
- fix: include sandbox provider error details by @seratch in https://github.com/openai/openai-agents-python/pull/3326
- fix: #3274 limit sandbox archive extraction by @Aphroq in https://github.com/openai/openai-agents-python/pull/3278
- fix: #3273 validate git repo subpaths by @Aphroq in https://github.com/openai/openai-agents-python/pull/3276
- fix: allow empty GitRepo subpaths as repository root by @seratch in https://github.com/openai/openai-agents-python/pull/3299
- fix: preserve GitRepo root subpath aliases by @seratch in https://github.com/openai/openai-agents-python/pull/3303
Tracing
- fix: make tracing shutdown best-effort on process exit by @seratch in https://github.com/openai/openai-agents-python/pull/3343
- fix: keep BatchTraceProcessor worker alive on exporter errors by @adityasingh2400 in https://github.com/openai/openai-agents-python/pull/3216
- fix: guard no-op tracing span IDs by @seratch in https://github.com/openai/openai-agents-python/pull/3296
Sessions
- fix: #3267 preserve required hosted tool IDs in OpenAI conversation sessions by @seratch in https://github.com/openai/openai-agents-python/pull/3341
- fix: #3304 skip corrupt items during pop (sessions) by @Aphroq in https://github.com/openai/openai-agents-python/pull/3305
- fix: #3306 track MongoDB metadata timestamps by @Aphroq in https://github.com/openai/openai-agents-python/pull/3307
- fix: preserve created_at across writes (redis-session) by @adityasingh2400 in https://github.com/openai/openai-agents-python/pull/3202
- fix: skip corrupt docs in MongoDBSession.pop_item by @adityasingh2400 in https://github.com/openai/openai-agents-python/pull/3247
Realtime Agents
- fix: #3333 scope Realtime tool approvals by qualified key by @seratch in https://github.com/openai/openai-agents-python/pull/3340
- fix: #3286 send realtime output for unknown tool calls by @Aphroq in https://github.com/openai/openai-agents-python/pull/3287
- fix: #3284 wake realtime event iterators on close by @Aphroq in https://github.com/openai/openai-agents-python/pull/3285
- fix: preserve existing transcript over stale delta accumulator by @adityasingh2400 in https://github.com/openai/openai-agents-python/pull/3214
- fix: expose max_output_tokens on RealtimeSessionModelSettings by @adityasingh2400 in https://github.com/openai/openai-agents-python/pull/3223
- fix: validate RealtimeAgent fields in
__post_init__by @adityasingh2400 in https://github.com/openai/openai-agents-python/pull/3234 - fix: skip invalid input_text parts in user input conversion (realtime) by @adityasingh2400 in https://github.com/openai/openai-agents-python/pull/3243
- fix: raise UserError for input_type without on_handoff (realtime) by @adityasingh2400 in https://github.com/openai/openai-agents-python/pull/3248
- fix: preserve output_audio content parts in output_item events (realtime) by @adityasingh2400 in https://github.com/openai/openai-agents-python/pull/3230
- fix: treat None audio.input/audio.output as unset (realtime) by @adityasingh2400 in https://github.com/openai/openai-agents-python/pull/3254
- fix: stop AudioInput.to_base64() from mutating caller's buffer (voice agents) by @adityasingh2400 in https://github.com/openai/openai-agents-python/pull/3201
Other core modules
- fix: make chat completions response-feature validation opt-in by @seratch in https://github.com/openai/openai-agents-python/pull/3298
- fix: #3275 reject chat completions server state by @Aphroq in https://github.com/openai/openai-agents-python/pull/3279
- fix: #3282 reject unsupported Chat Completions reusable prompts by @Aphroq in https://github.com/openai/openai-agents-python/pull/3283
- fix: #3313 align multi-choice chat streams with strict validation by @Aphroq in https://github.com/openai/openai-agents-python/pull/3314
- fix: #3308 reject chat custom tool calls explicitly by @Aphroq in https://github.com/openai/openai-agents-python/pull/3309
- fix: #3270 validate model retry backoff settings by @Aphroq in https://github.com/openai/openai-agents-python/pull/3272
- fix: #3319 preserve nested handoff history content by @Aphroq in https://github.com/openai/openai-agents-python/pull/3320
- fix: #3280 streaming guardrail exception cleanup by @Aphroq in https://github.com/openai/openai-agents-python/pull/3281
- fix: #3288 normalize RunState guardrail payloads by @Aphroq in https://github.com/openai/openai-agents-python/pull/3289
- fix: #3315 align generic dict output schemas by @Aphroq in https://github.com/openai/openai-agents-python/pull/3316
- fix: #3317 return fresh empty strict schemas by @Aphroq in https://github.com/openai/openai-agents-python/pull/3318
- fix: #781 replace assertion in handoff() with UserError by @0xSudoSSH in https://github.com/openai/openai-agents-python/pull/3339
- fix: preserve failed status across apply_patch operations by @adityasingh2400 in https://github.com/openai/openai-agents-python/pull/3217
- fix: preserve existing request_usage_entries on Usage.add by @adityasingh2400 in https://github.com/openai/openai-agents-python/pull/3213
- fix: await cancelled output guardrail tasks on tripwire by @Quratulain-bilal in https://github.com/openai/openai-agents-python/pull/3187
- fix: persist output_tokens_details when input details are None by @adityasingh2400 in https://github.com/openai/openai-agents-python/pull/3227
- fix: drop reasoning items orphaned by dropped tool calls by @adityasingh2400 in https://github.com/openai/openai-agents-python/pull/3207
- fix: skip CompactionItem silently in stream queue helper by @adityasingh2400 in https://github.com/openai/openai-agents-python/pull/3224
- fix: await on_handoff callables with async
__call__by @adityasingh2400 in https://github.com/openai/openai-agents-python/pull/3211 - fix: preserve tool guardrail results across handoffs in SingleStepResult by @adityasingh2400 in https://github.com/openai/openai-agents-python/pull/3237
- fix: preserve last known response_id on conversation resume by @adityasingh2400 in https://github.com/openai/openai-agents-python/pull/3245
- fix: isolate MCP strict schema conversion from non-strict fallback by @adityasingh2400 in https://github.com/openai/openai-agents-python/pull/3199
- fix: exclude Computer instances from provider duck-typing by @adityasingh2400 in https://github.com/openai/openai-agents-python/pull/3249
- fix: skip needs_approval_checker when status already resolved by @adityasingh2400 in https://github.com/openai/openai-agents-python/pull/3229
- fix: export MCPToolCancellationError from top-level package by @adityasingh2400 in https://github.com/openai/openai-agents-python/pull/3210
- fix: preserve chained $ref during sibling-key expansion by @adityasingh2400 in https://github.com/openai/openai-agents-python/pull/3205
Extensions
- fix: avoid duplicating content and signed thinking blocks across parallel tool-call splits (any-llm) by @adityasingh2400 in https://github.com/openai/openai-agents-python/pull/3261
- fix: avoid duplicating content and signed thinking blocks across parallel tool-call splits (litellm) by @adityasingh2400 in https://github.com/openai/openai-agents-python/pull/3215
- fix: #3330 handle string tool trimmer allowlists by @Aphroq in https://github.com/openai/openai-agents-python/pull/3331
- fix: preserve HandoffInputData.input_items in remove_all_tools by @adityasingh2400 in https://github.com/openai/openai-agents-python/pull/3253
Documentation & Other Changes
- docs: updates for v0.17.0 by @seratch in https://github.com/openai/openai-agents-python/pull/3188
- docs: update translated document pages by @github-actions[bot] in https://github.com/openai/openai-agents-python/pull/3193
- docs: add dapr to durable orchestration integrations by @yaron2 in https://github.com/openai/openai-agents-python/pull/3292
- docs: update translated document pages by @github-actions[bot] in https://github.com/openai/openai-agents-python/pull/3293
- docs: update MCP examples by @seratch in https://github.com/openai/openai-agents-python/pull/3342
- test: guard Responses transport extra kwargs with official client by @seratch in https://github.com/openai/openai-agents-python/pull/3295
- chore: improve examples auto-run coverage and artifact handling by @seratch in https://github.com/openai/openai-agents-python/pull/3328
- chore: improve automated example coverage and local service handling by @seratch in https://github.com/openai/openai-agents-python/pull/3297
- Release 0.17.1 by @github-actions[bot] in https://github.com/openai/openai-agents-python/pull/3290
New Contributors
- @yaron2 made their first contribution in https://github.com/openai/openai-agents-python/pull/3292
- @0xSudoSSH made their first contribution in https://github.com/openai/openai-agents-python/pull/3339
Full Changelog: https://github.com/openai/openai-agents-python/compare/v0.17.0...v0.17.1
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
About openai-agents-python
A lightweight, powerful framework for multi-agent workflows
Related context
Related tools
Beta — feedback welcome: [email protected]