Enabling tracing
OpenTelemetry support is enabled by default via theotel feature in both
aura and aura-web-server. Configure your OTLP endpoint using standard
environment variables (for example OTEL_EXPORTER_OTLP_ENDPOINT) to export
traces — no endpoint set means no OTel layer is installed.
AURA emits spans using the OpenInference
semantic convention (llm.*, tool.*, input.*, output.*) rather than the
gen_ai.* conventions. Any gen_ai.* attributes from underlying provider
libraries (Rig.rs) are automatically translated to OpenInference equivalents
at export time. This makes AURA traces natively compatible with
Phoenix and other OpenInference-aware
observability tools.
Trace structure
Every request produces two traces:- HTTP trace — covers the request/response lifecycle
- Agent trace — covers the LLM/tool execution
agent.stream with parent: None so Phoenix
sees it as an independent trace root with all LLM I/O attributes.
HTTP trace (both modes)
Single-agent mode
Orchestration mode
Span attributes
Agent root (agent.stream)
user.id, session.id, metadata, input.value, output.value,
llm.token_count.prompt, llm.token_count.completion, llm.token_count.total
Orchestration spans
Token usage (
llm.token_count.*) is recorded on all orchestration phase
spans (planning, worker).
OpenInference span kinds
chat, agent.prompt, and agent.chat are non-streaming entry points; the trace diagrams above cover the streaming path, which is the one AURA’s HTTP/CLI backends use.
Span parenting
agent.streamis created withparent: Noneto break the link from the HTTP handler trace, making it an independent trace root in Phoenix.- The producer task is instrumented with
agent.streamso Rig’sagent.turnbecomes a direct child. - In orchestration mode, the orchestrator instruments its spawned task
with the
agent.streamspan so all orchestration child spans nest under the trace root. - Tool execution propagates the current span into its background task so
mcp.tool_callnests under Rig’sexecute_tool.
Content recording
WhenOTEL_RECORD_CONTENT=true, prompt/completion text and tool
arguments/results are recorded as span attributes, truncated to
OTEL_CONTENT_MAX_LENGTH (default 1000 bytes, rounded to a UTF-8 boundary).
Known limitations
- Tool error propagation: Tool errors are only recorded on the
mcp.tool_callchild span, not on Rig’sexecute_toolparent. This is intentional —mcp.tool_callis the canonical TOOL span for Phoenix.

