name: ultraqa description: 针对测试、构建、代码检查或类型检查的迭代修复和验证循环。诊断失败原因,应用修复,重新验证 — 最多5个循环。 argument-hint: “[–tests|–build|–lint|–typecheck|–custom ‘<命令>’]” allowed-tools: 读取、写入、编辑、Bash、Grep、Glob、Task、TeamCreate、TeamDelete、SendMessage、AskUserQuestion disable-model-invocation: true
UltraQA — 迭代修复和验证循环
运行验证命令,诊断失败原因,修复它们,重复 — 直到通过或达到循环限制。从不提交。
参数
--tests— 运行项目测试套件(默认)--build— 运行构建命令--lint— 运行代码检查器--typecheck— 运行类型检查器--custom '<命令>'— 运行自定义验证命令
如果未提供参数,默认使用 --tests。
硬性规则
- 从不运行
git commit— UltraQA 修复代码但从不提交。用户决定何时提交。 - 最大5个循环 — 无论结果如何,在5次修复-验证迭代后停止。
- 重复失败时停止 — 如果同一失败连续出现3次,停止并报告。
- 一次一个目标 — 每次调用针对单一验证目标。
工作流程
第一步:检测验证命令
基于参数,确定要运行的命令:
| 目标 | 检测方式 | 命令 |
|---|---|---|
--tests |
package.json → bun test; pyproject.toml → pytest; Cargo.toml → cargo test |
自动检测 |
--build |
package.json → bun run build; Cargo.toml → cargo build |
自动检测 |
--lint |
package.json → bun run lint; .eslintrc* → eslint |
自动检测 |
--typecheck |
tsconfig.json → tsc --noEmit; pyproject.toml → mypy |
自动检测 |
--custom |
用户提供的命令 | 精确命令 |
如果自动检测失败,询问用户:
AskUserQuestion(
questions: [{
question: "我应该运行什么命令进行验证?",
header: "QA 命令",
options: [
{ label: "bun test", description: "JavaScript/TypeScript 测试" },
{ label: "pytest", description: "Python 测试" },
{ label: "cargo test", description: "Rust 测试" }
],
multiSelect: false
}]
)
第二步:初始运行
运行验证命令并捕获输出:
{command} 2>&1
保存状态:
// .maestro/handoff/ultraqa-state.json
{
"goal": "--tests",
"command": "bun test",
"cycle": 1,
"max_cycles": 5,
"status": "运行中",
"failures": [],
"repeat_count": 0,
"started": "{ISO 时间戳}"
}
如果命令在第一次运行时通过:
所有检查通过。无需修复。
立即退出。
第三步:诊断
创建诊断团队:
TeamCreate(team_name: "ultraqa-{goal}", description: "UltraQA {goal} 循环 {N}")
解析失败输出。生成工作器:
oracle— 用于复杂/不清晰的失败:“分析此失败输出并识别根本原因:{output}”build-fixer— 用于带有清晰错误消息的构建/代码检查/类型检查错误kraken— 用于需要新测试夹具或多文件更改的测试失败
工作器选择启发式方法:
- 带有文件:行的清晰错误消息 →
build-fixer - 测试断言失败 →
kraken - 不清晰或级联失败 → 首先使用
oracle进行诊断,然后使用kraken/build-fixer进行修复
第四步:修复
将修复委派给适当的工作器。提供:
- 完整错误输出
- 相关文件路径
- 验证命令期望的内容
第五步:重新验证
再次运行相同的验证命令。更新状态:
{
"cycle": 2,
"status": "运行中",
"failures": ["先前失败摘要"],
"repeat_count": 0
}
第六步:循环或停止
继续 如果:
- 新失败(不同于先前)且循环 < 5
停止 如果出现任何以下情况:
- 所有检查通过 → 报告成功
- 循环 >= 5 → 报告循环限制
- 同一失败3次 → 报告卡住
- 未识别出可操作的修复 → 报告阻塞
第七步:报告
## UltraQA 报告
### 结果:成功 | 循环限制 | 卡住 | 阻塞
### 运行循环数:N/5
### 目标:{goal}
### 命令:`{command}`
### 应用的修复
1. 循环1:[修复的内容] — [文件:行]
2. 循环2:[修复的内容] — [文件:行]
### 剩余失败(如有)
- [失败描述]
### 状态文件
`.maestro/handoff/ultraqa-state.json`
第八步:清理
TeamDelete(reason: "UltraQA 会话完成")
TeamDelete 清理:如果 TeamDelete 失败,回退到:rm -rf ~/.claude/teams/{team-name} ~/.claude/tasks/{team-name}
更新状态文件:
{
"status": "已完成",
"result": "成功",
"cycles_used": 3,
"completed": "{ISO 时间戳}"
}
状态管理
状态保存在 .maestro/handoff/ultraqa-state.json 中,以便:
/status可以报告活动 UltraQA 会话- 中断的会话可以诊断
- 结果可用于事后分析
反模式
| 不要 | 替代做法 |
|---|---|
| 提交修复 | 保持未提交 — 用户决定何时提交 |
| 运行多个目标 | 每次调用一个目标 |
| 超过5个循环后继续 | 停止并报告 |
| 重试同一修复 | 如果修复无效,尝试不同方法 |
| 修复无关问题 | 只修复来自验证命令的失败 |