retro · git:20260820.16d82f8 · 2026-08-20 · sha256 e5623de6e489bb94

retro git:20260820.16d82f8A

Immutable. This exact content is served forever at /api/v1/blob/e5623de6e489bb94.

---
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. 收尾

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