Release history
harness-sdk releases
A model-driven approach to building AI agents in just a few lines of code.
All releases
55 shown
Tests, S3SessionManager, gemini cache tokens, MetricsClient
A2AAgent, Graph workflows, Interrupts, S3 media, Structured output
Retry strategy, steering, BeforeInvocationEvent, Nova Sonic 2, graph interrupts
MCP ops + Bedrock opt + LiteLLM fix + bugfixes
OpenAI/Gemini clients, Gemini tools, retry hooks, citation support
- Update custom model provider implementations to be asynchronous and implement the new single stream method in strands.models.
- Adjust Agent class usage: remove max_parallel_tools, explicitly set load_tools_from_directory=True if auto‑loading tools is desired.
- Replace any direct imports or calls to event_loop_cycle with appropriate internal handling; avoid invoking it directly.
- OpenAI and LiteLLM model providers no longer accept base64 encoded images; they now handle encoding automatically.
- Model provider APIs are now asynchronous and require only a single stream method implementation, moved to strands.models subpackage.
- All subclassable classes/protocols now include an additional kwargs argument for forward compatibility.
- Core system of typed hooks & callbacks implemented with before/after tool call hooks.
- Async model stream interface added for OpenAI, Mistral, Ollama, Anthropic, Bedrock, LiteLLM, Cohere.
- Graph multi‑agent orchestrator introduced for multi‑agent scenarios.
Full changelog
Breaking Changes
-
Model Providers:
- OpenAI and LiteLLM model providers no longer accept base64 encoded images. These providers will now handle base64 encoding of image bytes automatically. See issue #252.
- Model providers now implement asynchronous functions. Custom model providers must be updated accordingly. See PR#306.
- The API interface for model providers has been simplified to require only a single stream method implementation. See PR#400.
- Model provider API interfaces have been relocated to the strands.models subpackage for improved organization. See PR#409.
-
Other breaking changes:
- All classes or protocols requiring subclassing or implementation now include an additional kwargs argument for forward compatibility. See PR#413.
- The max_parallel_tools parameter has been removed from the Agent class. Tools are now automatically invoked on thread-pools. See PR#391.
- The load_tools_from_directory parameter of the Agent class now defaults to False meaning. Tools are no longer automatically loaded from the tools directory. To restore the old behavior, explicitly set this parameter to True . See PR#419.
- The event_loop_cycle function is no longer available as a top-level import from strands, reflecting its internal nature. Direct event loop invocation is not recommended. See PR#415.
- Automatic removal of dangling tool messages during Agent lifecycle has been discontinued to support future features. See PR#418.
- AgentTool now implements a stream API instead of invoke and requires asynchronous implementation. See PR#345.
What's Changed
- feat: Implement the core system of typed hooks & callbacks by @zastrowm in https://github.com/strands-agents/sdk-python/pull/304
- iterative tool handler process by @pgrayy in https://github.com/strands-agents/sdk-python/pull/340
- remove thread pool wrapper by @pgrayy in https://github.com/strands-agents/sdk-python/pull/339
- chore: updated scope name, enable setting up meter by @poshinchen in https://github.com/strands-agents/sdk-python/pull/331
- async model stream interface by @pgrayy in https://github.com/strands-agents/sdk-python/pull/306
- chore: allow custom agent name by @poshinchen in https://github.com/strands-agents/sdk-python/pull/347
- Extract hook based tests to a separate file by @zastrowm in https://github.com/strands-agents/sdk-python/pull/349
- tools - parallel execution - sleep by @pgrayy in https://github.com/strands-agents/sdk-python/pull/355
- Refactor event loop to use Agent object rather than individual parameters by @zastrowm in https://github.com/strands-agents/sdk-python/pull/359
- models - openai - async client by @pgrayy in https://github.com/strands-agents/sdk-python/pull/353
- models - openai - do not accept b64 images by @pgrayy in https://github.com/strands-agents/sdk-python/pull/368
- iterative tools by @pgrayy in https://github.com/strands-agents/sdk-python/pull/345
- a2a streaming by @jer96 in https://github.com/strands-agents/sdk-python/pull/366
- docs(multiagent): Update A2AServer docstrings by @signoredems in https://github.com/strands-agents/sdk-python/pull/377
- refactor(a2a): move a2a test module by @jer96 in https://github.com/strands-agents/sdk-python/pull/379
- models - mistral - async by @pgrayy in https://github.com/strands-agents/sdk-python/pull/375
- models - ollama - async by @pgrayy in https://github.com/strands-agents/sdk-python/pull/373
- models - anthropic - async by @pgrayy in https://github.com/strands-agents/sdk-python/pull/371
- feat: Add hooks for before/after tool calls + allow hooks to update values by @zastrowm in https://github.com/strands-agents/sdk-python/pull/352
- agent tool - remove invoke by @pgrayy in https://github.com/strands-agents/sdk-python/pull/369
- fix: handle multiple tool calls in Mistral streaming responses by @siddhantwaghjale in https://github.com/strands-agents/sdk-python/pull/384
- fix: add-threading-instrumentation by @poshinchen in https://github.com/strands-agents/sdk-python/pull/394
- Add cohere client by @billytrend-cohere in https://github.com/strands-agents/sdk-python/pull/236
- deps(a2a): upgrade a2a with db support by @jer96 in https://github.com/strands-agents/sdk-python/pull/395
- Writer model provider by @yanomaly in https://github.com/strands-agents/sdk-python/pull/228
- Update integ tests to isolate provider-based tests by @zastrowm in https://github.com/strands-agents/sdk-python/pull/396
- Remove agent.tool_config and update usages to use tool_specs by @zastrowm in https://github.com/strands-agents/sdk-python/pull/388
- multi modal input by @pgrayy in https://github.com/strands-agents/sdk-python/pull/367
- Fix: Update mistral tests to avoid shared agents by @zastrowm in https://github.com/strands-agents/sdk-python/pull/398
- async tools support by @pgrayy in https://github.com/strands-agents/sdk-python/pull/391
- Add basis for conformance-based tests by @zastrowm in https://github.com/strands-agents/sdk-python/pull/403
- fix: Allow tool names that start with numbers by @zastrowm in https://github.com/strands-agents/sdk-python/pull/407
- Add hooks for when new messages are appended to the agent's messages by @zastrowm in https://github.com/strands-agents/sdk-python/pull/385
- Add Model Invocation Hooks by @zastrowm in https://github.com/strands-agents/sdk-python/pull/387
- structured output - multi-modal input by @pgrayy in https://github.com/strands-agents/sdk-python/pull/405
- feat(async): mcp async call tool by @jer96 in https://github.com/strands-agents/sdk-python/pull/406
- [REFACTOR] Unify Model Interface Around Single Entry Point (model.stream) by @mkmeral in https://github.com/strands-agents/sdk-python/pull/400
- Rename StartRequestEvent & EndRequestEvent events by @zastrowm in https://github.com/strands-agents/sdk-python/pull/408
- models - bedrock - threading by @pgrayy in https://github.com/strands-agents/sdk-python/pull/411
- Mark hooks as non-experimental by @zastrowm in https://github.com/strands-agents/sdk-python/pull/410
- models - litellm - async by @pgrayy in https://github.com/strands-agents/sdk-python/pull/414
- models - move abstract class by @pgrayy in https://github.com/strands-agents/sdk-python/pull/409
- feat(multi-agent): introduce Graph multi-agent orchestrator by @awsarron in https://github.com/strands-agents/sdk-python/pull/336
- refactor: Remove event_loop_cycle from top level import by @Unshure in https://github.com/strands-agents/sdk-python/pull/415
- refactor: Remove message processor by @Unshure in https://github.com/strands-agents/sdk-python/pull/417
- refactor: Update interfaces to include kwargs to enable backwards compatibility by @mkmeral in https://github.com/strands-agents/sdk-python/pull/413
- refactor: Remove _remove_dangling_messages from SlidingWindowConversationManager by @Unshure in https://github.com/strands-agents/sdk-python/pull/418
- chore!: set Agent property load_tools_from_directory to default to False by @dbschmigelski in https://github.com/strands-agents/sdk-python/pull/419
New Contributors
- @signoredems made their first contribution in https://github.com/strands-agents/sdk-python/pull/377
- @billytrend-cohere made their first contribution in https://github.com/strands-agents/sdk-python/pull/236
- @yanomaly made their first contribution in https://github.com/strands-agents/sdk-python/pull/228
- @mkmeral made their first contribution in https://github.com/strands-agents/sdk-python/pull/400
Full Changelog: https://github.com/strands-agents/sdk-python/compare/v0.2.1...v0.3.0
Updates feat, refactor, and chore across a mixed release.
Full changelog
Minor Version Bump to v0.2.0
For this minor version bump, we are introducing a number of backwards-incompatible changes. Leading up to the 1.0.0 release of the SDK, we are incrementally releasing backwards-incompatible changes to align with our vision of the 1.0.0 interface. These changes are meant to fix deficiencies that were part of our initial implementation, or to make Strands easier to understand and use. Below are a list of these changes, and steps to migrate your code if they affect you:
- Use region from boto3 session when possible (#299)
- This change updates the region behavior of the BedrockModelProvider to better align with the Boto3 default region behavior instead of us-west-2.
- refactor: remove kwargs spread after agent call (#289)
- Previously, strands used certain parameters that were passed into the agent invocation call. For example,
agent("Hello!", system_prompt="Some New Prompt")would previously override the system prompt defined during the agent’s initialization. Now, this behavior has been removed, so you can alter the agent’s system prompt by overriding the agents system_prompt attribute.- Before:
agent("Hello!", system_prompt="Some New Prompt") - After:
agent.system_prompt = "Some New Prompt"
- Before:
- Previously, strands used certain parameters that were passed into the agent invocation call. For example,
- Remove FunctionTool (#325)
- Previously, FunctionTool was deprecated in favor of DecoratedFunctionTool but it was kept in for backwards compatibility. This removes the FunctionTool class in favor of using the @tool decorator. Check out the strands agents tool documentation for instructions on building a tool.
- Implement native async iterator support (#83)
- refactor tracer (#286)
- The OTEL setup process has changed. Before, Strands would try to automatically setup and OTEL exporter using the STRANDS_OTEL_ENABLE_CONSOLE_EXPORT environment variable. This has been removed, and replaced with a function call. See the docs here for more info: https://strandsagents.com/latest/user-guide/observability-evaluation/traces/#code-configuration
What's Changed
- iterative event loop by @pgrayy in https://github.com/strands-agents/sdk-python/pull/268
- Add additional exception information for common bedrock errors by @zastrowm in https://github.com/strands-agents/sdk-python/pull/290
- iterative structured output by @pgrayy in https://github.com/strands-agents/sdk-python/pull/291
- fix: correcting incorrect docstring in tracer.py - non-existing argument documented by @didier-durand in https://github.com/strands-agents/sdk-python/pull/293
- tools - do not remove $defs by @pgrayy in https://github.com/strands-agents/sdk-python/pull/294
- feat: Add reasoning content for openai model provider by @xiehust in https://github.com/strands-agents/sdk-python/pull/187
- chore: refactor tracer by @poshinchen in https://github.com/strands-agents/sdk-python/pull/286
- iterative agent by @pgrayy in https://github.com/strands-agents/sdk-python/pull/295
- feat(a2a): tools as skills by @jer96 in https://github.com/strands-agents/sdk-python/pull/287
- feat: Add Mistral model support to strands by @siddhantwaghjale in https://github.com/strands-agents/sdk-python/pull/284
- fix: Fix docs warnings by @Unshure in https://github.com/strands-agents/sdk-python/pull/303
- Use region from boto3 session when possible by @zastrowm in https://github.com/strands-agents/sdk-python/pull/299
- chore: update spanKind and attributes for tokens by @poshinchen in https://github.com/strands-agents/sdk-python/pull/296
- fix: Migrate Mistral structured_output to an iterator by @zastrowm in https://github.com/strands-agents/sdk-python/pull/305
- feat: add debug logging for model converse requests by @RingoIngo2 in https://github.com/strands-agents/sdk-python/pull/297
- refactor: remove kwargs spread after agent call by @Unshure in https://github.com/strands-agents/sdk-python/pull/289
- chore: allow custom tracer_provider and chain setup by @poshinchen in https://github.com/strands-agents/sdk-python/pull/316
- feat: Add reproduction test for #320 by @zastrowm in https://github.com/strands-agents/sdk-python/pull/322
- feat: Agent State by @Unshure in https://github.com/strands-agents/sdk-python/pull/292
- stop passing around callback handler by @pgrayy in https://github.com/strands-agents/sdk-python/pull/323
- refactor: Remove unused code by @Unshure in https://github.com/strands-agents/sdk-python/pull/326
- chore: updated semantic conventions on Generative AI spans by @poshinchen in https://github.com/strands-agents/sdk-python/pull/319
- refactor: Consolidate agent state unit tests by @Unshure in https://github.com/strands-agents/sdk-python/pull/334
- Remove FunctionTool as a breaking change by @zastrowm in https://github.com/strands-agents/sdk-python/pull/325
- executor - run tools - yield by @pgrayy in https://github.com/strands-agents/sdk-python/pull/328
New Contributors
- @siddhantwaghjale made their first contribution in https://github.com/strands-agents/sdk-python/pull/284
- @RingoIngo2 made their first contribution in https://github.com/strands-agents/sdk-python/pull/297
Full Changelog: https://github.com/strands-agents/sdk-python/compare/v0.1.9...v0.2.0