SuperAPI AI 工具集

grinding-until-pass

编程与开发

查看项目

更新于 10-15 18:10

技能介绍

用途

Grind Until Pass 用于让 AI 编程智能体在达成某个明确目标之前持续自主工作,而不是尝试一次就停下。目标可以是:所有测试通过、构建成功,或 lint 检查干净。智能体会在「修复 → 运行 → 检查 → 重复」的紧凑循环中反复迭代,直到目标达成。

主要能力

  • 定义目标命令:即用退出码判定成败的命令,例如测试用 npm test 或 npx vitest run,构建用 npm run build,lint 用 npm run lint,类型检查用 npx tsc --noEmit,也可以组合为 npm run lint && npx tsc --noEmit && npm test && npm run build。
  • 运行命令并捕获输出。
  • 失败时分析并修复:仔细阅读错误输出,识别根因(失败的测试断言、类型错误、lint 违规、导入错误等),做最小修复而不重构,然后回到运行步骤。
  • 通过后停止并汇报:说明修复了什么、经过多少次迭代,并总结所做的改动。

使用方式

按以下步骤执行:

  1. 定义目标命令——其退出码决定成功与否。
  2. 运行该命令并捕获输出。
  3. 如果失败,分析并修复:阅读错误输出、定位根因、做最小修复,然后返回第 2 步。
  4. 如果通过,停止并汇报修复内容与迭代次数,总结改动。

循环规则:

  • 最多迭代 10 次——若 10 次后命令仍失败,停止并报告阻塞进展的原因,说明存在根本性问题,需要人工介入。
  • 一次只修一个问题——不要试图一次修复所有错误。先修第一个错误,重新运行,看该修复是否也解决了下游错误。
  • 不要删除测试——如果测试失败,应修改代码使其通过。除非测试本身明显有误(在测试已被有意更改的旧行为),否则不要修改测试。
  • 不要抑制错误——不要添加 @ts-ignore、eslint-disable 或 any 类型来消除错误,要修复实际问题。
  • 跟踪进展——如果错误数量不降反增,停止并重新评估方法。

适用场景

  • 大型重构后破坏了多个测试。
  • 升级依赖后引入了类型错误。
  • 合并分支后产生冲突需要解决。
  • 当你只想「让它变绿」,并信任智能体自行反复打磨时。

高级用法:Cursor Hooks 集成

可以通过 .cursor/hooks.json 中的 Cursor hook 自动化此流程:在智能体回合结束后触发,检查测试是否通过,若未通过则发送后续消息。示例配置:

{ "hooks": [ { "event": "stop", "command": "bash .cursor/scripts/check-tests.sh", "description": "Re-run tests after agent stops and send follow-up if failing" } ] }

该脚本检查退出码,如果测试仍然失败则返回 followup_message。

限制

  • 最适合测试套件运行较快的项目。如果测试需要 5 分钟以上,循环会很慢。
  • 可使用 --bail 或 --fail-fast 标志在首个失败处停止,以加快迭代。
  • 智能体会很彻底但不具创造性——如果修复需要设计层面的改动,仍需人工指导。