mcpField
G
grinding-until-pass

grinding-until-pass

github.com/spencerpauly测试与质量868555 次安装13 周前更新
代码仓库

关于 grinding-until-pass

供编码 Agent 使用的技能,可反复运行指定的测试、构建、lint 或类型检查命令,分析失败并进行最小修复,直至通过或达到 10 轮上限。适用于有边界的自主修复,避免大范围重构。

主要功能

  1. 01重复运行目标命令直至通过
  2. 02分析错误并进行最小修复
  3. 03将循环限制为最多 10 轮
  4. 04一次修复一个问题
  5. 05保留测试且不屏蔽错误

适用场景

  1. 01修复重构后的测试失败
  2. 02处理依赖升级后的类型错误
  3. 03解决分支合并后的冲突
  4. 04依次运行 lint、类型检查、测试和构建

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/spencerpauly/awesome-cursor-skills --skill grinding-until-pass

安装后在 Claude Code 中输入/grinding-until-pass确认已加载。

详细介绍

持续迭代直至通过

当你希望 Agent 持续自主工作,直到达成特定目标时(例如所有测试通过、构建成功或代码检查无误),请使用此技能。Agent 不会在尝试一次后就停止,而是会不断循环,直到完成目标。

步骤

  1. 定义目标命令——其退出代码决定是否成功的命令:

    • 测试:npm test 或 npx vitest run
    • 构建:npm run build
    • 代码检查:npm run lint
    • 类型检查:npx tsc --noEmit
    • 以上全部:npm run lint && npx tsc --noEmit && npm test && npm run build
  2. 运行命令——执行命令并捕获输出。

  3. 如果失败——分析并修复:

    • 仔细阅读错误输出。
    • 找出根本原因:失败的测试断言、类型错误、代码检查违规、导入错误等。
    • 进行最小限度的修复。不要重构,只需修正错误。
    • 返回步骤 2。
  4. 如果通过——停止并报告:

    • 报告修复内容和迭代次数。
    • 总结所做的更改。

循环规则

  • 最多迭代 10 次——如果尝试 10 次后命令仍然失败,就停止并报告阻碍进展的问题。这可能是根本性问题,需要人工介入。
  • 一次只修复一个问题——不要试图一次修复所有错误。先修复第一个错误,然后重新运行,看看该修复是否也能解决后续错误。
  • 不要删除测试——如果测试失败,应修复代码使其通过。除非测试本身明显有误(测试的是已被有意更改的旧行为),否则不要修改测试。
  • 不要屏蔽错误——不要添加 @ts-ignore、eslint-disable 或 any 类型来掩盖错误。应修复实际问题。
  • 跟踪进度——如果错误数量不减反增,请停止并重新评估方案。

适用场景

  • 大规模重构导致多个测试失败后
  • 升级依赖后出现类型错误时
  • 合并存在冲突的分支后,需要解决冲突时
  • 希望“直接让它全部通过”,并相信 Agent 会持续排查修复时

进阶:Cursor Hooks 集成

你可以在 .cursor/hooks.json 中使用 Cursor hook 来自动执行此流程:当 Agent 的回合结束后,检查测试是否通过;如果没有通过,则发送后续消息:

{
  "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 标志,在首次失败时就停止,以加快迭代。
  • Agent 会认真彻底地排查,但不会发挥创造性——如果修复需要更改设计,就需要人工指导。

评论

支持 Markdown