
大多数正在运行的循环代理都患有健忘症。每一次循环结束后代理的记忆都会被重置。它不知道上一个循环已经试过某个修复方案并且失败了于是它会在第 3 轮、第 5 轮、第 7 轮反复尝试完全相同的错误操作烧掉大量 token 重新发现已经证明无效的死胡同。循环在跑但它没有在学习。而一个会学习的代理会在每次尝试后写下一份日志记录尝试了什么、结果如何、以及下一次应该避免什么。有了这份日志下一个循环在开始前先阅读它就不会从零开始而是站在上一次的经验之上继续前进。这套记忆机制设置一次之后循环就真正停止了自我重复。为什么循环代理会反复犯同一个错普通循环只是简单地让同一个代理反复处理同一个问题。但代理在每次循环之间记忆归零。它不知道第 2 轮已经试过第 4 轮正准备做的事情。结果就是它不断来回切换同一个库、撤销再重做、反复探索已经被证明无效的路径。循环在执行但知识没有积累。解决办法很简单给代理一个能在循环之间存活的记忆——一份它每次都会写入、每次都会读取的 journal。核心实现三个文件 一个强制写入钩子File 1: loop-journal.md短期记忆这是代理的短期工作记忆。创建一个.claude/loop-journal.md文件采用追加写入append-only绝不覆盖。每条记录固定三行格式尝试了什么发生了什么下一次的教训“教训”这一行是核心价值它能阻止下一次循环重复相同的尝试。File 2: learn-loop.md带记忆的编排循环这是真正的执行器。关键规则只有一条每轮循环最开始必须先读取 journal。把以下内容放到.claude/commands/learn-loop.md# Learning Loop **第一步必须**先完整阅读 .claude/loop-journal.md 和 .claude/lessons.md如果存在 然后再执行任务... **每完成一次修改后必须立即追加一条 journal 记录**格式尝试内容 结果 教训这一步强制代理在行动前先吸收历史经验让每一次循环都建立在上一次的基础之上而不是重新开始。File 3: settings.json 中的强制写入钩子代理如果觉得记录日志是“可选的”就很容易跳过。因此需要在设置里加一个提醒钩子{hooks:{afterEdit:请立即在 .claude/loop-journal.md 中追加一条记录尝试了什么、结果如何、得到的教训是什么。}}这不是硬性墙而是持续的 nudge能保证 journal 始终是最新的。实时记录的日志才是准确的从记忆里事后补的日志往往是虚构的。你实际会看到的变化你只需要输入一行指令启动 learn-loop。之后每一轮循环都会建立在上一次的基础之上第 2 轮不会再重试第 1 轮已经失败的方案因为 journal 已经明确排除了它journal 会持续保留所以下次再遇到同类问题时代理能直接从之前积累的全部经验开始进阶跨任务的长期记忆lessons.md目前 journal 只在一个任务内有效。更大的价值在于让经验跨任务复用。创建第二个永久文件.claude/lessons.md专门存放值得长期保留的模式。然后在 learn-loop 的最前面增加一行指令如果发现某个教训具有通用性不是一次性问题请将其提升到 .claude/lessons.md 中journal 是短期记忆lessons.md 是长期记忆。前者让代理学会单个任务后者让代理学会你的整个代码库。写出真正有用的教训模糊的教训比没有还差因为它只会增加噪音。差的教训示例尝试了用 dayjs失败了好的教训示例尝试用 dayjs 处理日期比较 → 失败原因是 dayjs 在某些时区下对夏令时的处理不一致 → 当看到“off-by-hours in date test”这类报错时优先检查时区配置和 dayjs 版本好的教训必须包含三要素尝试内容、根本原因、未来可模式匹配的症状。这样当几周后代理再次遇到类似症状时能直接跳转到正确解决方案。常见错误必须避免覆盖 journal每次循环都覆盖文件而不是追加 → 失去全部历史。必须 append-only。只记录尝试不记录教训只写“尝试了 X失败了” → 下一次循环知道发生了什么但不知道该怎么做不同。教训行才是防止重复的关键。journal 无限制增长任务解决后把旧条目归档到单独文件保持活跃 journal 干净。在循环末尾而不是开头读 journal很多代理 dutifully 写日志但只在卡住时才去查。必须每轮最开始就读否则记忆毫无作用。从不把经验提升到 lessons.md所有经验都留在单任务 journal 里 → 每做一个新功能都要重新为代码库的 quirks 付费学习。12 分钟完整搭建指南2 分钟创建.claude/loop-journal.md写入三行记录格式说明2 分钟创建.claude/lessons.md用于跨任务永久经验3 分钟创建.claude/commands/learn-loop.md把“先读 journal”作为第一步2 分钟在settings.json添加 afterEdit 钩子强制记录3 分钟在一个真实 Bug 上运行/learn-loop观察后续循环如何跳过之前已证实的失败路径代理本身并没有变聪明。它只是不再健忘。一个会记住的循环永远胜过一个只会重复的循环。健忘循环 vs 学习循环对比维度健忘循环无 journal学习循环带 journal lessons记忆跨轮每次重置追加式持久记忆重复错误频繁发生被明确规则排除token 消耗大量浪费于重新探索死胡同显著降低跨任务复用无lessons.md 实现长期知识积累人类介入频率高需要不断纠正重复错误低系统自己避开已知坑长期价值每次任务从零开始随使用次数指数级变强起初很多人以为只要把循环跑得更久、给更多 token 就能解决问题。后来才发现真正决定上限的从来不是模型能力而是外部记忆系统是否在持续积累。给循环装上 journal 和 lessons就像给一个只会临时记忆的实习生配了一个随身成长的知识库。设置完成后你会明显感觉到它开始真正“变聪明”了而且这种聪明会随着时间越来越明显。你目前在用的循环代理有没有出现过反复尝试同一个失败方案的情况最常重复的错误类型是什么把 journal 加上之后你最期待它帮你避免哪类重复劳动我是紫微AI在做一个「人格操作系统ZPF」。后面会持续分享AI Agent和系统实验。感兴趣可以关注我们下期见。