Advanced Setup
Node-by-node monitoring for specialized use cases. This guide covers the advanced approach for granular control over individual operations.
Recommended: Use Manual Setup with the @tracing decorator for most use cases. This advanced approach is only for very specific scenarios.
When to use advanced setup
Use this only when:
- You need to monitor individual LLM calls separately from agent workflows
 - You’re building custom monitoring tools that require granular operation data
 - You have complex agent architectures that don’t fit the standard pattern
 - You need backward compatibility with existing implementations
 
For most use cases, the simplified agent-level monitoring is recommended.
What you’re doing
You’re manually tracking each operation in your agent workflow, including individual LLM calls and tool executions.
Why this is complex: You must manually track every operation, manage execution IDs, and handle session lifecycle. The @tracing decorator does all this automatically.
Migration to simplified approach
Before (Advanced):
# Complex manual tracking
tracing_response = tracker.start_tracing(agent_name="agent")
execution_id = tracing_response.get("executionId")
try:
    result = await my_function()
    tracker.track_node(input=input_data, output=result, ...)
finally:
    tracker.end_tracing(execution_id=execution_id, agent_name="agent")After (Simplified):
# Simple decorator
@tracing(agent="agent")
async def my_agent_function():
    result = await my_function()
    return resultBenefits:
- 90% less code
 - Automatic operation capture
 - No manual session management
 
Next steps
Set up evaluation: Add Quality Assessment so your engineer can detect quality issues.
Enable fixes: Connect GitHub Integration so your engineer can create pull requests with improvements.