<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Quantiles.io</title>
    <description>The latest articles on DEV Community by Quantiles.io (@quantiles-io).</description>
    <link>https://dev.to/quantiles-io</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4051944%2F2316610d-8030-4abc-8ed9-fba5f336777c.png</url>
      <title>DEV Community: Quantiles.io</title>
      <link>https://dev.to/quantiles-io</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/quantiles-io"/>
    <language>en</language>
    <item>
      <title>AI Agent Documentation: A Guide to llms.txt, AGENTS.md, SKILL.md, and MCP</title>
      <dc:creator>Quantiles.io</dc:creator>
      <pubDate>Thu, 15 Oct 2026 17:38:45 +0000</pubDate>
      <link>https://dev.to/quantiles-io/ai-agent-documentation-a-guide-to-llmstxt-agentsmd-skillmd-and-mcp-1jae</link>
      <guid>https://dev.to/quantiles-io/ai-agent-documentation-a-guide-to-llmstxt-agentsmd-skillmd-and-mcp-1jae</guid>
      <description>&lt;p&gt;Documentation, READMEs, and API references have long helped developers get started with new tools. As coding agents take on more of the work, new formats are emerging to help them navigate that information and use developer products successfully.&lt;/p&gt;

&lt;p&gt;You've probably encountered some already: &lt;code&gt;llms.txt&lt;/code&gt; for finding documentation, &lt;code&gt;AGENTS.md&lt;/code&gt; for repository instructions, &lt;code&gt;SKILL.md&lt;/code&gt; for reusable workflows, and the Model Context Protocol (MCP) for connecting agents to tools and data. Newer proposals, including &lt;code&gt;auth.md&lt;/code&gt;, are beginning to tackle how agents sign up for services and manage credentials. Understanding what each does helps you decide which ones would be useful for your product.&lt;/p&gt;

&lt;h2&gt;
  
  
  Types of AI agent documentation and protocols
&lt;/h2&gt;

&lt;p&gt;Helping coding agents use a developer product involves more than writing good documentation. Agents need to know where to find information, how to work within a repository, and which tools are available to them. A growing collection of resources aims to make that easier, from documentation files and agent-specific instructions to protocols like MCP. The table below offers a look at what's available, followed by a closer examination of how each works and when it might be worth using.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI Agent Resources and Their Purpose&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Resource&lt;/th&gt;
&lt;th&gt;Primary purpose&lt;/th&gt;
&lt;th&gt;Where it lives&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;llms.txt&lt;/td&gt;
&lt;td&gt;Helps agents find relevant documentation&lt;/td&gt;
&lt;td&gt;Website or documentation site&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;llms-full.txt&lt;/td&gt;
&lt;td&gt;Provides documentation in a single file&lt;/td&gt;
&lt;td&gt;Website or documentation site&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AGENTS.md&lt;/td&gt;
&lt;td&gt;Provides instructions for working in a repository&lt;/td&gt;
&lt;td&gt;Repository, with agent-specific loading rules&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SKILL.md&lt;/td&gt;
&lt;td&gt;Defines reusable workflows and supporting resources&lt;/td&gt;
&lt;td&gt;Skill directory&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CLAUDE.md&lt;/td&gt;
&lt;td&gt;Provides project instructions for Claude Code&lt;/td&gt;
&lt;td&gt;Repository or Claude Code configuration&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GEMINI.md&lt;/td&gt;
&lt;td&gt;Provides project instructions for Gemini CLI&lt;/td&gt;
&lt;td&gt;Project or user configuration&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cursor Rules (.mdc)&lt;/td&gt;
&lt;td&gt;Provides persistent or context-specific instructions&lt;/td&gt;
&lt;td&gt;.cursor/rules/&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Copilot instructions&lt;/td&gt;
&lt;td&gt;Provides repository-wide or path-specific instructions&lt;/td&gt;
&lt;td&gt;.github/copilot-instructions.md or .github/instructions/&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MCP&lt;/td&gt;
&lt;td&gt;Connects agents to tools, resources, and prompts&lt;/td&gt;
&lt;td&gt;MCP server connected to a client&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;auth.md&lt;/td&gt;
&lt;td&gt;Describes service registration and authentication&lt;/td&gt;
&lt;td&gt;Service website&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a id="llms-txt"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  What is &lt;code&gt;llms.txt&lt;/code&gt; and how do AI agents use it?
&lt;/h3&gt;

&lt;p&gt;Finding the right documentation isn't always straightforward for an AI agent. &lt;code&gt;llms.txt&lt;/code&gt; is a Markdown file that introduces a product and links to its most useful documentation, giving agents a starting point without having to search through an entire site.&lt;/p&gt;

&lt;p&gt;For example, the Quantiles website itself provides an &lt;code&gt;llms.txt&lt;/code&gt; that begins like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# Quantiles&lt;/span&gt;
&lt;span class="gt"&gt;
&amp;gt; Quantiles helps developers evaluate how reliably coding agents complete developer tasks.&lt;/span&gt;

&lt;span class="gu"&gt;## Getting started&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;Quickstart&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="sx"&gt;https://quantiles.io/documentation/quickstart&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;: Get started with agent evaluations.
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;Agent Quickstart&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="sx"&gt;https://quantiles.io/documentation/agent-quickstart&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;: Coding agent instructions to configure, execute, and inspect evaluations.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agents can follow the links relevant to their task rather than loading everything into context. The proposal also supports discovering these resources through HTML links or HTTP headers and recommends providing Markdown versions of documentation pages. A related convention, &lt;code&gt;llms-full.txt&lt;/code&gt;, combines documentation into a single file. Though it seems convenient, a full export may consume unnecessary context. Platforms like &lt;a href="https://www.mintlify.com/docs/ai/llmstxt" rel="noopener noreferrer"&gt;Mintlify&lt;/a&gt; can generate both files.&lt;/p&gt;

&lt;p&gt;&lt;a id="llms-full-txt"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Having an &lt;code&gt;llms.txt&lt;/code&gt; or &lt;code&gt;llms-full.txt&lt;/code&gt; doesn't guarantee that an agent will use it.&lt;/strong&gt; Evaluate whether agents discover these resources, follow the relevant links, and find the information needed to complete their tasks.&lt;/p&gt;

&lt;p&gt;&lt;a id="agents-md"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  How &lt;code&gt;AGENTS.md&lt;/code&gt; guides coding agents
&lt;/h3&gt;

&lt;p&gt;When an agent starts working in a repository, it needs to understand how the project works, from installing dependencies and running tests to following coding conventions. The &lt;code&gt;AGENTS.md&lt;/code&gt; format provides a dedicated place for these instructions.&lt;/p&gt;

&lt;p&gt;For example, here is the beginning of the &lt;a href="https://github.com/quantiles-evals/quantiles/blob/main/AGENTS.md" rel="noopener noreferrer"&gt;Quantiles &lt;code&gt;AGENTS.md&lt;/code&gt;&lt;/a&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Quantiles Agent Guide

This file is for coding assistants such as Codex, Claude Code, Cursor, GitHub Copilot, Gemini CLI, OpenCode, and similar tools. It gives agents a short, public-safe map of the Quantiles repository and the rules for making focused, reviewable changes.

Before attempting tasks in this repository, read these files:

- README.md: public product overview, quickstart, CLI examples, SDK summary, docs links, and agent guidance.
- CONTRIBUTING.md: contributor expectations, development workflow, and review norms.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The instructions depend on the project. They might cover development workflows, testing requirements, or instructions on how to use a particular tool. Unlike website documentation, &lt;code&gt;AGENTS.md&lt;/code&gt; is intended to guide agents working in a repository, and not every agent will automatically read it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://learn.chatgpt.com/docs/agent-configuration/agents-md" rel="noopener noreferrer"&gt;Codex layers repository guidance&lt;/a&gt;, while other coding agents may load and prioritize them differently. Regardless of the agent, keeping instructions focused and up to date is important. &lt;strong&gt;Outdated commands and unnecessary rules can introduce workflow inefficiencies, increase task complexity, and lead to failures when agents interact with your product.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a id="skill-md"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  How &lt;code&gt;SKILL.md&lt;/code&gt; helps agents complete workflows
&lt;/h3&gt;

&lt;p&gt;Some tasks require more than repository instructions. An agent might need to install a CLI, configure credentials, complete several steps, and verify the results. An &lt;a href="https://quantiles.io/articles/does-your-skill-md-help-coding-agents" rel="noopener noreferrer"&gt;agent skill&lt;/a&gt; provides reusable instructions and supporting resources to help agents complete these workflows.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;quantiles-skill/
├── SKILL.md
├── references/
│   ├── configuration.md
│   └── troubleshooting.md
└── scripts/
    └── verify-install.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;SKILL.md&lt;/code&gt; file contains a name, description, and instructions for completing a workflow. Supporting files can provide additional documentation or scripts when needed. The description is especially important because it helps agents determine when to use the skill.&lt;/p&gt;

&lt;p&gt;Both &lt;a href="https://learn.chatgpt.com/docs/build-skills" rel="noopener noreferrer"&gt;OpenAI Codex&lt;/a&gt; and &lt;a href="https://platform.claude.com/docs/en/agents-and-tools/agent-skills/overview" rel="noopener noreferrer"&gt;Anthropic's skills implementation&lt;/a&gt; use a process called progressive disclosure to discover and use skills. Agents initially see a brief description of available skills and load the full instructions and supporting resources when needed. For this to work, the skill must be installed where the agent can discover it. Simply adding a &lt;code&gt;SKILL.md&lt;/code&gt; file to a repository doesn't mean an agent will find or use it. Even when a skill is available, there's still the question of whether an agent will recognize when to use it and follow the instructions correctly.&lt;/p&gt;

&lt;p&gt;&lt;a id="mcp"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  How MCP connects AI agents to tools and data
&lt;/h3&gt;

&lt;p&gt;While documentation helps agents understand a product, the &lt;a href="https://www.anthropic.com/news/model-context-protocol" rel="noopener noreferrer"&gt;Model Context Protocol (MCP)&lt;/a&gt; provides a standardized way for AI applications to connect to its tools and data. MCP servers can expose three types of capabilities:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Tools:&lt;/strong&gt; Operations agents can invoke, such as creating a project or starting an evaluation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Resources:&lt;/strong&gt; Information applications can retrieve, such as evaluation results or execution logs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Prompts:&lt;/strong&gt; Reusable templates that guide specific tasks or interactions.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For example, a Quantiles MCP server could allow an agent to create and compare the results of evaluations using structured &lt;a href="https://quantiles.io/articles/evaluating-ai-agent-tool-use" rel="noopener noreferrer"&gt;tool calls&lt;/a&gt; rather than manually composing API requests or using a CLI. Which capabilities an agent can actually use depends on what its MCP client supports and makes available.&lt;/p&gt;

&lt;p&gt;MCPs and &lt;code&gt;SKILL.md&lt;/code&gt; files can also work together. A skill can guide an agent through a workflow, explaining which operations to use, in what order, and how to verify the results. MCP provides access to the tools needed to carry out those steps.&lt;/p&gt;

&lt;h3&gt;
  
  
  Instruction files for different coding agents
&lt;/h3&gt;

&lt;p&gt;The resources we've covered so far, including &lt;code&gt;llms.txt&lt;/code&gt;, &lt;code&gt;AGENTS.md&lt;/code&gt;, &lt;code&gt;SKILL.md&lt;/code&gt;, and MCP, are designed to work across different AI agents, although support varies. But coding agents also have their own instruction files and configuration options. These can differ in how instructions are loaded, where they apply, and which instructions take priority. Here's how some popular coding agents handle them:&lt;/p&gt;

