Skip to content

Run Trace ​

Zelkor provides 100% observability into your agent's behavior. One Agent Protocol run equals exactly one Langfuse trace, automatically joining graph execution, intercepted LLM calls, and tool usage into a single waterfall.

The core advantage: your agent is sandboxed and under observation without relying on the agent code to self-report reliably.

What one run looks like: The graph, the AI Gateway intercept, and the tool calls all share the same trace context.

---
config:
  theme: neutral
---
sequenceDiagram
    participant Aegra as Graph Worker
    participant AIGW as AI Gateway
    participant NeMo as NeMo Guardrails
    participant MCP as MCP Gateway

    Note over Aegra,MCP: langfuse.trace.name = graph_id

    Aegra->>Aegra: Start Run (Root Span)
    Aegra->>AIGW: POST /v1/chat/completions (Child Span)
    AIGW->>NeMo: Check prompt
    NeMo-->>AIGW: Rail pass
    AIGW-->>Aegra: Stream chunks
    Aegra->>MCP: tools/call (Child Span)
    MCP-->>Aegra: Tool result
    Aegra->>Aegra: End Run

The Boundary ​

You deploy the Agent. The platform injects the OpenTelemetry (OTEL) configuration and propagates the Trace Context headers.

Because the AI Gateway intercepts the LLM call, it stamps the Langfuse trace with the exact prompt and completion actually sent to the provider, alongside any guardrail actions taken by NeMo. The graph worker records the overarching logic.

Langfuse stitches these spans together server-side based on the sessionId (the Agent Protocol thread) and the run_id, giving you a complete, unbroken waterfall of the run without manually instrumenting your Python code.