diff --git a/docs/decisions/0003-agent-opentelemetry-instrumentation.md b/docs/decisions/0003-agent-opentelemetry-instrumentation.md
index 863387b5cb..61d4d2f080 100644
--- a/docs/decisions/0003-agent-opentelemetry-instrumentation.md
+++ b/docs/decisions/0003-agent-opentelemetry-instrumentation.md
@@ -127,7 +127,7 @@ The implementation is validated through:
```csharp
// Create TracerProvider
using var tracerProvider = Sdk.CreateTracerProviderBuilder()
- .AddSource(AgentOpenTelemetryConsts.DefaultSourceName)
+ .AddSource(OpenTelemetryAgent.DefaultSourceName)
.AddConsoleExporter()
.Build();
diff --git a/dotnet/src/Microsoft.Agents.AI/OpenTelemetryAgent.cs b/dotnet/src/Microsoft.Agents.AI/OpenTelemetryAgent.cs
index 90c0ec59eb..c88b008687 100644
--- a/dotnet/src/Microsoft.Agents.AI/OpenTelemetryAgent.cs
+++ b/dotnet/src/Microsoft.Agents.AI/OpenTelemetryAgent.cs
@@ -41,6 +41,18 @@ public sealed class OpenTelemetryAgent : DelegatingAIAgent, IDisposable
// inner agent not directly but rather via OpenTelemetryChatClient, which wraps a ForwardingChatClient that in turn
// calls back into the inner agent.
+ ///
+ /// Gets the default name used by when no source
+ /// name is supplied to the constructor.
+ ///
+ ///
+ /// Pass this value to the tracing pipeline (for example, TracerProviderBuilder.AddSource) to subscribe to
+ /// the spans emitted by agents that use the default source name, instead of hardcoding the literal name. This is
+ /// a property rather than a constant so that the value is read at run time: a consumer that upgrades the package
+ /// picks up the current source name without recompiling.
+ ///
+ public static string DefaultSourceName => OpenTelemetryConsts.DefaultSourceName;
+
/// The providing the bulk of the telemetry.
private readonly OpenTelemetryChatClient _otelClient;
/// The provider name extracted from .
diff --git a/dotnet/tests/Microsoft.Agents.AI.UnitTests/OpenTelemetryAgentTests.cs b/dotnet/tests/Microsoft.Agents.AI.UnitTests/OpenTelemetryAgentTests.cs
index 79e3418b86..e6a1c67077 100644
--- a/dotnet/tests/Microsoft.Agents.AI.UnitTests/OpenTelemetryAgentTests.cs
+++ b/dotnet/tests/Microsoft.Agents.AI.UnitTests/OpenTelemetryAgentTests.cs
@@ -873,6 +873,17 @@ public async Task AutoWireChatClient_UserFactoryAddsOwnOTel_CoexistsWithBelowFic
Assert.Equal(2, activities.Count(a => string.Equals(a.GetTagItem("gen_ai.operation.name") as string, "chat", StringComparison.Ordinal)));
}
+ [Fact]
+ public void DefaultSourceName_ReturnsDocumentedSourceName()
+ {
+ // Callers pass this to TracerProviderBuilder.AddSource, so it must stay in sync with the source name the
+ // agent emits spans under, which Ctor_NullOrWhitespaceSourceName_AutoWiredChatClientUsesDefaultSource_Async
+ // pins to the same literal. Comparing against the literal here guards a rename of the internal constant.
+
+ // Arrange & Act & Assert
+ Assert.Equal("Experimental.Microsoft.Agents.AI", OpenTelemetryAgent.DefaultSourceName);
+ }
+
[Theory]
[InlineData(null)]
[InlineData("")]