Skip to main content

Overview

CrewForm’s task runner supports opt-in observability via OpenTelemetry and Langfuse. When enabled, every task execution, LLM call, tool invocation, and team run is traced with span-level detail — giving you full visibility into multi-agent workflows.
Tracing is entirely opt-in. If no observability env vars are set, there is zero overhead — no SDK is loaded, no spans are emitted.

Supported Backends

Quick Start

Set these environment variables on your task runner:
That’s it. Restart the task runner and traces will appear in your Langfuse dashboard.

Generic OTLP (Datadog, Jaeger, etc.)

What Gets Traced

Single Task Execution

Team Runs

Attributes on Every Trace

LLM Generation Attributes (Langfuse)

In Langfuse, LLM calls appear as Generations with:

Environment Variables Reference

Docker / Self-Hosted Setup

Add the env vars to your task runner service in docker-compose.yml:
For self-hosted Langfuse, you can run it alongside CrewForm in the same Docker Compose stack. See langfuse.com/docs/deployment/self-host for setup instructions.

Troubleshooting

Traces Not Appearing

  1. Verify env vars are set on the task runner process (not the web app)
  2. Check task runner logs for [Tracing] Langfuse client initialized or [Tracing] OTLP exporter initialized
  3. If you see [Tracing] No observability env vars set, the vars aren’t reaching the process

High Latency

Tracing adds minimal overhead (typically less than 1ms per span). If you notice latency:
  • Ensure your OTLP collector is network-local to the task runner
  • Langfuse batches traces automatically — no additional config needed