> ## Documentation Index
> Fetch the complete documentation index at: https://docs.zespan.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Strands Agents

> Trace AWS Strands Agents via its built-in OpenTelemetry support, no Zespan SDK required.

<Note>
  Available via: **native OpenTelemetry support** (Python). This is not a Zespan SDK wrapper — see [Send traces from any OTel-instrumented app](/sdk/otel-integration#send-traces-from-any-otel-instrumented-app-no-zespan-sdk) for how the underlying endpoint works.
</Note>

[Strands Agents](https://strandsagents.com) (AWS's agent SDK) emits OpenTelemetry spans natively — no separate instrumentation package needed. Its `StrandsTelemetry` helper reads standard `OTEL_*` environment variables, so pointing it at Zespan is pure configuration.

## Installation

```bash theme={"theme":{"light":"github-light","dark":"one-dark-pro"}}
pip install strands-agents opentelemetry-exporter-otlp-proto-http
```

## Setup

<CodeGroup>
  ```python Environment variables theme={"theme":{"light":"github-light","dark":"one-dark-pro"}}
  import os

  os.environ["OTEL_EXPORTER_OTLP_ENDPOINT"] = "https://api.zespan.com/v1/traces"
  os.environ["OTEL_EXPORTER_OTLP_HEADERS"] = "x-api-key=zsp_..."
  os.environ["OTEL_SERVICE_NAME"] = "my-agent-service"
  ```

  ```python Explicit setup theme={"theme":{"light":"github-light","dark":"one-dark-pro"}}
  from strands.telemetry import StrandsTelemetry

  strands_telemetry = StrandsTelemetry()
  strands_telemetry.setup_otlp_exporter(
      endpoint="https://api.zespan.com/v1/traces",
      headers={"x-api-key": "zsp_..."},
  )
  ```
</CodeGroup>

Either approach works — the environment-variable form is the simplest if you're not overriding anything else in your OTel setup; call `StrandsTelemetry().setup_otlp_exporter()` explicitly if you need to pass the endpoint/headers directly instead of through the environment.

## Example

```python theme={"theme":{"light":"github-light","dark":"one-dark-pro"}}
from strands import Agent

agent = Agent()
result = agent("What's the weather like today?")
# Traced automatically once StrandsTelemetry is configured
```

## What gets captured

Strands Agents follows the [OpenTelemetry GenAI semantic conventions](/sdk/otel-integration#attributes-zespan-reads) directly, so tool calls, model calls, and multi-step agent loops map onto Zespan's trace tree with no extra mapping needed.
