mcpField
G
grinding-until-pass

grinding-until-pass

github.com/revitalb-port测试与质量055 次安装10 周前更新
代码仓库

关于 grinding-until-pass

让 Agent 持续运行指定测试、构建或 lint 命令,直到成功或达到 10 次迭代上限。每轮分析失败并做最小修复;若问题需要设计决策,则需人工指导。

主要功能

  1. 01按命令退出码判断目标是否完成
  2. 02失败后分析错误并逐项修复
  3. 03每次迭代只处理一个问题
  4. 04最多迭代 10 次
  5. 05禁止删除测试或压制错误

适用场景

  1. 01修复重构后未通过的测试
  2. 02处理依赖升级引发的类型错误
  3. 03解决合并后的构建或 lint 问题
  4. 04通过 Cursor hook 在回合结束后复查测试

安装

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

$npx skills add https://github.com/revitalb-port/skills-registry-demo --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