harness-python/v0.3.3
Auto-drafted from commits in harness-python/v0.3.2..harness-python/v0.3.3, grouped by conventional-commit type. Edit on the release page after publish if you want a polished writeup; the canonical release notes live on the website.
🚀 Features
- feat(sdk): add structured output attempt limits (#4926) (9cca7b2)
- feat(stop): use agent.cancel() to stop the event loop (TypeScript) (#4834) (0334ab3)
- feat(vended-tools): add graph tool in TypeScript (#5467) (36e6a44)
- feat(vended-tools): port read tool to TypeScript (#5614) (aa908fd)
- feat(vended-tools): port write tool to TypeScript (#5583) (9a9e2f5)
- feat(vended-tools): port edit tool to TypeScript, deprecate fileEditor (#5582) (2359bbc)
- feat(models): add Model.info with capabilities and limits (TypeScript) (#5313) (eed3a17)
- feat(vended-tools): add read tool in Python (#5548) (0eb5ecd)
- feat(python): accept DecisionModel as HumanInTheLoop risk classifier (#5588) (40b4eab)
- feat(vended_tools): add write tool (py) (#5549) (d1fb512)
- feat(python): add DecisionModel primitive and LLMDecisionModel (#5125) (85fe98a)
- feat(vended_tools): add edit tool, deprecate file_editor (#5317) (3f55488)
- feat(storage): add S3 Vectors search strategy for S3Storage (#3967) (5a478da)
- feat(decisions): add System One providers (#5240) (aa2da86)
- feat(vended-tools): add graph tool in Python (#5131) (beff502)
- feat(tools)!: persist subagent and swarm interrupts on the parent in TypeScript (#5330) (de89fbf)
- feat(catalog): add magic hour (#5488) (20daa13)
- feat(tools): add Python tool registry removal (#5444) (f3ee040)
- feat(multiagent): support request-wide limits on Graph and Swarm (#5306) (d283f83)
- feat(ts): accept DecisionModel as HumanInTheLoop risk classifier (#5267) (2bac28b)
- feat(agent): enforce invoke limits and usage accounting across the whole agent tree (Python port of #4667) (#5288) (28678be)
🐛 Fixes
- fix(python): run ContextOffloader result rewrite after user AfterToolCall hooks (#5601) (078f2f9)
- fix(models): add GPT-6.1 Terra context window (py + ts + cli) (#5563) (35a7b16)
- fix(python): summarizing conversation manager falls back to truncation instead of failing every turn (#5603) (e22fd05)
- fix(python): head+tail ContextOffloader preview; never drop a matched line in search (#5602) (4a14d72)
- fix(gemini): map BLOCKLIST, PROHIBITED_CONTENT and SPII to content_filtered (#5517) (639a4ef)
- fix(models): recognize Bedrock OpenAI Daybreak model ids (py + ts) (#5538) (be09f9b)
- fix(hitl): gate trusted tools on enableTrust and let live answers win (#5641) (dde8159)
- fix(multiagent): clear pending interrupts when a graph or swarm invocation fails (#5633) (3ee280f)
- fix(ts): ignore pending tool execution when interrupt state is not activated (#5628) (a4865cd)
- fix(context): never stash or serve offload previews as originals (py + ts) (#5626) (baf15f5)
- fix(agent): preserve structured output before history offloading (#5429) (fa313cc)
- fix(models): handle Mistral list content as reasoning and text blocks (py) (#5487) (de30e34)
- fix(multiagent): resume a graph node interrupted on revisit after session restore (#5336) (b5bac05)
- fix(harness): match Bedrock GPT effort levels per model and extend the gates to Daybreak ids (py + ts + cli) (#5485) (1cecf88)
- fix(writer): map a content_filter finish reason to content_filtered (#5338) (15ca21f)
- fix(harness-py): leave an already-installed tracer provider and its propagators alone (#5481) (f584b90)
- fix(site): keep hero stable when switching language (#5430) (cd02d65)
- fix(voice): explain how to install PortAudio when PyAudio cannot load it (#5494) (5457759)
- fix(storage): strip trailing slash from S3Storage prefix in Python (#5551) (277b943)
- fix(site): bound maximum pages the broken-links checker can concurrently check (#5542) (13deff2)
- fix(ci): stop skips and shared TS names skewing flaky-test metrics (#5529) (37ea222)
- fix(sandbox): run executeCode tests with node instead of python (#5541) (bbbaaf0)
- fix(site): align blog reading progress with the hidden mobile header (#5436) (487d965)
- fix(site): make the harness quickstart the main entry point and use "quickstart" consistently (#5437) (8401125)
- fix: tighten URL scheme filtering in web fetch and diagram comment stripping (#5507) (10b9393)
- fix(test-infra): grant the integ role the global Claude Haiku 4.5 profile (#5508) (3f00dbd)
- fix(ci): make integ test metrics and dashboards trustworthy (#5503) (7b56ef8)
- fix(test-infra): grant the integ role the new smoke-test Bedrock models (#5506) (f509da5)
- fix(harness): make Gemini effort levels per model; Argon and 3.8 Flash reject minimal (py + ts + cli) (#5456) (beae278)
- fix(harness): report the real working directory on Windows (#5473) (e61beaa)
- fix(background-tasks): report aborted tools as cancelled (#5433) (954aea1)
- fix(ts): let providers enforce structured output when a model cannot be forced (#5326) (5a54052)
- fix(cli): complete the context window mirror against SDK 1.19.0 (#5454) (8916c9f)
- fix(models): add Bedrock OpenAI GPT 5.4/5.5/5.6/6/6.1 context windows (py + ts) (#5453) (414ed84)
- fix(models): add Codestral 25.08 context window and integ smoke test (py) (#5397) (faeb4f2)
- fix(models): add Bedrock Grok 4.x context windows and integ smoke tests (py + ts) (#5398) (a016b6e)
- fix(models): add Mistral Small 4 context window and integ smoke test (py) (#5395) (5f2958c)
- fix(models): add Bedrock Gemma 4 context windows and integ smoke tests (py + ts) (#5415) (e720936)
- fix(models): add Ministral 3 context windows and integ smoke test (py) (#5394) (6af1665)
- fix(models): add OpenAI chat-latest context window and integ smoke tests (py + ts) (#5411) (349fdde)
- fix(models): add Bedrock Mistral context windows and integ smoke tests (py + ts) (#5400) (8f61b0b)
- fix(models): add Gemini 4 Argon context window and integ smoke tests (py + ts) (#5388) (6fa04ab)
- fix(models): add Mistral Large 4 context window and integ smoke test (py) (#5396) (7f0e8c7)
- fix: reject blank prompts before they enter agent history (#5434) (096594b)
⚡ Performance
📚 Documentation
- docs(cedar): warn that onError proceed fails open (#5643) (409cb54)
- docs(bidi): enable audio processing in the quickstart and audio I/O examples (#5637) (a56fa9e)
- docs: stop referencing strands-agents-tools (#5322) (c40d351)
- docs(site): declare AI content usage preferences (#5581) (fd88b13)
- docs(team): align tool deprecation guidance with strands-py warn rules (#5579) (cb4b242)
- docs(blog): add red teaming launch post for Strands Evals (#5543) (1f27884)
- docs(catalog): add Sprites integration (#5048) (ad41916)
- docs(catalog): add strands-pixeltable memory store (#5214) (b498114)
- docs(catalog): add Asqav observability integration (#5501) (26a84cd)
- docs(catalog): add BotsRated integration (#5479) (d7e349b)
- docs(catalog): add EmpirioLabs AI model provider (#5493) (3a083e1)
- docs(catalog): add membase-strands memory store (#5514) (50b7270)
- docs(catalog): add mnemoverse to the integrations catalog (#5516) (c2d3948)
- docs(evals): document CrescendoStrategy stop_on_tool_call (#5440) (00b9fc0)
- docs(changelog): sync release notes (#5441) (5263ada)
✅ Tests
- test(litellm): pin region and rerun the cache test (#5624) (df20053)
- test(models): one parametrized model smoke table per SDK for the 2026-10 catalog batch (#5452) (fe11c98)
- test(harness-ts): give the web_fetch end-to-end test a 30 s timeout (#5469) (e381994)
👷 CI
- ci: raise the TypeScript integ metrics test-name cap to 2000 (#5646) (aba7737)
- ci(docs): pick Node for previews independently of the PR branch (#5638) (094cfa9)
- ci(docs): read Node from .node-version and raise it to 22.23.4 (#5616) (daf830e)
- ci(typescript): bump @modelcontextprotocol/sdk from 1.30.0 to 1.32.0 (#5282) (74f9708)
- ci(typescript): bump fast-uri from 3.1.8 to 3.1.9 (#5510) (85bc093)
- ci(docs): bump the npm_and_yarn group across 1 directory with 2 updates (#5449) (69ba5a4)
- ci(docs): bump satori from 0.63.1 to 0.63.2 in /site (#5527) (f0be304)
- ci(docs): bump @astrojs/markdown-remark from 7.3.3 to 7.3.4 in /site (#5525) (c397ce6)
- ci(docs): bump @astrojs/markdown-satteri from 0.4.4 to 0.4.5 in /site (#5521) (ba201a9)
- ci(typescript): bump zod from 4.6.5 to 4.6.7 (#5509) (5d88e91)
- ci(python): update openai requirement from <3.0.0,>=1.68.0 to >=1.68.0,<4.0.0 in /strands-py (#5522) (cf598c8)
- ci(docs): bump vite from 8.3.4 to 8.3.5 in /site (#5520) (fc84974)
- ci: paginate issue events and comments in auto-close (#5607) (a01774d)
- ci: bump astral-sh/setup-uv from 10.3.0 to 10.3.2 (#5518) (9120df2)
- ci: bump actions/setup-python from 7.0.0 to 7.1.0 (#5519) (f0cffd9)
- ci(deps): bump the npm_and_yarn group across 6 directories with 8 updates (#5512) (a9e35e3)
- ci(docs): bump @astrojs/starlight from 0.42.6 to 0.42.7 in /site (#5571) (6f1f29d)
- ci(typescript): bump @aws-sdk/client-bedrock-runtime from 3.1152.0 to 3.1154.0 in the production-minor group across 1 directory (#5572) (794a2cc)
- ci(python): bump cedar-policy-mcp-schema-generator from 0.6.1 to 0.7.0 in /strands-py (#5524) (1fa711b)
- ci(labeler): cover harness, CLI, and new SDK subsystems in issue classifier (#5592) (92bf072)
- ci: close superseded release announcements (#5471) (c98fc29)
- ci(docs): bump @astrojs/markdown-satteri from 0.3.8 to 0.4.4 in /site (#4649) (b2a4b39)
- ci(docs): bump typedoc-plugin-markdown from 4.14.0 to 4.14.1 in /site (#5462) (c4683e5)
- ci(docs): bump satori from 0.62.0 to 0.63.1 in /site (#5461) (487e630)
- ci(docs): enforce TypeScript formatting (#5468) (448660d)
- ci(docs): bump astro from 7.4.0 to 7.4.1 in /site (#5460) (528346e)
- ci: run harness tests against the local SDK on SDK changes (#5333) (c34a1d1)