Runtimes · AWS Strands

AWS Strands Overview

AWS Strands is an open-source Python agent SDK from AWS. Its AG-UI bridge, ag-ui-strands, turns a Strands Agent into an AG-UI event stream, which is all @threadplane/ag-ui needs in order to bind it to <chat>.

The Threadplane example is a meeting scheduler. It runs a Strands agent behind FastAPI, streams to an ordinary Angular app, and pauses for human approval before it books anything.

See it live

What the integration demonstrates

SurfaceStatusHow
MessagesSupportedStreamed assistant text from a Strands Agent.
Tool callsSupportedcheck_availability executes server-side with no pause.
Shared statePartialSnapshot-only, and opt-in per tool. See below.
InterruptsSupportedbook_meeting parks in tool_context.interrupt(...).
SubagentsNot availableThe bridge emits no ACTIVITY events at all.

Shared state is partial, and the reason matters

The Strands bridge never emits STATE_DELTA. Outbound state exists only where a tool opts in through a per-tool ToolBehavior hook: the example wires state_from_result on check_availability and state_from_args on book_meeting.

Because the adapter applies a STATE_SNAPSHOT as a full replacement, every hook has to return the complete state object. A hook that returns only the keys it changed clobbers its siblings.

Shared state does work on Strands. It is snapshot-only, it is opt-in per tool, and it puts the burden of assembling the whole object on each hook. That is a real constraint to design around, not a rounding error, which is why the measured matrix records it as partial rather than green.

Subagents are not available

The Strands bridge routes delegation through a CUSTOM MultiAgentHandoff event plus STEP_* events, and emits zero ACTIVITY events. The Threadplane subagent projection keys on an activityType of subagent, so there is nothing for it to consume.

This is an upstream gap rather than an adapter defect, and it is shared by every third-party runtime measured so far. Multi-agent routes also crash the stale PyPI wheel, which is one reason the example pins the bridge to a git reference instead.

Model access

Strands' native OpenAI provider is used on a plain OPENAI_API_KEY. No AWS credentials are involved anywhere in this example, despite the runtime's name.

Next steps