Last updated: September 16, 2026
Span Attributes
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.
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.
| Attribute | Description |
|---|---|
service.name | Harness name (claude-code, cursor, codex), or the agent_name override. |
service.version | Plugin version (dev in source runs). |
gen_ai.harness.name | The coding harness that ran the session, for example claude-code, cursor, or codex. Exposed as the Harness filter on every tab. |
gen_ai.agent.name | Agent name, or the subagent type on invoke_agent spans. |
gen_ai.provider.name | Model provider, for example anthropic or openai. Resolved from the model prefix, else the harness default. |
gen_ai.conversation.id | Session identifier that groups all spans from a single session. |
dash0.team.name | Team the session is attributed to, for example platform. Only set when team_name is configured. Telemetry without it groups under unknown. |
process.working_directory | Working 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.
| Attribute | Description |
|---|---|
dash0.gen_ai.vcs.repository.name | Repository name. |
dash0.gen_ai.vcs.repository.url.full | Full repository URL, normalized to https. |
dash0.gen_ai.vcs.owner.name | Repository owner (organization or user). |
dash0.gen_ai.vcs.provider.name | VCS provider: github, gitlab, bitbucket, or gitea. |
dash0.gen_ai.vcs.ref.head.name | Branch or tag name. |
dash0.gen_ai.vcs.ref.head.type | branch or tag. |
dash0.gen_ai.vcs.ref.head.revision | Commit SHA of the checked-out ref. |
dash0.gen_ai.vcs.commit.sha | Commit SHA, auto-extracted from git commit output. Survives omit_io. |
dash0.gen_ai.vcs.pull_request.url | Pull request or merge request URL, auto-extracted from tool responses. Survives omit_io. |
dash0.gen_ai.vcs.issue.url | Issue 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.
| Attribute | Description |
|---|---|
gen_ai.operation.name | chat or invoke_agent. |
gen_ai.request.model | Model used, for example claude-opus-4-8 or gpt-5.3-codex. |
gen_ai.request.reasoning.level | Reasoning 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.name | Session title. Claude Code only, derived from the first prompt and gated by omit_io. |
gen_ai.usage.input_tokens | Input tokens for a model invocation. |
gen_ai.usage.output_tokens | Output tokens for a model invocation. |
gen_ai.usage.cache_read.input_tokens | Input tokens served from the prompt cache. |
gen_ai.usage.cache_creation.input_tokens | Input tokens spent populating the prompt cache. |
dash0.gen_ai.usage.cache_creation.ephemeral_5m.input_tokens | Cache creation tokens for the 5-minute tier. Claude Code only. |
dash0.gen_ai.usage.cache_creation.ephemeral_1h.input_tokens | Cache creation tokens for the 1-hour tier. Claude Code only. |
gen_ai.usage.reasoning.output_tokens | Thinking tokens. A subset of output_tokens, not an addition, so cost is unaffected. Emitted only when greater than zero. |
gen_ai.input.messages | User messages as JSON. Gated by omit_io. |
gen_ai.output.messages | Assistant messages as JSON. Gated by omit_io. |
gen_ai.agent.id | Subagent ID, on invoke_agent spans. |
exception.message | Error text, on a failed session. |
Billing and Plan Attributes
| Attribute | Description |
|---|---|
dash0.gen_ai.billing_mode | subscription, api, metered_external, or unknown. Claude Code and Codex. |
dash0.gen_ai.billing_provider | bedrock, vertex, foundry, or gateway. Claude Code only, and only when the mode is metered_external. |
dash0.gen_ai.plan_type | Provider plan name. Provider vocabulary: display it, do not parse it. Claude Code and Codex. |
dash0.gen_ai.rate_limit.{primary,secondary}.used_percent | Rate limit consumption, 0–100. Codex only. |
dash0.gen_ai.rate_limit.{primary,secondary}.window_minutes | Rate limit window length. Codex only. |
dash0.gen_ai.rate_limit.{primary,secondary}.resets_at | Rate limit reset time, unix seconds. Codex only. |
dash0.gen_ai.credits.available / .unlimited / .balance | Credit state. Codex only. |
Tool Span Attributes
Emitted per tool call, on spans where gen_ai.operation.name is execute_tool.
| Attribute | Description |
|---|---|
gen_ai.tool.name | Tool name, for example Bash or Read. MCP tool names are stripped of their mcp__<server>__ prefix. |
gen_ai.tool.type | function. |
gen_ai.tool.call.id | Tool-use ID. |
gen_ai.tool.call.arguments | Tool input. Gated by omit_io, capped at 16 KB. |
gen_ai.tool.call.result | Tool output. Gated by omit_io, capped at 16 KB. |
dash0.gen_ai.tool.mcp_server | MCP server name, parsed from the tool name. |
dash0.gen_ai.tool.bash.command_family | Leading binary from Bash commands, for example git or npm. |
dash0.gen_ai.tool.skill.name | Skill name from Skill tool invocations. |
dash0.gen_ai.tool.skill.source | command or model: whether a person or the model loaded the skill. |
dash0.gen_ai.code.lines_added | Lines added, from the Edit/Write/MultiEdit patch. Claude Code only. |
dash0.gen_ai.code.lines_removed | Lines removed, from the Edit/Write/MultiEdit patch. Claude Code only. |
User Attributes
These follow the OpenTelemetry semantic conventions for user identity.
| Attribute | Description |
|---|---|
user.name | Developer identity, from git config user.name or the OS account. Replaced with a 16-character hash when omit_user_info is enabled. |
user.email | Developer email. Read from git only, never inferred. Omitted when omit_user_info is enabled. |
dash0.gen_ai.user.identity.source | git 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.