Traces

    The trace page

    Read one trace: the waterfall and its views, the model-call panel, tool calls, the Logs, Evaluation and Metadata tabs, and the actions — Evaluate, Add to dataset, Annotate, Optimize, Open in playground, Comments.

    After this page you can say which call in a request was slow or wrong, what it sent and what its tools returned, what a judge said about it, and hand a link to the exact span to a teammate.

    Header and tabs

    The header shows the trace id, status, duration, tokens, estimated cost, and the session, user and app version when the SDK set them; a coding-agent turn adds “turn n of m in session …”, the vendor and the span and log counts. Tabs: Waterfall · Logs · Evaluation · Metadata, plus Conversation for coding-agent turns. Back returns to the filtered list with its filters intact, and prev / next step through that list.

    Waterfall

    Views: Tree · Chat · Timeline · Graph. The tree is built from the spans’ parent ids; rows show self-time bars and error markers, a type legend (model call · tool · http · db · function · log · eval result), a span-type filter, expand all and a critical path toggle that highlights the longest chain of self time. An error stepper moves between failing spans.

    Selecting an llm_call span shows: model and provider, temperature and max tokens, the request as a chat transcript (system · user · assistant · tool) with a rendered / raw toggle, the completion, a thinking block when present, tokens in and out with cached read, cached write and reasoning tokens listed separately, time to first token, the estimated cost from the price sheet, the tool calls the model requested, and the attributes table. Selecting a tool_call shows the tool name, call id, duration, arguments and result as copyable JSON, the error type, message and stack when it failed, and a redundant call marker when identical arguments repeat among sibling calls.

    Coding-agent traces load spans as light previews (each text field cut at 4,096 characters) and fetch the selected span in full when you open it, because one turn can hold hundreds of calls that each carry the whole conversation. See Reading a turn.

    Logs

    Every log line the SDK captured inside this trace, oldest first and paged, with the line’s level and the span that wrote it. Arriving from the Logs sub-view focuses the matched line; Jump to the span that logged it highlights that span and its parent in the waterfall.

    Evaluation

    The overall score against its threshold, the source (manual or online rule), and one row per evaluator with score, pass and the judge’s reason; each cell is tri-state (number · no verdict · error). Below: the judge model and its cost. Re-evaluate scores the trace again; Label (agree / disagree) records your own verdict, which counts toward calibration — see Calibration and disagreements. A span or session evaluation from an online rule shows here too.

    Metadata

    Session, user and device (linking into Sessions and Users), Environment, app version, SDK version, whether content was captured and which setting decided it, a span breakdown by type (count and time), the slowest work by self time (click focuses the span) and the incoming and outgoing HTTP request and response when the trace has them.

    Actions

    ActionWhat it doesNeeds
    EvaluateScore this trace now with evaluators and a judge Model; the result lands on the Evaluation tab.plan feature trace-evaluation, a Model
    Add to datasetTurn the trace into a dataset row with a link back to it. Disabled on a trace whose content was not captured.plan feature datasets — see Build a dataset from traces
    AnnotateOpen the label drawer: thumbs, the rubric sliders and a note. See Work a queue and label from a trace.plan feature rl-labeling
    OptimizeAnalyse the trace and get ranked findings and a fix prompt (below).plan feature trace-optimization, a Model
    Open in playgroundSeed the Playground chat with the span’s messages, model and parameters, with the production answer pinned for comparison. Disabled when content was not captured.plan feature chat-playground
    CommentsA thread on the trace, span or session with @mentions; mentioned members get one email with a deep link. Any organization member can read and post.membership
    Copy linkA URL with the trace id and the Environment, and the span when one is selected, that opens the same view for any teammate with access.

    Optimize

    Optimize asks a Model of your choice to analyse the spans. Deterministic findings (repeated calls, failed spans, token-heavy calls) list immediately; two model passes stream in behind them. The report has a verdict summary, issues by severity (high · medium · low) and category (prompt · tool · model · cost · reliability), each with what happened, why it matters, a recommendation, a code hint and View span, plus Copy fix prompt — a paste-ready prompt for a coding agent. The report is saved for the trace with the time it was made; Re-run analysis refreshes it. Its cost is counted as judge spend on Cost.

    Comments

    A comment is markdown, 1–5,000 characters. Mention a member as @jane@acme.com or @"Jane Doe"; unknown names stay plain text. Each mentioned member is emailed once with a deep link to the trace and Environment; the author is never emailed about their own comment, and an edit notifies only newly mentioned members. Authors and organization Owners or Admins can edit or delete; a deleted comment leaves every list. Mentions of you are also in the notification bell and in Mentions of me in the user menu. Replies are plain comments on the same subject; there are no nested threads.

    When content was not captured

    A trace from a service started with capture_content=False, or whose mask hook stripped a body, shows a header notice and prints the reason in every withheld field: prompt, completion and tool arguments are “not captured”, while tokens, time to first token, cost and tool names remain. Evaluators that need the output report skipped with that reason rather than zero, timing and structure evaluators score normally, and Add to dataset and Open in playground stay disabled with the same reason.

    EvalKit is built by Syntropylabs. Published on PyPI and npm.