关于 verify
只读验证 Skill,根据收集到的证据判断已完成的变更是否满足验收标准。它按风险选择检查方式、报告未覆盖事项,且不会修改工作内容。
主要功能
- 01检查变更文件与差异
- 02按风险选择检查方式
- 03执行静态、行为和运行时检查
- 04对高风险变更进行对抗性审查
- 05报告证据、缺口与结论
适用场景
- 01独立审查已完成的变更
- 02界面变更后检查运行时行为
- 03验收高风险变更前评估证据
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ yansfil/ vibe-engineering --skill verify安装后在 Claude Code 中输入/verify确认已加载。
详细介绍
验证
当工作看起来已经完成,但还需要证据时,使用此技能。
这项工作的目的不是庆祝完成,而是依据证据判断是否可以验收。
此技能是判断工作是否完成的唯一事实来源,有两种使用方式:
- 作为
implement的完成门槛:implement完成构建后,会启动独立验证器,按照此技能评判验收标准。 - 作为
implement之后单独执行的检查:当用户希望进一步确认、进行运行时 QA,或对任何差异进行独立完成情况审核时使用。
无论哪种方式,工作内容和规则都相同:依据证据进行判断,不要修复问题。
此技能的作用
verify 回答四个问题:
- 有哪些改动?
- 可能有哪些问题?
- 实际检查了什么?
- 还存在哪些风险?
使用此技能时,不要修改代码、内容或配置。verify 只读:它会报告证据并给出结论,不会修复发现的问题。如果验证发现了 bug,请准确描述(文件、行号、失败情形),并交由 implement 或用户修复。
验证级别
选择能覆盖实际风险的最低级别,仅在必要时扩大范围。
级别 1:静态检查
当改动可能影响语法、类型、lint 规则、内容解析或构建时使用。
示例:
npm run lintnpm run typechecknpm testnpm run build- 项目专用验证器,例如
verify:content
级别 2:行为检查
当预期行为可以通过测试或检查来验证,而不必仅依赖主观判断时使用。
示例:
- 纯逻辑的单元测试
- 数据加载或 API 行为的集成测试
- 冒烟脚本
- 迁移或种子数据验证
- 检查生成的输出文件
级别 3:运行时 QA
当结果取决于真实应用、浏览器、API、数据库、日志或外部服务配置时使用。
示例:
- 打开本地或已部署的路由
- 点击改动涉及的流程
- 检查可见文本和状态
- 检查控制台或网络错误
- 调用 API 端点
- 验证数据库行数或记录数
- 获取截图、DOM、日志或命令证据
使用 playwright-cli 进行浏览器 QA。如果尚未安装,请先安装(参见 https://github.com/microsoft/playwright-cli),或改用项目已配置的浏览器工具。
Level 4. 对抗式子 Agent 评审
当产生更改的上下文不适合评判这项更改时使用,因为更改规模较大,或自信却错误地给出“通过”的风险较高。目标是避免自我验证偏差:由一个没有编写这项更改、也不认同其假设的新 Agent 进行评审,更难被误导。
仅在至少满足以下一项时触发 Level 4:
- diff 很大或涉及许多文件(粗略标准:5 个或更多文件,或 200 行或更多更改)
- 更改涉及安全、身份验证、资金、数据迁移或破坏性操作
- Level 1-3 检查均通过,但结果仍显得脆弱,或某一项判断的影响很大
- 用户明确要求深入、独立或对抗式评审
不要对小型、低风险的更改触发 Level 4(一行修复、文案微调、清理 lint)。让一群怀疑论者评审无关紧要的 diff 是浪费。
执行方法:
- 将每项即将判定为“通过”的内容表述为明确的声明,例如“新增的身份验证防护会拒绝已过期的令牌”或“迁移可以回滚”。
- 对每项高风险声明,使用
Task工具启动独立的怀疑论者子 Agent。向每个子 Agent 提供声明、相关文件或 diff,以及你已收集的证据,并要求它尝试推翻该声明,而非确认它。对不同声明的怀疑论者可并行运行(在一条消息中调用多次Task)。 - 每个怀疑论者返回:
refuted或not_refuted,并附具体理由。只有指出具体失败案例、文件、行号或复现步骤的反驳才算数。仅说“可能有风险”而没有具体案例,不算反驳。 - 按多数结果决定。对于一项声明,使用奇数个怀疑论者(1、3),仅当多数人返回
not_refuted且没有出现具体反例时,才认定该声明成立。任何具体且可复现的反驳,无论投票结果如何,都会将该声明判定为失败。
子 Agent 继承以下证据规则。告知每位怀疑论者:只能报告实际验证过的反驳(运行过相关案例、读过相关代码行),不能报告想象出来的反驳。子 Agent 未验证的说法不算证据,正如你未验证的说法也不算。
防止陷入无休止的怀疑:告知怀疑论者,若没有具体反例,默认结论为 not_refuted。目标是找出真实问题,而不是因模糊的疑虑而拒绝批准。
工作流
- 运行
git status --short并确定已更改的文件。 - 阅读相关 diff 或文件。不要依赖记忆。
- 用一两句话说明预期行为。
- 列出此次更改引入的主要风险。
- 选择能够覆盖这些风险的 Level 1、2 和/或 3 检查。
- 运行检查。优先运行有针对性的检查。
- 如果检查失败,判断原因是此次更改、已有问题还是无关因素。
- 如果 UI 或运行时发生变化,检查真实路由或运行时目标。
- 如果更改规模较大或风险较高(参见 Level 4 触发条件),在确定结论之前,针对关键声明启动对抗式怀疑论者子 Agent。
- 只报告实际收集到的证据。
- 说明还有哪些内容未经检查。
证据规则
- 只有实际运行的命令才能作为证据。
- 只有注明路由、状态和观察结果的浏览器检查才能作为证据。
- 只有注明目标环境和查询结果的数据库检查才能作为证据。
- 只有注明路径或捕获视图的截图才能作为证据。
- “看起来不错”本身不算证据。
- 不要隐瞒跳过的检查。说明未运行的原因。
失败处理
检查失败时:
- 引用或概述重要的错误行
- 说明错误是否与当前更改相关
- 如果无关,指出能证明其超出范围的文件/命令
- 如果相关,将其报告为 Fail,并注明失败的文件/行/用例,以便
implement或用户修复;不要在此处修复 - 如果受阻,停止并清楚说明阻碍因素
当范围更窄的失败已足以解释问题时,不要继续反复运行范围广泛的检查。
结论规则
结论必须反映实际检查的内容,而不是看起来已完成的内容。
- 只有当每项验收标准都有与其风险程度相符的实际证据时,才能判定为
Pass。依赖运行时、浏览器、API 或数据库行为的标准,只有在实际验证了相应行为后才算满足;仅仅代码看起来正确并不够。 - 如果仍有任何标准未检查,或只能通过阅读代码确认,结论最多为
Partial;如果真实的前置条件(例如需要经过身份验证的会话、缺少凭据)阻止了检查,则判定为Blocked。 - 绝不要将未检查的标准归入
Pass。Not Checked中的项目或跳过的运行时标准都会使结论无法达到Pass。请如实说明,不要拔高结论。
输出格式
## Verdict
Pass | Partial | Fail | Blocked
## Checked
- ...
## Evidence
- Command:
- Result:
- Runtime:
- Result:
## Adversarial Review
(Include only when Level 4 ran. Omit otherwise.)
- Claim:
- Skeptics: N run, M refuted
- Outcome: held | broken (with the concrete counterexample)
## Failed Or Blocked
- ...
## Not Checked
- ...
## Remaining Risk
- ...