---
name: retro
description: 任务磕磕碰碰才做成、被纠正了好几次之后用；用户说「复盘」「总结经验」「记下来」时也用。回顾这次会话的纠错轨迹，筛出下次还会犯的错，沉淀进 AGENTS.md 或技能，同类任务下次不用再教一遍。
---

# 复盘并沉淀经验

这次对话结束后你什么都不会记得。刚才的纠正、试错、最终跑通的路径，
不现在写下来，下次同类任务用户还得从头再教一遍。

用户指定了复盘重点的话优先照它来：$ARGUMENTS

## 1. 回顾轨迹

从对话开头到现在过一遍，列出：

- 用户纠正过你几次，每次纠正的是什么——你当时的（错误）假设 vs 实际；
- 失败过的工具调用和命令：症状（报错原文）→ 真因；
- 最终跑通的路径，和你最初的计划差在哪几步。

## 2. 筛选

同时满足三条的才值得记：

- **反直觉**：下次靠推理和读代码还是会犯同样的错；
- **grep 不到**：代码和文档里查得到的不记——那是下次自己找得到的东西；
- **是规律不是偶然**：只见过一次的现象，把适用条件写清楚再记。

一条都筛不出来就直接说「这次没有值得沉淀的经验」，到此为止。硬写出来
的空话不是零收益，是负的——它占清单位置，稀释真正有用的经验。

## 3. 决定去向

**默认进项目级。** 编码任务里摸出来的经验十有八九是这个仓库的规律——
这里的构建顺序、这里的报错、这里的约定。放错方向的代价不对称：该全局
的放成项目级，大不了换个项目再沉淀一遍；该项目级的放成全局，是让所有
项目付上下文税，还可能在别处是错的。

- **一句话纪律** → `<项目>/AGENTS.md`。保持短：那个文件每一行都在对
  所有会话收上下文税。
- **某一类任务的完整打法** → 项目 `.riot/skills/`。**先看已有技能的
  清单**：这次的坑落在某个已有技能的范围内，就更新它，不要另开一份
  近似的——两份互相抢，哪份都不完整。
- **只对这一次有效的细节** → 不记。

例外才进全局（配置目录那层）：跟仓库代码无关、跟用户本人或他的机器
有关的——工作习惯、环境坑（「Dock 起的应用继承不到 shell 环境变量」
属于这类）。拿不准就项目级；要写全局，先问用户一声。

## 4. 写

- 写新技能：加载 skillify 技能，照它的写法来。要点是 description 写
  「什么时候用」——那是模型下次想起它的唯一线索；正文只写模型猜不到
  的。目录和 frontmatter 的机制细节见 extend-riot 技能。
- 更新已有技能或 AGENTS.md：新坑写成「症状 → 真因」，报错原文照抄
  进去——下次撞到症状才对得上号。

## 5. 收尾

报给用户：改了/新建了哪个文件，每条经验一句话。值不值得留由用户把
关——经验库是他的，不是你的。改动下一轮对话生效。