&lt;p&gt;&lt;a id="claude-md"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://code.claude.com/docs/en/memory" rel="noopener noreferrer"&gt;Claude Code&lt;/a&gt;:&lt;/strong&gt; Uses &lt;code&gt;CLAUDE.md&lt;/code&gt; for project instructions and &lt;code&gt;.claude/rules/&lt;/code&gt; for more specific rules. It can also support &lt;code&gt;AGENTS.md&lt;/code&gt;, depending on the version and configuration.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a id="gemini-md"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://geminicli.com/docs/cli/gemini-md/" rel="noopener noreferrer"&gt;Gemini CLI&lt;/a&gt;:&lt;/strong&gt; Uses &lt;code&gt;GEMINI.md&lt;/code&gt; for project context and instructions, with options to configure alternative filenames.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a id="cursor-rules"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://cursor.com/docs/rules" rel="noopener noreferrer"&gt;Cursor&lt;/a&gt;:&lt;/strong&gt; Supports &lt;code&gt;AGENTS.md&lt;/code&gt; and rules stored in &lt;code&gt;.cursor/rules/&lt;/code&gt;. Rules can apply automatically, to specific files, when relevant to a task, or when explicitly requested.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a id="copilot-instructions"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://docs.github.com/en/copilot/how-tos/copilot-on-github/customize-copilot/add-custom-instructions/add-repository-instructions" rel="noopener noreferrer"&gt;GitHub Copilot&lt;/a&gt;:&lt;/strong&gt; Uses &lt;code&gt;.github/copilot-instructions.md&lt;/code&gt; for repository-wide guidance and &lt;code&gt;.github/instructions/*.instructions.md&lt;/code&gt; for instructions that apply to specific paths.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With several agents to support, maintaining separate instruction files can quickly become difficult. Where possible, keep shared guidance in one place and add agent-specific instructions only when needed. And just as with &lt;code&gt;AGENTS.md&lt;/code&gt; or &lt;code&gt;SKILL.md&lt;/code&gt;, test whether each agent discovers and follows the instructions as intended.&lt;/p&gt;

&lt;p&gt;&lt;a id="auth-md"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  How auth.md supports AI agent authentication
&lt;/h3&gt;

&lt;p&gt;One of the newer proposals is &lt;a href="https://workos.com/auth-md/docs" rel="noopener noreferrer"&gt;auth.md&lt;/a&gt;, introduced by WorkOS in May 2026. Unlike the more established resources we've covered, it's still in the early stages of adoption. It addresses a familiar problem where an agent can find the documentation and understand an API but still get stuck when it needs to create an account or obtain credentials.&lt;/p&gt;

&lt;p&gt;The proposal gives services a way to describe registration, authentication, and available permissions in a Markdown file. It supports two main approaches:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Agent verified:&lt;/strong&gt; A trusted agent provider verifies the user's identity, allowing the service to register the agent without additional user interaction.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;User claimed:&lt;/strong&gt; The agent starts registration, then asks the user to sign in and confirm a code to authorize access.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Both approaches ultimately allow the agent to obtain a scoped access token. But publishing an auth.md alone isn't enough. The service still needs to implement the authentication endpoints, token issuance, and permission checks.&lt;/p&gt;

&lt;p&gt;It's also worth distinguishing auth.md from MCP authorization. While MCP authorization governs access to protected MCP servers, &lt;code&gt;auth.md&lt;/code&gt; focuses on helping agents register with a service in the first place, so that they have an identity that can be later authorized.&lt;/p&gt;

&lt;p&gt;As an emerging proposal, &lt;code&gt;auth.md&lt;/code&gt; is worth watching, but compatibility and agent support still need to be tested. And even with automated registration, some workflows may still require human approval, particularly when account ownership, permissions, or billing are involved.&lt;/p&gt;

&lt;h2&gt;
  
  
  Which AI agent documentation standards to use, and how to evaluate them
&lt;/h2&gt;

&lt;p&gt;The best place to start is with the problems agents encounter when using your product. A simple library may only need accessible documentation, while a developer platform with more complex workflows might benefit from agent skills, structured tools, and authentication guidance.&lt;/p&gt;

&lt;p&gt;Different resources address different parts of the developer experience:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Matching AI Agent Resources to Developer Workflows&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Agent needs to...&lt;/th&gt;
&lt;th&gt;Relevant resources&lt;/th&gt;
&lt;th&gt;What to evaluate&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Find information&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;llms.txt&lt;/code&gt;, Markdown documentation&lt;/td&gt;
&lt;td&gt;Can it find the right documentation?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Understand a workflow&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;AGENTS.md&lt;/code&gt;, &lt;code&gt;SKILL.md&lt;/code&gt;, agent-specific rules&lt;/td&gt;
&lt;td&gt;Does it follow the right steps and prerequisites?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Establish access&lt;/td&gt;
&lt;td&gt;Authentication flows, &lt;code&gt;auth.md&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Can it authenticate and obtain the required permissions?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Complete and verify tasks&lt;/td&gt;
&lt;td&gt;MCP, CLI, APIs&lt;/td&gt;
&lt;td&gt;Can it perform the operation and verify the result?&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;These resources aren't mutually exclusive, and not every product needs all of them. Adding more instructions isn't always the best solution, either. What matters is whether the ones you do have actually help agents complete developer tasks.&lt;/p&gt;

&lt;p&gt;To find out, start by evaluating representative workflows, such as installing your product, completing the quickstart, configuring authentication, or using a more advanced capability. Compare performance with and without the resource to understand where it helps, where it doesn't, and what might need improvement.&lt;/p&gt;

&lt;p&gt;Here are a few key questions to consider:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Discovery and activation:&lt;/strong&gt; Did the agent find and use the relevant documentation, skill, or tool?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Task success and reliability:&lt;/strong&gt; Did it complete the task correctly and consistently across repeated trials?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Efficiency:&lt;/strong&gt; How much time, &lt;a href="https://quantiles.io/articles/using-token-data-to-improve-the-ai-agent-experience" rel="noopener noreferrer"&gt;token usage&lt;/a&gt;, and tool activity did the task require?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Errors and recovery:&lt;/strong&gt; Where did the agent get stuck, and &lt;a href="https://quantiles.io/articles/measuring-agent-recovery" rel="noopener noreferrer"&gt;could it recover&lt;/a&gt; without human intervention?&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  As AI agents evolve, documentation will too
&lt;/h2&gt;

&lt;p&gt;AI agents are evolving quickly, and the resources that help them use your product will need to keep up. What works for one agent today may not work as well for another, or even for the same agent after an update.&lt;/p&gt;

&lt;p&gt;Keeping a representative set of developer tasks makes it easier to spot those changes. Rerun evaluations as your product, documentation, and agents evolve, and use &lt;a href="https://quantiles.io/articles/using-execution-traces-to-evaluate-ai-agent-behavior" rel="noopener noreferrer"&gt;execution traces&lt;/a&gt; to understand where things go wrong. Solving these issues will sometimes require instructions. Other times, it might be a clearer error message, a simpler setup process, or a more useful tool response.&lt;/p&gt;

&lt;p&gt;Supporting more formats only matters if they improve the developer experience. What matters most is whether agents can navigate your product and complete tasks reliably and successfully.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>testing</category>
      <category>llm</category>
      <category>agents</category>
    </item>
    <item>
      <title>Using Token Data to Improve the AI Agent Experience</title>
      <dc:creator>Quantiles.io</dc:creator>
      <pubDate>Thu, 08 Oct 2026 21:25:35 +0000</pubDate>
      <link>https://dev.to/quantiles-io/using-token-data-to-improve-the-ai-agent-experience-3m46</link>
      <guid>https://dev.to/quantiles-io/using-token-data-to-improve-the-ai-agent-experience-3m46</guid>
      <description>&lt;p&gt;Token usage can tell you a lot about what happened between the start of a task and the final answer. An agent may complete the task successfully, but only after searching the documentation several times, retrying failed steps, or pulling large amounts of irrelevant tool output into context. Looking at token usage metrics across repeated trials helps surface that extra work and distinguish a direct, efficient workflow from one that depends on additional context, retries, and &lt;a href="https://quantiles.io/articles/measuring-agent-recovery" rel="noopener noreferrer"&gt;recovery&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tokens add up
&lt;/h2&gt;

&lt;p&gt;Tokens are the units a model uses to process content. In text, a token is roughly 3/4 of a single word, but different models use different tokenizers, so the same text can produce different token counts on different systems. That difference also means equal token totals across models don't necessarily represent the same amount of content or computation.&lt;/p&gt;

&lt;p&gt;Token usage is usually measured by numbers of input and output tokens, and some models can also report reasoning tokens, which are used in reasoning models' chains of thought. Input tokens are everything sent to the model, including the prompt, conversation history, documentation, code, and tool results. Output tokens are what the model generates in response. In agent workflows, input tokens can add up quickly as more context is carried across multiple model calls.&lt;/p&gt;

&lt;p&gt;The way different hosted model providers price tokens also varies by provider, though generally output tokens are often more expensive per token than input tokens, even when input tokens make up most of the overall usage.&lt;/p&gt;

&lt;p&gt;The example below shows a single &lt;a href="https://quantiles.io/articles/how-to-evaluate-ai-agents" rel="noopener noreferrer"&gt;agent evaluation&lt;/a&gt; task through Quantiles and breaks down the input and output tokens used at each step of the workflow.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tracing Token Usage Through a Quantiles Evaluation Task
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fw1k74e2ukgfqk39mklg5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fw1k74e2ukgfqk39mklg5.png" alt="Tracing Token Usage Through a Quantiles Evaluation Task" width="800" height="875"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Using tokens to understand agent behavior
&lt;/h2&gt;

&lt;p&gt;In an agent workflow, token usage can help reflect the path the agent takes through a task: the context it reads, the tools it calls, the retries it makes, and the information it carries forward. That makes it a useful signal for behavior beyond task completion. For example, two trials may both succeed, even though one requires more context, additional exploration, more recovery steps, and &lt;a href="https://quantiles.io/articles/measure-understand-and-improve-agent-latency" rel="noopener noreferrer"&gt;longer execution time&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Recent research shows just how much that path can vary. A &lt;a href="https://arxiv.org/abs/2604.22750" rel="noopener noreferrer"&gt;2026 study of eight frontier models&lt;/a&gt; on SWE-bench Verified found that repeated executions of the same task could differ by as much as 30 times in total token usage. More tokens didn't necessarily lead to better results either. Accuracy often peaked at an intermediate level of token usage and then plateaued as consumption continued to increase.&lt;/p&gt;

&lt;p&gt;Some patterns in the evaluation worth looking for include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Repeated documentation reads.&lt;/strong&gt; The agent may be struggling to find, read, or interpret the instructions it needs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Large tool responses.&lt;/strong&gt; A tool may be returning much more context than the agent needs for the task.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Retries and recovery.&lt;/strong&gt; Token usage can climb quickly when the agent encounters an error, revisits earlier steps, or tries several approaches.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Growing context.&lt;/strong&gt; Long conversations, tool outputs, and intermediate results can accumulate across model calls and increase input-token usage.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unnecessary exploration.&lt;/strong&gt; The agent may inspect files, APIs, or documentation that are unrelated to the task. In some cases, the model may not be able to read the data it requires without bringing large amounts of irrelevant data into context as well.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Extra verification.&lt;/strong&gt; Higher usage isn't always waste. Sometimes the additional tokens come from checking work, testing an implementation, or validating the final result.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What matters most is the pattern, not whether a token count is simply high or low. Running the same task multiple times lets you compare usage across trials and spot meaningful differences. If one attempt uses substantially more tokens than the others, the trace can help show whether the agent needed more context, retries, or effort to recover from an error to reach the same result.&lt;/p&gt;

&lt;h2&gt;
  
  
  Using token data to improve the agent experience
&lt;/h2&gt;

&lt;p&gt;For a developer tool, token usage is more than a model cost. It can tell you how much work an agent has to do to successfully use your product.&lt;/p&gt;

&lt;p&gt;If agents consistently need large amounts of context, &lt;a href="https://quantiles.io/articles/evaluating-ai-agent-tool-use" rel="noopener noreferrer"&gt;repeated tool calls&lt;/a&gt;, or several attempts to complete common workflows, that can be a sign of friction or barriers to entry in the product itself. The agent may be spending extra tokens because the documentation is hard to navigate, tool responses contain more information than it needs, an API requires too many steps, or an error message doesn't provide enough guidance to recover cleanly. In that sense, excess token usage can point to places where the product is making the agent work harder than necessary.&lt;/p&gt;

&lt;p&gt;The table below shows how token usage data can point to opportunities for improving the agent experience.&lt;/p&gt;

