Skip to content
Aperture
Go back

给仓库装上记忆:当人不再拥有全部上下文

Edit page

最近看到两篇有趣的文章。一篇是 OpenAI 的 Harness engineering,另一篇是 yage 的 Context Infrastructure。它们都讲了同一件事:agentic 任务现在主要的阻塞已经回到 context engineering。最新的旗舰模型已经拥有足够的智能,但缺乏足够高质量的 context 来指导 agentic 任务。

这一周折腾 AI coding,我越来越觉得,真正难的地方可能不是“让模型会写代码”,而是“让它下次别像失忆了一样让我再重说一遍”。

我想要的效果其实很朴素:让 Agent 替我编程,而不是只是完成编程。在软件工程里,这可以近似等价于另一个问题:记录一个项目是怎么一步步变成今天这样的。你以为 git commit history 能表达这件事吗?完全不够。commit 历史充其量告诉你“现状”,但丢失了除此之外的一切隐性 knowledge:它为什么会这样长、踩过什么坑、“经验之谈”,技术和现实 trade-off,风险点和技术债、代码风格偏好。如果这些东西能被结构化地存储下来,未来 Agent 在接手新功能、重构、排查问题时,就不必从我那点可怜的口头交代里玩密室逃脱,然后还要被我一次次地纠正”你在干什么.jpg”。

我累,AI 也贵。

因此我想尝试给仓库装上结构化的记忆,而不是堆叠 AGENTS.md

我最初想解决的,其实不是文档问题

表面上看,这像是又造一遍文档轮子。可真往下走,会发现将大量文档暴露给 Agent,其实是一件挺复杂的事情。

很多时候,代码仓库里其实并不缺信息。缺的是理由。代码写在那儿,测试也写在那儿,目录结构也一目了然,但为什么是这个边界、为什么用了这个权衡、为什么上次试图那样改却放弃了,这些往往不在代码里。它们散落在聊天记录、PR 讨论、脑内记忆、外部系统文档里。而以上所有信息基本都是碎片化的,哪怕局部有序,对于一个项目整体而言,也不是 organized、可直接复用的结论信息。

我的目标:

  1. 让项目上下文存活在仓库里,而不是某个工具的私有脑袋里。上下文整体对于工作有指导属性
  2. 可移植于各种工具:Codex、Claude Code
  3. 不论新老项目都能应用同一套记忆管理框架
  4. 构建反馈,自动化运行,让 Agent 自己去构建、更新、优化这些文档

因此合适的载体是一个叫 doc-flow 的 skill。同时,反馈循环非常重要,因为始终构建数据飞轮是我们学到的 bitter lesson。我最终的期望是这套系统只靠自己就能转起来,不需要人来干预,人可以降格为操作员。

另外,这背后还有一个技术前提:使用的模型经过 Agentic RL,具备主动、渐进式检索的能力。

doc-flow 的关键决策,不在于“多做”,而在于“少做”

一开始很容易把这件事想成一个大而全的“自动文档系统”。但后来我越来越觉得,真正重要的设计决策,恰恰都是那些克制的部分。

首先,doc-flow 不是拿来替代代码的,也不是拿来把所有工作痕迹都永久保存的。它只保留两层:

这两层一开始看起来简陋,后来反而越来越像一个必要的约束。因为如果没有这个分层,事情会迅速走向另一个极端:什么都记,于是什么都不好用。把所有中间思路都直接写进 durable docs,最后得到的不是“项目记忆”,而是我家的储藏室:什么都有,什么都找不到。

其次,我一开始以为 bootstrap 就足够了。后来才发现,fresh repo 和 existing repo 根本不是一回事。一个空仓库可以放心搭脚手架,一个已有历史的大仓库,最怕的是互相冲突的文档。所以后来我把模式收敛成四个:bootstrap | adopt | work | distill

这四个词实际上是在回答四个不同的问题:

再往后,还有一个很微妙但很关键的决策:AGENTS.md 到底要写多少。

最早我的直觉是,既然想自动化,就往 AGENTS.md 里多塞一点规则,让 Agent 每次进来都知道要做什么,但这样的话我还写什么 skill?而且这种系统级 instruction 一旦写得啰嗦,很快就会变成另一种形式的污染,还占上下文。最后秉持极简的做法,只留一个 pointer:告诉 Agent 去看 docs/index.yaml,去用 doc-flow。至于具体怎么 work、什么时候 distill,应该放在 skill 里详细说明。

遇到 Trellis 之后,我才意识到我们其实在讨论同一个问题

后来我在网上发现了另一个类似的项目 Trellis

第一眼看过去,它确实和 doc-flow 很像:也会在 AGENTS.md 里注入路由说明,也强调 repo-local context,也在试图把 Agent 的工作过程从“即兴发挥”变成“有反馈的流程”。但再往里看,差别就越来越明显了。

