agentsclimarketplace

Vibe review

Skill Cashmeran/hlvibes-skills/vibe-review

Use when project code exists and needs comprehensive review after build. Implements agent-separated audit with 6 parallel reviewers (including adversarial auditor), cross-validation debate, and convergence-based fix loop (max 5 rounds). "The agent that writes never reviews." Produces .vibe/doc/REVIEW.md.From its SKILL.md

Install
npx -y skills add Cashmeran/hlvibes-skills --skill vibe-review

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

3 things to look at

  • 22 days oldThe repository was created 22 days ago. New is not bad, but a brand new repository carrying a familiar-sounding name is the shape a typosquat arrives in, and there has been no time for anyone else to find a problem with it.
  • no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
  • 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

SKILL.md

20.5 KB, ~7.7k tokens by cl100k_base, as published. Nobody here has run it

Vibe Review

接收项目代码 + .vibe/doc/ 下全部 spec 文档,对构建产出做全面审计。发现 bug、检测偏离 spec、安全性漏洞、假代码残留:修复后重审,直到收敛。

核心铁律

  1. Agent 分离:build 的 agent 永不参与 review。每个审查者是独立子 agent,fresh context
  2. 预设代码有罪:对抗性审查,证明不了清白就记录失败报告
  3. 收敛式修复:修→审→修→审,直到没有新发现

三个强度级别

你在 Phase 4 REPORT 看到发现后选择,或在启动时预设:

级别触发审查范围修复方式
Quick你说"快速检查"假代码扫描 + 安全 CRITICAL + spec drift 检测只报告不修复。~30s
Standard默认八路并行 + 辩论 + 收敛循环你选修 → 收敛修复。~10-15min
Deep涉及认证/支付/数据删除/用户敏感数据Standard + 全量回归测试 + E2E全量收敛修复。~30-60min

七阶段

门禁总览

#Phase门禁条件你参与
1SCAN必入
2RESEARCH必入
3AUDIT必入
4DEBATE必入
5REPORT必入选择修哪些 + 确认强度级别
6CONVERGEREPORT 确认通过仅在达上限时介入
7SATISFACTION GATE必入确认
8HANDOFF满意度门禁通过确认

Phase 1:SCAN

门禁:无(必入)

流程

  1. 显式 Read .vibe/doc/REQUIREMENTS.md.vibe/doc/ARCHITECTURE.md.vibe/doc/BUILD_LOG.md
  2. 扫描代码库全量文件
  3. 生成代码地图:
维度内容
文件清单所有源码文件(排除 node_modules / .git / dist)
路由清单每个路由 + 对应文件 + 是否有认证中间件
组件清单每个组件 + 文件路径 + 行数
依赖清单package.json 依赖 + 是否在 ARCHITECTURE.md 技术选型表中
BUILD_LOG 遗留上次构建留下的已知问题和偏离记录
  1. 交叉对照:spec 声明的 vs 实际存在的:
ARCHITECTURE.md §4 声明了 5 个路由 → 实际找到 6 个
  → 多出来的 /api/debug 未在 spec 中出现
  → 标记为 uncovered(DevSpec 四维检测)

输出:代码地图(内部,供审查者使用)


Phase 2:RESEARCH(避免造轮子)

门禁:无(必入)

流程:理解了审查范围之后,搜索社区是否已有现成的审查/扫描工具。

搜索方向

搜索内容方法
现成扫描工具rlsgate、DoneCheck、Groundtruth、AI-SLOP Detector 是否可直接用
OWASP 安全扫描npm audit、安全扫描 skill
假代码检测工具grep 正则、pre-commit hook 模板
任何 vibe-review 能直接调用的 DevOps/QA skillnpx skills add 搜索相关 skill

纪律

  • 有现成工具 → 优先调用而非在 skill 里重写检测逻辑
  • rlsgate 能覆盖 RLS 检查 → 直接跑 rlsgate scan,不在 AUDIT 中重复实现
  • DoneCheck 能扫假代码 → 直接跑,结果并入 AUDIT
  • 搜不到 → 记录,审查者自己实现检测逻辑

输出:搜索结论 + 被纳入使用的工具清单 + 工具运行结果


Phase 3:AUDIT(八路并行审查)

每个审查者是独立子 agent,context: fork(fresh context),只读权限。

Quick 级别:只运行审查者 D(代码质检员)的假代码扫描 + C(安全审计员)的 CRITICAL 项。 Standard/Deep 级别:八路全开。

审查者 A:Spec 对齐官