&lt;h3&gt;
  
  
  Opportunities to Improve the Agent Experience
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Opportunity&lt;/th&gt;
&lt;th&gt;How it helps&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Reduce unnecessary context&lt;/td&gt;
&lt;td&gt;Smaller, more focused tool responses and clearer documentation can keep irrelevant information out of the model context.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Make workflows more direct&lt;/td&gt;
&lt;td&gt;Fewer unnecessary steps, searches, and retries can reduce both token usage and completion time.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Improve reliability&lt;/td&gt;
&lt;td&gt;High or highly variable token usage can point to places where agents are getting confused or taking inconsistent, inefficient paths.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lower customer costs&lt;/td&gt;
&lt;td&gt;When customers pay for model usage, a more token efficient product can make every agent interaction less expensive.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Make your product easier for agents to use&lt;/td&gt;
&lt;td&gt;Clear interfaces, useful errors, focused tools, and discoverable documentation can help agents reach the right outcome with less exploration.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Using fewer tokens isn't the goal on its own. It's more important to create a product that agents can understand, navigate, and use efficiently. By tracking token usage alongside task success and &lt;a href="https://quantiles.io/articles/using-execution-traces-to-evaluate-ai-agent-behavior" rel="noopener noreferrer"&gt;execution traces&lt;/a&gt;, you can see where the experience is already working well and where improvements could make agent workflows even faster, more reliable, and more successful.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>agents</category>
      <category>testing</category>
    </item>
    <item>
      <title>Does your SKILL.md help coding agents?</title>
      <dc:creator>Quantiles.io</dc:creator>
      <pubDate>Thu, 01 Oct 2026 22:08:29 +0000</pubDate>
      <link>https://dev.to/quantiles-io/does-your-skillmd-help-coding-agents-534n</link>
      <guid>https://dev.to/quantiles-io/does-your-skillmd-help-coding-agents-534n</guid>
      <description>&lt;p&gt;&lt;em&gt;How to evaluate whether agents find and use your skill, how it affects their behavior, and whether it helps or harms the use of your product.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Agent skills introduce a new layer between coding agents and developer products. Instead of leaving an agent to piece everything together from documentation or other hints, a skill can give it targeted instructions, scripts, and resources when they become relevant. A skill goes beyond documentation by helping shape how an agent discovers, navigates, and uses your product.&lt;/p&gt;

&lt;p&gt;Of course, a &lt;code&gt;SKILL.md&lt;/code&gt; doesn’t necessarily mean the agent will find it, use it, or use your product more effectively just because it exists. Early evidence suggests skills can change agent behavior, but not always for the better. That raises a more useful set of questions about how coding agents discover and use skills, starting with whether they find them at all.&lt;/p&gt;

&lt;h2&gt;
  
  
  Can the agent find the skill?
&lt;/h2&gt;

&lt;p&gt;Before we can ask whether a skill helps, the agent has to know it exists. And that starts with something surprisingly mundane: where the skill lives.&lt;/p&gt;

&lt;p&gt;A &lt;code&gt;SKILL.md&lt;/code&gt; sitting somewhere in a repository isn't automatically discoverable. The exact location still depends on the agent and runtime. &lt;a href="https://code.claude.com/docs/en/skills#choose-where-skills-load" rel="noopener noreferrer"&gt;Claude Code&lt;/a&gt;, for example, supports project skills under &lt;code&gt;.claude/skills/skill-name/SKILL.md&lt;/code&gt;, while &lt;a href="https://learn.chatgpt.com/docs/build-skills#where-to-save-skills" rel="noopener noreferrer"&gt;OpenAI Codex&lt;/a&gt; uses the same basic skill format, discovers repository skills in &lt;code&gt;.agents/skills&lt;/code&gt;, and can also load skills bundled in plugins. When testing a skill, the first thing to verify is that it has been installed somewhere the agent is designed to discover it.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;SKILL.md&lt;/code&gt; Description
&lt;/h3&gt;

&lt;p&gt;Once the skill is available, there's still another step. Both &lt;a href="https://learn.chatgpt.com/docs/build-skills" rel="noopener noreferrer"&gt;OpenAI&lt;/a&gt; and &lt;a href="https://platform.claude.com/docs/en/agents-and-tools/agent-skills/overview#how-skills-work" rel="noopener noreferrer"&gt;Anthropic&lt;/a&gt; use progressive disclosure rather than putting every installed skill’s full instructions into context at once. The agent initially sees lightweight metadata, particularly the skill’s name and description, and uses that information to decide whether the skill is relevant enough to load. That makes the skill description especially important. Both OpenAI and Anthropic recommend using skill metadata to explain what it does and when the agent should use it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Ask the right questions
&lt;/h3&gt;

&lt;p&gt;Test skill activation at different levels of specificity:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Name the skill:&lt;/strong&gt; Tests whether the agent can use the skill when explicitly directed.
&lt;strong&gt;&lt;em&gt;Example:&lt;/em&gt;&lt;/strong&gt; “Use the Quantiles skill to run an evaluation.”&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Describe the task:&lt;/strong&gt; Tests whether the agent identifies the relevant skill from the task.
&lt;strong&gt;&lt;em&gt;Example:&lt;/em&gt;&lt;/strong&gt; “Configure authentication for this application.”&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Describe the goal:&lt;/strong&gt; Tests whether the agent infers the skill’s relevance from the developer’s goal.
&lt;strong&gt;&lt;em&gt;Example:&lt;/em&gt;&lt;/strong&gt; “Get this service connected so I can start evaluating agents.”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That’s much closer to how we actually use coding agents. We tell them what we want done, not which skill, MCP server, documentation page, or tool to use along the way. OpenAI recommends testing this range, from explicit and contextual requests to cases where the skill shouldn’t activate at all.&lt;/p&gt;

&lt;h2&gt;
  
  
  Does the skill make the product easier for agents to use?
&lt;/h2&gt;

&lt;p&gt;Skill discovery is only one part of the evaluation. You also want to know whether the skill changes the agent’s ability to use your product successfully. Compare the same task with and without the skill while holding the agent, repository, documentation, tools, and environment constant. This isolates the skill as the primary experimental variable and makes differences in agent behavior and outcomes easier to interpret.&lt;/p&gt;

&lt;p&gt;So how do we know if the skill actually helped? The &lt;a href="https://quantiles.io/articles/using-execution-traces-to-evaluate-ai-agent-behavior" rel="noopener noreferrer"&gt;execution trace&lt;/a&gt; gives us a few clues. Looking at these signals can show how the skill changed the agent’s behavior and whether it made the workflow more efficient, including its &lt;a href="https://quantiles.io/articles/measure-understand-and-improve-agent-latency" rel="noopener noreferrer"&gt;time to completion&lt;/a&gt;, or more reliable.&lt;/p&gt;

&lt;h3&gt;
  
  
  Measuring the Effect of a Skill
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Measurement&lt;/th&gt;
&lt;th&gt;What to look for&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Task success&lt;/td&gt;
&lt;td&gt;Did the agent reach the verified outcome, and was success more consistent with the skill?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tool calls&lt;/td&gt;
&lt;td&gt;Did the skill change how much work the agent needed to complete the task?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tool errors&lt;/td&gt;
&lt;td&gt;Did the skill help the agent avoid incorrect commands, arguments, APIs, or operations?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Repeated tool calls&lt;/td&gt;
&lt;td&gt;Did the skill reduce unnecessary retries or loops, or help the agent recover more efficiently?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Latency&lt;/td&gt;
&lt;td&gt;Did the skill shorten the path to completion or introduce additional overhead?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Token usage&lt;/td&gt;
&lt;td&gt;Did the skill reduce searching and reasoning, or add more context and processing?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Human intervention&lt;/td&gt;
&lt;td&gt;Did the agent need less clarification, redirection, or assistance to finish the task?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Skill activation&lt;/td&gt;
&lt;td&gt;Did the agent load the skill, and at what point in the task did it become useful?&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Where &lt;code&gt;SKILL.md&lt;/code&gt; helps and where it hurts
&lt;/h2&gt;

&lt;p&gt;Skills may affect agent performance differently across task types. For installation and authentication, a defined product workflow can reduce ambiguity and help the agent avoid &lt;a href="https://quantiles.io/articles/evaluating-ai-agent-tool-use" rel="noopener noreferrer"&gt;incorrect tool calls&lt;/a&gt; or unnecessary steps. &lt;a href="https://quantiles.io/articles/measuring-agent-recovery" rel="noopener noreferrer"&gt;Recovering from errors&lt;/a&gt; often requires more flexibility because the appropriate next action depends on the error and the current environment. Advanced workflows may benefit more from guidance about product conventions and important decision points than from detailed step-by-step instructions.&lt;/p&gt;

&lt;p&gt;The effect can also vary by coding agent. One agent may already navigate your documentation well and gain little from additional guidance, while another benefits significantly from the structure. That can change as models improve too. The goal isn't for the skill to improve everything. It's to find where a little extra guidance makes a meaningful difference and where the agent is already better off figuring things out on its own.&lt;/p&gt;

&lt;p&gt;The table below shows examples of where skills may help or hurt and how the right level of guidance can reduce uncertainty while leaving room for the agent to adapt.&lt;/p&gt;

&lt;h3&gt;
  
  
  How &lt;code&gt;SKILL.md&lt;/code&gt; Affects Different Tasks
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;More likely to help&lt;/th&gt;
&lt;th&gt;More likely to hurt&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;There is a preferred path.&lt;/strong&gt; Several approaches are possible, but one is recommended or supported.&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;The path is already obvious.&lt;/strong&gt; The agent can infer the correct approach from the environment and normal documentation.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;The task has important sequencing.&lt;/strong&gt; Steps need to happen in a particular order.&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;The task is simple or direct.&lt;/strong&gt; Extra instructions add process without adding useful information.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;There are non-obvious prerequisites.&lt;/strong&gt; Authentication, setup, state, dependencies, or permissions must exist first.&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;The skill repeats easily discoverable information.&lt;/strong&gt; It mostly duplicates CLI help, API schemas, or straightforward documentation.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;There are product-specific decisions.&lt;/strong&gt; The agent needs to know which API, command, configuration, or workflow is appropriate in a particular situation.&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;The skill overprescribes the solution.&lt;/strong&gt; It tells the agent exactly how to solve situations where adapting to the environment would be better.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;There are important constraints.&lt;/strong&gt; Some approaches appear reasonable but are unsupported, unsafe, expensive, destructive, or likely to produce the wrong state.&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;The instructions reduce flexibility.&lt;/strong&gt; The agent keeps following the documented path even when errors or environment state suggest it should change course.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;Success is not obvious.&lt;/strong&gt; A successful command or API response does not necessarily mean the task is complete, and the agent needs to know what to verify.&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;The skill adds unnecessary verification or steps.&lt;/strong&gt; The agent already has reliable signals that the task succeeded.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;The product has unusual conventions.&lt;/strong&gt; Important behavior differs from what an agent might reasonably infer from similar products.&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;The skill describes conventional behavior.&lt;/strong&gt; It spends context explaining patterns the agent already understands.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;A small amount of guidance generalizes.&lt;/strong&gt; A rule or decision principle can help across many variations of the task.&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;The skill is tutorial-shaped.&lt;/strong&gt; It encodes one specific trajectory that does not transfer well to unfamiliar situations.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;The guidance is current and stable.&lt;/strong&gt; The instructions describe behavior unlikely to change unexpectedly.&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;The guidance becomes stale easily.&lt;/strong&gt; Commands, parameters, defaults, or workflows change frequently and can conflict with the current product.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;The skill is concise and targeted.&lt;/strong&gt; It supplies information the agent needs and leaves the rest to the agent.&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;The skill is large and noisy.&lt;/strong&gt; Relevant guidance competes with examples, edge cases, explanations, and instructions that do not apply to the current task.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  &lt;code&gt;SKILL.md&lt;/code&gt; should evolve with your product
&lt;/h2&gt;

&lt;p&gt;Changes to your product and the services it depends on, including AI models, can change how agents experience it. Keep a &lt;a href="https://quantiles.io/articles/how-to-evaluate-ai-agents" rel="noopener noreferrer"&gt;stable set of evaluation tasks&lt;/a&gt; for your most important workflows and use them as regression tests when the product, documentation, or &lt;code&gt;SKILL.md&lt;/code&gt; changes. When a new agent failure appears, turn it into another evaluation task so you can test for it going forward.&lt;/p&gt;

&lt;p&gt;Coding agents are constantly changing too. Guidance that helps today may become unnecessary as models improve, while new agent behavior may expose problems you've never seen before. That makes agent evaluation an ongoing part of building your product. Keep testing important workflows as both the product and the agents using it change. Sometimes that will lead you to update &lt;code&gt;SKILL.md&lt;/code&gt;. Other times, the better fix will be in your documentation, API, error messages, or the product itself.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>performance</category>
      <category>tools</category>
    </item>
    <item>
      <title>Evaluating AI Agent Tool Use</title>
      <dc:creator>Quantiles.io</dc:creator>
      <pubDate>Thu, 24 Sep 2026 17:32:29 +0000</pubDate>
      <link>https://dev.to/quantiles-io/evaluating-ai-agent-tool-use-31ci</link>
      <guid>https://dev.to/quantiles-io/evaluating-ai-agent-tool-use-31ci</guid>
      <description>&lt;p&gt;&lt;em&gt;Understand how coding agents discover, select, and use tools, and how those behaviors affect successful use of your product.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;A developer asks their coding agent to integrate your product with their application. The agent finds your docs, installs the SDK, and starts the integration work. Then, it hits an error it can't resolve. After a few attempts, it switches to another product, completes the integration, and moves on. The overall task passed, but the agent failed to use your product successfully.&lt;/p&gt;

