# Framework engines get event listeners and OpenTelemetry export

> Register a listener once per Engine to receive events from every session it owns, and export Framework sessions to OpenTelemetry or Braintrust.

Source: <https://everruns.com/docs/changelog/2026-09-25-framework-event-listeners-opentelemetry/>

Date: 2026-09-25
Products: Framework
Category: Feature
Available: In 0.32.0
Pull request: everruns/everruns#3804
Pull request: everruns/everruns#3806

![Everruns and OpenTelemetry logos side by side, announcing OpenTelemetry export](https://everruns.com/docs/_astro/integration@2x.CVyX0OyC_1Wz4A4.webp)

An Engine now delivers every event from every session it owns, including resumed and spawned ones, to the listeners registered on it. You no longer poll `Session::events()` per session. Each listener drains a bounded ordered queue, and shutdown flushes them within one deadline.

The `everruns` crate ships two listeners behind independent features, `otel` and `braintrust`:

```rust
let engine = Engine::builder()
    .observe(OpenTelemetry::from_env())
    .build();
```

Message content is not exported by default.

See [Observability](https://everruns.com/docs/framework/observability/). PRs [#3804](https://github.com/everruns/everruns/pull/3804), [#3806](https://github.com/everruns/everruns/pull/3806).