retro · diff
git:20260820.16d82f8 to git:20261014.9c3854a
2 added, 2 removed. Audit A to A.
---
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. 收尾
报给用户:改了/新建了哪个文件,每条经验一句话。值不值得留由用户把
- 关——经验库是他的,不是你的。改动下一轮对话生效。
+ 关——经验库是用户的,不是你的。改动下一轮对话生效。