&lt;p&gt;Looking at tool use helps explain how the agent arrived at the final outcome. You can see which tools it discovered, how it used them, and ultimately where it changed course. These signals help you go deeper than simple task success, to see how successfully agents are using your products.&lt;/p&gt;

&lt;h2&gt;
  
  
  Is the agent struggling, or is the product?
&lt;/h2&gt;

&lt;p&gt;One failed tool call may say little, but patterns across &lt;a href="https://quantiles.io/articles/how-to-evaluate-ai-agents" rel="noopener noreferrer"&gt;agent evaluation&lt;/a&gt; runs can reveal where they consistently struggle to use the product. When agents repeatedly choose the wrong API, miss the same required parameter, or misinterpret the same response, those patterns may point to parts of the product that are difficult for agents to discover or use. Looking across evaluation runs helps distinguish isolated agent behavior from friction that appears consistently.&lt;/p&gt;

&lt;p&gt;These evaluation results give product teams concrete changes to test. Update a tool description, error message, documentation page, or &lt;code&gt;SKILL.md&lt;/code&gt;, then rerun the same tasks under &lt;a href="https://www.anthropic.com/engineering/infrastructure-noise" rel="noopener noreferrer"&gt;comparable conditions&lt;/a&gt; to measure the effect. The goal is not to make every agent follow the same path, but to determine whether the change helps agents reach the correct outcome more reliably and with less unnecessary work.&lt;/p&gt;

&lt;h2&gt;
  
  
  Did the agent find and choose the right tool?
&lt;/h2&gt;

&lt;p&gt;Before an agent can use a tool correctly, it has to find and select the right one. Comparing the tools available at each decision point with the tool the agent chose helps distinguish discovery problems from selection problems. Across evaluation runs, these patterns can reveal tools that agents consistently overlook, confuse, or choose at the wrong time, pointing to where discovery, descriptions, or guidance may need improvement.&lt;/p&gt;

&lt;p&gt;The decision path below shows how to distinguish discovery issues from selection issues during an agent workflow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tracing Agent Tool Discovery and Selection&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6v3e01ymram81h0nv2pd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6v3e01ymram81h0nv2pd.png" alt="Flow of how AI agents discover and select developer tools" width="799" height="310"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Did the agent use the tool correctly?
&lt;/h2&gt;

&lt;p&gt;A successful tool call does not necessarily mean the tool was used correctly. In multi-step workflows, each call must use the right inputs, carry forward relevant state, and remain consistent with the task. Evaluating calls in sequence can reveal errors that individual tool responses may not show.&lt;/p&gt;

&lt;p&gt;A few things are especially useful to check:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Arguments:&lt;/strong&gt; Did the agent provide the correct values for the task?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;State:&lt;/strong&gt; Did it preserve and use relevant information from earlier steps?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Defaults:&lt;/strong&gt; Did omitted values change the tool's behavior or outcome?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scope:&lt;/strong&gt; Did the call stay within the required resources and permissions?&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  What do repeated tool calls tell us?
&lt;/h3&gt;

&lt;p&gt;Repeated tool calls can reveal where an agent is having difficulty using a product, but repetition alone is not a failure. Retries are often part of &lt;a href="https://quantiles.io/articles/measuring-agent-recovery" rel="noopener noreferrer"&gt;agent recovery&lt;/a&gt;, especially when the underlying state has changed or the agent is testing a new approach. But when the same call repeats under essentially the same conditions without advancing the task, it can indicate that the agent is stuck. &lt;a href="https://quantiles.io/articles/using-execution-traces-to-evaluate-ai-agent-behavior" rel="noopener noreferrer"&gt;Execution traces&lt;/a&gt; help distinguish productive recovery from repetition that adds work without progress.&lt;/p&gt;

&lt;h2&gt;
  
  
  Did the agent know what to do next?
&lt;/h2&gt;

&lt;p&gt;A successful tool call, or even several, doesn't always mean the task, or even that step of the task, is complete. The agent still has to interpret what the response actually tells it and decide what should happen next. A request that was accepted but is still processing, for example, should lead to another check rather than a claim that the work is finished.&lt;/p&gt;

&lt;p&gt;For product builders, this makes &lt;a href="https://help.openai.com/en/articles/8555517-function-calling-in-the-openai-api" rel="noopener noreferrer"&gt;tool and response design&lt;/a&gt; part of how well agents can use a product. A useful response should give the agent enough information to understand what happened and decide what to do next. That might include the current status, an identifier needed for a later step, or an error that explains how to recover. The clearer that information is, the easier it is for the agent to continue without guessing and/or wasting time and resources.&lt;/p&gt;

&lt;p&gt;The final outcome should still be verified against what actually happened in the environment. An agent can interpret a response incorrectly and report success even when the task is incomplete. &lt;a href="https://developers.openai.com/api/docs/guides/agents-api/tracing" rel="noopener noreferrer"&gt;Evaluating the end-to-end execution trace&lt;/a&gt; helps connect the agent's interpretation to the actual outcome and identify where the workflow broke down.&lt;/p&gt;

&lt;h2&gt;
  
  
  Connecting Agent Behavior to Product Outcomes
&lt;/h2&gt;

&lt;p&gt;Tool-use metrics show how an agent worked through a task, but no single metric tells you whether it used the product effectively. More calls may indicate unnecessary work or careful verification; repeated calls may reflect a loop or successful recovery; and errors may block progress or be quickly resolved. Interpreting these signals requires connecting them to the execution trace and the final task outcome.&lt;/p&gt;

&lt;p&gt;Below are common tool-use measurements, what they can help you investigate, and what requires additional context to interpret.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Measurement&lt;/th&gt;
&lt;th&gt;What to investigate&lt;/th&gt;
&lt;th&gt;What it can't tell you&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Tool calls&lt;/td&gt;
&lt;td&gt;How much tool interaction the task required&lt;/td&gt;
&lt;td&gt;Whether fewer calls would be better&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unique tools&lt;/td&gt;
&lt;td&gt;Which tools the agent used&lt;/td&gt;
&lt;td&gt;Whether it chose the right tools&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Repeated calls&lt;/td&gt;
&lt;td&gt;Where the agent retried, recovered, polled, or looped&lt;/td&gt;
&lt;td&gt;Whether repetition was necessary&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tool errors&lt;/td&gt;
&lt;td&gt;Where tool interactions failed&lt;/td&gt;
&lt;td&gt;Whether they prevented progress&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tool duration&lt;/td&gt;
&lt;td&gt;Where the agent spent time using tools&lt;/td&gt;
&lt;td&gt;Whether that time contributed to progress&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Rather than optimizing for fewer calls, fewer errors, or &lt;a href="https://quantiles.io/articles/measure-understand-and-improve-agent-latency" rel="noopener noreferrer"&gt;shorter tool time&lt;/a&gt; in isolation, evaluate whether a product change helps agents complete tasks more reliably and with less unnecessary work. This connects changes to docs, tools, APIs, or agent instructions to the resulting agent behavior and task outcomes.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>machinelearning</category>
      <category>llm</category>
      <category>tools</category>
    </item>
    <item>
      <title>Using Execution Traces to Evaluate AI Agent Behavior</title>
      <dc:creator>Quantiles.io</dc:creator>
      <pubDate>Thu, 17 Sep 2026 18:05:42 +0000</pubDate>
      <link>https://dev.to/quantiles-io/using-execution-traces-to-evaluate-ai-agent-behavior-30h7</link>
      <guid>https://dev.to/quantiles-io/using-execution-traces-to-evaluate-ai-agent-behavior-30h7</guid>
      <description>&lt;p&gt;Building a developer tool today means designing for more than the developer. Coding agents are increasingly part of the interface to the product, reading documentation, invoking CLIs and APIs, modifying configuration, and deciding what tools and workflows to use to achieve tasks. &lt;a href="https://github.blog/news-insights/research/survey-ai-wave-grows/" rel="noopener noreferrer"&gt;GitHub's 2024 developer survey&lt;/a&gt; found that 99% of U.S. respondents had tried AI coding tools at work, which increasingly makes agent compatibility a core requirement of your product.&lt;/p&gt;

&lt;p&gt;When we created &lt;a href="https://github.com/quantiles-evals/skill/blob/main/SKILL.md" rel="noopener noreferrer"&gt;&lt;code&gt;SKILL.md&lt;/code&gt;&lt;/a&gt;, &lt;a href="https://github.com/quantiles-evals/quantiles/blob/main/AGENTS.md" rel="noopener noreferrer"&gt;&lt;code&gt;AGENTS.md&lt;/code&gt;&lt;/a&gt;, and &lt;a href="https://quantiles.io/llms.txt" rel="noopener noreferrer"&gt;&lt;code&gt;llms.txt&lt;/code&gt;&lt;/a&gt; for &lt;a href="https://quantiles.io/" rel="noopener noreferrer"&gt;Quantiles&lt;/a&gt;, we needed to know whether coding agents could actually discover those resources, interpret the instructions correctly, and use them to complete real tasks. We started using Quantiles to evaluate how coding agents interacted with our own documentation. That work made it clear that evaluating a coding agent required an approach that was very different from that of evaluating an LLM.&lt;/p&gt;

&lt;h2&gt;
  
  
  Inside an Agent Trace
&lt;/h2&gt;

&lt;p&gt;One of the biggest changes we had to make was to capture and evaluate the &lt;a href="https://openai.github.io/openai-agents-js/guides/tracing/" rel="noopener noreferrer"&gt;agent's execution trace&lt;/a&gt;. An agent trace is a structured record of all the things that happened during an agent run. Rather than storing only the task input and final output, a trace captures the sequence of operations that produced the result. Depending on the agent and instrumentation, a trace can include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Model requests and responses&lt;/li&gt;
&lt;li&gt;Tool calls, arguments, and results&lt;/li&gt;
&lt;li&gt;Retrievals&lt;/li&gt;
&lt;li&gt;Errors and retries&lt;/li&gt;
&lt;li&gt;Timing and token usage&lt;/li&gt;
&lt;li&gt;Context compactions&lt;/li&gt;
&lt;li&gt;Changes to external state&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Spans
&lt;/h3&gt;

&lt;p&gt;A trace is typically organized into spans, where each span represents an operation such as an LLM call, tool invocation, retrieval, or validation step. Spans contain attributes such as &lt;a href="https://quantiles.io/articles/measure-understand-and-improve-agent-latency" rel="noopener noreferrer"&gt;timestamps&lt;/a&gt;, status, inputs, outputs, and operation-specific metadata, and parent-child relationships preserve how those operations fit into the overall execution.&lt;/p&gt;

&lt;p&gt;This figure shows an execution trace for a coding agent running and analyzing a Quantiles evaluation, with each child span representing an operation performed during the workflow:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Quantiles Evaluation Agent Trace Example&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwzvyaq87ava8qftpky7l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwzvyaq87ava8qftpky7l.png" alt=" " width="800" height="1048"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftjln3k0avz8kyx2o2nbw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftjln3k0avz8kyx2o2nbw.png" alt=" " width="800" height="775"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Capturing Agent Traces
&lt;/h2&gt;

&lt;p&gt;There are several ways to capture execution traces. Some agent runtimes and frameworks provide built-in tracing or telemetry, while others require additional instrumentation. A common approach is to emit telemetry using &lt;a href="https://opentelemetry.io/docs/" rel="noopener noreferrer"&gt;OpenTelemetry&lt;/a&gt;, often with agent-specific semantic conventions like those defined in &lt;a href="https://arize-ai.github.io/openinference/spec/" rel="noopener noreferrer"&gt;OpenInference&lt;/a&gt; that add standardized attributes for LLM calls, tools, retrievals, and related operations. Traces can be exported to &lt;a href="https://quantiles.io/" rel="noopener noreferrer"&gt;Quantiles&lt;/a&gt; or other observability systems for storage and analysis across runs.&lt;/p&gt;

