Skip to content

Agent telemetry contract

Perseval maps OpenTelemetry GenAI, OpenInference, and common producer attributes, then applies conservative deterministic detectors. An Error span remains visible even when the trace lacks enough facts for an actionable finding.

MeaningAttributeWhereExample
Project routeperseval.project.idresourcecheckout-agent
Serviceservice.nameresourcecheckout-agent
Buildservice.versionresourcegit-a61c2e1
Environmentdeployment.environment.nameresourcestaging
Sessiongen_ai.conversation.idresource or root spanreturn-42
Agentgen_ai.agent.idresource or agent spanpolicy-agent
Roleagent.roleagent spanverifier
MeaningPreferred attributeValid examples
Operationagent.operationsubmit_return, verify_release
Requirednessagent.tool.requirementrequired, optional
Resultagent.tool.statussucceeded, failed, timed_out, cancelled
Result booleantool.result.successtrue, false
Effectagent.operation.effectread_only, mutating, verifying, compensating, escalating
Retry safetyagent.operation.retry_safetyidempotent, non_idempotent, unknown
Attemptagent.tool.attempt1, 2, 3
State predicateagent.state.predicatereturn_created
State observationagent.state.observationverified_changed, verified_unchanged, unverified, ambiguous
Root outcomeagent.final.statuscompleted, failed

Equivalent tool.* and operation.* aliases are mapped when available, but using one consistent vocabulary makes producer behavior easier to audit.

{
"name": "publisher.submit_return",
"status": { "code": "STATUS_CODE_ERROR", "message": "deadline exceeded" },
"attributes": [
{ "key": "gen_ai.tool.name", "value": { "stringValue": "returns_api" } },
{ "key": "agent.operation", "value": { "stringValue": "submit_return" } },
{ "key": "agent.tool.requirement", "value": { "stringValue": "required" } },
{ "key": "agent.tool.status", "value": { "stringValue": "timed_out" } },
{ "key": "agent.operation.effect", "value": { "stringValue": "mutating" } },
{ "key": "agent.operation.retry_safety", "value": { "stringValue": "unknown" } },
{ "key": "agent.state.predicate", "value": { "stringValue": "return_created" } },
{ "key": "agent.state.observation", "value": { "stringValue": "ambiguous" } }
]
}

That evidence supports an uncertain-mutation finding: the mutation may have succeeded despite the timeout. It does not justify claiming rollback or blindly retrying.

An optional browser lookup may fail while a fallback succeeds. A required mutating call may time out after committing. A verifier can establish that an earlier error recovered. Treating all three as the same failure would create noisy groups and unsafe remediation advice.

Perseval therefore reports missing facts instead of inventing requiredness, mutation safety, or a root success claim. For an error-only run, open Full Trace, select the error span, and read the Finding inspector. It names the missing facts and points to Attributes.

Do not put secrets in trace attributes. Prompt, message, reasoning, source-code, input, output, and tool-payload values become blob references; externalization limits automatic display but is not redaction. See Privacy and storage.