Skip to content

Telemetry

Goose is a Rust CLI built on opentelemetry-rust, so it reads the standard OTEL_* environment directly and needs no plugin. It accepts no inbound trace context, so its spans form their own trace, correlated to the run by resource attribute.

Everything here is gated on the deployment exporting telemetry. See Observability for the OTEL_EXPORTER_OTLP_ENDPOINT master switch.

SignalExportedNotes
TracesYesLLM calls, tool executions, and agent decisions.
MetricsYes
LogsYes

A run sets these on the container before the session:

VariableValue
OTEL_EXPORTER_OTLP_ENDPOINTthe collector, as a base URL
OTEL_EXPORTER_OTLP_PROTOCOLhttp/protobuf
OTEL_TRACES_EXPORTERotlp
OTEL_METRICS_EXPORTERotlp
OTEL_LOGS_EXPORTERotlp
OTEL_SERVICE_NAMEtcab-harness-goose
OTEL_RESOURCE_ATTRIBUTESthe run’s tcab.* attributes

Setting the endpoint is what turns export on; Goose has no separate enable switch. OTEL_SDK_DISABLED=true is the kill switch Goose documents.

Goose also reads otel_exporter_otlp_endpoint and otel_exporter_otlp_timeout from ~/.config/goose/config.yaml. A run uses the environment instead, which overrides the file and needs no file written into the container.

Goose starts a fresh trace for its spans. Every exporting harness carries the tcab.run_id, tcab.harness, tcab.test_case, tcab.variant, and tcab.model resource attributes, so the Goose trace for a run is found by querying those attributes or by correlating timestamps against the run’s own spans.