Dash0 acquires Polar Signals

Last updated: September 16, 2026

Span Attributes

Complete reference of OpenTelemetry span attributes AI SDLC Insights reads from your coding harnesses' telemetry.

Span attributes are metadata tags on individual spans. These are the raw key-value pairs your coding harnesses emit and Dash0 reads. Use them to filter sessions (for example, dash0.gen_ai.vcs.repository.name="my-repo") and group metrics (for example, sum by (user_name)).

For the aggregated time-series metrics Dash0 derives from these spans, see Derived Metrics.

Note

Coverage varies by harness. Where an attribute is only emitted by some harnesses, the table says so. An attribute that a harness does not report is absent rather than empty, so a breakdown built on it shows nothing for that harness's sessions.

Resource Attributes

Set once per session and carried on every span it produces.

AttributeDescription
service.nameHarness name (claude-code, cursor, codex), or the agent_name override.
service.versionPlugin version (dev in source runs).
gen_ai.harness.nameThe coding harness that ran the session, for example claude-code, cursor, or codex. Exposed as the Harness filter on every tab.
gen_ai.agent.nameAgent name, or the subagent type on invoke_agent spans.
gen_ai.provider.nameModel provider, for example anthropic or openai. Resolved from the model prefix, else the harness default.
gen_ai.conversation.idSession identifier that groups all spans from a single session.
dash0.team.nameTeam the session is attributed to, for example platform. Only set when team_name is configured. Telemetry without it groups under unknown.
process.working_directoryWorking directory. ~-redacted when omit_user_info is enabled.

VCS Context Attributes

Dash0-specific attributes capturing version control context. The branch name is what links a session to a pull request, so a session missing dash0.gen_ai.vcs.ref.head.name cannot be counted as assisting one.

AttributeDescription
dash0.gen_ai.vcs.repository.nameRepository name.
dash0.gen_ai.vcs.repository.url.fullFull repository URL, normalized to https.
dash0.gen_ai.vcs.owner.nameRepository owner (organization or user).
dash0.gen_ai.vcs.provider.nameVCS provider: github, gitlab, bitbucket, or gitea.
dash0.gen_ai.vcs.ref.head.nameBranch or tag name.
dash0.gen_ai.vcs.ref.head.typebranch or tag.
dash0.gen_ai.vcs.ref.head.revisionCommit SHA of the checked-out ref.
dash0.gen_ai.vcs.commit.shaCommit SHA, auto-extracted from git commit output. Survives omit_io.
dash0.gen_ai.vcs.pull_request.urlPull request or merge request URL, auto-extracted from tool responses. Survives omit_io.
dash0.gen_ai.vcs.issue.urlIssue URL, auto-extracted from tool responses. Survives omit_io.

Chat Span Attributes

Emitted per turn, on spans where gen_ai.operation.name is chat or invoke_agent.

AttributeDescription
gen_ai.operation.namechat or invoke_agent.
gen_ai.request.modelModel used, for example claude-opus-4-8 or gpt-5.3-codex.
gen_ai.request.reasoning.levelReasoning level requested: low, medium, high, or xhigh. This is what the Cost tab's Effort breakdown groups by. Claude Code only — no other harness reports an effort field.
gen_ai.conversation.nameSession title. Claude Code only, derived from the first prompt and gated by omit_io.
gen_ai.usage.input_tokensInput tokens for a model invocation.
gen_ai.usage.output_tokensOutput tokens for a model invocation.
gen_ai.usage.cache_read.input_tokensInput tokens served from the prompt cache.
gen_ai.usage.cache_creation.input_tokensInput tokens spent populating the prompt cache.
dash0.gen_ai.usage.cache_creation.ephemeral_5m.input_tokensCache creation tokens for the 5-minute tier. Claude Code only.
dash0.gen_ai.usage.cache_creation.ephemeral_1h.input_tokensCache creation tokens for the 1-hour tier. Claude Code only.
gen_ai.usage.reasoning.output_tokensThinking tokens. A subset of output_tokens, not an addition, so cost is unaffected. Emitted only when greater than zero.
gen_ai.input.messagesUser messages as JSON. Gated by omit_io.
gen_ai.output.messagesAssistant messages as JSON. Gated by omit_io.
gen_ai.agent.idSubagent ID, on invoke_agent spans.
exception.messageError text, on a failed session.

