cd /news/ai-tools/claude-code-plugin-evals-read-the-de… · home topics ai-tools article
[ARTICLE · art-127486] src=byteiota.com ↗ pub= topic=ai-tools verified=true sentiment=· neutral

Claude Code Plugin Evals: Read the Delta, Not the Score

Anthropic shipped the `claude plugin eval` command in Claude Code v2.1.269, a tool that scores plugins against test cases and reports a delta metric comparing results with and without the plugin loaded. Anthropic's documentation shows a healthy first run scoring 1.00 with the plugin versus 0.33 without it, a delta of +0.67, and warns that the most common first finding is a delta near zero with the `tool_used: Skill` grader failing, meaning Claude is not selecting the skill. Each case runs three times with the plugin and three times without, costing six runs per case, and the command offers six grader types — four free (`regex`, `tool_used`, `tool_order`, `file_exists`) and two paid (`llm`, `baseline`).

read5 min views1 publishedSep 12, 2026
Claude Code Plugin Evals: Read the Delta, Not the Score
Image: Byteiota (auto-discovered)

Most Claude Code plugin authors ship their first skill and assume it works because it installed. That assumption is usually wrong. The skill is loaded, the plugin is active, and Claude is silently ignoring it for every prompt that doesn’t match its description precisely. No errors. No warnings. Just a plugin that does nothing. Anthropic shipped claude plugin eval in v2.1.269 this week to surface exactly that failure — and the feature inside it called the delta metric is the thing you actually need to understand.

What Plugin Evals Do #

claude plugin eval runs your plugin against a suite of test cases and scores the results. Each case is a realistic user prompt plus one or more graders — checks on what Claude produced. A grader might verify Claude used the right tool, match a regex against the reply, or ask a judge model whether the answer met a rubric. The command outputs a scored summary and an HTML report.

Setup is low-friction. Run claude plugin eval init from your plugin’s root directory, and Claude opens an interactive session: it reads your plugin, proposes test cases and graders, pilots them once to confirm they behave, and writes the files. You can also write cases manually, but the init path is faster for a first suite.

The Delta Metric: Read This Part #

Here’s where most developers will go wrong: they’ll look at the WITH score, see 1.0, and call it done. That score means nothing on its own.

By default, every test case runs twice — once with your plugin loaded and once without it. The difference between those two scores is Δ (delta). A Δ of +0.67 means your plugin raised the score by 0.67. A Δ near zero means the base model handled the task without your plugin — your skill is decoration.

The official docs show this result from a first run:

CASE        WITH  W/OUT Δ      RUNS COST
first-case  1.00  0.33  +0.67  6    $0.41

That’s a healthy result. The plugin is doing real work. But Anthropic is explicit about the most common first finding: a Δ near zero, with the tool_used: Skill grader failing. Translation: Claude isn’t picking your skill when users phrase things naturally. The fix is to update the skill’s description frontmatter, rerun, and compare the delta.

The 6 Grader Types #

Of the six grader types, four are free and two cost money:

  • Free graders (computed from transcripts and files):regex ,tool_used ,tool_order ,file_exists
  • Paid graders (judge model calls added to your bill):llm ,baseline

The recommended setup for most cases: one result-checking grader (llm or regex on the output) and one tool_used: Skill grader to confirm the skill actually fired. The llm grader takes a PASS/FAIL rubric in prose — keep rubrics concrete and use it only for short outputs. For generated files or long output, a regex grader over file contents is more stable than asking a judge model to read the whole thing.

A minimal skill-fired grader looks like this:

---
type: tool_used
tool: Skill
input_match: '"skill"\s*:\s*"(?:[\w-]+:)?your-skill-name"'
---

Getting Started in Under 10 Minutes #

From your plugin’s root directory:

claude plugin eval init

Answer Claude’s questions about your plugin, exit when it says the suite is ready, then run:

claude plugin eval .

Each case runs three times with the plugin and three times without, so one case costs six runs. You’ll see the summary table with WITH, W/OUT, and Δ columns, plus the location of the HTML report. Open the report to see per-run grader verdicts and the judge’s reasoning for any llm graders.

When iterating on a specific case and don’t need the baseline comparison, halve the cost with:

claude plugin eval . --case first-case --runs 1 --ablation none

Locking It Into CI #

The two-gate approach: run claude plugin validate on every commit (free, instant schema check), and run the full eval suite on release tags where you’re willing to pay for model calls.

The CI command Anthropic recommends:

claude plugin eval . \
  --trust-plugin \
  --json results.json \
  --threshold 0.8 \
  --model claude-sonnet-5 \
  --judge-model claude-haiku-4-5 \
  --no-publish \
  --max-cost-usd 20

Pin both --model and --judge-model explicitly. If you don’t, a model rollout will look like a plugin regression — and you’ll spend hours debugging something that isn’t broken.

Exit codes: 0 is a pass, 1 means a case fell below the threshold, 2 means your cost ceiling was hit mid-run. Set --max-cost-usd or you’ll have no upper bound on what a CI job spends.

One Thing to Get Right Before You Write Cases #

Write prompts the way users actually phrase things — not the way you named the skill. “Generate a commit message for this diff” is better than “use the commit-message skill.” If your prompt names the skill, you’re testing whether Claude responds to explicit invocation, not whether the skill’s description is good enough to trigger on natural language.

One more gotcha: skills have a 1% context budget for their descriptions. If your plugin has many skills and descriptions overflow that budget, skills get silently dropped and will never fire. Check the Skills listing in the Claude Code UI and keep descriptions tight.

The complete reference lives in the official plugin evals documentation — every grader option, CI flag, and mock server format is covered there. If you haven’t built a plugin yet, the plugin creation guide is the right place to start. For the full list of what else shipped in v2.1.269, Matthew Wong’s practical walkthrough covers the eval workflow end-to-end with a real plugin example.

── more in #ai-tools 4 stories · sorted by recency
── more on @anthropic 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain — perfect for shipping the agent you just read about.

$git push zahid main
Live at https://your-agent.zahid.host
Get free account → Pricing
from €0/mo · no card required
LIVE [news/claude-code-plugin-e…] indexed:0 read:5min 2026-09-12 ·