别再自己写复盘了!我让 Claude、Codex、Gemini 三个 AI 同时帮我记踩坑

0 阅读4分钟

💡 核心结论:通过 Claude Code Stop Hook + AGENTS.md 行为指令,让三个 AI 工具共享同一份复盘知识库,踩坑自动沉淀,永不丢失。


🤬 每个 AI 辅助开发者都有过的崩溃时刻

上周我在用 Codex 搭一个 Supabase RLS 策略,踩了一个很隐蔽的坑:INSERT 策略里忘了带 WITH CHECK,本地测试过了,线上直接 403。

修好之后,我盯着屏幕发呆了 30 秒。

我上个月好像踩过同样的坑。

打开历史记录?Claude 的对话早就滚走了。翻 Codex 的 session 日志?没有。我能确定自己踩过,但完全想不起当时是怎么修的。

这不是记忆力的问题,这是工具设计的问题

AI 辅助开发一整天,产生的隐性知识(踩坑、决策、红线)全部散落在临时对话里。对话窗口一关,知识归零。第二天、第二周、下个月——同样的坑,再踩一次。

AI 帮你写代码,但不帮你记教训。


🧠 我的解法:让三个 AI 共写一份「错题本」

我同时用三个 AI 工具:

  • Claude Code — 主力编码,复杂任务编排
  • Codex — 架构设计,后端逻辑
  • Gemini CLI — 大文件分析,批量操作,脱水整理

它们各自产生踩坑和决策,但之前完全孤立。

我的目标很简单:不管用哪个工具,踩坑都自动写进同一个文件。

~/Documents/memory/retro/2026-04-14.md  ←  三个工具都往这里写

🔧 三套机制,一个目的地

Claude Code:Stop Hook 系统级强制触发

Claude Code 有一个 Stop Hook,会话结束时无论如何都会触发,模型没法跳过。

我在 ~/.claude/settings.json 里配了这个:

{
  "hooks": {
    "Stop": [{
      "type": "command",
      "command": "bash ~/.claude/hooks/session-retro.sh"
    }]
  }
}

session-retro.sh 的核心逻辑:

