> This page is for NeMo Relay, version v0.11.0.
> For other versions, use one of these documentation indexes:
> - Latest (v0.10.4) (default): https://docs.nvidia.com/nemo/relay/latest/llms.txt
> - dev: https://docs.nvidia.com/nemo/relay/dev/llms.txt
> - v0.11.0: https://docs.nvidia.com/nemo/relay/v0.11.0/llms.txt
> - v0.10.4: https://docs.nvidia.com/nemo/relay/v0.10.4/llms.txt
> - v0.9.4: https://docs.nvidia.com/nemo/relay/v0.9.4/llms.txt
> - v0.8.4: https://docs.nvidia.com/nemo/relay/v0.8.4/llms.txt
> - v0.7.3: https://docs.nvidia.com/nemo/relay/v0.7.3/llms.txt

> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.nvidia.com/nemo/relay/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.nvidia.com/nemo/relay/_mcp/server.

# Release Notes for NVIDIA NeMo Relay

> Review highlights, compatibility updates, fixed known issues, and current known issues for NVIDIA NeMo Relay 0.11.

This page contains the release notes for [NVIDIA NeMo Relay](/nemo/relay/v0.11.0/about-nemo-relay/overview).

For the full release history, including individual pull requests, refer to
[GitHub Releases](https://github.com/NVIDIA/NeMo-Relay/releases).

## Release 0.11.0

NeMo Relay 0.11.0 is in development. The following sections summarize changes
since 0.10.0, including fixes from the 0.10 patch releases. For the full history
of a published version, refer to GitHub Releases.

### Highlights

This release expands plugin control, deployment options, and setup guidance:

* Runtime diagnostics keeps counts and recent events in memory, with storage
  limits set at startup. Readers can inspect gateways, daemons, and embedded
  applications. Native and worker plugins can record their own internal work.
  Memory views show diagnostic storage use and optional resource samples.
  Collection is disabled by default. Refer to [Diagnostics](/nemo/relay/v0.11.0/reference/diagnostics).
* The Python Google Agent Development Kit (ADK) integration records agent runs,
  model calls, and tool calls. Relay guardrails and intercepts apply to supported
  model and tool calls. Setup guides include ADK CLI and workflow examples.
  Refer to [Google ADK](/nemo/relay/v0.11.0/supported-integrations/google-adk).
* Daemon workers support the full middleware pipeline for large language model
  (LLM) calls.
  This covers OpenAI Chat Completions, OpenAI Responses, and Anthropic Messages.
  Refer to
  [LLM Middleware](/nemo/relay/v0.11.0/daemon/reference#llm-middleware).
* Scope snapshots expose the visible scope IDs and types across bindings and
  plugin SDKs. Refer to
  [Inspect the Visible Stack](/nemo/relay/v0.11.0/about-nemo-relay/concepts/scopes#inspect-the-visible-stack).
* OpenTelemetry Protocol (OTLP) endpoints support custom certificate authorities
  and mutual Transport Layer Security (TLS). Refer to
  [TLS and Mutual TLS](/nemo/relay/v0.11.0/configure-plugins/observability/opentelemetry#tls-and-mutual-tls).
* Provider API key helpers can supply a fresh credential for each request
  attempt. Refer to
  [Generate API Keys Per Request](/nemo/relay/v0.11.0/nemo-relay-cli/basic-usage#generate-api-keys-per-request).
* OpenAI- and Anthropic-compatible model upstreams can use remote HTTP when
  their hosts are explicitly trusted. These requests send no credential headers.
  Prefer HTTPS. Refer to
  [Credential-Free HTTP Model Upstreams](/nemo/relay/v0.11.0/nemo-relay-cli/basic-usage#credential-free-http-model-upstreams).
* Codex and Claude Code hook sessions can continue the launcher's trace through
  `TRACEPARENT` and `TRACESTATE`. Refer to
  [Continue the Launcher Trace](/nemo/relay/v0.11.0/nemo-relay-cli/basic-usage#continue-the-launcher-trace).
* New quick starts cover application bindings and supported frameworks and
  coding agents. Plugin setup guidance includes Switchyard. Refer to
  [Quick Starts](/nemo/relay/v0.11.0/getting-started/quick-start) and
  [Switchyard](/nemo/relay/v0.11.0/configure-plugins/switchyard).
* The configuration editor exposes more gateway, provider, logging, and plugin
  settings. Daemon guidance now covers Kubernetes deployment planning. Refer to
  [Interactive Setup](/nemo/relay/v0.11.0/nemo-relay-cli/basic-usage#interactive-setup) and
  [Kubernetes Deployment Guidance](/nemo/relay/v0.11.0/daemon/kubernetes).

### Compatibility and Migration

> **Review the Upgrade Steps**
>
> Upgrades from 0.10.0 can change hook failure behavior, provider access, worker
> configuration, and stream error handling. Review the
> [Migration Guides](/nemo/relay/v0.11.0/reference/migration-guides) before updating a deployment.

The main compatibility changes affect these areas:

* Python object decoding now requires an explicit list of allowed classes to
  restore tagged dataclass or Pydantic values.
* Node.js streams now report provider, collector, and finalizer failures.
  Callers must handle errors and await cleanup when they stop reading early.
* Workers now load layered user and system configuration. Policy checks should
  run before response caches. The default cache priority is now `150`.
* Local hooks use verified TLS connections. Fail-closed delivery failures
  return exit code `2`. Refresh personal hooks and restart affected processes.
* Native plugins can use application binary interface (ABI) v8 scope snapshots.
  Existing v7 callback layouts remain compatible. Worker snapshots require the
  new `grpc-v1` extension.
* Rust worker SDK error matches must handle `WorkerSdkError::Downstream`.
  Python worker error checks must allow `WorkerSdkError` subclasses. Preserve
  the original error so diagnostics can identify where the failure began.
* Embedded diagnostics settings are fixed by the first initialization.
  Restart the process to change them. Diagnostic read access can expose private
  data and needs separate authorization.

### Fixes and Other Changes

The main fixes improve request handling, telemetry, and process cleanup:

* Provider routing checks access before using Relay-held credentials. Plugin
  integrity and signature failures always prevent activation.
* Request codecs preserve provider fields across multiple edits. LangChain
  tool schema edits now reach the model call. Gemini request edits preserve
  text placement, and streamed function-call arguments are merged correctly.
* Framework tool results retain content and handled error status. Manual LLM
  completion preserves an explicit error status. Cache replay keeps framework
  tool result objects and content intact.
* Tool classification now recognizes `load_skill` as a skill tool.
* OpenAI Responses streams retain usage and report missing terminal events.
  Gemini cost estimates account for thinking and supported tool-use tokens.
* Streaming preserves Unicode characters split across transport chunks.
  Python streams retain pending exceptions through native wakeups. Node.js
  streams retain errors when closing overlaps a read.
* Agent Trajectory Interchange Format (ATIF) output uses valid content parts.
  Text-only step messages use strings. Delivery-failure warnings identify the
  affected trajectory.
* Logging overrides preserve configured file sinks. Go bindings retain native
  handles for the duration of foreign function interface (FFI) calls.
* Daemon, worker, and hook paths use less memory or avoid repeated work. Worker
  cancellation and session-lock cleanup release resources when calls end.

For upgrade actions and links to each affected workflow, refer to the
[Migration Guides](/nemo/relay/v0.11.0/reference/migration-guides).

## Known Issues in 0.11.0

The following known issues and limitations apply to NeMo Relay 0.11.0:

* Diagnostics stores recent evidence in memory and can replace older events
  when storage fills. It does not keep history after process exit. Diagnostic
  detail can contain private data that has not been sanitized. Daemon worker
  caches can return stale or partial pages. Check coverage, freshness, and
  continuation fields before drawing conclusions. Refer to
  [Diagnostics](/nemo/relay/v0.11.0/reference/diagnostics) and
  [CLI and Daemon Diagnostics](/nemo/relay/v0.11.0/reference/diagnostics/cli).
* Google ADK live model calls through `Runner.run_live` or
  `RunConfig.support_cfc` have no Relay model events or middleware. Relay's
  response cache skips ADK model calls. While personally identifiable information
  (PII) redaction is active, Relay omits model response payloads from exported
  model end events. Tools run by
  the provider cannot be blocked or changed by Relay. Use `wrap_node` to record
  full scopes for workflow steps, except steps run with `parallel_worker`.
  Those steps have completion events rather than full step scopes. Refer to
  [Google ADK Limitations](/nemo/relay/v0.11.0/supported-integrations/google-adk#limitations).
* ChatGPT voice calls and sidebands use separate upstream settings. Call
  creation uses the ChatGPT backend and keeps the caller's ChatGPT credential.
  Sideband attachment uses `openai_base_url` and never receives Relay's provider
  credentials. A custom OpenAI upstream might not support a call created on
  ChatGPT. Relay also removes recognized ChatGPT tokens and `chatgpt-account-id`
  from unmanaged voice sideband requests to that custom upstream. Use a sideband destination that can
  access the call without relying on the caller's ChatGPT credential. Codex
  Desktop connects its sideband directly to OpenAI by default. Refer to
  [Codex Responses Compatibility](/nemo/relay/v0.11.0/daemon/configuration#codex-responses-compatibility).
* OTLP collectors can return a successful response while rejecting individual
  spans, log records, or metric data points. Relay does not report these partial
  successes in runtime diagnostics, and flush or shutdown can still succeed.
  Monitor the collector's rejection metrics and logs. Refer to
  [OpenTelemetry](/nemo/relay/v0.11.0/configure-plugins/observability/opentelemetry#trace-batch-processor-configuration).
* Go and the raw C foreign function interface (FFI) remain experimental. Build
  them from source. Generated API pages focus on Rust, Python, and Node.js.
* Local coding-agent observability depends on host hooks and provider traffic
  reaching the local gateway. Relay cannot fully capture remote or cloud
  execution that bypasses the local host.
* Persistent Codex and Claude Code integrations use each user's
  configuration and a shared loopback gateway. Use `nemo-relay run` when a
  launch must retain project-specific configuration.
* On Windows, a restrictive host Job Object can limit gateway reuse or prevent
  persistent bootstrap. A Job Object controls a group of processes. If it
  prevents a managed worker from leaving the group, the worker starts inside
  the group and emits `worker_lifetime_limited`. Closing the host can stop that
  worker. MCP clients can then need to reactivate the route after the broker's
  recovery grace period. Refer to
  [Register the MCP Lifecycle Client](/nemo/relay/v0.11.0/daemon/reference#register-the-mcp-lifecycle-client).
  During startup, Codex can request `/models` before required MCP servers
  start. Relay retries the request.
* Codex 0.143 does not expose `SessionEnd`, and Codex multi-agent v2 encrypts
  delegated task payloads. Relay cannot recover the task text from encrypted
  payloads. Parent-child links depend on the agent identities and lifecycle
  events that Codex provides. Refer to
  [Multi-Agent Delegation Traces](/nemo/relay/v0.11.0/nemo-relay-cli/codex#multi-agent-delegation-traces).
* Pi support is a proof of concept tested with 0.84.x. By default, its personal
  extension lets work continue if the gateway is unavailable. Later extensions
  can change arguments after Relay checks them. Unsupported provider routes
  produce no LLM spans. This includes Google's native Gemini and Vertex APIs.
  To route Gemini model traffic through Relay, use a provider or proxy that
  accepts an OpenAI- or Anthropic-compatible API. Nested Pi processes appear as
  separate sessions. SIGINT in headless mode can stop Pi before queued events
  are sent. For details, refer to [Pi Limitations](/nemo/relay/v0.11.0/nemo-relay-cli/pi#limitations).
* Authenticated managed daemon routes use passthrough while workers start or
  recover unless the daemon uses `--require-worker`. Passthrough forwards
  requests without worker plugins. Failed starts retry automatically, but
  `/healthz` and MCP readiness alone do not prove policy enforcement or exporter
  activity. Verify worker status and an observable plugin result, or require a
  worker and handle HTTP `503` during unavailability. Refer to
  [Daemon Operations](/nemo/relay/v0.11.0/daemon/operations).
* Harness model requests do not read the per-user token file. Codex and
  Claude Code send the route credential header only from their own provider
  configuration, which they read at startup. Without that header, model requests
  pass through without Relay telemetry. The managed v1 Pi extension reads only
  `NEMO_RELAY_CLIENT_TOKEN` and fails to start without it, so
  `nemo-relay doctor --managed-bundle` rejects a file-only credential for Pi
  bundles. On Windows, `nemo-relay daemon token ensure` does not check the
  access list of an existing token directory. Refer to
  [Credential Resolution](/nemo/relay/v0.11.0/daemon/configuration#credential-resolution).
* Remote daemons and client workers must be able to reach each other.
  Proxies must support WebSockets. Loopback control connections do not send
  periodic pings. An idle hung process can go undetected until an operation
  times out.
* The Node.js binding and package workflows require Node.js 24 or later.
* OpenClaw provides telemetry through public hooks. Its security and
  optimization coverage is partial because Relay does not manage its execution.
* The built-in `nemo_guardrails` plugin remains deprecated but is still
  available in 0.11.0. No replacement is included. The remote backend
  depends on its configured service's availability, latency, and policy behavior.
  The local backend requires Python 3.11 or later and `nemoguardrails==0.22.0`.
  Refer to [NeMo Guardrails](/nemo/relay/v0.11.0/configure-plugins/nemo-guardrails/about).
* The personally identifiable information (PII) redaction plugin supports its
  local backend based on fixed rules. Local-model backend configuration is
  reserved for future work.
* Pricing and optimization estimates depend on model names, token data, pricing
  sources, and how current those sources are. Missing or conflicting data
  produces partial or absent cost fields rather than zero values.
* ATOF stream sinks and remote ATIF storage require reachable, correctly
  configured destinations. A failed stream sink does not stop file output or
  other active sinks.
* ATIF omits point-in-time marks. Use ATOF for the complete mark stream.
  The `gen_ai` OpenTelemetry projection also omits marks. The `full` and
  `openinference` projections retain their fixed native mark handling.
* Native dynamic plugins run in the Relay process and are not sandboxed. A
  `grpc-v1` worker runs in a separate process, but that process is not a
  security sandbox.
* Do not change Python `LLMRequest` objects in place. Request middleware that
  changes content must return a new request object.
* Native subscriber callbacks arrive asynchronously. Flush subscribers before
  depending on their changes, captured events, files, or exporter output.
* OpenTelemetry endpoints use batch queues with a size limit. If a burst fills
  a queue, the endpoint drops completed spans instead of slowing the sender.
  This can leave an incomplete trace, including a missing root span. The SDK
  warns on the first drop and reports the exact dropped-span count during
  graceful shutdown. Configure `max_queue_size`, `max_export_batch_size`, and
  `scheduled_delay_millis` independently on each endpoint, or use the standard
  `OTEL_BSP_*` environment variables as defaults for the process. A larger
  queue does not guarantee lossless telemetry.
* Operational logging covers Relay-managed hooks, gateway requests, the daemon,
  and workers. It does not yet cover every CLI command.
* A parent handle outside the current scope stack does not keep its earlier
  W3C context. If it belongs to a different trace, managed-call headers can
  differ from the parent context kept by an exporter. Capture and import the
  parent's propagation context before leaving that trace. Reusing only the
  handle does not preserve this context.
* Codex's built-in `openai` provider attempts a WebSocket connection before
  falling back to HTTP streaming. Relay does not support that transport, so a
  new session can report connection errors and take several seconds longer to
  start. Refer to [Codex](/nemo/relay/v0.11.0/nemo-relay-cli/codex#persistent-plugin-install).
* Available resource measurements depend on the platform. Initial rates can
  be unavailable, and copies of one polling sample under multiple Agent scopes
  must not be added together. Refer to
  [Resource Metrics](/nemo/relay/v0.11.0/configure-plugins/resource-metrics).
* Default non-paused threshold compaction and unsupported or malformed
  Anthropic compaction traffic bypass the response cache. Selected compaction
  support does not let Relay replay every provider response. Refer to
  [LLM Eligibility and Limits](/nemo/relay/v0.11.0/configure-plugins/adaptive/response-cache#llm-eligibility-and-limits).

## Previous Releases

For previous release notes, release artifacts, and the complete pull request
history, refer to [GitHub Releases](https://github.com/NVIDIA/NeMo-Relay/releases).

## Related Topics

For more information, refer to the following pages:

* [Support Matrix](/nemo/relay/v0.11.0/reference/support-matrix)
* [Migration Guides](/nemo/relay/v0.11.0/reference/migration-guides)
* [Installation](/nemo/relay/v0.11.0/getting-started/installation)
* [NVIDIA NeMo Relay CLI](/nemo/relay/v0.11.0/nemo-relay-cli/about)
* [Known Issues and Troubleshooting](/nemo/relay/v0.11.0/resources/support-and-faqs)