See also (wiki): wiki/agent-operations-observability.md · wiki/semantic-observability.md · wiki/mlops-ai-platform-engineering.md
Source credibility: HIGH for config locations and published keys; MEDIUM for end-to-end field claims until collector samples are captured. This page converts the copy/paste telemetry appendix into a test plan. It explicitly separates docs-verified from collector-verified.
Executive Summary
The current observability article now has copy/paste configs, but the next bar is field verification. A config is not “working” because a docs page says it exists. It is working only when a pinned tool version sends the expected events to a collector and the raw payload contains the fields the article claims.
The harness should produce three artifacts per tool:
- tool version and effective config path;
- raw OTLP/export/native log sample, redacted;
- field checklist showing present, absent, gated, or unsupported fields.
Harness Architecture
agent/tool under test
-> local OTLP collector
-> file exporter/raw capture
-> redaction scanner
-> schema checklist
-> markdown report + source ledger
Minimum collector:
receivers:
otlp:
protocols:
grpc:
endpoint: 127.0.0.1:4317
http:
endpoint: 127.0.0.1:4318
processors:
batch: {}
exporters:
debug:
verbosity: detailed
file/traces:
path: /tmp/agent-otel-traces.json
file/logs:
path: /tmp/agent-otel-logs.json
file/metrics:
path: /tmp/agent-otel-metrics.json
service:
pipelines:
traces:
receivers: [otlp]
processors: [batch]
exporters: [debug, file/traces]
logs:
receivers: [otlp]
processors: [batch]
exporters: [debug, file/logs]
metrics:
receivers: [otlp]
processors: [batch]
exporters: [debug, file/metrics]
Versioned Test Matrix
| Harness | Local version checked | Test action | Fields to verify |
|---|---|---|---|
| Claude Code | 2.1.150 |
one prompt, one Bash/tool call, one denied or approved tool call if possible | trace_id, span_id, claude_code.interaction, claude_code.llm_request, claude_code.tool, tool_use_id, gen_ai.tool.call.id, prompt gate, tool details gate, tool content event |
| Claude Agent SDK | not sampled | one Python query() and one TypeScript query() inside an active app OTel span |
app root span, propagated TRACEPARENT, child claude_code.interaction, claude_code.llm_request, claude_code.tool, claude_code.hook, session.id, end-user resource attributes |
| Codex CLI | 0.135.0 |
one interactive run, one codex exec, one MCP/server-related action if practical |
codex.conversation_starts, codex.api_request, codex.sse_event, codex.user_prompt, codex.tool_decision, codex.tool_result, trace exporter output, metrics exporter output |
| Codex Desktop / IDE | not sampled | one desktop/app task and one IDE task | whether user-level ~/.codex/config.toml OTel is honored, app-server/local DB paths, tool-event shape |
| Bedrock invocation logging | account dependent | one Converse request with payload logging to S3 and CloudWatch | request ID, operation, model ID, input/output body/log pointers, token counts, latency, no local tool execution proof |
| Strands / AgentCore | not sampled | one Python StrandsTelemetry run and one TypeScript setupTracer() run with a tool call and optional retrieval |
agent span, event-loop cycle span, model invocation span, token/cache attributes, gen_ai.tool.name, gen_ai.tool.call.id, tool.status, tool result, local JSONL exporter output, Bedrock request join keys |
| Langfuse/Braintrust/Weave/OpenLIT | backend dependent | send one OpenAI/Anthropic tool-call trace through each | backend trace ID, tool-call display, raw export, dataset/eval conversion path |
| AG-UI / A2A | app dependent | emit one run/task with tool-call lifecycle and state delta | protocol IDs, trace context propagation, task/run/message/tool IDs, artifact IDs |
Verification Vocabulary
| Status | Meaning |
|---|---|
| Docs verified | Official docs or code reference the key/config/field |
| Locally version-checked | Installed binary reports a version; no ingestion claim yet |
| Collector verified | Raw OTLP/export payload captured and inspected |
| Field verified | Specific expected field appears in raw payload for the pinned version |
| Gated | Field appears only when a content/privacy gate is enabled |
| Unsupported | Tool/version does not emit the field |
| Product-only | Product page describes workflow but no public export schema proves it |
Required Report Format
For each tool:
## [Tool] [Version]
**Config path:** ...
**Command:** ...
**Collector:** ...
**Source docs:** ...
| Field | Status | Evidence |
|---|---|---|
| trace_id | field verified | `/tmp/agent-otel-traces.json`, span 1 |
| tool_call_id | gated | present when `OTEL_LOG_TOOL_DETAILS=1` |
| tool output body | gated | present when `OTEL_LOG_TOOL_CONTENT=1`, redacted before publish |
Source Notes
- Claude Code current docs document enhanced beta traces, content gates, span names, tool IDs, prompt redaction, and managed settings paths.
- Claude Agent SDK observability docs document W3C trace-context propagation
from app spans into the Claude Code child process, nested agent/tool/hook
spans,
session.id, and end-user resource-attribute guidance. - Strands tracing docs document the
strands-agents[otel]extra, standard OTel env vars,OTEL_SEMCONV_STABILITY_OPT_IN,StrandsTelemetry, OTLP and console exporters, TypeScriptsetupTracer, model/tool/retriever spans, and tool-call attributes. - OpenAI Codex current docs document
CODEX_HOME, user and project config precedence, project-localotelignore behavior, and OTel log/trace/metrics exporter keys. - OpenAI’s Codex safety article documents the intended security use of Codex telemetry: prompts, approval decisions, tool results, MCP usage, and network proxy allow/deny decisions.
Sources
- Claude Code monitoring: https://code.claude.com/docs/en/monitoring-usage
- Claude Code settings: https://docs.claude.com/en/docs/claude-code/settings
- Claude Agent SDK observability: https://code.claude.com/docs/en/agent-sdk/observability
- Strands traces: https://strandsagents.com/docs/user-guide/observability-evaluation/traces/
- Strands telemetry tracer API: https://strandsagents.com/docs/api/python/strands.telemetry.tracer/
- OpenAI Codex advanced config: https://developers.openai.com/codex/config-advanced
- OpenAI Codex config reference: https://developers.openai.com/codex/config-reference
- OpenAI, Running Codex safely: https://openai.com/index/running-codex-safely/
- OpenTelemetry Collector docs: https://opentelemetry.io/docs/collector/
- Existing config appendix: /technical/19-agent-frameworks/agent-observability-format-standard-2026/index.md#copypaste-maxtelemetry-config-appendix
Brandon Sneider | brandon@brandonsneider.com June 2026