GuidesFramework quickstartsStrands Agents

Strands Agents

Strands Agents (the strands-agents Python package) is AWS’s open-source, model-driven agent SDK — and the default framework for agents hosted on Amazon Bedrock AgentCore. Strands has built-in OpenTelemetry tracing, so Neens ingests its traces through standard OTLP with zero Neens-specific code.

At a glance

LanguagePython
InstrumentationBuilt-in (strands.telemetry.StrandsTelemetry) + openinference-instrumentation-strands-agents span processor (community-maintained by Arize)
EndpointPOST /v1/traces (OTLP/HTTP)
AuthAuthorization: Bearer nk_live_… agent key

Instrument your agent

Install the instrumentation

The otel extra pulls in the OTLP/HTTP exporter Strands uses. The OpenInference processor rewrites Strands’ spans into the OpenInference vocabulary so prompts, responses and tool calls land in the same shape as every other quickstart.

pip install 'strands-agents[otel]' openinference-instrumentation-strands-agents

Point the exporter at Neens

from openinference.instrumentation.strands_agents import StrandsAgentsToOpenInferenceProcessor
from strands.telemetry import StrandsTelemetry
 
telemetry = StrandsTelemetry()
# Keyword arguments are passed straight to OpenTelemetry's OTLPSpanExporter.
telemetry.setup_otlp_exporter(
    endpoint="https://<your-neens-host>/v1/traces",
    headers={"Authorization": "Bearer nk_live_your_key_here"},
)
telemetry.tracer_provider.add_span_processor(StrandsAgentsToOpenInferenceProcessor())

Run your agent

Run your agent as usual. Pass a conversation id through trace_attributes so every turn of one conversation lands in the same Neens session:

from strands import Agent, tool
 
@tool
def get_weather(city: str) -> str:
    """Get the current weather for a city."""
    return f"It is sunny in {city}."
 
agent = Agent(
    tools=[get_weather],
    trace_attributes={"session.id": "conv-42", "user.id": "user-123"},
)
agent("What's the weather in Seattle?")

Spans export to Neens in the background.

What Neens captures

Strands emits a span for each agent invocation, each event-loop cycle, every model call (model, token counts, prompt/response messages) and every tool call — so you see the full agent trajectory, including how many reasoning loops a request took. The session.id you set in trace_attributes groups the turns into one conversation (see Traces & sessions).

The OpenInference processor is optional. Without it, Strands emits the standard OpenTelemetry GenAI semantic conventions (gen_ai.*), which Neens also reads — it probes OTel-GenAI and OpenInference attributes per field. We recommend the processor for consistency with the other Neens framework quickstarts.

Deploying to Amazon Bedrock AgentCore Runtime? The runtime installs its own tracer by default, so there is one extra step — see AWS Bedrock AgentCore.

Verify

Open Traces in Neens; your Strands runs appear within a few seconds. Continue to Traces & sessions.