Claude Code 插件评测实战:用原生 Evals 验证行为变化

Claude Code 2.1.269 已原生支持插件评测。本文从创建行为用例、配置确定性 grader、读取 WITH/W/OUT/Δ 报告,到故意制造回归、控制成本并接入 CI,完整演示如何证明插件确实改变了 Claude 的行为,而不只是通过文件校验,并给出最值得优先测试的场景和两类产品机会。

发布于

Claude Code 插件评测实战:用原生 Evals 验证行为变化

现在,你可以通过 Claude Code 插件评测证明某个插件确实改变了 Claude Code 中 Claude 的行为,而不只是验证文件是否合规。原生 claude plugin eval 命令会让启用插件和未启用插件的两组会话处理同一个真实请求,分别评分并展示差异。这样一来,“这个 skill 好像触发了”不再是模糊的主观判断,而会变成一项有时间、轮次和用量预算依据的发布决策。

现在正是采用它的好时机。Claude Code 2.1.269 于 2026 年 9 月 11 日加入了插件 evals。目前,这个搜索主题下排在前列、带日期的教程仍在介绍自建 Python runner。如果你正在维护本地插件,最短路径已经变成原生流程:先初始化一个行为用例,分别对插件组和对照组运行,检查报告,再让 CI 拒绝你刚刚故意制造出的同类回归。

Claude Code 插件评测究竟测什么

插件 eval 本质上是一次针对 Agent 行为的 A/B 测试。可以把它想成两个完全相同的工作间,同时收到同一张任务单:其中一个装有你的插件,另一个没有。Claude Code 会在两边重复执行任务、给结果打分,并报告 WITH、W/OUT 和 Δ;其中 Δ 等于启用插件后的得分减去未启用插件时的得分。

真正值得关注的是这个差值。两组都拿到 1.0 看似很理想,但这也说明,即使没有插件,Claude 本来就能完成任务。正 delta 代表插件带来了可测量的贡献;负 delta 则说明,插件反而让被测行为变差了。

默认情况下,一个用例会分别新建三次启用插件的会话和三次未启用插件的会话。每次会话都有相互隔离的 home、工作目录和 Claude Code 配置。你的个人设置、项目 CLAUDE.md、其他插件、memory 以及个人 MCP server 都不会被带入。隔离让比较更干净,也意味着暗中依赖你本机环境的插件会以合理的方式失败。Anthropic 的插件 eval 文档完整说明了隔离与安全约束。

架构信息图:同一个 prompt 分流到三次启用插件的运行和三次未启用插件的运行,最后汇总为 delta 报告
一个用例拆成两条相互匹配的测试分支,delta 用来单独衡量插件带来的贡献。

先准备一个可正常运行的本地插件

行为 eval 是第二道检查,不是第一道。插件目录中必须有 plugin.json、.claude-plugin/plugin.json,或符合要求的 skills 目录结构。文件或 schema 有问题时,使用 claude plugin validate;要回答“这个 skill 能否在自然请求下触发,并按团队格式输出”之类的问题,则使用 claude plugin eval。

你还需要 Claude Code v2.1.269 或更高版本,以及日常会话所使用的同一套身份验证。Eval 会话、judge grader 和交互式初始化器都会消耗套餐额度或产生 API 费用。如果整套 Claude Code 环境还在搭建阶段,建议先从基础本地工作流开始,再添加发布门禁。

在可信插件的根目录中,先检查版本并创建一个空白用例:

Bash
claude --version
claude plugin eval init --bare release-note

也可以使用交互式命令 claude plugin eval init。它会读取插件,询问什么样的结果才算合格,生成用例和 grader,试跑一次,然后写入整套测试。若想先弄清文件约定,--bare 更合适,因为它只创建文件,不执行任何测试。

从一个容易看懂的行为用例开始

假设这个可用插件里有一个名为 release-notes 的 skill。它的价值不只是写出一段文案,还应该能识别自然语言描述的产品变更请求,并按团队规定的三段式结构输出:Summary、Impact 和 Risk。

把用户的真实请求写进 prompt.md,然后分别为结果和执行机制添加一个确定性 grader。所谓“确定性”,是指 CLI 直接检查 trace 或文本,不会调用 judge 模型。