角色:建设性审查:代码有没有实现 spec 说要做的事?

检查清单

#检查项方法
A1P0 功能覆盖逐条对照 REQUIREMENTS.md §2,grep 搜索关键词确认有对应实现
A2路由匹配逐条对照 ARCHITECTURE.md §4 路由表,确认每个路由文件存在且路径正确
A3组件匹配逐条对照 ARCHITECTURE.md §4 组件树,确认每个组件文件存在
A4数据模型对齐逐表对照 ARCHITECTURE.md §3,确认数据库 schema 字段匹配
A5技术选型对齐ARCHITECTURE.md §2 选型表 → 实际 package.json / 配置文件
A6Spec driftgap(改代码没改 spec)/ stale(spec 指向已删除文件)/ uncovered(新文件无 spec)/ orphaned(spec 声明不存在的文件)
A7不多做检查是否有 REQUIREMENTS.md 和 ARCHITECTURE.md 都没提到的功能/路由/组件/依赖

输出:对齐报告(每个 P0 ✅/❌ + drift 清单 + 多做项清单)

审查者 B:Bug 猎手

角色:建设性审查:代码里有什么逻辑漏洞?

检查清单

#检查项方法
B1空状态每个数据展示组件,数据为空的场景处理了吗?
B2加载态每个异步操作有 loading 状态吗?
B3错误态每个可能失败的操作有错误处理吗?catch 块不是空的?
B4边界条件输入为 0、负数、超长字符串、特殊字符 → 会发生什么?
B5null/undefined链式访问 data.xxx.yyy 前有 null check 吗?
B6N+1 查询循环内有数据库调用吗?
B7资源泄漏文件句柄、事件监听器、定时器有没有清理?
B8竞态条件快速连续点击提交按钮会创建重复数据吗?
B9类型安全npx tsc --noEmit 通过吗?有 any 类型吗?

输出:Bug 清单(每个 bug: file:line + 触发条件 + 预期 vs 实际 + 严重度)

审查者 C:安全审计员

角色:建设性审查:代码有没有安全漏洞?

检查清单

#检查项方法
C1认证覆盖每个路由是否被认证中间件覆盖?有没有漏网的路由?
C2授权隔离A 用户能否访问 B 用户的数据?Row Level Security 启用了吗?
C3注入检测SQL 拼接?命令拼接?eval()? dangerouslySetInnerHTML?
C4输入校验每个 API 接口对输入做了类型+范围+格式校验吗?
C5密钥硬编码grep sk-|api_key|secret|password\s*= → 0 结果
C6敏感文件.env 在 .gitignore 里吗?有没有 .env 文件被 git track?
C7依赖漏洞npm audit 或同等检查
C8文件上传安全有文件类型白名单吗?有文件大小限制吗?文件名有 sanitize 吗?
C9HTTPS/HSTS生产环境是否强制 HTTPS?

输出:安全报告(每个漏洞: file:line + 攻击路径 + CVSS 严重度 + 修复建议)

审查者 D:代码质检员

角色:建设性审查:代码质量达标吗?

检查清单

#检查项方法
D1假代码扫描(8 种模式)占位者/空函数/幻觉 import/拖延语言/吞错/缩水/承诺者/绕行安全
D2TypeScript stricttsconfig.json strict: true 且编译无错误
D3命名一致性组件 PascalCase?函数 camelCase?文件命名统一?
D4文件大小单文件是否过大?一眼看去能在同一个文件里找到你要找的东西吗?→ 建议拆分
D5重复代码跨文件搜索:有没有明显重复的代码块?复制粘贴超过一次就值得提取
D6注释质量grep TODO|FIXME|HACK → 0 结果(除非 BUILD_LOG 明确记录)
D7BUILD_LOG 遗留追踪BUILD_LOG 里标记的遗留问题,解决了吗?偏离记录,代码最终收敛了吗?

输出:质量报告(每个问题: file:line + 规则引用 + 建议)

审查者 E:架构守卫

角色:建设性审查:代码架构是否偏离了 ARCHITECTURE.md 的设计?

检查清单

#检查项方法
E1依赖合规每个 package.json 依赖能追溯到 ARCHITECTURE.md §2 选型表吗?
E2目录结构实际目录树 vs ARCHITECTURE.md §5 声明
E3数据流数据从 DB → API → 组件的流向是否和架构图一致?
E4抽象层级有没有跨层调用(如组件直接访问数据库而不通过 API)?
E5未授权模式有没有引入 spec 里没提到的设计模式或框架特性?

