agent.id and a readable agent.name. Keep agent.id stable
across deploys, environments, and display-name changes; use agent.name as the
human-readable label.
If you only provide agent.name, Catalyst can still show observed agents, but
renames and duplicate names are harder to group. Prefer both fields whenever you
control the agent wrapper.
Agent Span Wrapper
UseagentSpan() or agent_span() around the product-level agent run. Child
model and tool spans created inside the wrapper inherit the active agent
identity in supported Catalyst tracing integrations.
Choosing IDs
Use IDs that are stable, readable, and unique within a project:| Good | Avoid |
|---|---|
support-triage-agent | SupportAgent v2 |
refund-review-agent | random UUID per process |
billing-agent-prod | user-specific or request-specific values |
agent.role is optional. Use it when one workflow has multiple agents with
clear responsibilities, such as triage, refunds, or billing.
Conversation Grouping
sessionId / session_id is an optional field that emits session.id on the
agent span. Use it to group agent runs that belong to the same conversation,
chat thread, or multi-turn request. Pass an ID that is stable for one
conversation and is already available in the calling code — do not treat it as
process-wide setup.
User Grouping
userId / user_id is an optional field that emits user.id on the agent
span. The trace dashboard lets you filter to all traces for that
user.
What Catalyst Uses
Catalyst readsagent.id first and falls back to agent.name when no stable ID
is present. session.id is read separately for conversation grouping, and
user.id for filtering traces by user. The raw attributes remain on the span,
and ingestion promotes them into dashboard fields used by the Agents page.