Skip to content

Telemetry

Pi runs export no telemetry. A run configures nothing for Pi, and its sessions appear in the run’s trace only as the gap the harness invocation span covers.

Pi has no native OpenTelemetry support. Several third-party extensions exist, but none is currently both compatible with Pi and safe for a run to install.

Pi’s npm package was renamed from @mariozechner/pi-coding-agent to @earendil-works/pi-coding-agent. Every mature OpenTelemetry extension still peer-depends on the retired scope and will not load against current Pi:

ExtensionPeer dependencyLatest release
pi-telemetry-otel@mariozechner/pi-coding-agent ^0.51.00.1.1, Feb 2026
@devkade/pi-opentelemetry@mariozechner/pi-coding-agent ^0.53.00.1.3, Feb 2026
@mobrienv/pi-otlp@mariozechner/pi-coding-agent >=0.42.00.2.0, Feb 2026
pi-otel-telemetry@mariozechner/pi-coding-agent *1.0.0, Mar 2026
pi-otel@earendil-works/pi-coding-agent *0.1.0, May 2026

Only pi-otel targets the current scope. It is a single release with a thin maintenance history, its @opentelemetry/* dependencies are a major version behind, and its permissive * peer range means npm will not warn if the extension API has moved underneath it.

The deciding factor is the failure mode: an extension Pi cannot load does not degrade to “no telemetry” — it can break Pi runs outright. Registering an unverified extension would risk working runs for telemetry that may never arrive, so Pi is documented here rather than wired up.

Worth recording for whenever this is revisited: no Pi extension reads TRACEPARENT. Verified by inspecting the published sources — searches for traceparent, tracestate, and W3CTraceContext return nothing in either pi-otel or pi-telemetry-otel.

pi-telemetry-otel is the only one with any parent-linking hook at all, and it uses a proprietary split-ID scheme rather than the W3C format — it reads PI_AGENT_TRACE_ID and PI_AGENT_SPAN_ID as separate hex strings and hardcodes the sampled flag. Supporting it would mean splitting the run’s traceparent into its components and accepting that the sampling decision is discarded.

Either native OpenTelemetry support in Pi, or a smoke-tested pi-otel release confirmed to load against the current @earendil-works package. Enabling it would mean writing an otel block into Pi’s settings.json — endpoint, protocol http/protobuf (it defaults to gRPC on :4317), and the three signal toggles — alongside the packages entry that registers the extension.


See Observability for the harnesses that do export and the collector they export to, and Overview for how Pi is installed and invoked.