Billing and Plan Attributes

AttributeDescription
dash0.gen_ai.billing_modesubscription, api, metered_external, or unknown. Claude Code and Codex.
dash0.gen_ai.billing_providerbedrock, vertex, foundry, or gateway. Claude Code only, and only when the mode is metered_external.
dash0.gen_ai.plan_typeProvider plan name. Provider vocabulary: display it, do not parse it. Claude Code and Codex.
dash0.gen_ai.rate_limit.{primary,secondary}.used_percentRate limit consumption, 0–100. Codex only.
dash0.gen_ai.rate_limit.{primary,secondary}.window_minutesRate limit window length. Codex only.
dash0.gen_ai.rate_limit.{primary,secondary}.resets_atRate limit reset time, unix seconds. Codex only.
dash0.gen_ai.credits.available / .unlimited / .balanceCredit state. Codex only.

Tool Span Attributes

Emitted per tool call, on spans where gen_ai.operation.name is execute_tool.

AttributeDescription
gen_ai.tool.nameTool name, for example Bash or Read. MCP tool names are stripped of their mcp__<server>__ prefix.
gen_ai.tool.typefunction.
gen_ai.tool.call.idTool-use ID.
gen_ai.tool.call.argumentsTool input. Gated by omit_io, capped at 16 KB.
gen_ai.tool.call.resultTool output. Gated by omit_io, capped at 16 KB.
dash0.gen_ai.tool.mcp_serverMCP server name, parsed from the tool name.
dash0.gen_ai.tool.bash.command_familyLeading binary from Bash commands, for example git or npm.
dash0.gen_ai.tool.skill.nameSkill name from Skill tool invocations.
dash0.gen_ai.tool.skill.sourcecommand or model: whether a person or the model loaded the skill.
dash0.gen_ai.code.lines_addedLines added, from the Edit/Write/MultiEdit patch. Claude Code only.
dash0.gen_ai.code.lines_removedLines removed, from the Edit/Write/MultiEdit patch. Claude Code only.

User Attributes

These follow the OpenTelemetry semantic conventions for user identity.

AttributeDescription
user.nameDeveloper identity, from git config user.name or the OS account. Replaced with a 16-character hash when omit_user_info is enabled.
user.emailDeveloper email. Read from git only, never inferred. Omitted when omit_user_info is enabled.
dash0.gen_ai.user.identity.sourcegit or os: which source user.name came from.

What Is Not a Span Attribute

Some values shown in AI SDLC Insights are computed by Dash0 rather than emitted by your harness, so there is no attribute to filter or group by:

  • Evaluations and activity are assessed by Dash0 over a sample of sessions. See Evaluation.
  • PR type, review depth, and the pipeline stages are derived from pull request lifecycle data supplied by the GitHub integration, not from harness telemetry.
  • Cost is computed from token counts against a Dash0-maintained pricing catalog. See Cost.

Using Attributes in PromQL

In PromQL, attribute names appear with dots replaced by underscores, for example dash0_gen_ai_vcs_repository_name, user_name, or gen_ai_request_model. Use them to filter sessions or group metrics (for example, sum by (user_name)).

Further Reading

  • Derived Metrics: Time-series metrics Dash0 derives from these span attributes.
  • Explore Sessions: Drill into individual sessions with detailed attributes.
  • Key Concepts: The data model and terminology behind AI SDLC Insights.
  • Track Cost: See spend by harness, model, effort, team, and repository.