Skip to main content
Every run of your agent is saved as a trace: what it was asked, what it answered, which skills it used, which prompt it ran on, and each model and tool call. Open one from the Traces page or an agent’s Traces tab.

What a run shows about skills

A run’s Overview tab has a Recorded skills section with three rows: Offered, Delivered and Loaded. How skills reach the model defines them. On one run, read them like this: Two more rows can appear. Routing decision is the id of the ranking this run used. Experiment says which group the run was in. Under those rows, each recorded skill has its own line:
  • Explicit load recorded means the skill is on the run’s Loaded list. Activation record means it was recorded another way, such as your code declaring it.
  • Skill version v3 is the version this run received, which may not be today’s. Version not recorded means the run didn’t say.
  • Details shows the recorded version ID and content hash, and Copy evidence copies them.
Across many runs, see Which skills get used.
GET /api/v1/traces/{trace_id} returns the same three steps:
active_skills holds the loaded skills with the version of each, plus any skill your code declared. null means the step wasn’t reported, and [] means it was reported and empty.Loaded comes only from a direct event: the model calls load_skill, a framework’s own skill loader hands it a skill, or your code declares it.Offered and Delivered come from DecimalAI’s own list when DecimalAI built the prompt. Otherwise, on the generic tracer, LangChain, OpenAI Agents and OpenTelemetry, the SDK matches system and developer messages against the skills it knows. A name alone, such as ## Skill: code-review, means Offered. At least 60% of the skill’s body lines means Delivered.

Which prompt a run used

An agent built with agent_config() records, on each run, the prompt that run was given: its source ("decimalai", or a fallback value when no saved prompt was used), the saved version number, the template’s content hash, and the names of the variables it filled. Variable values are never recorded. When DecimalAI could not serve the agent’s skills, the reason is recorded too. The API returns these as prompt on each trace, or null when the run recorded none. GET /api/v1/traces?prompt_version=3 lists the runs whose agent ran saved version 3; a handoff target’s prompt doesn’t count as the run’s own. In the dashboard:
  • A run’s page shows the version in its header, and a Prompt section with the source, hash and variable names, linked to Other traces on this version.
  • The agent’s Traces tab has a Prompt column and a filter by prompt version. Its Version column is the agent’s code version, which a prompt edit doesn’t change.
  • Prompt & skills links each saved version to Traces on this version.

The rest of a run

A run has this shape:
  • Traces are what the rest of DecimalAI works on: evaluators score them, compatibility gives them verdicts, and datasets are built from them. A trace belongs to one agent, and normally one manifest. Some compatibility screens and routes say episode, which means the same thing.
  • Spans nest through parent_span_id, and each has a span_type: agent, llm, tool, retrieval, router, judge, handoff, guardrail, memory, planning or other.
  • LLM calls hold the messages sent, the output and the tokens. Training rows are made of them.
  • Sessions group the runs of one conversation. Runs that share a session_id belong together. @decimalai.trace() takes it.
On a run’s page, the strip at the top shows Duration, Tokens, Est. cost, LLM calls, Spans and LLM latency. Cost is an estimate from model pricing tables. Below it, Execution shows the run as a Timeline or a Tree, beside Overview, which shows the input and output. Select a step to see what went in and came out. A model call has an Open in Playground button, which re-runs that call. The other tabs are Evaluations (scores and verdicts), Compatibility, Contract, Skill Rater and Annotations.

Find a run

The DecimalAI Traces page: stat cards above a table of runs with ID, agent, status, eval verdict, tokens, cost, duration and input.

The Traces page, filterable by agent and by manifest version.

The Traces page covers every agent. It has Search traces (ID, agent or input), filters by Agent and Manifest (the agent version), views for All, Errors, Failed evals and Unevaluated, a Time range, and Group by Agent or Session. An agent’s Traces tab lists that agent’s runs, with a search over input and output, and filters by status, eval verdict and prompt version. Runs from decimalai.evaluate() show here too, and their own page says evaluation in its header.

Trace schema

Every run is a RunTrace:

LlmCallRecord

Check your setup

With DECIMAL_API_KEY set, one command checks your key, tests the connection and sends a test run, with no agent code:
The run is filed under an agent named decimalai-init-test. If it doesn’t appear on the Traces page within seconds, see the silent no-ops.

Turn tracing on

An agent built with agent_config() is traced already. Frameworks shows the line for each framework. For tracing alone, with no prompt or skills from DecimalAI, use a flag:
Every flag traces only, except on CrewAI, where it delivers skills too unless you pass skills=False or set DECIMALAI_SKILLS=0. Frameworks with no DecimalAI integration go through OpenTelemetry.

Zero-code setup (environment variables)

Google ADK has no value here: put DecimalAIPlugin() in your App.

Manual tracing

For a plain function, use the decorator. The SDK reference has the rest.

Next Steps

Evaluations

Test a change, and score production runs.

Troubleshooting

Runs not showing up, or missing a verdict?