Motivation
The current GenAI semantic conventions provide attributes for the provider (gen_ai.provider.name, e.g., "anthropic"), the model (gen_ai.request.model, e.g., "claude-3-opus"), and optionally a user-defined agent (gen_ai.agent.name, e.g., "Math Tutor").
However, there is no attribute for the orchestrating AI system or harness itself — the product-level system that coordinates reasoning, tool calling, and workflow execution on top of a provider's models.
For example:
- Claude is an orchestration harness built by Anthropic. It reasons, plans, calls tools, and chains operations — but the provider is
"anthropic" and the model is "claude-3-opus".
- ChatGPT is an orchestration harness built by OpenAI, distinct from the provider
"openai" and model "gpt-4".
- Cursor and Copilot are orchestration harnesses that may use models from multiple providers.
Today, there is no standard way to record which orchestrating system produced a trace.
Proposed Attribute
| Field |
Value |
| Name |
gen_ai.harness.name |
| Type |
string |
| Description |
The name of the AI orchestration system or harness that coordinates GenAI operations, including reasoning, tool calling, and workflow execution. |
| Examples |
"Claude", "ChatGPT", "Gemini", "Copilot", "Cursor" |
| Requirement Level |
Recommended (when available) |
Why This Is Distinct from Existing Attributes
| Attribute |
What it identifies |
Example |
gen_ai.provider.name |
The API provider / company |
"anthropic" |
gen_ai.request.model |
The specific model weights |
"claude-3-opus" |
gen_ai.agent.name |
A user-defined agent built on top |
"Math Tutor" |
gen_ai.harness.name (proposed) |
The orchestrating AI system/product |
"Claude" |
Key distinctions:
- The same provider (e.g.,
anthropic) may power multiple harnesses (Claude, Cursor, a custom app).
- The same model may be used by different harnesses.
- The same harness may use models from different providers (e.g., Cursor can use Claude or GPT-4).
- An agent is a user-defined construct within a harness, while the harness is the platform itself.
Use Cases
- Observability: Operators need to know which orchestrating system produced a trace to debug issues, attribute costs, and understand behavior — not just which provider or model was involved.
- Multi-harness environments: Organizations may use multiple AI systems (Claude, ChatGPT, Copilot) and need to distinguish their telemetry.
- Cost attribution: Different harnesses may have different pricing, even when using the same underlying model.
- Drift detection: Comparing behavior across different orchestrating systems using the same model requires identifying the harness.
Open Questions
- Should this be
gen_ai.harness.name or a different naming convention (e.g., gen_ai.orchestrator.name, gen_ai.system.name)?
- Should there be well-known values (similar to
gen_ai.provider.name), or should it be free-form?
- Should a
gen_ai.harness.version companion attribute also be defined?
Motivation
The current GenAI semantic conventions provide attributes for the provider (
gen_ai.provider.name, e.g.,"anthropic"), the model (gen_ai.request.model, e.g.,"claude-3-opus"), and optionally a user-defined agent (gen_ai.agent.name, e.g.,"Math Tutor").However, there is no attribute for the orchestrating AI system or harness itself — the product-level system that coordinates reasoning, tool calling, and workflow execution on top of a provider's models.
For example:
"anthropic"and the model is"claude-3-opus"."openai"and model"gpt-4".Today, there is no standard way to record which orchestrating system produced a trace.
Proposed Attribute
gen_ai.harness.namestring"Claude","ChatGPT","Gemini","Copilot","Cursor"Why This Is Distinct from Existing Attributes
gen_ai.provider.name"anthropic"gen_ai.request.model"claude-3-opus"gen_ai.agent.name"Math Tutor"gen_ai.harness.name(proposed)"Claude"Key distinctions:
anthropic) may power multiple harnesses (Claude, Cursor, a custom app).Use Cases
Open Questions
gen_ai.harness.nameor a different naming convention (e.g.,gen_ai.orchestrator.name,gen_ai.system.name)?gen_ai.provider.name), or should it be free-form?gen_ai.harness.versioncompanion attribute also be defined?