&lt;p&gt;When native tracing is unavailable, an evaluation harness can capture many of the same events by wrapping model clients, tool interfaces, subprocesses, agent hooks, and beyond. The important requirements in all cases are to preserve stable identifiers and timestamps, parent-child relationships between operations, tool inputs and outputs (without leaking secrets and other private data), errors and status codes, and enough metadata to reconstruct the observable execution of each trial.&lt;/p&gt;

&lt;h2&gt;
  
  
  Evaluate at the Right Level
&lt;/h2&gt;

&lt;p&gt;A trace contains several kinds of evidence, and not every metric needs the entire trace. The goal is to &lt;a href="https://quantiles.io/articles/how-to-evaluate-ai-agents" rel="noopener noreferrer"&gt;grade agent behavior&lt;/a&gt; where it can be observed most directly. Some properties require the complete execution trajectory, while others can be determined from a single tool call, error event, final environment state, or final output.&lt;/p&gt;

&lt;p&gt;For example, end-to-end measures can show whether the coding agent successfully completed the requested &lt;a href="https://quantiles.io/articles/quantiles-local-first-infrastructure-for-ai-evaluation-workflows" rel="noopener noreferrer"&gt;Quantiles workflow&lt;/a&gt;, how long it took, how much it cost, and whether it &lt;a href="https://quantiles.io/articles/measuring-agent-recovery" rel="noopener noreferrer"&gt;recovered from failures&lt;/a&gt; along the way. At the span level, we can examine whether the agent found and used the appropriate Quantiles resources, such as the &lt;code&gt;SKILL.md&lt;/code&gt;, &lt;code&gt;llms.txt&lt;/code&gt;, or the appropriate &lt;a href="https://quantiles.io/documentation" rel="noopener noreferrer"&gt;documentation&lt;/a&gt;, and whether it executed the correct &lt;code&gt;qt&lt;/code&gt; commands with valid arguments. Individual events can capture narrower signals such as a failed command, invalid configuration, permission error, or approval request. Across repeated trials, these measurements can show how reliably and efficiently coding agents can use Quantiles, the nature of failures, and where failures consistently occur.&lt;/p&gt;

&lt;h3&gt;
  
  
  Validating behavior vs. Prescribing a trajectory
&lt;/h3&gt;

&lt;p&gt;Agents can often complete the same task through several valid sequences of actions, so requiring one canonical sequence of tool calls can make an evaluation unnecessarily brittle. &lt;a href="https://www.anthropic.com/engineering/demystifying-evals-for-ai-agents" rel="noopener noreferrer"&gt;Anthropic&lt;/a&gt; cautions against enforcing specific execution paths when multiple approaches can be correct. Instead, define the constraints the agent must satisfy regardless of the path it takes. These can include permitted tool use, valid arguments, required approvals, retry limits, prohibited side effects, and the expected final state.&lt;/p&gt;

&lt;p&gt;Different agent behaviors require different forms of evaluation. &lt;a href="https://www.anthropic.com/engineering/demystifying-evals-for-ai-agents" rel="noopener noreferrer"&gt;Anthropic&lt;/a&gt; recommends combining code-based, model-based, and human graders, using each where its form of evidence and judgment is most appropriate.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Grader methods for agent evaluation&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Method&lt;/th&gt;
&lt;th&gt;Use when&lt;/th&gt;
&lt;th&gt;Examples&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Code-based graders&lt;/td&gt;
&lt;td&gt;The criterion can be evaluated deterministically from observable evidence&lt;/td&gt;
&lt;td&gt;Schema validity, tool arguments, exit codes, file changes, environment state, required operations, exact outputs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Model-based graders&lt;/td&gt;
&lt;td&gt;The criterion requires semantic or qualitative judgment that cannot be reliably expressed as deterministic checks at scale&lt;/td&gt;
&lt;td&gt;Instruction following, relevance of selected documentation, quality of a response, appropriate handling of ambiguity&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Human graders&lt;/td&gt;
&lt;td&gt;The behavior is nuanced, novel, high-stakes, or requires review or calibration of automated graders&lt;/td&gt;
&lt;td&gt;Edge cases, unexpected valid solutions, subjective quality judgments, disagreements about rubric interpretation&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Interpret Traces Carefully
&lt;/h2&gt;

&lt;p&gt;Traces provide a large amount of detailed insight into an agent's execution, but they have limits. What appears in a trace depends on how the system is instrumented, and recorded activity doesn't always establish the agent's reasoning or the final state of the environment. Keep these guidelines in mind when using traces for evaluations:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Treat traces as observations, not complete records.&lt;/strong&gt; A trace can only show what the instrumentation records. Sampling, telemetry limits, unsupported operations, and instrumentation failures can leave gaps in the execution history.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Separate execution from reasoning.&lt;/strong&gt; A trace can show what the agent did, but since model calls sometimes only show reasoning summaries, a trace can't always tell you why. Base evaluations on behavior you can observe rather than assumptions about the agent's reasoning.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Validate outcomes against the environment.&lt;/strong&gt; A trace can show that the agent took the right actions without proving that the task actually succeeded. When possible, verify the final environment state. Doing so might require customized tests, filesystem checks, database queries, or API responses.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Allow more than one valid path.&lt;/strong&gt; Focus on whether the agent met the task requirements rather than whether it followed one specific path, unless the path itself is part of the success criteria.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Keep the measurement system stable.&lt;/strong&gt; Keep the evaluation setup consistent and versioned across runs. Changes to the runtime, tools, resources, or instrumentation can change the trace even when the agent's behavior hasn't changed.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Keep in mind that OpenTelemetry SDKs can limit or sample the data retained for a span. When one of those things happens, traces can be left with gaps, even if they're not readily apparent.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Developer products are increasingly being used by agents, not just people. That means testing them also requires understanding whether agents can navigate their resources, use their tools, recover from problems, and complete intended workflows reliably. Execution traces make those behaviors observable, while validations confirm whether the task actually succeeded. Together, they provide evidence of both the outcome and the path the agent took to reach it.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>evaluation</category>
    </item>
    <item>
      <title>How to Evaluate AI Agents</title>
      <dc:creator>Quantiles.io</dc:creator>
      <pubDate>Fri, 04 Sep 2026 18:27:42 +0000</pubDate>
      <link>https://dev.to/quantiles-io/how-to-evaluate-ai-agents-59ec</link>
      <guid>https://dev.to/quantiles-io/how-to-evaluate-ai-agents-59ec</guid>
      <description>&lt;p&gt;&lt;em&gt;Evaluate agent performance using representative tasks, controlled environments, observable execution traces, and repeated trials.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5b2q53km5ro8bavcd2r6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5b2q53km5ro8bavcd2r6.png" alt="Bar chart, circles and lines, and a brain with radiating beams representing AI agent evaluation" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Today’s AI agents extend language models with tools, instructions, and an execution loop for completing multi-step tasks. They can search the web, query customer records, edit code, invoke APIs, and modify external systems. As a result, an agent produces not only an output but a sequence of actions that can alter system state.&lt;/p&gt;

&lt;p&gt;As agents shift from producing answers to taking action, evaluation has to evolve with them. A correct outcome tells us that an agent reached its destination, but not what happened along the way. Did it use the right tools? Follow the required steps? Recover when something went wrong? Answering these questions starts with understanding the core components of a well-designed agent evaluation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start with the right tasks
&lt;/h2&gt;

&lt;p&gt;The foundation of an agent evaluation is the task set. Much like a test set in conventional model evaluation, it defines the distribution against which performance will be measured. For agents, however, task coverage extends beyond input and expected output.&lt;/p&gt;

&lt;p&gt;The table below outlines the types of tasks a well-designed evaluation set should include. Within each area, tasks should vary in complexity, workflow length, tool dependencies, required resources, ambiguity, state, constraints, failure conditions, and expected difficulty.&lt;/p&gt;

&lt;h3&gt;
  
  
  Evaluation Task Set
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Task&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;What it tests&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Core workflows&lt;/td&gt;
&lt;td&gt;Representative tasks from the primary workflows the agent is expected to perform.&lt;/td&gt;
&lt;td&gt;Whether the agent reliably completes expected work.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;High-impact edge cases&lt;/td&gt;
&lt;td&gt;Less common scenarios where failure has meaningful consequences, including ambiguous inputs, conflicting constraints, tool failures, and cases requiring escalation.&lt;/td&gt;
&lt;td&gt;Whether the agent handles difficult or unusual conditions safely and appropriately.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Capability boundaries&lt;/td&gt;
&lt;td&gt;Tasks the agent cannot or should not complete because of missing capabilities, tools, permissions, information, or policy constraints.&lt;/td&gt;
&lt;td&gt;Whether the agent recognizes its limits and responds appropriately rather than fabricating results or taking unsupported actions.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Real-world tasks
&lt;/h3&gt;

&lt;p&gt;Real-world tasks are valuable because they capture the complexity of using a product as it actually exists: unexpected requests, incomplete information, hidden dependencies, and constraints that are difficult to anticipate in a designed test. But production data tells an uneven story. Common workflows appear everywhere, while rare but consequential failures may barely appear at all. Abandoned tasks can leave less evidence than successful ones, and some cases require expert judgment to establish what should have happened.&lt;/p&gt;

&lt;p&gt;Fortunately, much of the material for these tasks already exists. Useful sources include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Support cases&lt;/li&gt;
&lt;li&gt;Operational logs&lt;/li&gt;
&lt;li&gt;Incident reviews&lt;/li&gt;
&lt;li&gt;Audit trails&lt;/li&gt;
&lt;li&gt;Shadow traces&lt;/li&gt;
&lt;li&gt;Workflow documentation&lt;/li&gt;
&lt;li&gt;Interviews with domain experts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Production failures are often the best source of new evaluation tasks. When an agent struggles with a real workflow, that failure can be created into a task and added to the evaluation suite. Anthropic’s &lt;a href="https://www.anthropic.com/engineering/demystifying-evals-for-ai-agents" rel="noopener noreferrer"&gt;agent-evaluation guidance&lt;/a&gt; recommends combining these observed failures with tasks derived from product requirements, then moving established capability tests into the regression suite over time. If the original case contains sensitive data, remove or replace that information carefully. The goal is to protect the underlying records without simplifying away the conditions that caused the agent to struggle.&lt;/p&gt;

&lt;h3&gt;
  
  
  Synthetic tasks
&lt;/h3&gt;

&lt;p&gt;Synthetic tasks allow evaluators to create targeted scenarios, vary one condition at a time, and expand coverage without waiting for those cases to appear naturally. They are especially useful when production data is limited or when important conditions are too rare, costly, or risky to reproduce in a live system. But the control that makes synthetic tasks useful can also make them less realistic. Generated cases may use repetitive language, combine conditions in unlikely ways, or simply fail to capture the distribution of work an agent will encounter in the real world.&lt;/p&gt;

&lt;p&gt;To reduce this gap, build synthetic tasks from real evidence. Ground them in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Validated workflows&lt;/li&gt;
&lt;li&gt;Product requirements&lt;/li&gt;
&lt;li&gt;Company policies&lt;/li&gt;
&lt;li&gt;Failures observed in real traces&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then systematically vary inputs, permissions, system state, tool responses, and task complexity. LLMs can generate variations efficiently, but domain experts should verify that each scenario is realistic, its expected outcome is correct, and the task does not leak the solution.&lt;/p&gt;

&lt;h2&gt;
  
  
  Environment and evaluation harness
&lt;/h2&gt;

&lt;p&gt;A task specifies the goal, but it is only one part of the evaluation. The agent needs an environment in which to act, and the &lt;a href="https://quantiles.io/articles/quantiles-local-first-infrastructure-for-ai-evaluation-workflows" rel="noopener noreferrer"&gt;evaluation harness&lt;/a&gt; manages the experiment as the agent interacts with that environment. The table below describes the role of each and their components.&lt;/p&gt;

&lt;h3&gt;
  
  
  Evaluation Environment and Harness
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Component&lt;/th&gt;
&lt;th&gt;Role&lt;/th&gt;
&lt;th&gt;Evaluation requirement&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Environment&lt;/td&gt;
&lt;td&gt;Provides the state, data, tools, permissions, constraints, external systems, and tool behavior the agent encounters while completing the task.&lt;/td&gt;
&lt;td&gt;Reproduce the conditions that could materially change agent behavior or task outcomes, including relevant failures and edge conditions.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Harness&lt;/td&gt;
&lt;td&gt;Initializes the environment, presents the task, mediates agent and tool interactions, enforces execution limits, records the trace and resulting state, determines when the run ends, and passes evidence to graders.&lt;/td&gt;
&lt;td&gt;Run each trial from a controlled, isolated state and preserve the evidence needed for reproducibility and grading. Validate the harness with known-pass and known-fail cases to catch reset, tool, instrumentation, and grading errors.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The evaluation also needs to be reproducible. Version the task, environment, tool schemas, policies, grader, and agent configuration so that changes in results can be traced back to changes in the system. When production reveals a new failure, reduce it to the smallest reproducible task and add it to the evaluation task set. Over time, these tasks can become regression tests, and changes to a model, prompt, tool, or policy can be measured easily.&lt;/p&gt;

