关于 grinding-until-pass
供编码 Agent 使用的技能,可反复运行指定的测试、构建、lint 或类型检查命令,分析失败并进行最小修复,直至通过或达到 10 轮上限。适用于有边界的自主修复,避免大范围重构。
主要功能
- 01重复运行目标命令直至通过
- 02分析错误并进行最小修复
- 03将循环限制为最多 10 轮
- 04一次修复一个问题
- 05保留测试且不屏蔽错误
适用场景
- 01修复重构后的测试失败
- 02处理依赖升级后的类型错误
- 03解决分支合并后的冲突
- 04依次运行 lint、类型检查、测试和构建
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ spencerpauly/ awesome-cursor-skills --skill grinding-until-pass安装后在 Claude Code 中输入/grinding-until-pass确认已加载。
详细介绍
持续迭代直至通过
当你希望 Agent 持续自主工作,直到达成特定目标时(例如所有测试通过、构建成功或代码检查无误),请使用此技能。Agent 不会在尝试一次后就停止,而是会不断循环,直到完成目标。
步骤
-
定义目标命令——其退出代码决定是否成功的命令:
- 测试:
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。
-
如果通过——停止并报告:
- 报告修复内容和迭代次数。
- 总结所做的更改。
循环规则
- 最多迭代 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