Text
# evals/release-note/prompt.md
---
name: release-note
tags: [smoke]
runs: 3
max_turns: 8
timeout_seconds: 180
allowed_tools: [Skill]
---

Turn this change into a customer-facing release note: checkout now retries a failed payment once before showing an error.

# evals/release-note/graders/format.md
---
type: regex
target: last_message
pattern: 'Summary[\s\S]*Impact[\s\S]*Risk'
flags: i
---

# evals/release-note/graders/skill-fired.md
---
type: tool_used
tool: Skill
input_match: '"skill"\s*:\s*"(?:[\w-]+:)?release-notes"'
---

请把 release-notes 替换为该 skill 的 SKILL.md 中实际填写的 name。这里的 prompt 有意不点名 skill,也不直接要求三个标题;这样才能检验插件是否会识别任务并主动贡献规定格式。如果 prompt 已经把所有答案都写明,未启用插件的对照组也可能通过,此时 delta 只会告诉你插件的增益很小。

这段 frontmatter 就是当前的原生 schema。在 prompt.md 中,runs、max_turns、timeout_seconds、model、tags 和 allowed_tools 等字段都放在顶层。如果需要 fixture、对话历史或目录,则添加 case.yaml;这个文件必须包含 schema_version: "1.1" 和 name,并把执行字段移到 execution: 下。

运行测试并读懂报告

在插件根目录运行 claude plugin eval .。对于这个单一用例,命令会启动三次启用插件的会话,以及三次 baseline 会话。每次会话结束后,进度行都会显示 grader 结果;最后的摘要会给出 WITH、W/OUT、Δ、RUNS、COST 和 NOTES。

建议按以下顺序阅读:

  1. WITH:启用插件的会话是否满足 grader。
  2. W/OUT:Claude 在没有插件时,有多大概率也能达到同一结果。
  3. Δ:插件贡献了多少。正值有意义,接近零就要继续排查,负值代表回归。
  4. COST:按标价计算的估算值,不一定等于订阅方案下实际收取的金额。
  5. NOTES:指向启用插件分支里权重最高的失败项或运行错误。

只要 suite 至少包含一个用例,就会在带时间戳的结果目录中写出 aggregate-result.json 和一份可独立打开的 report.html。HTML 报告可以逐次查看运行记录、每个 grader 的判定和解释,还能对照 prompt、grader 定义与 Claude 的实际执行。JSON 则提供适合 CI 稳定读取的字段,包括总分、通过的用例数、平均 delta、partial 状态、成本估算、耗时和 Claude Code 版本。

先制造一次回归,再相信这套测试

现在要证明这套测试真的会失败。暂时把 release-notes skill 的描述改成一段模糊文字,不再说明它应该识别的任务。不要修改 eval 用例。重新运行同一条命令,检查新报告,然后恢复原本的描述。

你要观察的是行为层面的失败:Skill grader 不再通过,预期格式变得不稳定,或者启用插件后的优势缩小。不要预设具体分数,因为 Agent 每次运行都会波动。如果在默认的三次运行中,故意破坏后的报告几乎毫无变化,说明这个用例还保护不了插件。可以把请求改得更贴近真实场景、收紧结果 grader,或者补一个不得触发该 skill 的负向用例。

这种故意破坏就像按下烟雾报警器的测试键。只有确认相关故障确实能让面板转红,持续显示绿色才有意义。

增加用例前,先算清循环预算

一个默认用例已经会创建六次 Agent 会话。再加一个 LLM grader,同一用例还会新增十八次 judge 投票,也就是六次会话各投三票。会话本身又可能持续多个轮次,因此,一套看似很小的 suite,实际用量也可能远高于用例数量给人的直觉。

可以用三档预算分别服务三类决策:

阶段命令形式这笔预算买到什么
快速本地循环--case release-note --runs 1 --ablation none --no-publish只运行一次启用插件的会话,不跑 baseline,编辑用例时快速获得信号
确认两个分支都按默认值各运行三次六次会话,以及一个更值得认真参考的 delta
CI 门禁固定 Agent 与 judge 模型,使用 --json、threshold、--no-publish 和 --max-cost-usd可比较的结果、可归档的产物,以及针对估算支出的停止规则

