Strands Agents

Strands Agents is an open-source SDK from AWS for building AI agents. It provides a model-driven approach to agent development with built-in support for tools, sessions, and multi-agent orchestration. Respan gives you full observability over every agent run, reasoning loop, tool invocation, and LLM call — and gateway routing through the OpenAI-compatible Respan endpoint.

Create an account at platform.respan.ai and grab an API key. For gateway, also add credits or a provider key.

Run npx @respan/cli setup to set up with your coding agent.

Setup

1

Install packages

$pip install respan-ai openinference-instrumentation-strands-agents strands-agents
2

Set environment variables

$export AWS_ACCESS_KEY_ID="YOUR_AWS_ACCESS_KEY_ID"
$export AWS_SECRET_ACCESS_KEY="YOUR_AWS_SECRET_ACCESS_KEY"
$export AWS_REGION="us-east-1"
$export RESPAN_API_KEY="YOUR_RESPAN_API_KEY"

AWS credentials are used for the underlying Bedrock model. RESPAN_API_KEY is used to export traces to Respan.

3

Initialize and run

1from strands import Agent
2from strands.tools import tool
3from respan import Respan
4from openinference.instrumentation.strands_agents import StrandsAgentsInstrumentor
5
6respan = Respan(instrumentations=[StrandsAgentsInstrumentor()])
7
8@tool
9def get_weather(location: str) -> str:
10 """Get the current weather for a location."""
11 return f"The weather in {location} is sunny, 72F."
12
13agent = Agent(tools=[get_weather])
14response = agent("What is the weather in Seattle?")
15print(response)
16respan.flush()
4

View your trace

Open the Traces page to see your Strands Agents workflow with reasoning loops, tool invocations, and LLM calls.

Configuration

ParameterTypeDefaultDescription
api_keystr | NoneNoneFalls back to RESPAN_API_KEY env var.
base_urlstr | NoneNoneFalls back to RESPAN_BASE_URL env var.
instrumentationslist[]Plugin instrumentations to activate (e.g. StrandsAgentsInstrumentor()).
customer_identifierstr | NoneNoneDefault customer identifier for all spans.
metadatadict | NoneNoneDefault metadata attached to all spans.
environmentstr | NoneNoneEnvironment tag (e.g. "production").

Attributes

In Respan()

Set defaults at initialization — these apply to all spans.

1from respan import Respan
2from openinference.instrumentation.strands_agents import StrandsAgentsInstrumentor
3
4respan = Respan(
5 instrumentations=[StrandsAgentsInstrumentor()],
6 customer_identifier="user_123",
7 metadata={"service": "strands-api", "version": "1.0.0"},
8)

With propagate_attributes

Override per-request using a context scope.

1from respan import Respan, propagate_attributes
2from openinference.instrumentation.strands_agents import StrandsAgentsInstrumentor
3
4respan = Respan(instrumentations=[StrandsAgentsInstrumentor()])
5
6def handle_request(user_id: str, message: str):
7 with propagate_attributes(
8 customer_identifier=user_id,
9 thread_identifier="conv_abc_123",
10 metadata={"plan": "pro"},
11 ):
12 print(agent(message))
AttributeTypeDescription
customer_identifierstrIdentifies the end user in Respan analytics.
thread_identifierstrGroups related messages into a conversation.
metadatadictCustom key-value pairs. Merged with default metadata.