# 从 DigestDesk 复盘:不同规模的 AI 项目,文档应该怎么设计?
从 DigestDesk 复盘:不同规模的 AI 项目,文档应该怎么设计?
副标题
从 AGENTS.md、OpenAI Codex、Amp、Claude Code、GitBook 和 Mastra 的 AI-native 文档建议出发,解释为什么 DigestDesk 没有继续保留 600 行的大型架构文档,而是选择了 AGENTS.md + context.md + history.md 的轻量协作模型。
正文
AI coding agent 参与开发之后,项目文档的目标变了。
过去,文档主要是给人看的:README 介绍项目,architecture 解释系统设计,operations 说明部署,history 记录背景。但 AI agent 需要的不是完整叙事,而是能够立刻指导行动的上下文:
- 这个项目怎么运行?
- 哪些命令可以用?
- 哪些链路不能破坏?
- 最近改了什么?
- 今天要验证什么?
- 如果我正在改某个子系统,需要读哪份更具体的规则?
这次 DigestDesk 的复盘,就是围绕这个问题展开的。
我们最初有一份 631 行的 docs/architecture.md。它内容完整,但对 Agent 来说并不高效。它更像“给人读的系统说明书”,而不是“给 AI 执行任务用的操作上下文”。最终,我们把它压缩成 150 行的 docs/context.md,并保留 AGENTS.md 和 docs/history.md 作为 AI 协作的核心入口。
这个决定不是简单删文档,而是把文档从“解释型”改成“可执行型”。
AI-native 官方建议:不同规模项目应该怎么做?
1. 小项目:一个 AGENTS.md 就够了
AGENTS.md 官方站点把它定义为:
README for agents.
也就是说,README.md 给人看,AGENTS.md 给 AI agent 看。
对于小项目,最简单的结构通常是:
1 | README.md |
AGENTS.md 里放:
- 项目概览;
- 安装命令;
- build/test/lint 命令;
- 代码风格;
- 安全注意事项;
- 常见坑。
这种模式适合单服务、单语言、规则较少、没有复杂调度或多租户边界的项目。小项目不需要很多 rules,也不需要长篇 context.md,因为 Agent 读一个短 AGENTS.md 就能安全工作。
2. 中型项目:AGENTS.md 做路由,docs 存上下文
OpenAI Codex 和 Amp 都把 AGENTS.md 作为项目级指导文件。Codex 支持从项目根目录向下读取多层 AGENTS 文件;Amp 也把 AGENTS.md 用于项目结构、build/test 命令、约定和常见坑。
这类工具的共同方向不是“一个巨型文档”,而是:
1 | AGENTS.md |
其中:
1 | AGENTS.md |
这种模式适合有前后端、数据库、后台任务、非显性业务规则,以及多次迭代后积累了历史决策的项目。
对这类项目,AGENTS.md 不应该写得很长。它应该负责指路:如果你改 digest 链路,读 context;如果你排查部署,读 operations;如果你做非 trivial 修改,读 history 最新部分。
3. 大型项目:多层 AGENTS.md / rules / skills
当项目变大,Claude Code、Amp、OpenAI Codex 这类工具都会引导你把上下文拆开。
大型项目可能长这样:
1 | AGENTS.md |
这种模式适合 monorepo、多语言、多团队、多服务,或者不同目录有不同测试命令、安全要求和发布流程的项目。
Claude Code 的 memory 文档尤其强调:常驻上下文应该保持简洁,太长会消耗上下文窗口并降低遵循率。更具体的规则应当放到 path-scoped rules 或 skills 中,按需加载。
Amp 的设计也类似:
AGENTS.md放持久、通用的项目规则;- skills 放任务型指导;
- MCP 提供外部工具能力;
- 插件处理事件驱动扩展。
也就是说,大型项目不是把一个文件越写越长,而是把规则拆成“常读”和“按需读”。
4. AI-native 产品 / 企业级项目:docs + skill + MCP + memory
GitBook 和 Mastra 的博客更接近 AI-native 产品文档设计。
GitBook 对 skill.md 的建议是:不要只描述功能,而要描述能力、流程、约束和执行顺序。也就是说,给 Agent 的文档应该写 workflow,而不是 feature。
Mastra 的建议也类似:文档要结构清晰、可被 LLM 访问、内容自包含、减少歧义;然后用 skills 告诉 Agent 推荐路径、常见坑和应该优先使用的 API。
企业级或 AI-native 产品最终可能变成:
1 | AGENTS.md / CLAUDE.md |
这时文档已经不只是 Markdown 文件,而是完整的 Agent 操作系统。
但 DigestDesk 还没有到这个阶段。
为什么 DigestDesk 不用大型项目那套?
DigestDesk 不是小项目,但也不是大型 monorepo。
它的实际复杂度在中间:
1 | React/Vite frontend |
1. 服务数量不多,但核心链路不能破坏
DigestDesk 主要是:
1 | Web + Scheduler + Postgres |
没有几十个服务,也没有多语言 monorepo。所以现在不需要:
1 | server/AGENTS.md |
但它有一个很重要的系统不变量:
用户手动、系统触发、定时触发的 digest 生成,都必须走
executeDailyDigestJob。
如果 Agent 绕过这个入口,直接在 route 里调用 generateDaily,就会破坏 feed sync、pre-summary、digest assembly、AI 成本控制,以及 scheduled/manual 的一致性。
所以它需要 context.md,但不需要很多 path-specific rules。
2. 文档主要是给 Agent 接力用的
这个项目的文档不是为了写给人慢慢读,而是为了让 Agent 接手时快速恢复上下文。
所以我们没有保留传统大而全的 architecture.md。传统架构文档会写产品规则、数据库字段、API 细节、ER 图、流程图和后续演进方向。这些对人类理解有帮助,但 Agent 每次进入项目时不一定需要完整读完。
对 DigestDesk 来说,更有效的是:
1 | docs/context.md |
也就是说,我们把“完整叙事”替换成了“执行上下文”。
3. history 对这个项目比 operations 更重要
DigestDesk 刚经历过成本和重复触发问题,例如:
- 42 篇文章却出现 520 次模型请求;
- RSS 优先,Jina fallback;
- 日报前预摘要;
- 去全局串行锁;
- digest_jobs 并发执行;
- summary cache miss 验证;
- scheduled/manual 触发统一。
这些不是普通文档信息,而是项目记忆。
如果 Agent 不知道这些历史,它很可能会重复排查已经排查过的问题,推翻刚做过的决策,或者重新引入重复 AI 调用。
所以 DigestDesk 必须保留 docs/history.md。
4. operations 有用,但不是核心入口
DigestDesk 确实有 docs/operations.md,但它不应该每次都读。因为部署信息只有在这些场景下重要:
- Zeabur 部署;
- scheduler 没启动;
- env 缺失;
- digest_jobs 没被消费;
- 生产日志异常。
所以我们把它保留为按需文档,而不是塞进 AGENTS.md。
这也是和传统文档体系的区别:不是所有重要文档都应该每次加载。重要但低频的信息应该按需加载。
最终选择:DigestDesk 采用中型 AI 项目模型
DigestDesk 最适合的不是小项目模型,也不是大型 monorepo 模型,而是中型 AI 项目模型:
1 | AGENTS.md |
它们的职责是:
1 | AGENTS.md |
可以画成这样:
1 | AGENTS.md |
为什么不继续拆更多文件?
因为现在拆更多会过度设计。
当前不需要:
1 | server/AGENTS.md |
原因是:
- 项目规模还没到 monorepo 级别;
- 不同目录的开发规则差异不大;
- 当前最重要的问题是 digest 链路一致性,不是多团队并行规范;
- 太多规则文件会增加维护成本;
- Agent 反而可能不知道该读哪个。
等到未来出现这些情况,再拆:
- frontend 和 backend 有明显不同规范;
- scheduler 变成独立复杂子系统;
- 测试命令按目录不同;
- 多人/多 Agent 同时开发;
- 重复任务稳定下来,可以封装成 skill;
- 部署排障频繁发生,需要专门 deploy skill。
我们学到的核心原则
这次复盘学到的不是“要有多少文档”,而是:
文档结构要跟项目规模匹配。
小项目:
1 | README.md |
中型 AI 项目:
1 | README.md |
大型 monorepo:
1 | AGENTS.md |
AI-native / 企业级:
1 | 组织级规则 |
DigestDesk 当前属于中型 AI 项目,所以选择中型模型。
结论
DigestDesk 没有采用大型项目常见的多层 rules、多个 AGENTS.md、专用 agents 或 skills,不是因为那些方案不好,而是因为当前项目还不需要。
我们采用的是一个更符合当前规模的模型:
1 | AGENTS.md + context.md + history.md + operations.md + README.md |
这个设计的重点是:
AGENTS.md保持短,作为 Agent 必读协议;context.md保留系统不变量,替代长篇 architecture;history.md记录最近修改和待验证事项,解决 AI 接力问题;operations.md按需处理部署排障;- README 保持人类入口。
最终目标不是“文档完整”,而是让 AI 每次接手项目时能更快、更稳、更少犯重复错误。