关于 eval-creator-ci
用于 CI 的技能,可运行 `.evals/` 中的评测用例、报告验证结果,并按配置在出现回归时阻断检查。它还可根据 `learning-aggregator-ci` 提供的晋升候选创建评测用例。
主要功能
- 01运行索引中的评测用例
- 02执行文件和命令检查
- 03报告通过、失败或跳过
- 04配置回归阻断策略
- 05根据候选创建评测
适用场景
- 01在拉取请求中检查评测用例
- 02在配置的评测失败时阻断运行
- 03将已晋升模式转为评测用例
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ pskoett/ pskoett-ai-skills --skill eval-creator-ci安装后在 Claude Code 中输入/eval-creator-ci确认已加载。
附带文件references/workflow-example.md
详细介绍
Eval Creator CI
安装
gh skill install pskoett/pskoett-skills eval-creator-ci
对于交互式会话,请使用:
gh skill install pskoett/pskoett-skills eval-creator
备用方案:使用 Agent Skills CLI:
npx skills add pskoett/pskoett-skills/skills/eval-creator-ci
npx skills add pskoett/pskoett-skills/skills/eval-creator
用途
在 CI 中运行外层循环的 回归测试 步骤。执行 .evals/ 中的所有评估用例,报告通过/失败结果,并可选择在出现回归时阻止合并。还可以根据 learning-aggregator-ci 标记的候选晋级项创建新的评估用例。
交互式 eval-creator 技能专为会话内使用而设计,用户可在其中创建评估并立即运行以获取反馈。此 CI 版本按计划或针对每个 PR 运行,并以检查注释的形式发布结果。
上下文限制(重要)
CI Agent 不具备实现上下文。它们会执行评估用例文件中定义的机械验证方法(grep 检查、命令检查、文件检查、规则检查)。它们不会对结果进行通过/失败之外的解读;细致判断留给人工审核已发布的报告。
前提条件
- 仓库已启用 GitHub Actions
ghCLI 已通过身份验证并拥有仓库访问权限- 已安装
gh-aw扩展(gh extension install github/gh-aw,v0.40.1+) .evals/目录中包含评估用例(由eval-creator或eval-creator-ci创建).evals/EVAL_INDEX.md包含评估用例索引
CI 约定
无头执行的硬性规则:
- 评估执行对代码只读 — 评估用例会读取文件并运行检查命令,但不会修改源代码
- 评估用例创建仅写入
.evals/— 根据候选晋级项创建新评估时 - 无头运行 — 不使用交互式提示,不设置审批关卡
- 结构化输出 — 在
eval_creator_ci键下以 YAML 格式输出结果 - 门禁策略 — 可在评估出现回归时使检查运行失败(可配置)
- 单条评论 — 每次运行只发布一条汇总结果评论
编写工作流(gh-aw)
- 将
references/workflow-example.md复制到.github/workflows/eval-creator-ci.md - 自定义触发条件和门禁策略
- 验证:
gh aw compile(添加--actionlint --zizmor进行安全扫描) - 推送以启用
持久化与串联
cache-memory:跨运行存储评估运行历史(上次运行日期、结果趋势),避免重新运行没有变化的评估。workflow_call:在创建模式下,由learning-aggregator-ci通过call-workflow触发。通过工作流输入接收候选晋级项。upload-artifact:持久化评估结果 YAML,供下游使用。
工作流规则
CI Agent 按顺序遵循以下规则:
模式:运行评估(默认)
- 读取
.evals/EVAL_INDEX.md,获取所有评估用例列表 - 对
.evals/cases/中的每个评估用例文件: a. 读取评估用例元数据和验证方法 b. 检查前置条件 — 如果不满足,则标记为skipc. 执行验证方法:grep-check:在目标文件中搜索模式,并与预期结果进行比较(found/not_found)command-check:运行命令,检查退出代码和/或输出file-check:验证文件或章节是否存在rule-check:读取目标文件,搜索预期内容 d. 将结果与预期结果进行比较 e. 记录通过/失败/跳过
- 使用每个用例的
last-run日期和last-result更新.evals/EVAL_INDEX.md - 在
eval_creator_ci键下输出结构化 YAML - 将结果摘要作为 PR 评论或检查注释发布
- 如果启用了门禁策略且有任何评估失败,则使检查运行失败
模式:创建评估(来自候选晋级项)
- 读取最近一次
learning-aggregator-ci运行的learning_aggregator_ci制品或差距报告 - 对每个包含
eval_candidate: true的可晋级模式: a. 根据模式类型确定适当的验证方法 b. 使用正确的 frontmatter 在.evals/cases/中创建评估用例文件 c. 将条目添加到.evals/EVAL_INDEX.md - 提交新评估用例(如果运行时具有写入权限)
- 在输出中报告已创建的评估
输出架构
eval_creator_ci:
version: "0.1.0"
source:
run_id: "<workflow run ID>"
trigger: "pull_request | schedule | workflow_dispatch"
run_date: "YYYY-MM-DD"
mode: "run | create | both"
run_results:
total: 12
passed: 10
failed: 1
skipped: 1
failures:
- id: "eval-20260301-001"
pattern_key: "harden.input_validation"
rule_summary: "Always validate external inputs"
expected: "not_found"
actual: "found"
target: "src/api/handler.ts"
recovery_action: "Add input validation to new handler endpoint"
skips:
- id: "eval-20260315-003"
reason: "Precondition not met: project does not use TypeScript"
create_results:
created: 2
cases:
- id: "eval-20260411-001"
pattern_key: "simplify.dead_code"
verification_method: "grep-check"
source_learning: "LRN-20260301-001"
- id: "eval-20260411-002"
pattern_key: "harden.authorization"
verification_method: "rule-check"
source_learning: "LRN-20260315-003"
summary:
regressions: 1
new_evals_created: 2
gate_result: "fail"
followup_required: true
推荐的输出
| 输出 | 目标位置 | 内容 |
|---|---|---|
| Eval 结果 | PR 评论或检查注释 | 包含失败详情的通过/失败摘要 |
| YAML 工件 | 工作流工件 | 机器可读的 eval_creator_ci 载荷 |
| 检查状态 | 检查运行 | 根据门禁策略判定通过或失败 |
| 新建的 eval 文件 | .evals/cases/(如果处于创建模式) | Eval 案例 Markdown 文件 |
门禁策略
配置阻止行为:
| 策略 | 行为 |
|---|---|
strict | 任何 eval 失败都会阻止检查运行 |
advisory | 报告失败,但不阻止 |
critical-only | 只有来自严重程度为 critical 或 high 的模式的 eval 才会阻止 |
默认值:advisory(报告但不阻止)。团队应在 eval 覆盖率稳定后升级为 strict。
触发器配置
推荐:每个 PR 触发 + 每周定时运行
on:
pull_request:
types: [opened, synchronize, reopened, ready_for_review]
schedule:
- cron: '0 10 * * 1' # Monday 10am UTC (after learning-aggregator-ci)
workflow_dispatch:
每个 PR 运行可在合并前发现回归问题。每周运行可发现测试框架本身的偏移。请安排在 learning-aggregator-ci 之后运行,以便获取晋升产生的新 eval。
与其他技能的集成
上游(输入来源)
eval-creator(交互式)— 手动创建 eval 案例learning-aggregator-ci— 生成带有eval_candidate: true的晋升候选项self-improvement(交互式)— 在经人工批准的晋升后标记 eval 候选项
下游(输出去向)
- self-improvement / self-improvement-ci — 回归失败会成为
.learnings/中的新错误条目 - 人工审核 — 发布失败报告,供团队分类处理
- PR 合并门禁 — 可因回归问题阻止合并(可配置)
数据流
learning-aggregator-ci → promotion candidates (eval_candidate: true)
↓
eval-creator-ci (create mode)
↓
.evals/cases/
↓
eval-creator-ci (run mode, per-PR)
↓
pass/fail report → PR comment + check annotation
↓
regression failures → self-improvement-ci → .learnings/
与交互式版本的区别
| 方面 | 交互式(eval-creator) | CI(eval-creator-ci) |
|---|---|---|
| 触发方式 | 手动调用 | PR 事件、cron 定时计划、workflow_dispatch |
| Eval 创建 | 用户驱动,可立即获得反馈 | 根据 learning-aggregator-ci 候选项自动创建 |
| Eval 执行 | 在会话中执行并显示行内结果 | 无界面运行,输出 PR 评论 |
| 人工交互 | 用户在行内查看结果 | 通过 GitHub 异步审核 |
| 门禁行为 | 不阻止,仅提供信息 | 可配置:advisory、critical-only、strict |
| 文件修改 | 更新 eval 案例元数据 | 更新 eval 索引 + 创建新案例(处于创建模式时) |
评论
支持 Markdown