Trellis 的 AGENTS.md 同样很短,真正的控制平面在 .trellis/ 里面:有 spec、有 tasks、有 workspace journal、有 workflow,还有给不同工具生成的 commands、skills、hooks。以 Claude 为例,它不仅生成了一堆 /trellis:* 命令,还在 session start 的 hook 里主动注入 workflow、spec index、当前任务状态和 start 指令。比起我在 instruction 里“要求” Agent 去执行 skill,通过 hook 在固定阶段执行显然确定性更高。在自动化和具体工具适配上,这个项目做的肯定比我一个下午 vibe coding 出来的 skill 要好 :)

我一开始看到 .claude/commands/trellis 那十几个命令文件,下意识地以为这套系统已经开始向繁文缛节滑坡了:上下文里塞这么多东西,有必要吗?后来仔细看了实现,我才发现情况没那么简单。那十几个命令并不是每次都全部塞进上下文里。真正的高频注入,主要来自 session-start hook;命令文件多是按需调用的。

这点很重要。它说明 Trellis 不是单纯地“多写点文档、多加点命令”,而是给 agentic workflow 增加控制论意义上的反馈回路。

不过目前为止我没有发现什么 benchmark 能证明“注入更多指令、拆出更多命令”,模型效果一定更好。能支持它的主要还是更广义的 harness 经验。OpenAI 的 Harness engineering 和 Anthropic 的 Effective Harnesses for Long-Running Agents 都在强调外部脚手架、任务状态和 repo-local context 的价值;但另一方面,像 Lost in the Middle 这类长上下文研究也在提醒我们,更多上下文不等于更有效的上下文。上下文窗口不是无限垃圾桶,这点和人脑其实没什么本质区别。

doc-flow 和 Trellis 其实在处理同一个母问题:上下文管理。只是它们选择了不同的控制强度。

doc-flow 更像 memory substrate。它关心的是:

Trellis 更像 workflow controller。它不仅关心记忆,还关心:

同样是在“让 Agent 不再像失忆一样工作”,Trellis 的方法是提高控制力,doc-flow 的方法是保留灵活性。

这时候我脑子里反而冒出了一个很老派的词:控制论。

自动化从来都不是“加更多按钮”这么简单。按钮太少,系统干预不了;按钮太多,系统干预不动。零干预当然自由,但自由的另一面往往是失控;全流程严防死守也很可靠,但代价可能是复杂度陡增,最后人开始伺候流程。

从这个角度看,Trellis 的复杂度并不完全是“过度设计”。如果你的目标真的是做一个跨工具、长周期、多任务、多 Agent 的开发 harness,那么它需要 hooks、需要 commands、需要 update/migration engine,甚至需要一套专门处理模板升级和用户修改冲突的机制。这些东西不是装饰,它们是在替这个系统支付“自动化税”。

但这不意味着每个想做上下文管理的人,都应该照着抄一遍。至少对我来说,Trellis 最大的价值不是让我决定把 doc-flow 也扩展成一个 13 命令、全平台 hook、带迁移引擎的系统。恰恰相反,它帮助我更清楚地看见了自己的边界:我现在更想要的是一个轻量闭环,而不是一个 workflow OS。

这个“轻量闭环”是什么意思呢?大概是:

说白了,我不想让 Agent 每次进仓库都先读一遍四书五经。毕竟我们做这些,只是为了让它更像一个能持续记住上下文的工作伙伴。

最后一点感想

这次折腾下来,我对“文档”这个词反而有了点新的理解。

过去说到文档,总容易想到 README、PRD、方案设计、接口说明,是一种静态说明书或者汇报材料。但在 agentic 这个语境里,文档更像一种工作记忆的组织方式,是给未来的协作者——无论那是人还是 Agent——留下一条可追踪的认知路径。

这也是 doc-flow 和 Trellis 的价值。它们表面上一个轻,一个重;一个像 skill,一个像 framework。但本质上,它们都在试图回答同一个问题:当 Agent 开始替我们写代码时,仓库本身要怎样才能拥有记忆?

从这个角度看,真正的问题就不再是“要不要写文档”,而是:

  1. 哪些东西是这个项目长期、稳定的信息、原则、标准?
  2. 哪些东西只是短期任务的进度追溯?
  3. 系统应该在多大程度上自动帮我维护这种分界?

这三件事构成的上下文应该足以让一个项目不断自举迭代了,人的输入因而无足轻重。那么,更深一步地提问:**假如人不再拥有全部的上下文,是否还拥有跟 AI 协作的基础条件?**我们现在主要的构建仍然围绕在如何为 AI 提供更完整的上下文。假如某一天这个问题被完全克服了,届时是否不再需要人去审核、输入增量信息、同意(consent)了?人还能做什么?还需要人吗?那时的人会去做什么?

我也没有答案。

至少眼前,我希望 Agent 有办法获取我每天工作项目里的隐性上下文,这样就不必每次都给 AI 交代这个项目的去年病史了 ;)


Edit page
Share this post on:

Next Post
AI折腾记:还是让AI当人吧