ATLAS
Telemetry spine: observability for Helmwart mitigations
Helmwart's 60+ mitigations are detection controls as much as they are preventive ones. For detection to work across mitigations, and across vendors, the telemetry they emit must share a wire format and a correlation schema. This page defines both: the OpenTelemetry gen_ai.* semantic conventions as a developing attribute vocabulary for LLM and agent spans, and the AnomalyEvent schema as Helmwart's minimal interop envelope for cross-mitigation event correlation.
OpenTelemetry gen_ai.* semantic conventions
The OpenTelemetry GenAI Working Group semantic conventionsdefine span and metric attributes for LLM and agent telemetry, but remain inDevelopment status rather than a stable standard. Helmwart mitigations can emit these attributes as a provisional interoperable format, so that any OTel-compatible backend (Grafana, Honeycomb, Datadog, OpenSearch) can ingest mitigation telemetry without per-vendor attribute mapping.
A SIEM (Security Information and Event Management) platform that ingests these attributes can correlate mitigation events across the full agent fleet without per-source parsers. The sections below define the shared AnomalyEvent schema that Helmwart mitigations emit into that SIEM pipeline.
gen_ai.provider.nameThe LLM provider or agent runtime (e.g. openai, anthropic, gcp.vertex_ai). Scopes mitigation events to a provider namespace.gen_ai.operation.nameThe operation type: chat, text_completion, embeddings, create_agent, execute_tool. Used to filter mitigation telemetry to the relevant operation class.gen_ai.request.modelThe model identifier requested (e.g. gpt-4o, claude-3-7-sonnet-20250219). Required for per-model anomaly baselines.gen_ai.request.max_tokensThe token budget requested. Combined with gen_ai.usage.input_tokens, signals prompt-stuffing or context-window abuse patterns.gen_ai.response.idThe provider-assigned response identifier. Required for cross-mitigation correlation: links a divergence event to the specific completion that triggered it.gen_ai.response.modelThe model that actually served the response (may differ from gen_ai.request.model after routing). Required for model-substitution detection.gen_ai.response.finish_reasonsArray of finish reasons (stop, length, tool_calls, content_filter). A spike in content_filter finishes is a detection signal for prompt-injection campaigns.gen_ai.usage.input_tokensToken count of the prompt. Anomalous spikes signal context stuffing; sustained high values signal memory-growth attacks.gen_ai.usage.output_tokensToken count of the completion. Unusually large completions signal data exfiltration attempts via output channels.The full spec is maintained atopentelemetry.io/docs/specs/semconv/gen-ai/. Additional attributes cover tool calls, agent events, and span events for prompt and completion content. Use the spec as the source of truth; the attributes above are the subset most directly relevant to mitigation telemetry. Pin the convention version used in production because Development-status names and requirements may change.
Shared AnomalyEvent schema
OpenTelemetry attributes describe individual spans. Cross-mitigation correlation requires a shared event envelope: a schema that lets a SIEM join an event fromm-mem-anomaly with an event fromm-divergence-monitor with an event fromm-output-egress-dlp without per-vendor parsing. The AnomalyEvent schema is Helmwart's minimal interop envelope.
{
"event_id": "string // UUID v4 — stable across retransmits",
"timestamp": "string // ISO 8601 UTC — e.g. 2026-05-12T14:23:01.000Z",
"agent_id": "string // SPIFFE SVID or stable agent identifier",
"control_id": "string // Helmwart mitigation ID — e.g. m-mem-anomaly",
"severity": "string // low | medium | high | critical",
"signal_type":"string // anomaly | threshold_breach | policy_violation |
// kill_switch | override | egress_block",
"context": {
"gen_ai_response_id": "string // links to the OTel span",
"threat_ids": ["T1"], // OWASP threat IDs this event is evidence for
"detail": "string // human-readable, one sentence"
}
}Why this schema exists
Each Helmwart mitigation is implemented independently, across different languages, different infrastructure stacks, and different vendors. Without a shared envelope, a SIEM analyst correlating a memory-anomaly event with a divergence event with a DLP egress block must write three separate parsers and maintain the join logic outside any schema. The AnomalyEvent schema makes the join structural:
- event_id is stable across retransmits, giving idempotent ingestion with no duplicate alerts.
- agent_id is the SPIFFE SVID or equivalent stable identifier, matching what m-spiffe and m-actor-recorder-split use. A SIEM can group all events for one agent across all mitigations without a lookup table.
- control_id is the Helmwart mitigation ID, so a SIEM rule can filter to all events from a specific control without parsing free-text.
- signal_type is a bounded enum, so correlation rules can match on type without regex.
- context.gen_ai_response_id links the AnomalyEvent to the OTel span, so the SIEM can retrieve the full trace for any alert without a second lookup.
- context.threat_ids maps the event to OWASP threat taxonomy, so the SIEM can count evidence-weight per threat without a threat-model lookup.
Mitigations on this spine
The following mitigations should emit AnomalyEvent records on the telemetry spine. Each entry notes the primary signal_type and the OTel attributes that must be present in the associated span.
Emits on statistical outliers in memory read or write operations.agent_id is the writing agent's SPIFFE SVID;context.gen_ai_response_id links to the span that triggered the write. Pair with gen_ai.usage.input_tokens to detect context-stuffing as the vector.
Emits when the agent's output diverges from its stated goal or prior-step plan beyond the configured threshold. context.threat_ids should includeT6 (Intent Breaking). The associated span must carrygen_ai.response.id for trace linkage. Cross-correlate withm-hitl-feedback-loopoverride events to detect systematic goal drift.
Emits on every egress block: classification match, PII pattern, or policy violation in the output. gen_ai.usage.output_tokens provides the volume context; unusually large blocked completions are a stronger signal than small ones. severity should reflect the data classification of the matched content.
Emits on every kill-switch invocation, both automated (threshold trip) and operator-initiated (manual). severity: critical always. The event is the primary signal for post-incident root-cause analysis; all upstream AnomalyEvents with the same agent_id in the preceding window constitute the evidence trail.
Emits when the recorder detects that the actor identity attempted a write to the audit log, a structural violation. Because the recorder is the spine's log writer for other mitigations, it also validates thatagent_id in incoming AnomalyEvents matches a registered agent identity, rejecting spoofed envelopes.
Emits on injection-pattern detection in the prompt (adversarial instruction, role-override attempt, indirect injection from a retrieved document).gen_ai.response.finish_reasons carries content_filteron provider-side blocks; Helmwart's own detection layer emits its own AnomalyEvent with context.threat_ids: ["T3"]. Correlate injection events with downstream divergence events to identify successful injections that bypassed the initial filter.
Emits on moderation-layer blocks: harmful content, policy violations, jailbreak outputs. Distinguish from m-output-egress-dlpevents in the SIEM: DLP blocks are data-classification events; moderation blocks are content-policy events. Both carrygen_ai.response.id for trace linkage.
Wiring it together
A minimal telemetry-spine deployment has three moving parts:
- OTel instrumentation on every agent span: emit
gen_ai.*attributes on every LLM call and tool execution. The OpenTelemetry GenAI instrumentation libraries for Python, Node, and Java cover the major LLM SDKs automatically; verify attribute completeness against the spec before relying on them in production. - AnomalyEvent emission at each mitigation: each mitigation that trips emits one AnomalyEvent to a shared event bus (Kafka topic, SNS topic, or OTLP log endpoint). The recorder identity fromm-actor-recorder-splitshould be the only identity with write access to that bus.
- SIEM correlation rules: join on
agent_idandcontext.gen_ai_response_id. A response ID that appears in both an injection AnomalyEvent and a divergence AnomalyEvent within the same session is a high-confidence indicator of a successful injection leading to goal manipulation; escalate to m-kill-switchevaluation.
Takeaway
A newcomer's starting point: instrument every LLM call with thegen_ai.* OTel attributes, have each mitigation emit one AnomalyEvent per trip to a shared bus, and write two SIEM join rules: one on agent_id, one on gen_ai_response_id. Those three steps give you cross-mitigation correlation out of the box. For the accountability layer that preserves these records against tampering, see the Tamper-Evident Accountability handbook page.
This page describes a wire format and correlation schema, not an implementation. The OTel GenAI spec evolves; verify attribute names against the live spec before hardcoding them in instrumentation. The AnomalyEvent schema is Helmwart's internal convention; it is not a published standard and should be adapted to your SIEM's ingestion format.
Sources:OpenTelemetry GenAI Semantic Conventions;OWASP Agentic AI v1.1;MITRE ATLAS AML.M0024 — AI Telemetry Logging.