输出:架构合规报告

审查者 F:对抗审查者(Adversarial Auditor)

角色预设代码有罪,直到证明清白。和其他五路审查者不同:对抗审查者不参照 spec,不假定代码"应该是对的"。它主动寻找代码会在什么条件下崩溃、被绕过、产生错误结果。

参考:完整对手攻击模式清单见 references/adversary-playbook.md,安全审查清单见 references/security-checklist.md,假代码模式清单见 references/fake-code-patterns.md

方法论

对于代码库的每个模块,依次攻击:

1. 输入攻击
   "如果我把 null / undefined / 空字符串 / 超长字符串 / emoji / SQL片段 /
    -1 / 0 / Infinity / NaN 传给这个函数,会发生什么?"

2. 状态攻击
   "如果用户快速连续点 3 次提交按钮?"
   "如果用户在登录过期后继续操作?"
   "如果用户在操作中途切换账号?"

3. 顺序攻击
   "如果先调 B 再调 A(而不是 spec 规定的 A → B)?"
   "如果跳过第一步直接进第二步?"

4. 并发攻击
   "如果两个请求同时修改同一条数据?"
   "如果一个请求在读、另一个在写?"

5. 权限攻击
   "如果普通用户尝试访问管理接口?"
   "如果未登录用户直接访问 API?"
   "如果能猜到另一个用户的 ID?"

失败报告格式(每条必须带可复现的攻击路径):

## 失败报告 #F03: 空状态处理存在崩溃风险

**声称**: SPEC §2 P0 "数据为空时显示占位符"
**攻击**: 
  1. 清空数据库中的 shipments 表
  2. 访问 /dashboard 页面
  3. API 返回 `{ data: null }` 而非 `{ data: [] }`
**证据**: `app/dashboard/page.tsx:23`:`data.map(...)` 未做 null check
**崩溃**: `TypeError: Cannot read property 'map' of null` → 页面白屏
**影响**: CRITICAL:用户首次使用时必然触发(新用户数据为空)
**结论**: 空状态处理不完整。需要防御性编程:`data?.map(...) ?? <EmptyState />`

纪律

  • 每条失败报告必须带实际可复现的攻击步骤:不接受"可能""也许""理论上"
  • 必须实际尝试攻击(运行代码、发送请求、检查响应),不靠推测
  • 找不到漏洞就坦白"未发现可利用漏洞":不为凑数编造
  • 不仅找代码漏洞,也找 spec 矛盾("spec 说 X 但代码里隐含假设了 Y")

输出:失败报告(每条带攻击路径 + 证据 + 影响的严重度)

审查者 G:性能审查者

角色:建设性审查:代码加载和运行是否高效?

Quick 级别跳过。Standard 和 Deep 级别执行。

检查清单

#检查项方法
G1Bundle 大小npm run build → 检查 .next/dist/ 中 JS 文件大小。首次加载 JS 总量 > 500KB → WARNING;> 1MB → CRITICAL
G2图片优化扫描 public/ 和 import 的图片:是否有 > 500KB 的原始图片直接使用?是否有未压缩的 PNG/JPEG?
G3Code splittingNext.js 项目:动态 import (dynamic()) 是否用于非首屏组件?非关键第三方库是否懒加载?
G4Render-blocking是否有同步加载的第三方脚本阻塞首屏渲染?字体加载是否使用了 font-display: swap
G5Lighthouse 估算基于代码特征估算:未优化图片 → Perf 扣 10-20;大 bundle → 扣 10-20;无 code splitting → 扣 5-10

输出:性能报告(每条: file:line + 指标 + 严重度 + 优化建议)

审查者 H:可访问性审查者

角色:建设性审查:代码是否对所有用户可用?

Quick 级别跳过。Standard 和 Deep 级别执行。

检查清单

#检查项方法
H1图片 alt 属性扫描所有 <img> 标签:是否有有意义的 alt 文本?装饰性图片是否有 alt=""
H2颜色对比度检查主要文本颜色 vs 背景色:正文 ≥ 4.5:1,大文字(≥18px bold) ≥ 3:1
H3键盘可达所有交互元素(按钮、链接、表单输入)是否可通过 Tab 键到达?tabindex 是否合理?
H4focus 可见grep "outline:\s*none" + grep "outline-none" → 检查是否同时提供了替代的 focus 样式
H5表单 label所有 <input> / <select> / <textarea> 是否有关联的 <label>htmlFor 或嵌套)?
H6ARIA 合理性如有 aria-* 属性:是否使用了正确的 role?是否避免了冗余(如 <button role="button">)?
H7状态传达错误/成功/警告消息是否配合了图标或文字(而非仅靠颜色传达)?

