Traces and spans are persisted and indexed for search, filtering, and evaluation. Instrumentation is opt-in per deploy via environment configuration; when tracing is disabled, the SDK avoids network I/O and mutation.
Layer 1 — LLM Providers (zero-code wrappers)
Wrap an LLM client to automatically trace every API call. The wrapper returns the same client type as the underlying SDK—no refactors beyond the wrap call.Layer 2 — Agent Frameworks (automatic agent integrations)
Hook into an agent framework to trace the full lifecycle: LLM calls, tool invocations, sub-agent handoffs, guardrails, and related steps—without instrumenting each call yourself. Supported stacks include LangGraph, LangChain, DeepAgents, Google ADK, Claude Agent SDK, CrewAI, OpenAI Agents SDK, and Vercel AI SDK. Availability varies by language; see the integration matrix.Layer 3 — Manual instrumentation (full control)
Define exactly what gets traced, how spans are named, and what metadata you attach.- Python:
@pandaprobe.trace,@pandaprobe.span,pandaprobe.start_trace(), andt.span() - TypeScript:
@trace,@span,withTrace(),withSpan(), andstartTrace()
When to use each layer
- Use LLM Providers when you want LLM call visibility with minimal code changes—especially for direct provider usage without a heavy agent framework.
- Use Agent Frameworks when you run on a supported agent framework and want end-to-end traces (LLM + tools + orchestration) with consistent semantics.
- Use Manual instrumentation when you need custom span names, kinds, metadata, or you are building your own agent runtime and wrappers do not fit.
LLM Providers
Zero-code LLM tracing
Agent Frameworks
Agent framework tracing
Manual
Decorators and context managers