&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;

&lt;p&gt;Imagine evaluating a support agent asked to refund a damaged order. Its environment contains the customer account, order history, refund policy, permissions, and payment tools, including real constraints such as approval limits and API failures. Without those conditions, the agent may succeed in the evaluation using a workflow that would fail in production.&lt;/p&gt;

&lt;p&gt;The harness establishes the starting state, presents the request, gives the agent access to the appropriate tools, records what happens, and determines when the run ends. It then preserves the evidence for grading and resets the environment before the next trial. Grading can examine more than the final state. Apple’s &lt;a href="https://machinelearning.apple.com/research/toolsandbox-stateful-conversational-llm-benchmark" rel="noopener noreferrer"&gt;ToolSandbox benchmark&lt;/a&gt;, for example, evaluates both intermediate milestones and the final outcome, making it possible to verify not only whether the agent reached the goal but whether important steps occurred along the way.&lt;/p&gt;

&lt;h2&gt;
  
  
  Choose the right metrics
&lt;/h2&gt;

&lt;p&gt;Task success is necessary, but it is not sufficient to characterize agent performance. Evaluation should separately capture whether the agent reaches the intended outcome, respects required constraints, &lt;a href="https://quantiles.io/articles/recovery-escalation-and-workflow-reliability-in-clinical-ai-agents" rel="noopener noreferrer"&gt;recovers from failures&lt;/a&gt;, and uses time and resources efficiently. This multi-metric approach follows the broader principle demonstrated by Stanford’s &lt;a href="https://openreview.net/forum?id=iO4LZibEqW" rel="noopener noreferrer"&gt;HELM framework&lt;/a&gt;, which evaluates language models across multiple dimensions rather than treating accuracy as a complete measure of performance. For agent systems, a useful metric stack includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Outcome metrics:&lt;/strong&gt; Measure whether the agent reaches the required, verifiable final state. Award partial credit only when partial completion has meaningful value.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Constraint metrics:&lt;/strong&gt; Measure violations of required policies, permissions, privacy rules, and security boundaries. Keep these separate from task success.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Trajectory metrics:&lt;/strong&gt; Measure how the agent executes the task, including invalid tool calls, retries, recovery, escalation, and unnecessary steps. OpenAI’s &lt;a href="https://developers.openai.com/api/docs/guides/trace-grading/" rel="noopener noreferrer"&gt;trace-grading guidance&lt;/a&gt; shows how examining an agent’s decisions and tool calls can reveal behaviors that are not visible from the final outcome alone.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Efficiency metrics:&lt;/strong&gt; Measure latency, cost, token usage, tool calls, and human intervention. Compare efficiency only across runs that meet the required outcome and constraints.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's tempting to reduce an evaluation to one number, particularly when comparing agents or deciding whether to ship a new version. But a composite score can hide the failures an evaluation is supposed to expose. An agent, for example, might reduce latency and cost while introducing a critical security vulnerability. Averaging those changes together creates a better score without necessarily creating a better agent.&lt;/p&gt;

&lt;h2&gt;
  
  
  Test for Consistent Performance
&lt;/h2&gt;

&lt;p&gt;Agent behavior is inherently variable. Even with the same task, repeated executions can produce different trajectories and outcomes because of model stochasticity, tool behavior, interaction state, and environmental conditions. A successful trial therefore establishes capability but does not, by itself, establish reliability.&lt;/p&gt;

&lt;p&gt;For critical tasks, evaluate repeated trials under controlled conditions and report success across the resulting distribution. &lt;code&gt;pass@k&lt;/code&gt; estimates whether at least one of k attempts succeeds and is appropriate when repeated attempts are part of the workflow. &lt;a href="https://openreview.net/forum?id=roNSXZpUDN" rel="noopener noreferrer"&gt;Tau-bench&lt;/a&gt; introduced &lt;code&gt;pass^k&lt;/code&gt; to measure the probability that all k attempts succeed, placing a much stricter requirement on consistency. It's particularly useful for workflows where reliable behavior across repeated executions matters and where a failed run cannot simply be discarded and retried.&lt;/p&gt;

&lt;p&gt;Reliability often declines as tasks become longer and more complex. &lt;a href="https://arxiv.org/abs/2503.14499" rel="noopener noreferrer"&gt;METR’s time-horizon research&lt;/a&gt; captures this by estimating the length of human-completable tasks that agents can complete at a given success rate. The same principle applies to product evaluations. Results should be sliced by factors such as workflow length, tool dependencies, ambiguity, and opportunities for recovery. Otherwise, improvements on shorter or simpler tasks can raise aggregate success rates while longer, stateful workflows remain unreliable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;The goal of agent evaluation is not just to produce a score, but to understand how an agent behaves throughout a task. Representative tasks show whether the right capabilities are being tested. Controlled environments make those tests reproducible. Execution traces reveal what happens along the way, and repeated trials show whether that behavior is dependable. Combined, this evidence helps distinguish occasional success from reliable performance when conditions change, tools fail, and tasks become more difficult.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agentskills</category>
      <category>agents</category>
      <category>evaluation</category>
    </item>
    <item>
      <title>Build an AI Evaluation from a Hugging Face Dataset Without Writing Python</title>
      <dc:creator>Quantiles.io</dc:creator>
      <pubDate>Tue, 04 Aug 2026 16:48:38 +0000</pubDate>
      <link>https://dev.to/quantiles-io/build-an-ai-evaluation-from-a-hugging-face-dataset-without-writing-python-1bhh</link>
      <guid>https://dev.to/quantiles-io/build-an-ai-evaluation-from-a-hugging-face-dataset-without-writing-python-1bhh</guid>
      <description>&lt;p&gt;AI benchmarks and evaluations have varying datasets, prompts, measurement techniques, and more, but core execution logic rarely changes. In most cases, maintaining multiple custom implementations of the same evaluation pattern increases complexity and maintenance overhead.&lt;/p&gt;

&lt;p&gt;Quantiles' Custom No-code Evaluations provide a purely configuration-based way to build evaluations without writing any code yourself. Below, we'll walk through creating one using the MMLU-Pro dataset, but you can use any dataset compatible with the evaluation styles described below.&lt;/p&gt;

&lt;h2&gt;
  
  
  Supported custom no-code evaluation styles
&lt;/h2&gt;

&lt;p&gt;Quantiles custom no-code evaluations currently support two deterministic scoring styles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;exact_match&lt;/code&gt;: each sample has a golden answer, and that answer is one fixed string, number, or boolean, and each sample has a golden answer&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;multiple_choice&lt;/code&gt;: each sample has an answer selected from a finite set of choices, and each sample includes possible answers and the correct choice&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're building an evaluation that fits either of these two styles, we encourage you to use custom no-code evaluations. Otherwise, if your evaluation requires the use of retrieval, multi-step agents, judges, highly specialized scoring logic, or any other logic that doesn't fit the custom no-code framework, use Quantiles &lt;a href="https://quantiles.io/documentation/custom-evaluations" rel="noopener noreferrer"&gt;custom code evaluations&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;p&gt;We introduced the Quantiles CLI installation process in our &lt;a href="https://huggingface.co/blog/phranzia/quantiles-local-ai-evaluation" rel="noopener noreferrer"&gt;previous Hugging Face article&lt;/a&gt;. Here is the command again for reference:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://cli.quantiles.io/install.sh | bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After you have the &lt;code&gt;qt&lt;/code&gt; CLI installed, create a working directory containing these two files:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.
├── quantiles.toml
└── prompts/
    └── mmlu-pro.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The example in this article uses the public &lt;code&gt;quantiles/MMLU-Pro&lt;/code&gt; mirror of the canonical MIT-licensed &lt;a href="https://huggingface.co/datasets/TIGER-Lab/MMLU-Pro" rel="noopener noreferrer"&gt;TIGER-Lab/MMLU-Pro&lt;/a&gt; dataset.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Define the evaluation
&lt;/h2&gt;

&lt;p&gt;Each evaluation is built around four core configuration fields:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;type&lt;/code&gt;: set this value to &lt;code&gt;custom_nocode&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;dataset&lt;/code&gt;: define the dataset source, configuration, split, and revision.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;prompt_template_file&lt;/code&gt;: specifies how the prompt should be rendered for each sample.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;style&lt;/code&gt;: configures the specific style (see above for details on valid styels), maps dataset fields to choices and expected labels as appropriate, and selects parsing and scoring behavior.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The following &lt;code&gt;quantiles.toml&lt;/code&gt; configuration shows how to define the MMLU-Pro evaluation using these four fields:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight toml"&gt;&lt;code&gt;&lt;span class="c"&gt;# MMLU-Pro Custom No-Code Evaluation Example&lt;/span&gt;
&lt;span class="nn"&gt;[benchmarks.mmlu-pro-nocode]&lt;/span&gt;

&lt;span class="c"&gt;# This field must be set to "custom_nocode"&lt;/span&gt;
&lt;span class="py"&gt;type&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"custom_nocode"&lt;/span&gt;

&lt;span class="c"&gt;# Identifies the Hugging Face dataset to evaluate&lt;/span&gt;
&lt;span class="py"&gt;dataset&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="py"&gt;name&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"quantiles/MMLU-Pro"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="py"&gt;config_name&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"default"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="py"&gt;split&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"test"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;# This example uses the built-in demo model.&lt;/span&gt;
&lt;span class="c"&gt;# To evaluate another model (e.g., OpenAI or Anthropic), specify its model identifier below.&lt;/span&gt;
&lt;span class="c"&gt;# See the following documentation for details on configuring models:&lt;/span&gt;
&lt;span class="c"&gt;#&lt;/span&gt;
&lt;span class="c"&gt;# https://quantiles.io/documentation/model-configuration&lt;/span&gt;
&lt;span class="py"&gt;model&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"random"&lt;/span&gt;

&lt;span class="c"&gt;# The relative path to the Jinja-formatted prompt template for this dataset.&lt;/span&gt;
&lt;span class="py"&gt;prompt_template_file&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"prompts/mmlu-pro.txt"&lt;/span&gt;

&lt;span class="c"&gt;# Limit this smoke test to 10 dataset rows. Remove this to run the full dataset.&lt;/span&gt;
&lt;span class="py"&gt;limit&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;

&lt;span class="c"&gt;# Configure the benchmark's multiple-choice question and answer structure.&lt;/span&gt;
&lt;span class="nn"&gt;[benchmarks.mmlu-pro-nocode.style]&lt;/span&gt;
&lt;span class="py"&gt;type&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"multiple_choice"&lt;/span&gt;
&lt;span class="py"&gt;choices&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="py"&gt;column&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"options"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="py"&gt;choice_labels&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;"A"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"B"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"C"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"D"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"E"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"F"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"G"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"H"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"I"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"J"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="py"&gt;answer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="py"&gt;label_column&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"answer"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Important:&lt;/strong&gt; This walkthrough uses the MMLU-Pro dataset schema but does not match its implementation with 100% precision. If you need 100% fidelity to the original benchmark, see the &lt;a href="https://github.com/TIGER-AI-Lab/MMLU-Pro" rel="noopener noreferrer"&gt;authors’ reference implementation&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Write the prompt template
&lt;/h3&gt;

&lt;p&gt;Create &lt;code&gt;prompts/mmlu-pro.txt&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jinja"&gt;&lt;code&gt;&lt;span class="cp"&gt;{{&lt;/span&gt; &lt;span class="nv"&gt;row.question&lt;/span&gt; &lt;span class="cp"&gt;}}&lt;/span&gt;

