Build1 publisher3 min readPublished
A no-plugin baseline doubles the agent runs in Claude Code's plugin eval suite
Each case in claude plugin eval runs three times with the plugin loaded and three times without it. That doubling is what produces the delta column, and every one of those calls is billed to your own credentials.
The Engineer · Build desk

What happened
- Claude Code's claude plugin eval command runs a plugin against a suite of cases, each one a realistic prompt plus graders that check a regex over the reply, whether a tool was called, or a model-judged rubric.
- Every run starts a fresh isolated non-interactive session with only that plugin loaded and lets Claude work until it finishes or hits the case's turn or time limit, after which the graders inspect the result.
- The same runs are repeated with no plugin loaded, so the report shows a WITH score, a W/OUT score, and the difference between them as the plugin's contribution.
- Authors do not have to write the suite by hand: claude plugin eval init interviews them about the plugin, proposes prompts and graders, pilots them once, and writes one case directory per prompt.
Compiled by The EngineerSomething wrong?How this is made
Why it matters
- cost The eval bill lands on the plugin author, not the platform: agent runs, judge calls and even the suite-writing interview go out on their own credentials and eat their plan limit or API spend.
- decision Anyone gating merges now has a threshold to pick: keep 1.0 and let one flaky run of three redden the build, or lower it and ship plugins that pass two runs in three.
- capability A model upgrade becomes something a plugin author can test: rerun the same cases, compare the with-versus-without gap.
- constraint Composition stays untested. The suite measures a plugin on its own, so conflicts with the other plugins a user has installed do not reach the gate.
The default threshold is the line to read before wiring this into a merge gate. A run's score is the fraction of its graders that passed, weighted if you set weights, and the case's score is the mean across its runs [7]. A case passes when that mean meets `--threshold`, which is 1.0 unless you change it [8]. With three runs per case [6], a single-grader case that fails one run scores 0.667 and does not pass [1].
Then the model bill. The page puts a suite at roughly cases times runs agent runs with the plugin, as many again for the no-plugin baseline, plus three short judge calls per `llm` or `baseline` grader per run [12]. Ten cases, the default three runs, one judged grader each: 30 agent runs in the with-arm, 30 in the without-arm, and 180 judge calls [2]. Those calls go out on your credentials and count against your plan's usage limits or your API bill, and `claude plugin eval init` spends the same way [13]. When the command reports a cost, that figure is a list-price estimate of those calls [14].
The baseline is the good engineering here. A high score alone does not show the plugin helped, because Claude might do as well without it, so the runs are repeated with nothing loaded and you get a WITH score, a W/OUT score, and their difference [9]. The documentation says it directly: if a case scores 1.0 in both arms, "the plugin isn't what made it pass" [10]. You pay list price to learn that your plugin contributed nothing.
The delta from three runs is coarse. A single-grader case can only score 0, 0.333, 0.667 or 1.0, so the smallest non-zero delta it can report is 0.333 [3]. One grader flipping once in the without-arm produces that number; so does a real improvement. More graders and more runs give finer resolution at proportionally more model calls [12]. Turning the baseline off [11] halves the agent runs, 60 down to 30 in the example above [4], and drops the only column that separates the plugin from the model.
A few requirements decide whether you can run this at all. The floor is Claude Code v2.1.269 [15], and the harness wants a `plugin.json` or `.claude-plugin/plugin.json` manifest, or a skills-directory plugin [16]. `claude plugin validate` still only checks files for syntax and schema errors [19]. Authors already keeping an `evals/evals.json` for the skill-creator plugin get no reuse, because this case format is separate from that file [18]. The page names teams that gate plugin changes in CI as an audience [17], and the documentation does not include a CI example.
What to watch
- Whether the documentation adds an exit-code contract or a worked CI workflow for the teams it names as an audience.
- Whether the default of three runs and a 1.0 threshold moves once authors report gates reddening on agent flake.
- Whether the skill-creator plugin's evals/evals.json format converges on this case format or stays separate.