单次运行的循环天生噪声较大。可以用它发现明显错误,但在接受变更前,仍应按默认值运行三次进行确认。频繁检查时优先使用 regex、tool_used、tool_order 和 file_exists,因为这些 grader 不会增加 judge 调用。只有在质量无法用稳定规则表达时,才值得为简短结果使用 LLM grader。

成本参数还需要特别说明。--max-cost-usd 会在每次运行开始前,按 CLI 的标价估算值限制支出。已经开始的运行仍会完成,因此最终报告的估算值可能超过上限。触及上限会留下 partial 结果,并以退出码 2 结束。它是一道护栏,不是预付钱包。

架构预算信息图:一次运行的快速循环、三加三的 baseline 确认,以及 20 美元的 CI 上限
分层购买可信度:一次运行用于编辑,三加三用于确认,最后在 CI 中设置清晰可见的上限。

把回归检查交给 CI

确认故意制造的回归能被发现、恢复后的插件可以通过后,就把同一套 suite 纳入版本控制。Anthropic 的 CI 示例会固定 Agent 与 judge 模型,把结果写入 results.json,使用 0.8 的 threshold,把报告留在本地,并设置 $20 的估算成本上限。示例还传入了 --trust-plugin;只有当检出的插件和 suite 都是你本来就愿意运行的代码时,这样做才合适。

完整的交接命令是 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。安装 Claude Code 并完成身份验证后,把这条命令放进 CI job,再归档两个结果文件。

命令的退出状态足以充当构建门禁。退出码 0 表示所有用例都已加载并达到 threshold;退出码 1 既可能代表得分低于 threshold,也涵盖若干设置错误;退出码 2 则表示成本上限造成了 partial 运行,或首次凭证校验被拒绝。即使失败,也要归档 results.json 和 report.html,这样作者才能分清是插件回归、运行超时,还是预算中止。

固定模型很重要,否则一次模型更新也可能看起来像插件回归。推理支出同样要分开管理:应当把测试质量和 effort 拆成两条轨道,避免成本变化混进行为得分。

架构 CI 信息图:把 eval JSON 报告分流到通过、失败和 partial 三条退出通道
CI 不应只保留红绿状态,还要保留原因:通过、回归和预算导致的 partial 中止是三种不同结果。

最值得优先测试的七类插件行为

收益最高的是那些向其他人分发插件的团队。私人助手尚可容忍手动检查;但对于 marketplace 或组织级插件,一条薄弱的描述、一次错误的工具授权或一项输出变化,都会持续转化为支持成本。

排名适用团队精确的行为测试为什么值得做
1marketplace 插件维护者同时使用本应触发 skill 的自然请求,以及相近但不应触发的请求在所有用户受到影响前,同时发现 skill 不可见和过度触发这两类问题
2代码审查插件团队检查输出是否包含规定的审查部分,并验证 review skill 确实触发在允许措辞变化的同时保护产品约定
3发布工程团队固定当前模型,修改插件,再比较相同用例及 delta区分插件回归与模型变化,减少主观的发布争论
4安全插件作者添加一个负向用例,禁止 skill 在无害的维护请求上触发避免成本高昂或干扰性强的扫描因错误任务而启动
5基于 MCP 的工作流插件用 suite mock 替代外部工具响应,并检查由此产生的工具调用路径无需每次接触线上服务,也能覆盖失败和边界场景
6文档生成插件负责人检查预期文件是否存在,再用 regex 验证稳定内容发现被友好最终回复掩盖的静默输出约定破坏
7维护多个内部插件的平台团队每次变更都运行带 tag 的小型 smoke 集,发布前再跑更深的用例把日常预算集中在最可能阻塞同事的行为上

先从两项“一旦消失,用户最容易察觉”的行为开始。十个模糊用例,不如一个能复现缺陷的触发测试加一个结果测试。

围绕原生插件 eval,最值得做的两类产品

1. 最有机会的是拉取请求 delta 门禁

可以做一款轻量 CI 产品:运行原生命令,读取 aggregate-result.json,然后在拉取请求中发布一条 review,集中展示得分变化、delta、成本、失败的 grader,以及已归档报告的链接。插件团队和 marketplace 维护者愿意付费的是决策层,而不是又一套 evaluator。