&lt;span class="cp"&gt;{%&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="nv"&gt;choice&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nv"&gt;choices&lt;/span&gt; &lt;span class="cp"&gt;%}{{&lt;/span&gt; &lt;span class="nv"&gt;choice.label&lt;/span&gt; &lt;span class="cp"&gt;}}&lt;/span&gt;. &lt;span class="cp"&gt;{{&lt;/span&gt; &lt;span class="nv"&gt;choice.text&lt;/span&gt; &lt;span class="cp"&gt;}}&lt;/span&gt;
&lt;span class="cp"&gt;{%&lt;/span&gt; &lt;span class="k"&gt;endfor&lt;/span&gt; &lt;span class="cp"&gt;%}&lt;/span&gt;
Answer with only the letter of the correct choice.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Every field in the current dataset sample is available to the prompt template through the &lt;code&gt;row&lt;/code&gt; object, as shown above. For multiple-choice evaluations, Quantiles also provides a normalized &lt;code&gt;choices&lt;/code&gt; list containing each configured answer label and its corresponding choice text.&lt;/p&gt;

&lt;p&gt;The configuration file also defines how dataset fields map to the evaluation inputs and expected answer, and the prompt template controls how those values are presented to the model. This separation allows you to modify the prompt without changing the evaluation logic and makes the fields used to determine the expected answer explicit in the configuration.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Run the evaluation
&lt;/h2&gt;

&lt;p&gt;To run the new custom no-code benchmark you've just specified, simply invoke &lt;code&gt;qt run&lt;/code&gt; from the same directory as your new &lt;code&gt;quantiles.toml&lt;/code&gt; file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;qt run mmlu-pro-nocode
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;This example uses the built-in demo model, which randomly selects from the configured answer labels so you can validate the evaluation workflow without model credentials or inference costs. Step 4 below shows how to replace the demo model with your own AI model.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Immediately after you start the &lt;code&gt;qt run&lt;/code&gt; command, you'll see a progress bar, and when the evaluation completes, the output will look similar to the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;Created run 1
mmlu-pro-nocode: 100%|████████████████████████████| 10/10
Run 8 completed successfully in 0.46s

Aggregate metrics
 METRIC             VALUE        UNIT
 accuracy           0.82         -
 max_latency_ms     0.059792     ms
 mean_latency_ms    0.022361     ms
 median_latency_ms  0.003959     ms
 min_latency_ms     0.003334     ms
 p95_latency_ms     0.054208     ms
 p99_latency_ms     0.058675     ms

Run `qt show 1 --json` for sample-level details.
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3. Inspect the results
&lt;/h2&gt;

&lt;p&gt;When the run finishes, the CLI prints a &lt;code&gt;run_id&lt;/code&gt; and aggregate metrics. To inspect the complete run record, including per-sample results, run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;qt show &amp;lt;run_id&amp;gt; &lt;span class="nt"&gt;--json&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each sample includes several metrics, with these three providing a helpful starting point:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;is_correct&lt;/code&gt;: whether the parsed label matches the expected answer.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;response_parsed&lt;/code&gt;: whether the response could be mapped to a configured label.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;latency_ms&lt;/code&gt;: time spent processing the sample, including provider latency when a hosted model is used.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can also opt-in to more metrics for &lt;code&gt;multiple_choice&lt;/code&gt; evaluations. See &lt;a href="https://quantiles.io/documentation/custom-evaluations/custom-nocode-evaluations#optional-metrics-for-multiple_choice-evaluations" rel="noopener noreferrer"&gt;this document&lt;/a&gt; for more details.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Evaluate a hosted model
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;random&lt;/code&gt; demo model is useful for validating your setup, but its results do not reflect the quality of your own model. To evaluate a hosted model, first configure the required API key then pass its model identifier through &lt;code&gt;--input&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;OPENAI_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&amp;lt;your_openai_api_key&amp;gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;qt run mmlu-pro-nocode &lt;span class="nt"&gt;--input&lt;/span&gt; &lt;span class="s1"&gt;'{"model":"openai:gpt-5.6-luna","limit":10}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;The &lt;code&gt;--input&lt;/code&gt; flag applies only to the current evaluation run, and overrides just the values you pass. If you omit it, only the configuration defined in &lt;code&gt;quantiles.toml&lt;/code&gt; will be used.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Use coding agents to create and run custom evaluations
&lt;/h2&gt;

&lt;p&gt;Your favorite coding agent, such as Codex or Claude Code, can handle most of the work required to create and run Quantiles custom no-code evaluations. Given a dataset and prompt template, it can inspect the available fields, configure the appropriate exact-match or multiple-choice scorer, and run the evaluation. The Quantiles agent skill provides the workflow and safeguards needed to complete those steps reliably.&lt;/p&gt;

&lt;p&gt;If you haven't done so yet, &lt;a href="https://quantiles.io/documentation/install-the-skill" rel="noopener noreferrer"&gt;install the Quantiles agent skill&lt;/a&gt; by passing this prompt to your coding agent:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Please install the Quantiles skill at github.com/quantiles-evals/skill
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After you've installed the skill, give your coding agent the following prompt for a multiple-choice evaluation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Create and run a custom no-code multiple-choice evaluation named &amp;lt;evaluation_name&amp;gt; using the Hugging Face dataset &amp;lt;dataset_id&amp;gt;. Use &amp;lt;prompt_column&amp;gt; as the prompt column, &amp;lt;choice_source&amp;gt; as the choice source, &amp;lt;choice_labels&amp;gt; as the choice labels, &amp;lt;answer_source&amp;gt; as the correct-answer source, and the following Jinja prompt template: &amp;lt;jinja_prompt_template&amp;gt;. Inspect the run and summarize the results.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And use the following prompt to create an exact-match evaluation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Create and run a custom no-code exact-match evaluation named &amp;lt;evaluation_name&amp;gt; using the Hugging Face dataset &amp;lt;dataset_id&amp;gt;. Use &amp;lt;prompt_column&amp;gt; as the prompt column, &amp;lt;answer_column&amp;gt; as the golden-answer column, and the following Jinja prompt template: &amp;lt;jinja_prompt_template&amp;gt;. Inspect the run and summarize the results.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Quantiles custom no-code evaluations provide a high-performance execution pipeline for evaluations defined only through configuration, reducing the need for custom code for each benchmark or evaluation. You can specify your dataset, prompt, model, and scoring format in a configuration file, run the evaluation with a single command, and be sure it runs efficiently and correctly, with standardized metrics, reproducibility, and resilience. Coding agents can also handle both setup and execution with the Quantiles agent skill.&lt;/p&gt;

&lt;p&gt;Custom no-code evaluations currently support exact-match and multiple-choice scoring as detailed above, and more evaluation styles are in development.&lt;/p&gt;

&lt;h2&gt;
  
  
  Documentation and References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://quantiles.io/documentation/custom-evaluations/custom-nocode-evaluations" rel="noopener noreferrer"&gt;Custom No-code Evaluations Documentation&lt;/a&gt; - A guide to Custom No-Code Evaluations&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://quantiles.io/documentation/model-configuration" rel="noopener noreferrer"&gt;Model Configuration Documentation&lt;/a&gt; - Use hosted AI models with Quantiles&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/quantiles-evals/skill" rel="noopener noreferrer"&gt;Quantiles Agent Skill Repository&lt;/a&gt; - Coding-Agent Skill and Workflow Guide&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>tutorial</category>
      <category>opensource</category>
      <category>llm</category>
    </item>
    <item>
      <title>Run and Compare AI Evaluations with a CLI for Developers and Coding Agents</title>
      <dc:creator>Quantiles.io</dc:creator>
      <pubDate>Tue, 28 Jul 2026 21:10:55 +0000</pubDate>
      <link>https://dev.to/quantiles-io/run-and-compare-ai-evaluations-with-a-cli-for-developers-and-coding-agents-385m</link>
      <guid>https://dev.to/quantiles-io/run-and-compare-ai-evaluations-with-a-cli-for-developers-and-coding-agents-385m</guid>
      <description>&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; This walkthrough shows how developers and coding agents can use &lt;a href="https://github.com/quantiles-evals/quantiles" rel="noopener noreferrer"&gt;Quantiles&lt;/a&gt;, an open-source AI evaluation platform licensed under Apache 2.0, to quickly run, analyze, and compare AI evaluations locally. We'll use the SimpleQA Verified benchmark as an example throughout this post, letting you follow the commands, inspect the evaluation results, and configure your own model for the same workflow.&lt;/p&gt;

&lt;p&gt;Running an AI evaluation is rarely as simple as sending prompts to a model. Developers must connect datasets, model APIs, scoring logic, result storage, and comparison tooling before they can answer a basic question: did the system get better? When those pieces are spread across scripts, notebooks, and logs, every rerun becomes harder to reproduce and diagnose. A score alone cannot reveal whether the model changed or whether the dataset, prompt, scorer, or sample set changed with it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quickstart: Run an example benchmark
&lt;/h2&gt;

&lt;p&gt;The Quantiles CLI is called &lt;code&gt;qt&lt;/code&gt; on the command line. A simple &lt;code&gt;curl ... | bash&lt;/code&gt; command supports macOS and Linux on X86-64 and Arm64 systems. First, use it to install the CLI:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://cli.quantiles.io/install.sh | bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;If you don't want to run code directly sourced from the internet, see the &lt;a href="https://github.com/quantiles-evals/quantiles/blob/main/cli/scripts/install.sh" rel="noopener noreferrer"&gt;&lt;code&gt;install.sh&lt;/code&gt; source code&lt;/a&gt; first.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Next, let’s run a built-in benchmark from start to finish using a single command. &lt;a href="https://huggingface.co/datasets/google/simpleqa-verified" rel="noopener noreferrer"&gt;SimpleQA Verified&lt;/a&gt; is a 1,000-prompt benchmark created by Google DeepMind and Google Research. It re-curates questions from OpenAI's &lt;a href="https://openai.com/index/introducing-simpleqa/" rel="noopener noreferrer"&gt;SimpleQA&lt;/a&gt; benchmark to reduce problems such as incorrect labels, topical bias, redundant questions, and ambiguous source evidence. Each example includes a short factual question in &lt;code&gt;problem&lt;/code&gt;, its reference &lt;code&gt;answer&lt;/code&gt;, topic and answer-type metadata, and supporting URLs.&lt;/p&gt;

&lt;p&gt;Use the following command to run &lt;code&gt;simpleqa-verified&lt;/code&gt; using the built-in Quantiles demo model, which doesn't incur any usage charges:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;qt run simpleqa-verified
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Results from the demo model are intended only to demonstrate the evaluation workflow because its outputs are generated randomly. See the configuration section to run evaluations with your own model.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The current Quantiles integration reads &lt;code&gt;problem&lt;/code&gt; and &lt;code&gt;answer&lt;/code&gt; columns from the &lt;a href="https://huggingface.co/datasets/quantiles/simpleqa-verified" rel="noopener noreferrer"&gt;quantiles/simpleqa-verified&lt;/a&gt; dataset, which is a fork of the canonical Google dataset. The benchmark remains the work of the original authors.&lt;/p&gt;

&lt;p&gt;The above &lt;code&gt;qt run&lt;/code&gt; command embeds each response and reference answer using a local embedding model powered by &lt;a href="https://docs.rs/fastembed/latest/fastembed/" rel="noopener noreferrer"&gt;fastembed&lt;/a&gt;, and then compares the two using cosine similarity. It then records a sample-level similarity score and aggregates the score distribution. This flow exercises dataset loading, sample execution, scoring, aggregation, and evaluation metadata and metrics storage, without using an LLM provider. It does not reproduce the benchmark's canonical GPT-4.1 autorater, so does not report the resulting similarity metrics as SimpleQA Verified model performance.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;When you’re ready to evaluate LLMs, refer to the model configuration documentation section below for detailed setup instructions.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Quantiles calculates and displays the aggregate metrics after all samples have been evaluated and reports the evaluation name, status, timestamps, duration, workflow input and output, error state, and aggregate metrics.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;qt run simpleqa-verified
&lt;span class="go"&gt;
Created run 1
simpleqa-verified: 100%|████████████████████| 1000/1000 [00:18&amp;lt;00:00, 1195.52it/s]
Run 1 completed successfully in 19.21s

Aggregate metrics
 METRIC                VALUE     UNIT
 max_similarity        0.8351    -
 mean_similarity       0.5647    -
 median_similarity     0.5589    -
 min_similarity        0.4497    -
 p95_similarity        0.6359    -
 p99_similarity        0.6734    -
 stdev_similarity      0.0396    -
 variance_similarity   0.0015    -

Run `qt show 1 --json` for sample-level details.
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Inspect and analyze sample-level results
&lt;/h2&gt;

&lt;p&gt;Each completed evaluation reports its &lt;code&gt;run_id&lt;/code&gt;. If the ID is no longer visible, use the following command to list previous runs and their IDs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;qt list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use the following command to display the sample-level details for a specific run. Here, &lt;code&gt;run_id&lt;/code&gt; 1 refers to the SimpleQA Verified evaluation completed above.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;qt show 1 &lt;span class="nt"&gt;--json&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use the &lt;code&gt;--json&lt;/code&gt; flag to retrieve sample-level results and execution details as structured, machine-readable output. The JSON document has three top-level fields: &lt;code&gt;run&lt;/code&gt;, &lt;code&gt;metrics&lt;/code&gt;, and &lt;code&gt;samples&lt;/code&gt;. Depending on the recorded step, a sample might include its step key, status, input hash, timestamps, stored output, error, and associated metrics.&lt;/p&gt;

&lt;h2&gt;
  
  
  Compare two benchmark runs
&lt;/h2&gt;

&lt;p&gt;Many system changes can affect model behavior, including changes to prompts, datasets, code, infrastructure, and the model itself. Comparing two runs makes it possible to measure and inspect the effects of a change.&lt;/p&gt;

&lt;p&gt;Run the same &lt;code&gt;simpleqa-verified&lt;/code&gt; evaluation a second time and retain both run IDs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;qt run simpleqa-verified
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this example, the two SimpleQA Verified runs have &lt;code&gt;run_id&lt;/code&gt; values of 1 and 2:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;qt compare 1 2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;Comparing runs 1 and 2
                       Run 1              Run 2              Delta
Eval                   simpleqa-verified  simpleqa-verified  SAME
Status                 COMPLETE           COMPLETE
Duration               23.201s            18.720s            -4.481s
Model                  demo-builtin       demo-builtin       SAME
max_similarity         0.7409             0.7618             +0.0209
mean_similarity        0.5634             0.5647             +0.0013
median_similarity      0.56               0.56               -0.000041
min_similarity         0.4501             0.4341             -0.0161
p95_similarity         0.6387             0.6397             +0.001
p99_similarity         0.6779             0.6798             +0.0018
stdev_similarity       0.0409             0.0407             -0.000228
variance_similarity    0.0017             0.0017             -0.000019

Run 'qt compare 1 2 --json' for sample-level details
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;qt compare&lt;/code&gt; exits with status &lt;code&gt;1&lt;/code&gt; when any checked input, output, step, or aggregate metric differs, and &lt;code&gt;0&lt;/code&gt; when the runs match, which can be useful for scripts or CI jobs. It's important to remember, however, that a &lt;code&gt;1&lt;/code&gt; status means "different," and doesn't necessarily indicate that the model got worse. Even a metric improvement counts as a difference. Make sure to apply your own release policy to the JSON output and the status code.&lt;/p&gt;

&lt;h2&gt;
  
  
  Customize the benchmark
&lt;/h2&gt;

&lt;p&gt;So far, the examples have used the default demo model and the full evaluation dataset. You can instead configure a model from a supported provider, such as OpenAI or Anthropic, and set a sample limit when you do not need to evaluate all 1,000 prompts. Provider-backed evaluations send prompts to an external service and may incur usage charges, so start with a small smoke test.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;--input&lt;/code&gt; flag
&lt;/h3&gt;

&lt;p&gt;The quickest way to customize a built-in benchmark such as SimpleQA Verified is to use &lt;code&gt;--input&lt;/code&gt; to override the model or sample limit. These overrides apply only to the current run and the value passed must be a JSON object. To reuse the settings in future SimpleQA Verified runs, add them to &lt;code&gt;quantiles.toml&lt;/code&gt; configuration file.&lt;/p&gt;

&lt;p&gt;For example, this command limits SimpleQA Verified to 10 samples while still using the built-in demo model:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;qt run simpleqa-verified &lt;span class="nt"&gt;--input&lt;/span&gt; &lt;span class="s1"&gt;'{"limit":10}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To evaluate the same subset with a specific model, such as one from OpenAI, add the model to the JSON object and ensure that &lt;code&gt;OPENAI_API_KEY&lt;/code&gt; is already set:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;qt run simpleqa-verified &lt;span class="nt"&gt;--input&lt;/span&gt; &lt;span class="s1"&gt;'{"limit":10,"model":"openai:gpt-5.6-luna"}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Configuration file
&lt;/h3&gt;

&lt;p&gt;You can use a configuration file when you want the same model and sample settings to apply across repeated runs. To do this, create exactly one of either &lt;code&gt;quantiles.toml&lt;/code&gt; or &lt;code&gt;.quantiles.toml&lt;/code&gt; in the directory where you run &lt;code&gt;qt&lt;/code&gt; (the CLI will throw an error if it finds both).&lt;/p&gt;

&lt;p&gt;The below &lt;code&gt;quantiles.toml&lt;/code&gt; configuration runs the first 10 SimpleQA Verified samples with an OpenAI model:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight toml"&gt;&lt;code&gt;&lt;span class="nn"&gt;[benchmarks.simpleqa-verified]&lt;/span&gt;
&lt;span class="py"&gt;samples&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;
&lt;span class="py"&gt;model&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"openai:gpt-5.6-luna"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Omit the &lt;code&gt;samples&lt;/code&gt; key from configuration if you intend to run the evaluation over its complete dataset.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Quantiles loads the matching benchmark section automatically when you run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;qt run simpleqa-verified
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Choose a model and configure its API key
&lt;/h3&gt;

&lt;p&gt;Quantiles currently supports four model provider prefixes. It forwards the text after the prefix as the provider's model ID, so the available models depend on the provider's current catalog and your account access. The repository examples below show identifiers that work with the current configuration format.&lt;/p&gt;

&lt;h4&gt;
  
  
  Supported providers and model ID formats
&lt;/h4&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model source&lt;/th&gt;
&lt;th&gt;
&lt;code&gt;model&lt;/code&gt; value&lt;/th&gt;
&lt;th&gt;Required environment variables&lt;/th&gt;
&lt;th&gt;Repository example&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Built-in demo&lt;/td&gt;
&lt;td&gt;Omit &lt;code&gt;model&lt;/code&gt;, or use &lt;code&gt;random&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Generates random text for workflow validation only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://developers.openai.com/api/docs/models/all" rel="noopener noreferrer"&gt;OpenAI&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;openai:&amp;lt;model-id&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;OPENAI_API_KEY&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/quantiles-evals/quantiles/blob/main/cli/examples/configs/openai/quantiles.toml" rel="noopener noreferrer"&gt;OpenAI&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://platform.claude.com/docs/en/about-claude/models/overview" rel="noopener noreferrer"&gt;Anthropic&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;anthropic:&amp;lt;model-id&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ANTHROPIC_API_KEY&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/quantiles-evals/quantiles/blob/main/cli/examples/configs/anthropic/quantiles.toml" rel="noopener noreferrer"&gt;Anthropic&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://ai.google.dev/gemini-api/docs/models" rel="noopener noreferrer"&gt;Google Gemini&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;gemini:&amp;lt;model-id&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;GEMINI_API_KEY&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/quantiles-evals/quantiles/blob/main/cli/examples/configs/gemini/quantiles.toml" rel="noopener noreferrer"&gt;Gemini&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://developers.cloudflare.com/workers-ai/models/" rel="noopener noreferrer"&gt;Cloudflare AI Gateway and Workers AI&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;cloudflare_ai_gateway:&amp;lt;model-id&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;CLOUDFLARE_API_KEY&lt;/code&gt;, &lt;code&gt;CLOUDFLARE_ACCOUNT_ID&lt;/code&gt;, and &lt;code&gt;CLOUDFLARE_GATEWAY_ID&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/quantiles-evals/quantiles/blob/main/cli/examples/configs/cloudflare/quantiles.toml" rel="noopener noreferrer"&gt;Cloudflare AI Gateway&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Cloudflare includes models from families such as OpenAI's gpt-oss, Llama, Mistral, Gemma, DeepSeek, Qwen, and GLM. Use the &lt;a href="https://developers.cloudflare.com/workers-ai/models/" rel="noopener noreferrer"&gt;Cloudflare model catalog&lt;/a&gt; to choose an exact model ID because availability and access can change independently of Quantiles.&lt;/p&gt;

&lt;p&gt;Keep API keys out of &lt;code&gt;quantiles.toml&lt;/code&gt;, &lt;code&gt;--input&lt;/code&gt; JSON, and source control. Quantiles reads provider credentials from environment variables, so set the variable listed in the table for the selected provider.&lt;/p&gt;

&lt;p&gt;For the OpenAI examples below, export the key in the same terminal session where you will run your &lt;code&gt;qt&lt;/code&gt; commands:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;OPENAI_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&amp;lt;your-openai-api-key&amp;gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Credentials are configured the same way whether you pass the model through a configuration file or the &lt;code&gt;--input&lt;/code&gt; flag.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Use a coding agent for evaluation workflows
&lt;/h2&gt;

&lt;p&gt;Quantiles provides an &lt;a href="https://github.com/quantiles-evals/skill" rel="noopener noreferrer"&gt;open-source agent skill&lt;/a&gt; that gives coding agents, such as Codex or Claude Code, reusable instructions for running evaluations, inspecting sample-level results, comparing runs, and recovering interrupted work with the &lt;code&gt;qt&lt;/code&gt; CLI. Run the agent from your project root so it can find your Quantiles configuration and local run history.&lt;/p&gt;

&lt;p&gt;First, ask your coding agent to install the skill:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Please install the Quantiles skill at github.com/quantiles-evals/skill
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then prompt your agent to run the SimpleQA Verified benchmark with the demo model:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Run the simpleqa-verified benchmark and summarize the results.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When you are ready to evaluate your model, replace the placeholder in the following prompt and run a small smoke test to verify the model configuration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Run 10 samples of the simpleqa-verified benchmark using &amp;lt;model provider and model_id&amp;gt;. Confirm that the required provider credentials are available without showing their values; if they are not, stop and tell me what is missing. When finished, summarize the results. Do not run the evaluation until I confirm.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After you have two comparable runs, ask the agent to analyze the change:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Compare the two most recent runs for 'simpleqa-verified'. Summarize the aggregate metrics, sample-level results, failures, and any notable errors. Identify the highest-impact issues to review first, and recommend specific next steps.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Limitations and reproducibility
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The built-in demo model generates random, unseeded text. Run IDs, timings, responses, and similarity values will differ between runs, and none of these results should be interpreted as evidence of model quality.&lt;/li&gt;
&lt;li&gt;SimpleQA Verified is designed to test answers produced without web search or external tools. When evaluating a model, disable tool access so the run measures the intended task. A coding agent can orchestrate the evaluation workflow, but it should not use tools to answer the benchmark questions.&lt;/li&gt;
&lt;li&gt;The first run with a new dataset requires network access to load dataset metadata and any uncached rows. The &lt;code&gt;qt&lt;/code&gt; CLI uses the default Hugging Face revision, so be sure to record the dataset repository, configuration, split, and revision in your configuration file when strict reproduction matters.&lt;/li&gt;
&lt;li&gt;Model evaluations send prompts to an external service and may incur usage charges. Provider availability and behavior can also change independently of Quantiles.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;The Quantiles stack provides a structured, local-first system for running, analyzing, comparing, and reproducing AI evaluations. You can use the built-in demo model to verify that your workflow is configured correctly, then switch to a model from a supported provider (e.g., OpenAI or Anthropic) with a fixed configuration to evaluate real model behavior consistently. Since running evaluations, analyzing results, and comparing runs all use the same CLI, the entire process can be carried out through your preferred coding agent.&lt;/p&gt;

&lt;p&gt;If you’d like your benchmark included in Quantiles so others can run it with a single command, submit a request through the &lt;a href="https://github.com/quantiles-evals/quantiles/issues" rel="noopener noreferrer"&gt;Quantiles issue tracker&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Documentation and references
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://quantiles.io" rel="noopener noreferrer"&gt;Quantiles&lt;/a&gt; - overview of the local-first AI evaluation platform&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://quantiles.io/documentation" rel="noopener noreferrer"&gt;Quantiles documentation&lt;/a&gt; - installation, configuration, CLI, SDK, and evaluation workflow guides&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/quantiles-evals/quantiles" rel="noopener noreferrer"&gt;Quantiles GitHub repository&lt;/a&gt; - source code, examples, releases, and issue tracker&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/quantiles-evals/skill" rel="noopener noreferrer"&gt;Quantiles agent skill repository&lt;/a&gt; - reusable instructions and installation files for coding-agent evaluation workflows&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>tutorial</category>
      <category>opensource</category>
      <category>llm</category>
    </item>
  </channel>
</rss>