输出:可访问性报告(每条: file:line + WCAG 标准引用 + 修复建议)


Phase 4:DEBATE(审查辩论)

八路审查者互相读取对方的产出,进行交叉验证和辩论。

流程

Step 1:合并去重
  同一 file:line 被多个审查者标记 → 合并为一个发现,
  记录"被 A、C、E 三方独立发现"

Step 2:严重度仲裁
  对抗审查者的失败报告 #F03 → Spec 对齐官读后说:
  "F03 对应的是 spec 的 P0 功能验收不通过,升级为 CRITICAL"
  
  安全审计员读了代码质检员的发现 D07 → 说:
  "D07 标记的 TODO 在 /api/upload 旁边,说'加文件类型校验'。
   这不是代码质量问题,是已知安全漏洞。升级为 CRITICAL。"

  完整严重度矩阵见 `references/severity-matrix.md`。

Step 3:关联发现
  架构守卫读了 Spec 对齐官和安全审计员的发现 → 说:
  "A04 和 C03 都指向 /api/upload 路由。
   A04 说这个路由不在 spec 里,C03 说这个路由缺认证。
   建议合并为一个发现:未授权的新路由 + 缺乏安全控制。"

辩论纪律

  • 不引入全新发现:只处理已有发现之间的关系
  • 升级(WARNING → CRITICAL)需要至少两个审查者共识
  • 降级不需要共识,任何审查者都可以提出降级建议:由你最终裁决
  • 辩论结束后产出的是"合并后的发现清单",每个发现标注:原始来源 + 辩论决定 + 最终严重度

输出:合并后的发现清单(去重 + 严重度仲裁 + 关联标注)


Phase 5:REPORT(分级呈现)

门禁:DEBATE 完成

流程:展示审查报告,让你选择修哪些和强度级别。

# Review Report:[项目名]

> 审查时间: 2026-07-15 | 审查范围: 32 文件, 14 组件, 6 路由
> 审查者: Spec对齐官 + Bug猎手 + 安全审计员 + 代码质检员 + 架构守卫 + 对抗审查者 + 性能审查者 + 可访问性审查者
> 辩论: 8 个审查者交叉验证完成

## 🔴 CRITICAL:必须修,否则不可上线(阻塞项)

### C01:/api/upload 无文件类型校验 + 无认证中间件
**来源**: 安全审计员 (C1, C8) + 架构守卫 (E4) + 对抗审查者 (F07): 三方独立发现
**位置**: `app/api/upload/route.ts:12`
**攻击路径**: 未登录 → POST /api/upload → 上传 .php 文件 → 成功写入服务器
**影响**: 任意文件上传 → RCE 风险
**修复**: 1. 加认证中间件 2. 加文件类型白名单 (image/png, image/jpeg, application/pdf) 3. 加文件大小限制 5MB

### C02:空数据导致页面白屏
**来源**: Bug猎手 (B1) + 对抗审查者 (F03): 两方独立发现
**位置**: `app/dashboard/page.tsx:23`
**攻击路径**: 清空数据库 → 访问 /dashboard → TypeError → 白屏
**影响**: 新用户首次使用必然触发
**修复**: `data?.map(...) ?? <EmptyState />`

## 🟡 WARNING:应该修,条件性失败或技术债积累

### W01:仪表盘空数据时无空状态占位符
...

### W02:三个组件有重复的日期格式化逻辑
...

## 🔵 SUGGESTION:建议,修了更好

### S01:DashboardPage 320 行,建议拆分
...

## 📊 统计
- CRITICAL: 2 | WARNING: 3 | SUGGESTION: 4
- Spec 对齐: 28/28 P0 覆盖 ✅ | 2 处 drift 检测
- 安全: 2 CRITICAL | 其他通过 ✅
- 假代码: 0 残留 ✅
- 对抗: 5 次攻击尝试 → 2 次成功穿透
- 性能: bundle 180KB ✅ | 首屏估算 2.1s 🟡
- 可访问性: 3 个 WARNING (alt 缺失 / focus 样式 / 对比度不足)

## 🎯 审查强度
当前默认: Standard
- Quick: 只报告不修复,~30s
- Standard: 选中的问题收敛修复,~10-15min ← 推荐
- Deep: 全量回归 + E2E,涉及认证/支付建议选这个

