Key Changes
This minor release does not introduce a breaking change. The minor version bump reflects a significant new OpenAI Responses feature area: Programmatic Tool Calling.
Highlights:
- Added
agents.tool.ProgrammaticToolCallingTool, which lets supported OpenAI Responses models generate JavaScript to coordinate eligible tools. It supports per-toolallowed_callers, structured function-tool outputs, and integration with Runner streaming, guardrails, approvals, sessions, andRunState. See Programmatic Tool Calling for setup and constraints. - Added the public
agents.decoratorsmodule and the shorter@toolalias alongside the existing function and guardrail decorators. Function tools now also support async callable objects. - SDK configuration now consistently accepts either typed settings objects or dictionaries across agents, runs, models, sessions, sandboxes, and voice pipelines, with validation for unknown settings.
- Hardened error and diagnostic logging across models, tools, MCP, Realtime, sessions, sandboxes, and tracing to avoid exposing raw sensitive payloads while preserving useful debugging context.
- Improved AnyLLM, LiteLLM, and Chat Completions compatibility, preserved session history across model retries, and added retries for WebSocket overloads that occur before a response starts.
- Added
VercelCloudBucketMountStrategy. Mounted sessions exclude bucket contents from workspace persistence and intentionally do not support dynamic mount changes or session resume.
What's Changed
- feat: add Programmatic Tool Calling support by @seratch in #3833
- feat: consistently accept typed objects and dictionaries for SDK configuration by @seratch in #3917
- feat: add tool decorator alias by @seratch in #3920
- feat(sandbox): add Vercel cloud mount strategy by @seratch in #3899
- fix: retry pre-response WebSocket overload errors by @seratch in #3978
- fix: harden sensitive runtime logging by @seratch in #3938
- fix: redact Realtime and RunState diagnostics by @seratch in #3948
- fix: stop leaking raw exceptions in model + tool error logs by @dimaosipa in #3910
- fix: preserve callable function tool compatibility by @seratch in #3959
- fix: partition nested handoffs history ownership by @seratch in #3823
- fix: improve AnyLLM and LiteLLM provider compatibility by @seratch in #3930
- fix: improve provider compatibility and preserve session history on retries by @seratch in #3931
- fix: fail closed on invalid callable approval arguments by @seratch in #3867
- fix: classify lazy skill read probes correctly by @seratch in #3893
- fix: reuse the verbose stdout logging handler by @seratch in #3957
- fix: recognize typed easy input messages in Chat Completions by @seratch in #3877
- fix: include device nodes when parsing ls output by @TheSaiEaranti in #3951
- fix: preserve *args/**kwargs docstring descriptions in tool schemas by @TheSaiEaranti in #3956
- fix: compare inspect sentinels by identity in function_schema by @TheSaiEaranti in #3961
- fix: parse ls output with SELinux security-context marker by @SHAI-Cheravgoyal in #3904
- fix: preserve dot-prefixed skip paths in Modal tar workspace excludes by @SHAI-Cheravgoyal in #3905
- fix: cleanup cancelled servers during MCP connect failure by @hsusul in #3919
- fix: await async callable-object dynamic instructions by @hsusul in #3942
- fix: await async callable-object callbacks by @seratch in #3944
- fix: Blaxel's shell-quote interpolated FUSE mount options by @ioleksiuk in #3873
- fix: escape multiline DOT names in visualization by @hsusul in #3898
- fix: redact raw message payload from realtime agents' conversion-failure log by @ioleksiuk in #3907
- fix: encode streamed float32 audio as PCM16 in voice handling by @FayezBast in #3916
- fix: redact MCP tool-call and formatter errors from logs by @dimaosipa in #3918
- fix: parse Google docstrings whose Args: follows a section body by @oldrobotdev in #3862
- fix: pin and verify rclone sandbox installs by @seratch in #3911
- fix: reject empty additionalProperties mappings in strict_schema by @hsusul in #3927
- fix: send logprobs=True when top_logprobs is set when using LiteLLM by @dimaosipa in #3929
- fix: surface content-filter refusals when buffering streamed tool calls in chat completions by @gunjanjaswal in #3897
- fix: reject unsupported streamed STT audio dtypes by @seratch in #3950
- fix: use last_agent property in pretty_print_run_result_streaming to avoid None crash by @AAliKKhan in #3965
- fix: use last_agent property in RunResultStreaming._create_error_details by @AAliKKhan in #3967
Documentation & Other Changes
- docs: document compact tracing hierarchy by @william-xue in #3839
- docs: clarify sandbox support on Windows by @seratch in #3866
- docs: remove unnecessary RunContextWrapper wrapping in tool enabling example by @AAliKKhan in #3869
- docs: remove unused Runner import in tracing docs by @AAliKKhan in #3881
- docs: fix runnable Python examples by @seratch in #3885
- docs: fix missing imports in dynamic instructions example by @Syed-Umer-Ali in #3895
- docs: fix conversation example imports by @william-xue in #3903
- docs: fix API cross-reference targets by @william-xue in #3913
- docs: improve sandbox example runtime validation by @seratch in #3880
- docs: fix streamed audio API rendering by @william-xue in #3940
- chore: add packaged live integration and provider regression coverage by @seratch in #3936
- chore: update e2b versions by @matthewlouisbrockman in #3871
- chore: update FastAPI test dependency by @seratch in #3974
- chore: isolate unit tests from ambient proxy settings by @seratch in #3945
- Release 0.19.0 by @github-actions[bot] in #3874
New Contributors
- @oldrobotdev made their first contribution in #3862
- @AAliKKhan made their first contribution in #3869
- @matthewlouisbrockman made their first contribution in #3871
- @Syed-Umer-Ali made their first contribution in #3895
- @hsusul made their first contribution in #3898
- @SHAI-Cheravgoyal made their first contribution in #3904
- @dimaosipa made their first contribution in #3910
- @FayezBast made their first contribution in #3916
- @gunjanjaswal made their first contribution in #3897
- @TheSaiEaranti made their first contribution in #3951
Full Changelog: v0.18.3...v0.19.0