命令字典
Slash 命令、CLI 子命令、Hook 事件、启动参数的字典与演进史。
Slash 命令、CLI 子命令、Hook 事件、启动参数的字典与演进史。
运行插件的 eval 测试套件,输出评分并生成可复现的评估结果
claude plugin eval <plugin> [options]claude plugin eval 属于 claude plugin 子命令组(别名 claude plugins)。官方 CLI 参考页的命令表只列出 claude plugin,子命令指向 plugin reference,该表没有单独列出 eval。
官方文档 Test plugins with evals 的定义是:它用一组测试 case 跑你的 plugin 并打分。
claude plugin eval init 会向你询问 plugin 的情况,提议 case 和 grader,试跑后写出文件。官方文档说明,你也可以在已打开的会话里让 Claude 完成同样的事。
它的 case 格式与 skill-creator plugin 使用的 evals/evals.json 是两套东西。若只想检查 plugin 文件的语法和 schema,应使用 claude plugin validate,而不是 eval。
版本要求:MarkTechPost 与 dev.to 两篇文章都写明需要 Claude Code v2.1.269 或更高。我没能在官方页面的可读部分核实这一点,请以 claude --version 和 claude plugin eval --help 为准。
# 生成 eval 套件
claude plugin eval init
claude plugin eval init --bare commit-message # 生成一个空白 case 模板
# 运行套件(plugin 路径可以是 .)
claude plugin eval .
claude plugin eval ./receipt-tools --runs 5 --case '58mm-*'
Flag 列表
官方 plugins-reference 列出了 --eval-dir、--filter <pattern> 和 --json(不带 path 参数)。其余 flag 只出现在下方来源列出的第三方文章中。其中 matthewswong 对部分 flag 有说明,其他文章大多只给出示例。
| Flag | 说明 | 出处 |
|---|---|---|
--eval-dir | 覆盖 plugin manifest 中 experimental.evals 指定的 eval 目录,默认是 plugin 根目录下的 evals/ | 官方 plugins-reference |
--filter <pattern> | 只运行文件名匹配 glob 的 case,可重复使用以匹配多个 pattern;匹配的是相对 eval 目录的 case 文件名,如 skill-name/case-1.md;glob 按子串匹配,foo 也会匹配 foo-bar.md,只想匹配 foo.md 时写 foo.md | 官方 plugins-reference |
--trust-plugin | 对不受信任的 checkout 必需(CI 中常用) | MarkTechPost、dev.to |
--json | 官方:以 JSON 对象逐行输出结果,取代人类可读文本(首行是整体设置,中间各行是各 case 的结果,末行是整体统计),需要 v2.1.268 或更高。第三方文章的示例写作 --json <path>,用来把 JSON 结果写到指定文件;MarkTechPost 称它同时抑制进度输出 | 官方 plugins-reference、MarkTechPost、dev.to、matthewswong |
--report <path> | 指定 HTML 报告路径 | matthewswong |
--no-publish | 不把报告发布到 claude.ai | MarkTechPost |
--threshold <n> | 通过分数线,示例为 0.8 | MarkTechPost、dev.to |
--model <id> | 被测会话使用的模型 | MarkTechPost |
--judge-model <id> | judge 类 grader 使用的模型 | MarkTechPost |
--max-cost-usd <n> | 花费上限 | MarkTechPost |
--runs <N> | 每个 case 的运行次数,--runs 1 可用于低成本试跑 | explainx、matthewswong |
--case '<glob>' | 按名字筛选 case | matthewswong(示例) |
--ablation none | 只跑单臂,不跑无 plugin 对照 | matthewswong(示例) |
--allow-tools ... | 按 pattern 授予对 Bash、Write、Edit、WebFetch 和 MCP tool 的访问权限(这些 tool 需要命令行上的显式授权) | matthewswong(示例) |
--scaffold、--keep-temp | --scaffold 启用 case 文件中定义的 scaffold 脚本来构建 fixture,只应用于自己写的 case,因为脚本以你的权限执行;--keep-temp 保留 scaffold 临时目录,便于检查 case 实际做了什么 | matthewswong(示例) |
dev.to 与 matthewswong 的说明:
Skill 的 tool_used grader 会同时从两个 arm 的计分总额里排除,避免用"没有 plugin 就不可能通过"的检查抬高 Δ。6 种 grader(MarkTechPost、matthewswong 一致):
| 类型 | 检查内容 | 成本 |
|---|---|---|
regex | 对回复做模式匹配 | 免费 |
tool_used | 是否调用了某个 tool | 免费 |
tool_order | tool 调用顺序 | 免费 |
file_exists | 是否生成了文件 | 免费 |
llm | 由 judge 模型按文字 rubric 评判 | 计费 |
baseline | 由 judge 模型与参考答案对比 | 计费 |
目录布局(dev.to、matthewswong 一致):
evals/
<case-name>/
prompt.md # 文件正文就是 prompt
graders/
<name>.md # frontmatter 声明 type,正文写判据
我没能读到官方页面的退出码章节。下表来自 dev.to 和 matthewswong,两者在 0 和 1 上一致,对 2 的细节说法略有出入,请当作待核实信息。
| 退出码 | 含义 |
|---|---|
0 | 所有 case 达到 --threshold |
1 | 有 case 低于阈值;dev.to 还称文件加载失败也是 1 |
2 | 触及 --max-cost-usd,只有部分结果;dev.to 称此时 JSON 中带 partial: true,并说认证失败也是 2 |
MarkTechPost 补充了两点:没有终端时,未加 --trust-plugin 的不受信任 checkout 会被拒绝并以 exit 1 退出;报告方面的问题不会改变退出码。
输出:终端分数表、HTML 报告,以及 --json 指定的 JSON 文件。JSON 内部字段结构我没有找到可靠文档,这里不展开。
MarkTechPost 和 dev.to 给出的 CI 调用:
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
由于阈值和花费上限都会反映在退出码里,它可以直接作为 CI job 的 gate。
| 约束 | 原因 |
|---|---|
每个 eval case 作为单独的 Claude Code 会话运行,产生模型调用的 API 费用,按常规 Claude Code 用量计费;llm、baseline 这两类 judge grader 也计费 | 官方 plugins-reference;MarkTechPost 支持 judge grader 计费;explainx 也提到按 token 计费,并给出一个 7 case × 6 次运行的套件花费 $9.59 的示例 |
| 每个 eval case 在独立的 worktree 中运行,eval 完成后该 worktree 被删除 | 官方 plugins-reference |
无终端环境下,不受信任的 checkout 必须显式加 --trust-plugin | MarkTechPost |
| Hook 与 MCP server 以真实的用户权限执行,不在沙箱内 | explainx |
CI 中涉及 MCP tool 时需要 mock,路径为 evals/mocks/<server>/<tool>.md | dev.to |
以下均为第三方文章的观点,不是官方文档条文:
llm 套件昂贵:建议用免费的机械断言(regex、tool_used 等)搭配少量 judge grader(matthewswong、dev.to)。API 拒绝的运行现在记 0 分且不评分,套件退出码变为 1。
修复在安装了 Docker Desktop 的 Mac 上(`~/.docker/bin` 下有链接)每次授予 Bash 的运行都被拒绝的问题,并且拒绝信息会指明凭据存储的哪一部分包含该链接。
修改为在安装了 git 时需要 git 2.31 或更高版本
新增 CLI 命令用于运行插件的 eval 套件并获得评分和可重现的结果