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.
The hosted example runs at examples.threadplane.ai/runtimes/aws-strands. The source is cockpit/runtimes/aws-strands.
What the integration demonstrates
| Surface | Status | How |
|---|---|---|
| Messages | Supported | Streamed assistant text from a Strands Agent. |
| Tool calls | Supported | check_availability executes server-side with no pause. |
| Shared state | Partial | Snapshot-only, and opt-in per tool. See below. |
| Interrupts | Supported | book_meeting parks in tool_context.interrupt(...). |
| Subagents | Not available | The 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
- Quickstart — run the example locally.
- How It Connects — the measured wire conventions.
- Choosing an adapter — the full runtime matrix and its cause analysis.