## 🎯 你想修哪些?
  A) 全部修 (Standard)
  B) 只修 🔴 CRITICAL
  C) 修 🔴 + 🟡
  D) 我来手选

你选择 → 进入 Phase 6 CONVERGE


Phase 6:CONVERGE(收敛循环)

门禁:你确认修哪些 + 确认强度级别

流程

converged = false
round = 0
pending = [你选择的修复项]
all_fixed = []

while (not converged 且 round < 5):

  round += 1

  // 6.1 FIX
  round_fixed = []
  for each issue in pending:
    启动独立子 agent
      上下文: 问题描述 + 相关文件 + spec 段落
      约束: 只修这个问题,不动其他代码
    修复 → 运行验收命令 → 通过?
      通过 → git commit "Fix [C01]: ..." → round_fixed += issue
      失败 → 再试一次(最多 2 次)
      2 次后仍失败 → 标记 STUCK,记录原因

  // 6.2 RE-AUDIT(轻量版)
  六路审查者只审本轮修改涉及的文件(非全量)
  产出: 本轮新发现清单

  // 6.3 记录本轮结果
  all_fixed += round_fixed
  new_issues = 本轮新发现的 CRITICAL + WARNING
  stuck_issues = 本轮 STUCK 的项

  // 6.4 收敛判断
  if new_issues 数量 == 0 且 stuck_issues 数量 == 0:
    converged = true  ✅
  elif new_issues 数量 > 0:
    pending = new_issues  // 下一轮修这些新发现
    if 本轮是第五轮 (round == 5):
      已达上限,暂停 ⏸️
  elif stuck_issues 数量 > 0:
    // 有修不了的,继续但标记
    if 本轮是第五轮 (round == 5):
      已达上限,暂停 ⏸️

// 收敛出口
if converged:
  → 进入 Phase 8 HANDOFF

收敛日志(每轮记录,最终写入 REVIEW.md):

Round 1: 修复 5 个 → 重审 → 消除 4 个 ✅ | 新发现 2 个 🔍 | 卡住 0 个
  - 消除: C01, C02, W01, W03
  - 新发现: W05 (修复 C01 引入的对 /api/upload 的认证中间件,
    但没有同步更新测试文件中的 mock)
  - 卡住: W02 (涉及跨模块重构,需要你决定方案)
  - 剩余: W05, W02

Round 2: 修复 2 个 → 重审 → 消除 2 个 ✅ | 新发现 0 个 🔍 | 卡住 0 个
  - 消除: W05
  - 卡住: W02 (你决定延后处理)

✅ 收敛。2 轮完成。

遗留: W02:日期格式化重复代码,你选择延后,记录到技术债。

第五轮达上限时的处理

⚠️ 已达 5 轮,仍有未收敛项:

- W05 (第 3 轮发现): 修复 2 次仍不通过。原因:[...]
- W06 (第 5 轮新发现): [...]

你想怎么做?
  A) 再来一轮
  B) 这俩记下来以后再说,先完成审查
  C) 我来决定怎么处理

纪律

  • 轻量重审只审变更文件:不全量扫,控制每轮耗时
  • 修复不引入新 CRITICAL 是硬性要求:如果连续两轮都引入新 CRITICAL,暂停,可能是修复方案本身有问题
  • STUCK 项必须记录:卡在哪、尝试了什么、为什么修不了、建议的替代方案
  • 每轮 commit 必须标注 round 编号,方便追溯

Phase 7:SATISFACTION GATE(满意度门禁)

门禁:必入

→ 执行满意度门禁(详见 hlvibes/references/satisfaction-gate.md)。当前阶段名称:「代码审查」。


Phase 8:HANDOFF

门禁:CONVERGE 收敛成功,或你确认达上限后退出

→ 执行交付(详见 hlvibes/references/handoff.md)。产出 .vibe/doc/REVIEW.md。下一步:vibe-deploy

REVIEW.md 格式要点

  • 审查结果(原始发现数 / 修复数 / 遗留数)
  • 收敛日志(每轮修复/消除/新发现/卡住/剩余)
  • 修复记录(每条: 问题ID + commit)
  • 对抗审查失败报告(已修复项)
  • 安全基线 / Spec 对齐
  • 遗留问题

通用纪律(所有 Phase 共享)

→ 完整通用纪律见 hlvibes/references/common-rules.md

What ships with it: 4 files

27.1 KB alongside SKILL.md

Keep looking

Skills are one crate of 326,834. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.