---
name: 失败恢复经验沉淀
description: 当一个任务首次执行失败，但在重试其他工具、接口、参数或流程后成功时，使用此技能总结可复用经验，并将经验同时写入当前正在使用的 SKILL.md 与 memory/MEMORY.md。适用于 API 失败后切换备用 API、命令失败后改用其他命令、抓取失败后改用其他数据源、解析失败后改用其他流程等场景。
---

## 目标

把一次“失败后恢复成功”的执行，沉淀成下次可直接复用的提示，而不是只停留在当前会话里。

## 何时执行

仅在以下条件同时满足时执行：

1. 首次方案失败，并且失败信息足够明确。
2. 你尝试了第二种方案、参数或工具。
3. 第二种方案最终成功，且可提炼出稳定经验。

如果只是偶发失败但没有找到更优方案，不要更新技能或长期记忆。

## 执行步骤

1. 先确认“失败路径”和“成功路径”。
   记录首次失败用了什么、报了什么错、后来改成什么方案后成功。

2. 确认当前正在使用的技能文件。
   如果本轮明确读取并依赖了某个 `skills/*/SKILL.md`，就把它视为“当前技能”。
   如果本轮没有使用任何具体技能，只更新 `memory/MEMORY.md`，不要随意改别的技能。

3. 读取两个文件：
   - 当前技能文件
   - `memory/MEMORY.md`

4. 提炼经验时只保留可复用信息：
   - 哪种信号说明首选方案不可靠
   - 哪个替代方案更稳定
   - 下次遇到同类问题时应优先怎么做
   - 是否需要补充故障排查步骤

5. 更新当前技能文件。
   在最相关的步骤附近补充“经验教训”“注意事项”或“故障排查”。
   优先改成可执行规则，不要只写事故复盘。

6. 更新 `memory/MEMORY.md`。
   记录跨任务也有价值的经验、用户偏好、系统行为改进点。

7. 避免重复写入。
   如果同一条经验已经存在，更新原条目，不要简单追加重复内容。

## 写入原则

### 写入当前技能的内容

写任务级、流程级经验：

- 首选方案和备用方案的优先级
- 常见失败信号
- 发现某类错误后应立即切换到什么方案
- 哪些参数、格式、接口更稳定

### 写入长期记忆的内容

写跨任务仍然有价值的经验：

- 用户希望 Agent 从失败中学习并自我提示
- 某类外部依赖在当前环境下不稳定
- 哪类方案在本项目里更可靠
- 某个技能已经因真实失败案例被修正

## 推荐格式

### 当前技能中的经验条目

```md
## 经验教训

- [YYYY-MM-DD] 当 `<首选方案>` 出现 `<错误信号>` 时，优先切换到 `<备用方案>`。不要重复尝试同一路径。
```

### 长期记忆中的经验条目

```md
## 经验教训

### YYYY-MM-DD：<主题>

- 问题：<首次失败的稳定特征>
- 有效方案：<最终成功的替代方案>
- 下次提示：<以后应优先怎么做>
```

## 工具建议

- 用 `read_file` 读取当前技能和 `memory/MEMORY.md`
- 用 `python_repl` 或 `terminal` 进行受控文件修改
- 如果修改了技能的 frontmatter（name/description），记得刷新技能快照；如果只改正文，一般不需要

## 禁止事项

- 不要把一次性的网络抖动直接写成长期规则
- 不要把具体用户输入、密钥、敏感信息写进技能或记忆
- 不要同时修改多个无关技能
- 不要把“这次做了什么”原样搬运成冗长日志

## 完成标准

完成后应满足：

1. 当前技能里出现了更稳妥的执行规则。
2. `memory/MEMORY.md` 里出现了对应的长期经验或用户偏好。
3. 下次处理同类任务时，只看技能和记忆就能优先避开这次失败路径。
