Agent Observability Eval Pipeline
End-to-end Agent Observability pipeline for an instrumented ml_app — classify production traces, root-cause failures, bootstrap evaluators, then (optionally) sample + publish a dataset, generate + run an experiment, and analyze results. Six narrated phases with a standardized banner and a "continue" checkpoint between each. Pure orchestration over the agent-observability sub-skills (`agent-observability-session-classify`, `agent-observability-trace-rca`, `agent-observability-eval-bootstrap`, `agent-observability-experiment-bootstrap`, `agent-observability-experiment-analyzer`). Use when user says "run the eval pipeline", "go from traces to evals", "bootstrap evals end to end", "classify then RCA then bootstrap", "build an eval set from scratch", "onboard me to datasets and experiments", "walk me through experiments", "I have an ml_app, now what", "Agent Observability onboarding", "guided experiment setup", "from traces to experiments", or wants a deterministic, narrated tour from production data through evaluators, datasets, and experiments. Stop early with `--stop-after <phase>` to short-circuit at evaluators or dataset, or resume mid-flow with `--start-at <phase>`.
- Skill ID
- datadog-labs/agent-skills/agent-observability-eval-pipeline
- Publisher
- datadog-labs
- Repository
- agent-skills
- Installs
- 0
- Files
- 4
- Synced
- Sep 23, 2026
Open any RiverX project, open the Skills panel in the chat, and search for this identifier. The files are fetched from the source repository at install time.
datadog-labs/agent-skills/agent-observability-eval-pipelineInstalls these files- SKILL.md
- scripts/.gitignore
- scripts/load_env.py
- scripts/publish_dataset.py
What this skill tells the agent
Backend
Detection — At the start of every invocation, before taking any action, determine which backend to use:
- If the user passed
--backend pupanywhere in their invocation → use pup mode immediately, regardless of whether MCP tools are present. Skip steps 2–4. - Check whether MCP tools are present in your active tool list. The canonical signal is whether
mcp__datadog-llmo-mcp__search_llmobs_spansappears in your available tools. - If MCP tools are present → use MCP mode throughout. Call MCP tools exactly as named in the sub-skill workflow sections.
- If MCP tools are absent → check whether
pupis executable: runpup --versionvia Bash. A JSON response containing"version"confirms pup is available. - If pup responds → use pup mode throughout. Each sub-skill carries its own Tool Reference appendix with the full MCP→pup mapping.
- If neither is available → stop and tell the user: > "Neither the Datadog MCP server nor the pup CLI is available. Connect the MCP server (
claude mcp add --scope user --transport http datadog-llmo-mcp 'https://mcp.datadoghq.com/api/unstable/mcp-server/mcp?toolsets=llmobs') or install pup."
--backend pup is accepted anywhere in the invocation arguments. Strip it from args before passing to sub-skills, but carry the pup-mode decision forward — every sub-skill must also operate in pup mode for the entire pipeline run.
Sub-skill backend propagation: The backend detected at startup applies to all sub-skills invoked across the six phases. Do not re-detect per phase. Announce once at startup:
- MCP mode: "(Running in MCP mode — all features available.)"
- pup mode: "(Running in pup mode — pup commands used throughout. All features available.)"
Invocation ID: At the very start of each invocation, before any MCP tool call, generate an 8-character hex invocation ID (e.g., 3a9f1c2b). Keep it constant for the entire invocation.
Intent tagging: On every MCP tool call, prefix telemetry.intent with skill:agent-observability-eval-pipeline[<inv_id>] — followed by a description of why the tool is being called. On the first MCP tool call only, use skill:agent-observability-eval-pipeline:start[<inv_id>] — instead (note the :start suffix). Example first call: skill:agent-observability-eval-pipeline:start[3a9f1c2b] — Precheck: verify ml_app has traces in the last 7 days
Agent Observability Eval Pipeline — Classify → RCA → Eval Bootstrap → Dataset → Experiment → Analyze
A deterministic, six-phase guided pipeline for an already-instrumented ml_app owner. Each phase has the same envelope — a banner that names the entity being produced, an explanation of its purpose, the action (a sub-skill call or a small executable step), and a checkpoint. You always know where you are.
[Precheck] verify ml_app, project, backend, credentials, output dir
↓
[Phase 1: Classify ml_app traces] entity: ml_app, trace, span
↓
[Phase 2: Root cause analysis] entity: failure mode, root cause
↓
[Phase 3: Bootstrap evaluators] entity: evaluator, LLM judge
↓ (stop here with --stop-after eval-bootstrap
↓ for the classic eval-pipeline behavior)
[Phase 4: Create + publish dataset] entity: dataset record, published dataset
↓ (executes: LLMObs.create_dataset)
[Phase 5: Generate + run experiment] entity: experiment, task, evaluator, run
↓ (executes: python <generated_file>)
↓ (in-phase review beat before run)
[Phase 6: Analyze experiment] entity: metric, comparison, recommendationThis skill is pure orchestration plus pedagogy — no new analytical logic. The work happens inside the sub-skills (agent-observability-session-classify, agent-observability-trace-rca, agent-observability-eval-bootstrap, agent-observability-experiment-bootstrap, agent-observability-experiment-analyzer). What this skill adds is the deterministic envelope: every phase has the same shape, the same checkpoint contract, and the same entity-explanation banner — so the user gets a consistent, narrated experience regardless of how they phrased the original request.
Usage
/agent-observability-eval-pipeline <ml_app> [--project-name <name>] [--timeframe <window>] [--trace-limit <N>]
[--format py|ipynb] [--evaluator-style function|class|remote]
[--offline-evaluators | --online-evaluators | --data-only]
[--start-at classify|rca|eval-bootstrap|dataset|experiment|analyze]
[--stop-after classify|rca|eval-bootstrap|dataset|experiment|analyze]
[--classification-summary <path>] [--rca-report <path>]
[--dataset-file <path>] [--dataset-name <name>]
[--experiment-file <path>] [--experiment-id <uuid> | --experiment-url <url>]
[--app-root <path>] [--env-file <path>] [--output-dir <dir>]
[--backend pup]Arguments: $ARGUMENTS
Inputs
| Input | Required | Default | Description |
|---|---|---|---|
ml_app | Yes | — | The instrumented LLM app to onboard / evaluate against. The precheck verifies it has recent traces. |
--project-name | No | derived from pyproject.toml / setup.cfg / setup.py / package.json / cwd (same order as agent-observability-experiment-bootstrap); falls back to experiment-sdk-default | The Datadog project the pipeline writes datasets and experiments into. The SDK lazily creates the project on first use via LLMObs.enable(project_name=...). Surface this in the Precheck so the user can confirm before anything is created. |
--timeframe | No | now-7d | Lookback window for Phase 1 classification and Phase 4 dataset sampling. |
--trace-limit | No | 20 | Sampling cap for Phase 4. Phase 1 internally uses min(20, --trace-limit) for the classification sample. |
--format | No | py | Passed to agent-observability-experiment-bootstrap in Phase 5: py (script) or ipynb (Jupyter notebook). |
--evaluator-style | No | function | Passed to agent-observability-eval-bootstrap (Phase 3) and agent-observability-experiment-bootstrap (Phase 5): function, class, or remote. |
--offline-evaluators | No | on (default) | Phase 3: emit a Python SDK evaluator suite (BaseEvaluator / LLMJudge classes) that runs inside an experiment against a dataset. Maps internally to agent-observability-eval-bootstrap sdk_code mode. |
--online-evaluators | No | off | Phase 3: publish online LLM-judge evaluators directly to Datadog (created as disabled drafts; enable in the UI). Online evaluators run on production spans as they're emitted. Maps internally to agent-observability-eval-bootstrap publish mode (was --publish). |
--data-only | No | off | Phase 3: emit a local data blob only — no executable evaluator code or online publish. At Phase 3 entry the skill prompts the user to pick one of: (a) a DatasetRecordRaw[] JSON suitable for experiment use (maps internally to agent-observability-eval-bootstrap --emit-dataset), or (b) a framework-agnostic JSON evaluator spec for local analysis (maps internally to agent-observability-eval-bootstrap data_only mode). |
--stop-after <phase> | No | analyze (run everything) | Stop after the named phase completes. classify = Phase 1 only. rca = through Phase 2. eval-bootstrap = through Phase 3 (matches the classic eval-pipeline). dataset = through Phase 4 (dataset created + published). experiment = through Phase 5 (experiment generated + run). analyze = all six phases (default). |
More from datadog-labs
Use this skill in a project
Open any RiverX project, search the Skills panel for datadog-labs/agent-skills/agent-observability-eval-pipeline, and install it in one click.
