Skip to main content
The observability module provides a hidden-by-default browser dashboard that exposes real-time and historical insight into your agent’s behavior. Enable it with a single flag and open /obs/ in your browser.

Quick Start

That’s it. The dashboard mounts on the same server as your agent API — no extra ports, no extra processes.

What You Get

The dashboard provides seven views accessible from the sidebar:

Configuration

Use ObservabilityConfig for fine-grained control:

Options

Composing with Tracing

Observability composes with the existing Tracing system. The ObservabilityExporter is automatically added to your exporter chain:
This also works with debug=True — all three exporters coexist.

API Endpoints

When enabled, these endpoints are available under /obs/api/: The dashboard UI at /obs/ consumes these endpoints — you can also use them directly for custom integrations.

Themes

The dashboard ships with two themes:
  • Dark (default): Black background with orange accents — terminal aesthetic
  • Light: White background with dark accents
Toggle between them using the sun/moon button in the dashboard header, or set the default via config:
Theme preference is saved in localStorage and persists across sessions.

FAQ

Don’t pass observability=True (or pass observability=False). The dashboard routes are never mounted and no exporter is created. Zero overhead when disabled.
Use the /obs/api/events/export/{session_id} endpoint to download a session as a JSONL file. You can also access the JSONL files directly in your trace_dir.
Minimal. The ObservabilityExporter appends to a ring buffer and fans out to SSE clients via non-blocking queue puts. Event serialization happens in the existing tracing pipeline. The dashboard is served as static HTML with no server-side rendering.
The dashboard requires agent.serve(enable_server=True) because it mounts on the FastAPI app. For programmatic access to metrics and events, you can use the ObservabilityExporter directly in your code.