Self-Heal 是一个面向 AI 开发流程的自主错误恢复技能,目标是在任务执行过程中遇到失败时,不停下整个流程,而是先诊断、再修复、然后从中断处继续。它强调一个原则:诊断先于重试,盲目重试既浪费 token,也会让错误被放大。
恢复决策树
技能以决策树方式区分错误类型并给出对应动作:
- 瞬时错误(网络、限流、超时):使用指数退避重试,最多 3 次。
- 工具失败(参数错误、schema 不符):修正参数并重试一次;若仍失败则升级。
- 逻辑错误(输出错误、断言失败):诊断根因,应用修复,验证后继续。
- 上下文溢出:压缩上下文,从最近的检查点恢复。
- 未知错误:记录状态,暂停,并交给人工处理。
重试规则
- 瞬时错误(HTTP 5xx、限流 429、网络超时):在 1 秒、4 秒、16 秒后重试,然后失败。
- 确定性错误(验证错误、类型不匹配):先修复根因,未修复就重试会浪费预算。
- 最大重试次数:每个阶段、每种错误类型最多 3 次;同一阶段连续失败则升级层级或停止。
检查点模式
在任何有风险的操作之前保存状态,以便恢复时能继续执行。状态保存在 .agents/plans/.loop-state.json,结构示例:
{
"phase": "implement",
"step": 3,
"lastSuccess": "tests green on auth module",
"pendingFiles": ["src/api/users.ts"],
"checkpoint": "<ISO timestamp>"
}
失败时重新加载检查点并跳过已完成步骤,不重复工作。
先诊断,后修复
不在未理解问题的情况下打补丁。诊断步骤包括:
- 阅读完整错误——堆栈跟踪、退出码、stderr。
- 在隔离环境中复现(最小失败用例)。
- 形成一个假设:哪里错了,为什么。
- 用针对性检查验证假设(日志、断言、类型检查)。
- 只修复证据指向的内容。
- 验证修复解决了错误,且没有破坏相邻测试。
上下文溢出恢复
当任务中途上下文耗尽时:
- 总结已完成工作,形成 3–5 条要点。
- 将摘要和检查点保存到
.agents/plans/recovery-<timestamp>.md。 - 用摘要作为前言启动新的上下文。
- 从最近保存的检查点继续。
升级阶梯
| 尝试 | 动作 |
|---|---|
| 1 | 同一层级重试 |
| 2 | 在层级内切换模型 |
| 3 | 升级到下一层级(haiku → sonnet → opus) |
| 4 | 暂停——携带完整上下文将阻塞问题交给人工 |
不应自动修复的情况
- 硬性阻断:
rm -rf、删除 schema、强制推送到 main。 - 安全失败:不要为了让测试通过而降低验证强度。
- 需求不明确:如果规格不清楚,应提问,不要猜测后继续。
输出
最终产生 Self-Heal 报告,包含以下字段:
Self-Heal Report
────────────────
Error: <original failure>
Diagnosis: <root cause>
Action: <what was done>
Attempts: <N>
Outcome: RESOLVED | ESCALATED | BLOCKED
Resumed: <from checkpoint / from scratch>
适用场景与限制
该技能适用于 AI 编码或自动化任务执行过程中的失败恢复,尤其是需要减少人工中断、避免重复劳动、控制重试成本的场景。其限制在于:不得用于绕过安全校验、不得自动执行破坏性硬阻断操作,遇到需求歧义时应转人工。关于是否收费、价格、支持平台等事实,资料中未提供。