这个需求仍处于早期,但商业信号很明确。claude code evals 在美国每月约有 50 次搜索,同比上涨 600%,CPC 为 $17.61。更广义的评估平台也证明了市场确实存在质量预算:Braintrust 的 Pro 方案定价为每月 $249。这是品类价格锚点,并不等于插件封装层的定价建议。

最小可售版本可以是一项 GitHub Action 加一条拉取请求评论。它接收插件路径、threshold、固定模型和估算成本上限,上传原生 JSON 与 HTML,并区分退出码 1 和代表 partial 的退出码 2。需要警惕的是平台风险:Anthropic 完全可能加入第一方拉取请求报告。真正具备防御力的部分,是跨仓库策略、历史对比和审批规则,而不是给原生报告换一层更漂亮的界面。

2. 精选 eval 套件可以服务 skill 作者

还可以为代码审查、changelog 编写、事故分诊和安全工具选择等常见插件任务,销售持续维护的用例包。一个 pack 就是普通的 evals/ 目录,其中包含真实的正向与负向 prompt,以及确定性 grader;团队可以基于它调整,而不必从零发明质量标准。

精准关键词 claude code skill evals 在美国每月约有 10 次搜索。这个量很小,因此它更适合做专注的附加产品,而非独立的风险投资型市场。MVP 应该只针对一个高价值插件品类,提供一套出色的 pack:随 Claude Code 版本维护,并附上一份简短的校准指南。挑战同样清楚:claude plugin eval init 已经能提出并试跑用例。只有当 pack 的领域场景和失败标准优于通用生成时,它才有胜算。

这条命令解决不了什么

原生 eval 无法证明一个插件在所有情况下都足够好。它只能证明:在你选定的 prompt、环境、模型、工具授权和 grader 条件下,插件表现如何。薄弱的 prompt 会制造讨喜的高分;regex 可能奖励正确的标题,却忽略错误的内容;LLM judge 本身会波动,而且每个 grader、每次运行都要增加三次投票。

隔离也是一项必须正视的约束。每次运行都会从干净环境开始,因此项目文件、用户设置、hook 和个人 server 都不存在。这非常利于复现,却会让忘记声明 fixture 的用例无法运行。只读工具集之外的工具,需要通过命令行显式授权。真实的插件 MCP server 还要额外 opt-in 和授权;hook 与真实 server 可能在 Agent sandbox 之外执行,因此更适合放在隔离 runner 中。

最后,不要把 max_turns 或 timeout_seconds 压缩到正常任务也会撞上上限。运行一旦超时或达到轮次限制,就会被记作错误,通常还会拉低分数。先为目标任务留出足够空间,再用估算成本上限控制整套 suite。

如何用 evals 测试 Claude Code 插件?

在 Claude Code v2.1.269 或更高版本中,进入一个可正常运行的插件根目录,执行 claude plugin eval init 生成 suite,或用 claude plugin eval init --bare <name> 创建空白用例。把真实 prompt 和 grader 放到 evals/ 下,再运行 claude plugin eval .,并在摘要与报告中比较 WITH、W/OUT 和 Δ。

Claude Code evals 是什么?

它们是一组重复执行、相互隔离的 Claude Code 会话,结果由确定性 grader 或模型 judge 评分。插件 eval 默认还会加入未启用插件的对照组,因此,你衡量的是插件是否改善了结果,而不只是 Claude 最终有没有完成任务。

Claude Code skill evals 如何工作?

先用用户日常会说的话写 prompt,再同时检查结果,以及 Skill 工具是否调用了目标 skill。如果 skill 触发但结果失败,说明它的指令需要改进;如果没有插件也能取得同样结果,这个 skill 在该用例中的可测量增益可能很小。

下周一,一位插件维护者可以先添加一个触发用例,故意让它失败,再恢复插件,并在 CI 中为这项检查设置上限。如果你希望在团队的所有插件中搭建这套发布体系,我可以帮你设计生产级门禁。

发布日期
分类
Build
Airtable 替代品怎么选?NocoDB、Baserow 等工具的价格与适用场景

Airtable 替代品怎么选?NocoDB、Baserow 等工具的价格与适用场景

