langfuse). The other 13 external adapters are wired in but record to memory only — they do not send traces to their vendor backends today. The built-in console and memory adapters record locally.
Observability Delivery Matrix
One table decides where your traces actually go today. This mirrors thedelivers field in the SDK (src/observability/types.ts).
console and memory are genuine local recorders: they do exactly what they claim (write to stdout / hold spans in memory), but they do not deliver to an external vendor. The 13 external adapters above record to memory and discard on exit.Supported Observability Tools
TheEnv Variable column shows what the SDK reads. Setting the variable does not enable delivery for any adapter marked ❌ — those traces stay in memory. The CLI marks these with [no delivery - in-memory only].
Quick Start
1
Simple Usage
2
With Configuration
Agent with Tracing
Multi-Agent Tracing
Track interactions between multiple Agents:Agent Performance Monitoring
Track latency, tokens, and costs:Agent Debugging
Debug Agent decisions and tool calls:Langfuse Integration (the delivery recipe)
Langfuse is the one external adapter that ships traces to a real backend.langfuse is an optional peer dependency of praisonai \u2014 install it separately:
isEnabled becomes true only after the adapter successfully creates a Langfuse client from that package. If the package is missing, the adapter falls back to memory and flush() warns that nothing was delivered.
How to know if my traces are actually going anywhere
CheckisEnabled. The 13 external adapters have no transport, so it is always false \u2014 this is not a config bug.
console.warn, and calling flush() on them warns that nothing was delivered:
Why an in-memory adapter for a vendor I’ve never used?
The 13 non-delivering adapters still record spans to an in-memory buffer you can drain viagetAllTraces() or route through a custom flush(). They share the UndeliveredObservabilityAdapter base class (src/observability/adapters/external/undelivered.ts) and act as placeholders for future real delivery. Until then, use langfuse for vendor delivery or console/memory for local development.
Custom Observability for Agents
Build custom monitoring:Agent Audit Logging
Track Agent actions for compliance:Switching Observability Tools
Multi-Agent Attribution
Track agent_id, run_id, and trace_id across multi-agent workflows:Environment Variables
Langfuse is the only env-configured adapter that delivers. The rest are read by the SDK for future compatibility \u2014 setting them today does not enable delivery; traces still stay in memory.Tool Features Matrix
Recording ≠ delivery. Every adapter records Traces/Spans/Events/Errors to memory, but only Langfuse canExport (deliver). The Delivers column is the one that decides whether traces leave the process. Values match OBSERVABILITY_TOOLS in src/observability/types.ts.
Recording is not delivery. A ✅ in Traces/Spans/Events/Errors means the adapter records it to memory. Only a ✅ in the
Delivers column means traces reach the vendor \u2014 see the Delivery Matrix.Related
Observability CLI
CLI commands
Evaluation
Test Agent quality

