很多团队接入Codex之后,会遇到一个看起来很矛盾的问题:
团队明明已经写了大量文档,为什么Agent还是不了解项目?
架构方案在在线文档里,接口约定在聊天记录里,部署步骤由运维保存在个人笔记中,某个历史兼容逻辑只有两名老开发者知道。
人类开发者遇到问题时,可以在群里提问、翻找会议记录,或者直接询问熟悉项目的同事。Agent执行任务时,却未必能够访问这些信息。
在Agent看来,无法在当前工作环境中发现、读取和验证的知识,几乎等于不存在。
所以Agent时代的知识管理目标,不再只是“让团队有文档”,而是:
让代码、规则、架构、决策、运行手册和验证方法,共同存在于一个可搜索、可版本控制、可校验的仓库知识系统中。
这套系统应该成为项目的唯一事实源。
一、文档很多,为什么仍然不等于知识可用?
团队常见的知识分布大致是:
代码:Git仓库
产品需求:在线文档
架构讨论:聊天群
接口变化:会议记录
部署步骤:个人笔记
故障经验:值班复盘
测试规则:测试人员口头传递
这些内容对人类来说可能勉强可用,因为人会主动询问、补充和判断。
Agent没有这种组织关系。
它接到任务后,首先看到的通常是:
-
当前仓库;
-
当前目录;
-任务提示词; -
能够读取的规则文件;
-
被允许访问的外部工具。
如果一项关键决策只存在于三个月前的群聊中,Agent很可能重新做出另一种设计。
如果部署流程只保存在某位开发者的笔记中,Agent就无法判断修改完成后应该怎样验证。
所以问题不是“有没有写过”,而是:
这些知识是否位于Agent可以稳定发现的路径中?
二、什么叫仓库知识的唯一事实源?
唯一事实源并不意味着所有信息只能写在一个文件里。
它真正表达的是:
对于某一类工程问题,团队必须明确哪份仓库文件拥有最终解释权。
例如:
-
系统总体边界以ARCHITECTURE.md为准;
-
支付状态流转以docs/domains/payments/state-machine.md为准;
-
公共接口契约以OpenAPI文件为准;
-
测试命令以AGENTS.md和CI配置为准;
-
当前大型重构进度以执行计划为准;
-
生产故障处理以运行手册为准;
-
数据库结构以Schema和自动生成文档为准。
如果群聊里的说法与仓库文档冲突,应该修改仓库文档,而不是继续让两个版本长期并存。
唯一事实源的价值,是减少Agent必须自行判断的信息冲突。
三、为什么不能把全部知识塞进AGENTS.md?
很多团队第一次配置Codex时,会把所有规则都写入根目录的AGENTS.md。
文件逐渐包含:
-
项目介绍;
-
架构说明;
-
编码规范;
-
测试命令;
-
接口规则;
-
发布流程;
-
安全要求;
-
历史决策;
-
常见故障;
-
所有目录说明。
最后可能变成数百行甚至上千行的项目百科全书。
这种做法有四个问题。
第一,挤占任务上下文
Agent真正执行任务时,还需要读取代码、日志、测试结果和当前需求。
一个巨大的规则文件会让大量无关内容过早进入上下文。
第二,重要性无法区分
当每条规则都被标记为重要时,Agent反而无法判断当前任务最应该关注什么。
第三,内容非常容易过期
代码已经变化,文档中的目录、命令和接口却仍然停留在旧版本。
第四,难以自动检查
一份巨型文件很难判断每一条内容由谁维护、何时验证、是否仍然有效。
因此,AGENTS.md更适合成为仓库知识地图,而不是完整百科全书。
四、AGENTS.md应该写什么?
一个实用的根目录AGENTS.md只需要回答五个问题:
这是一个什么项目?
重要目录分别负责什么?
开始任务前应该先读哪些文档?
修改后必须运行哪些检查?
哪些高风险操作必须暂停并请求确认?
示例:
# AGENTS.md
## Repository map
– `apps/web/`:Web客户端
– `services/orders/`:订单服务
– `services/payments/`:支付服务
– `packages/sdk/`:公共SDK
– `docs/`:项目知识库
## Read before working
– 架构边界:`docs/ARCHITECTURE.md`
– 产品规则:`docs/product-specs/`
– 服务说明:`docs/domains/`
– 运行手册:`docs/runbooks/`
– 大型任务计划:`docs/exec-plans/`
## Validation
– 修改TypeScript后运行:`pnpm lint && pnpm test`
– 修改接口后检查OpenAPI与SDK
– 修改数据库后运行迁移测试
## Guardrails
– 不得删除测试来通过CI
– 不得擅自新增生产依赖
– 公共接口变化必须说明兼容性
– 数据库和生产权限变化必须人工批准
它告诉Agent去哪里寻找答案,而不是试图提前回答所有问题。
五、仓库知识应该怎样分层?
推荐把知识分成六层。
第一层:入口导航
包括:
AGENTS.md
README.md
ARCHITECTURE.md
它们负责帮助Agent快速建立项目地图。
第二层:领域知识
例如:
docs/domains/orders/
docs/domains/payments/
docs/domains/users/
每个领域目录说明:
-
业务职责;
-
核心对象;
-
状态流转;
-
上下游依赖;
-
不允许破坏的规则;
-
常见验证方式。
第三层:产品与接口契约
包括:
-
产品规则;
-
OpenAPI文件;
-
数据Schema;
-
事件格式;
-
SDK类型;
-
兼容性说明。
这类内容应该尽量结构化,减少自然语言产生的歧义。
第四层:设计与决策
包括:
docs/design-docs/
docs/decisions/
记录为什么选择当前方案、放弃过哪些替代方案,以及未来什么情况下需要重新评估。
第五层:运行知识
包括:
docs/runbooks/
docs/reliability/
docs/security/
记录部署、监控、故障处理、回退和安全操作。
第六层:任务计划与技术债
包括:
docs/exec-plans/active/
docs/exec-plans/completed/
docs/tech-debt/
大型任务不能只存在于会话中,还应该把计划、进度、决策和未完成项提交到仓库。
六、怎样实现渐进式披露?
Agent不应该在每个任务开始时读取整个docs/目录。
更合理的方式是:
先读取小型入口,再根据任务逐层深入。
例如,任务是修复支付回调重复处理。
Agent首先读取:
AGENTS.md
docs/ARCHITECTURE.md
根据导航,再读取:
docs/domains/payments/index.md
docs/domains/payments/idempotency.md
docs/runbooks/payment-callback.md
如果任务不涉及前端,就没有必要加载前端设计规范。
可以在领域目录中增加index.md:
# Payments knowledge index
## Core behavior
– `state-machine.md`:支付状态流转
– `idempotency.md`:重复回调与幂等规则
– `refunds.md`:退款与撤销
## Interfaces
– `callback-contract.md`
– `events.md`
## Operations
– `../../runbooks/payment-callback.md`
– `../../reliability/payment-alerts.md`
这相当于为Agent提供一套知识路由。
七、完整案例:支付服务怎样建立知识地图?
假设支付服务经常出现三种问题:
-
Agent使用浮点数计算金额;
-
重复回调导致订单重复更新;
-
日志中输出了不应该出现的敏感字段。
如果只在提示词里反复提醒,每次新会话都需要重新说明。
更可靠的目录可以这样设计:
services/payments/
├── AGENTS.md
├── src/
├── tests/
└── docs/
├── index.md
├── money.md
├── idempotency.md
├── state-machine.md
└── security.md
支付目录的AGENTS.md只保留高优先级规则:
# Payment service rules
开始修改前,先阅读`docs/index.md`。
– 金额使用整数最小单位,禁止浮点运算。
– 回调处理必须保持幂等。
– 终态订单不得退回处理中状态。
– 禁止在日志中输出完整Token或支付凭证。
– 修改状态流转后运行`make test-payments`。
更详细的原因、示例和边界场景则放在对应文档。
例如idempotency.md记录:
-
幂等键来自哪里;
-
重复回调怎样识别;
-
哪些数据库操作必须位于同一事务;
-
当前失败重试策略;
-
典型测试数据;
-
已知例外情况。
当Codex进入支付目录工作时,能够先获得关键边界,再按需读取详细知识。
八、知识必须和代码一起版本化
将文档放进仓库的价值,不只是方便Agent读取。
它还意味着知识可以参与正常的软件工程流程:
-
修改可以进入Pull Request;
-
Reviewer可以检查文档与代码是否一致;
-
Git历史能够解释规则为何变化;
-
分支可以保留不同版本的知识;
-
回退代码时可以同时回退对应说明;
-
发布标签可以对应当时真实的架构和接口。
例如一次接口字段变更,PR中应该同时包含:
后端实现
OpenAPI定义
SDK类型
兼容性说明
迁移步骤
相关测试
如果代码已经变化,而知识文件没有变化,PR就不应该被视为完整交付。
九、怎样防止仓库知识过期?
知识库最大的风险不是缺少内容,而是内容看起来权威,实际已经失效。
因此,每份重要文档最好增加元数据:
—
owner: payments-team
status: verified
last_verified: 2026-08-05
source_of_truth:
– services/payments/src/state-machine.ts
– services/payments/tests/state-machine.test.ts
—
可以定义三种状态:
-
verified:已与当前代码核对;
-
needs-review:可能过期,使用前需要确认;
-
historical:只用于解释历史,不代表当前规则。
Agent读取文档时,就不会把所有文件都当成同等可信。
十、什么是Doc Gardening?
Doc Gardening可以理解为周期性的知识维护。
它不是让Agent每天重写所有文档,而是定期寻找知识与代码之间的偏差。
检查内容可以包括:
-
文档中引用的文件是否仍然存在;
-
命令能否正常执行;
-
接口字段是否与Schema一致;
-
目录索引是否缺少新文件;
-
已完成的执行计划是否仍放在active目录;
-
文档负责人是否已经失效;
-
最近代码变更是否影响架构说明;
-
是否存在互相冲突的规则。
任务输出不应该直接大规模修改,而应该先生成报告:
过期文档:
疑似冲突:
缺少索引:
代码变化但文档未更新:
建议修复PR:
经过验证后,再由Agent提交小范围文档修复。
十一、怎样用CI自动检查知识库?
不是所有知识都能自动判断真假,但很多结构性问题可以机械检查。
例如CI可以检查:
链接有效性
所有Markdown内部链接指向的文件必须存在。
索引覆盖
docs/domains/下新增文件后,必须被对应index.md引用。
Schema同步
OpenAPI、SDK类型和生成文档必须保持一致。
文档元数据
重要文档必须包含Owner、状态和最近验证时间。
执行计划状态
完成任务后,计划必须从active/移动到completed/。
规则冲突
根目录与子目录规则如果存在明显冲突,应要求人工确认。
CI负责检查可以确定的规则,Agent负责识别需要语义判断的知识漂移。
十二、哪些内容应该做成Skill?
仓库知识回答的是:
项目当前是什么样,以及有哪些长期规则。
Skill回答的是:
某一类重复工作应该怎样完成。
例如以下流程适合做成Skill:
-
新增API后的同步检查;
-
数据库迁移审查;
-
发布前检查;
-
故障复盘整理;
-
文档过期扫描;
-
Pull Request架构审查。
Skill中可以引用仓库知识:
先读取docs/ARCHITECTURE.md
再读取当前服务的docs/index.md
按照references/release-checklist.md执行
最后输出验证证据
这样可以形成稳定分工:
仓库知识保存事实;
AGENTS.md负责导航;
Skill负责复用流程;
CI负责强制检查;
Agent负责发现漂移和提交修复。
十三、团队怎样从零开始建设?
不建议一次重写全部文档。
可以先从最近最容易出现Agent错误的地方开始。
第一周:建立入口
创建:
AGENTS.md
ARCHITECTURE.md
docs/index.md
先让Agent知道项目结构和关键验证命令。
第二周:整理高风险领域
优先覆盖:
-
支付;
-
权限;
-
数据库;
-
公共接口;
-
发布与回退。
第三周:把重复反馈写入规则
整理最近的PR Review和Agent失败记录。
同一错误出现两次,就判断应该进入:
-
AGENTS.md;
-
领域文档;
-
Skill;
-
CI规则。
第四周:增加自动维护
建立文档链接检查、元数据检查和周期性Doc Gardening任务。
不要追求文档数量。
真正重要的是:
每份知识都有明确位置、负责人、验证方式和更新触发条件。
仓库知识目录模板
repository/
├── AGENTS.md
├── README.md
├── ARCHITECTURE.md
├── docs/
│ ├── index.md
│ ├── design-docs/
│ │ ├── index.md
│ │ └── core-principles.md
│ ├── decisions/
│ │ └── ADR-0001-example.md
│ ├── domains/
│ │ ├── orders/
│ │ │ ├── index.md
│ │ │ └── state-machine.md
│ │ └── payments/
│ │ ├── index.md
│ │ └── idempotency.md
│ ├── product-specs/
│ ├── runbooks/
│ ├── reliability/
│ ├── security/
│ ├── exec-plans/
│ │ ├── active/
│ │ └── completed/
│ └── generated/
└── .agents/
└── skills/
发布前检查清单
□ AGENTS.md是否保持简洁
□ 重要目录是否都有明确说明
□ 架构和领域文档是否有索引
□ 每类知识是否有唯一事实源
□ 文档是否与代码一起版本化
□ 高风险规则是否靠近对应目录
□ 重复流程是否已沉淀为Skill
□ 可以自动检查的规则是否进入CI
□ 文档是否包含Owner和验证状态
□ 是否存在周期性的知识漂移检查
□ 大型任务计划是否提交到仓库
□ 聊天中的重要决策是否已经回写
结语
Agent时代,项目知识不能只服务于熟悉系统的人。
它还必须服务于:
-
第一次进入项目的新开发者;
-
新启动的Codex会话;
-
并行工作的子Agent;
-
后台执行的自动化任务;
-
几个月后重新处理问题的团队成员。
真正可靠的仓库知识系统应该做到:
Agent能够发现;
人类能够阅读;
Git能够追踪;
CI能够检查;
负责人能够维护;
任务能够引用;
结果能够验证。
AGENTS.md不应该成为装满所有知识的巨大说明书。
它应该是一张地图,引导Agent找到真正的架构、契约、运行手册和执行计划。
当团队发现Codex总是重复提问、误解项目边界、忘记历史决策时,问题可能不是模型不够聪明,而是项目没有给Agent提供一个可靠、可发现并且持续更新的事实系统。
Agent能力越强,仓库知识越重要。
因为模型决定Agent能推理多深,仓库知识决定它从什么事实开始推理。