想换掉 Airtable,先分清是席位太贵、容量不够,还是缺少客户门户。本文对比 NocoDB、Baserow、SeaTable、Grist、Smartsheet、Notion 和 Softr,拆解价格、免费额度、自托管、API、自动化与权限差异,帮你按真实工作流选型,并在迁移前验证关联数据、集成和恢复方案。2026年11月10日Build
2026 年 proxy 代理服务推荐:Bright Data、Oxylabs、Decodo 等 7 家怎么选

2026 年 proxy 代理服务推荐:Bright Data、Oxylabs、Decodo 等 7 家怎么选

proxy 代理服务该怎么选?对比 Bright Data、Oxylabs、Decodo、Webshare、ThorData、IPRoyal 与 NetNut,梳理住宅、数据中心、ISP 和移动代理的价格、试用、KYC 与会话控制,分清原始网络、托管解封和抓取 API 的职责,按有效记录成本和实际任务需求筛选。2026年11月10日Build
NVIDIA OpenShell:为 AI 智能体划定可执行的权限边界

NVIDIA OpenShell:为 AI 智能体划定可执行的权限边界

NVIDIA OpenShell 如何限制编程智能体的文件、网络和凭据访问?本文梳理受支持的平台、CLI 安装与 OpenCode 启动流程,解释哪些策略可实时更新、哪些变更需要重建沙箱,并给出可审查的编程策略模板、权限测试方法和团队落地场景,帮助平台团队在开放真实项目与服务前看清实际授予的权限。2026年11月9日Build
CodeRabbit 价格详解:席位费用、用量限制与附加收费

CodeRabbit 价格详解:席位费用、用量限制与附加收费

CodeRabbit 价格怎么算?本文梳理 Essentials、Team、Advanced 与 Enterprise 的席位收费、年付折扣、PR 审查额度及关联仓库限制,并列出不同团队规模的预算算例。了解免费版和开源方案的适用范围,分清超限文件审查、Agent 分钟数与安全扫描费用,再按实际工作流和安全需求选择套餐。2026年11月9日Build
2026 企业杀毒软件怎么选:六款小企业方案、价格与响应服务对比

2026 企业杀毒软件怎么选:六款小企业方案、价格与响应服务对比

企业杀毒软件怎么选,关键在于谁来管理设备、谁来处理告警。本文对比 Bitdefender、Microsoft Defender、ESET、Sophos、CrowdStrike 与 Malwarebytes,梳理美元价格、设备额度、服务器授权和托管响应范围,帮助小企业按现有订阅、设备类型与管理能力确定候选方案。2026年11月8日Build
Paperclip AI 评测:多智能体协作怎么管,部署前要看什么

Paperclip AI 评测:多智能体协作怎么管,部署前要看什么

Paperclip AI 能把分散的 AI 智能体组织成可追踪的工作流,但安装管理面板并不等于完成权限与验收配置。本文梳理官方安装方式、运行时与模型支持、任务交接、预算策略和审批边界,并对比 OpenClaw 与 Hermes Agent,帮你判断是否值得花一个周末试用,以及上线前应检查什么。2026年11月7日Build
Supabase 是什么?看懂 AI 应用背后的数据库、权限与后端

Supabase 是什么?看懂 AI 应用背后的数据库、权限与后端

Supabase 是什么,为什么 AI 应用构建工具常用它做后端?本文从 Postgres 数据库、登录认证、文件存储、实时更新与向量搜索讲起,梳理 Lovable、Bolt、v0 和 MCP 的接入方式,解释 RLS 权限、项目控制权与迁移边界,帮你在接收真实客户数据前,明确需要验证的隔离、恢复和交接事项。2026年11月7日Build
AI IDE 怎么选?2026 年 Cursor、VS Code、Zed 等 6 款编辑器对比

AI IDE 怎么选?2026 年 Cursor、VS Code、Zed 等 6 款编辑器对比

AI IDE 怎么选?比较 Cursor、VS Code 搭配 GitHub Copilot、Windsurf(现为 Devin Desktop)、Zed、Kiro 与 JetBrains AI,梳理价格、免费方案、智能体模式、模型接入、BYOK、本地推理、隐私边界与团队管控,帮你按工作流判断是否值得迁移。2026年11月6日Build
订阅通讯

每周日,一封信。写运转中的系统,不写热评。

每周一期。无垃圾邮件。随时退订。