diff --git a/concepts/agents.html b/concepts/agents.html index 53353580..e2672112 100755 --- a/concepts/agents.html +++ b/concepts/agents.html @@ -267,7 +267,7 @@ diff --git a/concepts/filter_chain.html b/concepts/filter_chain.html index 2d2789e1..920278ec 100755 --- a/concepts/filter_chain.html +++ b/concepts/filter_chain.html @@ -294,7 +294,7 @@ powerful abstraction for evolving your agent workflows over time.

diff --git a/concepts/listeners.html b/concepts/listeners.html index d678f3d1..3bbc7f14 100755 --- a/concepts/listeners.html +++ b/concepts/listeners.html @@ -267,7 +267,7 @@ application to LLMs (API-based or hosted) via prompt targets.

diff --git a/concepts/llm_providers/client_libraries.html b/concepts/llm_providers/client_libraries.html index 9e7646a9..9d6d7611 100755 --- a/concepts/llm_providers/client_libraries.html +++ b/concepts/llm_providers/client_libraries.html @@ -660,7 +660,7 @@ Implement fallback logic for better reliability:

diff --git a/concepts/llm_providers/llm_providers.html b/concepts/llm_providers/llm_providers.html index 5fb48e53..d1e7939e 100755 --- a/concepts/llm_providers/llm_providers.html +++ b/concepts/llm_providers/llm_providers.html @@ -304,7 +304,7 @@ Use your preferred client library without changing existing code (see
-

© 2025, Katanemo Labs, Inc Last updated: Feb 25, 2026. 

+

© 2025, Katanemo Labs, Inc Last updated: Feb 26, 2026. 

diff --git a/concepts/llm_providers/model_aliases.html b/concepts/llm_providers/model_aliases.html index 2f2ac157..53216409 100755 --- a/concepts/llm_providers/model_aliases.html +++ b/concepts/llm_providers/model_aliases.html @@ -434,7 +434,7 @@ diff --git a/concepts/llm_providers/supported_providers.html b/concepts/llm_providers/supported_providers.html index f98eaba9..8585cecf 100755 --- a/concepts/llm_providers/supported_providers.html +++ b/concepts/llm_providers/supported_providers.html @@ -1140,7 +1140,7 @@ Any provider that implements the OpenAI API interface can be configured using cu diff --git a/concepts/prompt_target.html b/concepts/prompt_target.html index aee8cda0..c5dfc4c7 100755 --- a/concepts/prompt_target.html +++ b/concepts/prompt_target.html @@ -473,7 +473,7 @@ that you can test and modify locally for multi-turn RAG scenarios.

diff --git a/concepts/signals.html b/concepts/signals.html index 9a8dfd67..66b34557 100755 --- a/concepts/signals.html +++ b/concepts/signals.html @@ -540,7 +540,7 @@ diff --git a/get_started/intro_to_plano.html b/get_started/intro_to_plano.html index 9e0dbd25..f8d99881 100755 --- a/get_started/intro_to_plano.html +++ b/get_started/intro_to_plano.html @@ -226,7 +226,7 @@ This gives Plano several advantages:

diff --git a/get_started/overview.html b/get_started/overview.html index 595a2121..b17bd734 100755 --- a/get_started/overview.html +++ b/get_started/overview.html @@ -337,7 +337,7 @@ diff --git a/get_started/quickstart.html b/get_started/quickstart.html index c323fa08..af22d3b8 100755 --- a/get_started/quickstart.html +++ b/get_started/quickstart.html @@ -516,7 +516,7 @@ diff --git a/guides/function_calling.html b/guides/function_calling.html index 7e333c9f..96c1cd4b 100755 --- a/guides/function_calling.html +++ b/guides/function_calling.html @@ -372,7 +372,7 @@ on the stuff that matters most.

diff --git a/guides/llm_router.html b/guides/llm_router.html index af5c86b1..744e1fcf 100755 --- a/guides/llm_router.html +++ b/guides/llm_router.html @@ -507,7 +507,7 @@ Provides a practical mechanism to encode user preferences through domain-action diff --git a/guides/observability/access_logging.html b/guides/observability/access_logging.html index ce53440a..e2431334 100755 --- a/guides/observability/access_logging.html +++ b/guides/observability/access_logging.html @@ -248,7 +248,7 @@ Access logs can be exported to centralized logging systems (e.g., ELK stack or F diff --git a/guides/observability/monitoring.html b/guides/observability/monitoring.html index dabda752..03dae440 100755 --- a/guides/observability/monitoring.html +++ b/guides/observability/monitoring.html @@ -260,7 +260,7 @@ are some sample configuration files for both, respectively.

diff --git a/guides/observability/observability.html b/guides/observability/observability.html index 687c0a0d..8f2a587e 100755 --- a/guides/observability/observability.html +++ b/guides/observability/observability.html @@ -168,6 +168,7 @@
  • Overview
  • Understanding Plano Traces
  • Behavioral Signals in Traces
  • +
  • Custom Span Attributes
  • Benefits of Using Traceparent Headers
  • How to Initiate A Trace
  • Tracing with the CLI
  • @@ -215,7 +216,7 @@ diff --git a/guides/observability/tracing.html b/guides/observability/tracing.html index d77188ab..f179b27b 100755 --- a/guides/observability/tracing.html +++ b/guides/observability/tracing.html @@ -287,6 +287,100 @@ tools.

    For complete details on all available signals, detection methods, and best practices, see the Signals™ guide.

    +
    +

    Custom Span Attributes

    +

    Plano can automatically attach custom span attributes derived from request headers and static attributes +defined in configuration. This lets you stamp +traces with identifiers like workspace, tenant, or user IDs without changing application code or adding +custom instrumentation.

    +

    Why This Is Useful

    + +
    +

    How It Works

    +

    You configure one or more header prefixes. Any incoming HTTP header whose name starts with one of these +prefixes is captured as a span attribute. You can also provide static attributes that are always injected.

    + +
    +

    Note

    +

    Custom span attributes are attached to LLM spans when handling /v1/... requests via llm_chat. For orchestrator requests to /agents/..., +these attributes are added to both the orchestrator selection span and to each agent span created by agent_chat.

    +
    +

    Example

    +

    Configured prefix:

    +
    tracing:
    +  span_attributes:
    +    header_prefixes:
    +      - x-katanemo-
    +
    +
    +

    Incoming headers:

    +
    X-Katanemo-Workspace-Id: ws_123
    +X-Katanemo-Tenant-Id: ten_456
    +
    +
    +

    Resulting span attributes:

    +
    workspace.id = "ws_123"
    +tenant.id = "ten_456"
    +
    +
    +
    +
    +

    Configuration

    +

    Add the prefix list under tracing in your config:

    +
    tracing:
    +  random_sampling: 100
    +  span_attributes:
    +    header_prefixes:
    +      - x-katanemo-
    +    static:
    +      environment: production
    +      service.version: "1.0.0"
    +
    +
    +

    Static attributes are always injected alongside any header-derived attributes. If a header-derived +attribute key matches a static key, the header value overrides the static value.

    +

    You can provide multiple prefixes:

    +
    tracing:
    +  span_attributes:
    +    header_prefixes:
    +      - x-katanemo-
    +      - x-tenant-
    +    static:
    +      environment: production
    +      service.version: "1.0.0"
    +
    +
    +
    +
    +

    Notes and Examples

    + +

    Prefix mismatch example

    +

    Config:

    +
    tracing:
    +  span_attributes:
    +    header_prefixes:
    +      - x-katanemo-
    +
    +
    +

    Request headers:

    +
    X-Other-User-Id: usr_999
    +
    +
    +

    Result: no attributes are captured from X-Other-User-Id.

    +
    +

    Benefits of Using Traceparent Headers

  • Behavioral Signals in Traces
  • +
  • Custom Span Attributes +
  • Benefits of Using Traceparent Headers
  • How to Initiate A Trace
  • Tracing with the CLI