Two layers, zero YAML
Observability is not something you declare inagents.yml — there’s no observability: section. It’s controlled entirely by environment variables, and one layer is always on:
| Layer | On by default? | Enabled by |
|---|---|---|
| Structured logging | Yes, always | Nothing — always on |
| Langfuse tracing | No | Setting LANGFUSE_PUBLIC_KEY and LANGFUSE_SECRET_KEY |
Structured logging
Always active, regardless of any environment variable. Every run emits structured log lines at the engine’s key stages: run started, routing decisions, tool calls started/succeeded/failed, run ended. Use the--log-level flag to control verbosity:
Langfuse tracing
Langfuse is an open-source LLM observability platform — traces, prompt/token usage, latency, per-agent breakdowns. Extra self-enables it the moment two environment variables are present:.env
Using a self-hosted Langfuse instance instead of Langfuse Cloud? Add
LANGFUSE_HOST alongside the two keys above — it’s read by the underlying Langfuse SDK the same way.Install the langfuse package
Thelangfuse Python package is an optional dependency — it’s not installed in the base image or the default pip install of the engine. Add it wherever your deployment installs dependencies:
requirements.txt
requirements.txt automatically when running serve (see Quickstart). For local development:
What happens if it’s misconfigured
If the two keys are set but thelangfuse package isn’t installed, or the client fails to initialize for any reason, Extra logs a warning and the engine keeps running without tracing — a broken or missing Langfuse setup never breaks your agents.
This is the opposite failure mode from runtime hooks, which are fail-closed by default for anything security-critical. Observability failing open is deliberate — losing traces is acceptable; losing service to your customers is not.