#!/bin/bash
# 读取完整会话 transcript(stdin JSON)
TRANSCRIPT_TEXT=$(python3 -c "
import json, sys
data = json.load(sys.stdin)
msgs = data.get('transcript', [])
# 截取最后 60 条消息
lines = []
for m in msgs[-60:]:
    role = m.get('role', '')
    content = m.get('content', '')
    if isinstance(content, list):
        text = ' '.join(b.get('text','') for b in content if b.get('type')=='text')
    else:
        text = str(content)
    if text.strip():
        lines.append(f'[{role}] {text[:300]}')
print('\n'.join(lines))
")

# 后台调 Gemini 提炼,不阻塞 Claude
(
  RETRO=$(echo "$TRANSCRIPT_TEXT" | gemini -p '分析这段对话,提取:
### 踩坑
- 现象 → 原因 → 解法
### 决策
- 选了什么 / 为什么
### 红线
- 绝不能做的事 + 原因
极简,没有废话,少于3条则输出skip')

  [ -z "$RETRO" ] || echo "$RETRO" | grep -qi "^skip" && exit 0

  echo "" >> ~/Documents/memory/retro/$(date +%Y-%m-%d).md
  echo "## $(date +%H:%M) Claude 会话" >> ~/Documents/memory/retro/$(date +%Y-%m-%d).md
  echo "$RETRO" >> ~/Documents/memory/retro/$(date +%Y-%m-%d).md

  cd ~/Documents/memory
  git add retro/ && git commit -m "chore(retro): Claude 自动复盘 $(date +%Y-%m-%d %H:%M)" --no-verify
) &

exit 0

几个设计细节值得注意:

  1. Gemini 做提炼,不是 Claude 自己 — 会话结束时 Claude context 已消耗,用 Gemini 更经济
  2. 后台非阻塞& 挂后台,Claude 关闭不受影响
  3. 自动 git commit — 写入后立刻入库,不会丢

Codex:AGENTS.md 行为指令

Codex 没有 hook 系统,但它会严格遵守 AGENTS.md

~/.codex/AGENTS.md 里加入:

## 开发飞轮 — 自动记录(强制执行)

**不要等用户提示,遇到以下情况立即自动写入:**

| 触发 | 写入位置 | 格式 |
|------|---------|------|
| 发现 bug / 踩坑 / 报错 | `~/Documents/memory/retro/YYYY-MM-DD.md` | `- [踩坑] 现象 → 原因 → 解法` |
| 做了技术决策 | `~/Documents/memory/retro/YYYY-MM-DD.md` | `- [决策] 选了什么 / 为什么` |
| 发现红线 | `~/Documents/memory/retro/YYYY-MM-DD.md` | `- [红线] 禁止行为 + 原因` |

# 写入命令
echo "- [踩坑] 现象 → 原因 → 解法" >> ~/Documents/memory/retro/$(date +%Y-%m-%d).md

# 完成任务后提交
cd ~/Documents/memory && git add retro/ && git commit -m "chore(retro): Codex 自动复盘 $(date +%Y-%m-%d)"

效果是:Codex 修完一个 Bug,不等你问,自己把踩坑写进文件,自己 commit。


Gemini CLI:GEMINI.md 指令 + 专属记忆

Gemini 在 ~/.gemini/GEMINI.md 里配相同规则,额外还用了 .gemini/memories/ 做跨会话记忆:

## 开发飞轮 — 自动记录

遇到踩坑/决策/红线,立即:
echo "- [踩坑] ..." >> ~/Documents/memory/retro/$(date +%Y-%m-%d).md

## Gemini 自动记忆

写入 .gemini/memories/ 的规则:
只记录架构决策、踩坑、工具约定,不记录临时任务。

📊 三天后,retro 文件长这样

# 开发日志 2026-04-14

## 09:23 Claude 会话
### 踩坑
- Hermes bridge 收到 stream-chunk 但前端不渲染 → 原因是 taskId 匹配逻辑用了严格相等但类型不一致 → 解法:统一用 String() 转换后比较

### 决策
- 图片上传走 GitHub CDN 而非 Supabase Storage → 原因:无需登录鉴权,URL 稳定,适合聊天室场景

## 14:05 Codex 自动复盘
- [踩坑] Supabase RLS INSERT 策略缺 WITH CHECK → 本地 anon 角色绕过但线上直接 403 → 解法:INSERT 策略必须同时写 USING 和 WITH CHECK

## 21:30 Claude 会话
### 踩坑
- launchctl stop/start 间隔太短 → Feishu gateway 报 "Another local gateway already using this app_id" → 解法:sleep 3 后再 start

三个工具的踩坑,汇聚在同一天的同一个文件里。


🎯 这套机制的本质:开发飞轮

传统开发流程是线性的:写代码 → 修 bug → 上线 → 忘记。

加入复盘飞轮之后:

写代码 → 踩坑 → 自动记录 → 沉淀到 skill
   ↑                              ↓
下次直接避坑 ← skill 更新建议 ←──────

关键不是「复盘」这个动作,而是零摩擦。不需要打开文件,不需要自己归纳,AI 工具在工作中顺手写进去,和写代码一样自然。


⚠️ 三套机制的可靠性对比

工具触发方式可靠性
Claude CodeStop Hook(系统级强制)⭐⭐⭐⭐⭐ 100% 触发
CodexAGENTS.md 行为指令⭐⭐⭐⭐ 模型遵循率高但非强制
Gemini CLIGEMINI.md 行为指令⭐⭐⭐⭐ 同上

Claude 的 Stop Hook 是真正的系统级保证,另外两个是「有约束的君子协议」——模型大多数情况下会执行,但不能 100% 保证。

如果你只用一个工具,Claude Code 的 Stop Hook 是最省心的方案。


🚀 五分钟上手

Step 1:创建 retro 目录

mkdir -p ~/Documents/memory/retro
cd ~/Documents/memory && git init  # 如果还没有 git

Step 2:配置 Claude Stop Hook

~/.claude/settings.json 加入:

{
  "hooks": {
    "Stop": [{"type": "command", "command": "bash ~/.claude/hooks/session-retro.sh"}]
  }
}

把上面的 session-retro.sh 脚本保存到 ~/.claude/hooks/chmod +x

Step 3:给 Codex / Gemini 加指令

把开发飞轮的表格加到 ~/.codex/AGENTS.md~/.gemini/GEMINI.md

Step 4:验证

跑一个 Claude Code 会话,结束后检查:

cat ~/Documents/memory/retro/$(date +%Y-%m-%d).md

有内容就成功了。


💬 最后

这套机制运行三天,retro 文件已经记了 40 多条踩坑和决策。

其中有两条,是我上个月踩过的同类坑——如果不是写下来了,我肯定还会再踩第三次。

AI 工具很强,但知识沉淀这件事,它们不会主动替你做。你需要给它们一个理由,一个触发点,一个目的地。

让 AI 帮你写代码,也让 AI 帮你记教训。


我的工具链:Claude Code + Codex + Gemini CLI + CortexOS 知识系统