For AI agents: a documentation index is available at the root level at /llms.txt and /llms-full.txt. Append /llms.txt to any URL for a page-level index, or .md for the markdown version of any page.
  • About NVIDIA NeMo Relay
    • Overview
    • Architecture
    • Ecosystem
    • Concepts
    • Release Notes
  • Getting Started
    • Agent Runtime Primer
    • Prerequisites
    • Installation
    • Configuration / Setup
    • Quick Start
  • NVIDIA NeMo Relay CLI
    • About
    • Basic Usage
    • Claude Code
    • Codex
    • Cursor
    • Hermes Agent
  • Supported Integrations
    • About
    • OpenClaw Plugin Guide
    • LangChain Integration Guide
    • LangGraph Integration Guide
    • Deep Agents Integration Guide
  • Instrument Applications
    • About
    • Adding Scopes and Marks
    • Instrument a Tool Call
    • Instrument an LLM Call
    • Add Middleware
    • Code Examples
  • Observability Plugin
    • About
    • Configuration
    • Agent Trajectory Interchange Format (ATIF)
    • Agent Trajectory Observability Format (ATOF)
    • OpenTelemetry
    • OpenInference
  • Adaptive Plugin
    • About
    • Configuration
    • Adaptive Cache Governor (ACG)
    • Adaptive Hints
  • NeMo Guardrails Plugin
    • About
    • Configuration
  • Integrate into Frameworks
    • About
    • Adding Scopes
    • Wrap Tool Calls
    • Wrap LLM Calls
    • Handle Non-Serializable Data
    • Using Codecs
    • Provider Codecs
    • Provider Response Codecs
    • Code Examples
  • Build Plugins
    • About
    • Define a Plugin
    • Validate Plugin Configuration
    • Plugin Configuration Files
    • Register Plugin Behavior
    • Design Plugin Configuration
    • NeMo Guardrails Example Plugin
    • Code Examples
  • Contribute
    • About
    • Development Setup
    • Workflow and Reviews
    • Testing and Documentation
  • Reference
    • APIs
    • Performance
  • Resources
    • Support and FAQs
    • Glossary
    • Troubleshooting Guide
    • Community
    • Legal
NVIDIANVIDIA
Developer-friendly docs for your API
Privacy Policy | Your Privacy Choices | Terms of Service | Accessibility | Corporate Policies | Product Security | Contact

Copyright © 2026, NVIDIA Corporation.

LogoLogo
On this page
  • plugins.toml Example
  • Fields
  • Expected Output
  • Plugin Configuration
  • Manual API
  • Common Validation Failures
Observability Plugin

Agent Trajectory Observability Format (ATOF)

||View as Markdown|
Previous

Agent Trajectory Interchange Format (ATIF)

Next

OpenTelemetry

Use the atof section when you want the raw Agent Trajectory Observability Format (ATOF) 0.1 event stream written as JSONL.

ATOF JSONL export is useful for local debugging, offline inspection, and preserving the canonical event stream before it is translated into another format.

plugins.toml Example

1version = 1
2
3[[components]]
4kind = "observability"
5enabled = true
6
7[components.config]
8version = 1
9
10[components.config.atof]
11enabled = true
12output_directory = "logs"
13filename = "events.jsonl"
14mode = "overwrite"

This configuration registers the plugin-managed ATOF exporter and writes one JSON object per lifecycle event to logs/events.jsonl.

Fields

FieldDefaultNotes
enabledfalseMust be true to write events.
output_directoryCurrent working directoryDirectory containing the JSONL file.
filenameTimestamped nemo-relay-events-*.jsonlExplicit output filename.
modeappendappend or overwrite.

Expected Output

Each emitted scope, tool, LLM, middleware, or mark event is written as one ATOF JSON object per line. For event field semantics, see Events.

Register the plugin before instrumented work starts and clear it during shutdown so file handles flush.

Plugin Configuration

Use plugin configuration when the application should let NeMo Relay own the ATOF exporter lifecycle.

Python
Node.js
Rust
1from nemo_relay import plugin
2from nemo_relay.observability import AtofConfig, ComponentSpec, ObservabilityConfig
3
4config = plugin.PluginConfig(
5 components=[
6 ComponentSpec(
7 ObservabilityConfig(
8 atof=AtofConfig(
9 enabled=True,
10 output_directory="logs",
11 filename="events.jsonl",
12 mode="overwrite",
13 )
14 )
15 )
16 ]
17)
18
19report = plugin.validate(config)
20if any(diagnostic["level"] == "error" for diagnostic in report["diagnostics"]):
21 raise RuntimeError(report["diagnostics"])
22
23await plugin.initialize(config)
24try:
25 # Run instrumented application work here.
26 pass
27finally:
28 plugin.clear()

Manual API

Use the manual AtofExporter API when a test or script needs a custom subscriber name or explicit registration window.

Python
Node.js
Rust
1from nemo_relay import AtofExporter, AtofExporterConfig, AtofExporterMode
2
3config = AtofExporterConfig()
4config.output_directory = "logs"
5config.filename = "events.jsonl"
6config.mode = AtofExporterMode.Overwrite
7
8exporter = AtofExporter(config)
9exporter.register("atof-exporter")
10
11# Run instrumented application work here.
12
13exporter.force_flush()
14exporter.deregister("atof-exporter")
15exporter.shutdown()

Common Validation Failures

  • mode is not append or overwrite.
  • The output directory is not writable at runtime.
  • ATOF is enabled in a target that cannot access the native filesystem.