AI Coding · Repository Guidance

AGENTS.md 技术教程:
用渐进式披露设计 AI 开发规则

不是给智能体堆更多命令,而是给它恰好足以开始工作的上下文,并让它能在任务需要时找到下一层可靠说明。

AGENTS.mdAI 编程智能体上下文工程Monorepo文档架构

基于 AI Hero 的《A Complete Guide To AGENTS.md》提炼、重组与中文实践化改写。

01

AGENTS.md:项目与智能体之间的配置层

AGENTS.md 是随 Git 提交的 Markdown 指南文件,用来补足“通用模型知识”与“这个仓库的真实工作方式”之间的空白。它不应替代代码、测试或 README;它的职责是让智能体在首次进入仓库时少走弯路。

个人范围

你偏好的协作方式

例如提交信息风格、是否先写测试、偏好的抽象尺度。这类规则应简短且确实会影响实现决策。

项目范围

仓库特有的事实

例如项目目标、实际使用的包管理器、非标准的构建或类型检查入口,以及不可违背的架构约束。

一句话原则:根目录文件只承担“启动导航”;细节规则应当按任务、语言和目录被按需发现。
智能体的基础能力与系统规则
└─ 仓库根目录:AGENTS.md(最低必要上下文)
└─ 当前目录:局部 AGENTS.md(范围内的补充约束)
└─ docs/:语言、测试、接口等专项说明
└─ skills/:可调用的特定流程
└─ 代码、测试与配置:最终事实来源
02

为什么不能把它写成“规则百科”

一个常见循环是:智能体做错一次,团队就往根文件追加一条“永远不要……”;几个月后,规则数量失控、表述相互冲突,并且没人再能判断哪些仍然有效。

三个会直接伤害执行质量的机制

01 · 指令预算被稀释

根文件通常会在每个请求中载入。与当前任务无关的规则仍占用注意力,真正关键的约束反而更难被稳定遵循。

02 · 规则冲突没有裁决

不同作者陆续加入偏好后,智能体会面对相互矛盾的“必须”。它未必知道哪一条更新、哪一条优先。

03 · 过期文档污染上下文

硬编码路径、旧工具链和已迁移的模块会让智能体自信地朝错误方向搜索;这比没有提示更危险。

把“路径说明”换成“能力说明”

不稳的写法更耐变化的写法原因
认证逻辑在 src/auth/handlers.ts认证领域由服务端模块负责;先检索 auth、session 与相关测试。重命名或迁移后仍可成立。
组件必须在某固定目录创建UI 组件按领域放置,并沿用相邻组件的导出与测试模式。传达模式,而不是脆弱坐标。
“写干净代码”新增公共 API 时补齐单元测试;修改接口时运行类型检查。可验证、可执行。
03

用渐进式披露组织知识

渐进式披露的关键不是隐藏信息,而是将信息放到最适合被加载的时机。根文件给方向,专项文档给约定,局部文件给范围;智能体通过链接和目录逐层进入。

这条信息是否影响几乎每个任务?项目一句话目标、包管理器、非标准命令属于这一类。
→
是:放入根 AGENTS.md保持精炼,优先描述不易过期的事实。
→
否:放进专项或局部文档用一条自然的链接提示智能体按需读取。

一个可发现的资料树

AGENTS.md                 # 项目入口与全局工作方式
docs/
├── TYPESCRIPT.md         # 仅在修改 TS 时需要
├── TESTING.md            # 测试策略、运行器差异与样例
├── API_CONVENTIONS.md    # 接口语义、错误模型、版本策略
└── BUILD.md              # 非标准构建与发布流程
packages/
└── api/
    └── AGENTS.md         # 只对 api 包生效的补充约束
skills/
└── release/SKILL.md      # 仅在发布任务中调用的工作流

链接应该像路标,而不是命令堆叠:关于 TypeScript 约定,参见 docs/TYPESCRIPT.md。 足够让智能体在需要时继续探索。

04

从最小根文件开始实现

先写一个能够服务于所有任务的版本,再把“仅某类任务需要”的条目移出。对多数仓库,根文件只需覆盖以下三类内容。

保留在根文件判断标准示例
一句话项目说明帮助智能体理解所有决策的目标函数“这是一个面向无障碍数据可视化的 React 组件库。”
包管理器非默认工具会改变每次安装、执行与工作区命令“本项目使用 pnpm workspaces。”
非标准校验命令智能体无法从常规脚本名可靠推断pnpm verify 会同时执行类型检查与契约测试。
# AGENTS.md

这是一个面向无障碍数据可视化的 React 组件库。

使用 pnpm workspaces 管理依赖;不要用 npm 改写 lockfile。
提交前运行 `pnpm verify`。它包含类型检查与契约测试。

修改 TypeScript 时,参见 [docs/TYPESCRIPT.md](docs/TYPESCRIPT.md)。
新增或修改组件时,参见 [docs/TESTING.md](docs/TESTING.md)。
注意:“最小”不等于“空”。凡是会导致智能体系统性使用错误命令、误解产品目标,或遗漏全局校验的事实,仍应留在入口处。

把语言规则移到专题文件

例如 const、类型声明风格、空值策略、lint 例外等,只有在改动对应语言时才有价值。将它们放在 docs/TYPESCRIPT.md,可以让 CSS 排障或依赖升级任务免受干扰。

05

Monorepo:按目录增加,而不是复制规则

在多包仓库中,可在子目录放置额外的 AGENTS.md。智能体进入某个包时,根级指导与该目录的局部指导一起构成上下文。因此每层只描述自己作用域内新增的事实。

根目录

全局导航

说明仓库由哪些类型的包组成、通用包管理规则,以及“请查看包内 AGENTS.md”。不要写 API 或 CLI 的内部细节。

packages/api/

服务端局部约束

说明 API 的领域、数据库/框架选择、接口规范入口和本包特有的验证命令。它不需要复述根级规则。

# packages/api/AGENTS.md

本包是基于 Node.js 的 GraphQL API,并使用 Prisma 访问数据。
设计或修改接口时,参见 [../../docs/API_CONVENTIONS.md](../../docs/API_CONVENTIONS.md)。
本包的集成测试使用:pnpm --filter @acme/api test:integration
合并语义带来的约束:局部文件不是“另一个根文件”。如果它重述全局规则,维护者很容易在两个地方更新出不同版本。
06

重构一个膨胀的 AGENTS.md

不要直接删减。先将现有条目归类、处理冲突、再迁移。尤其是有歧义的规则,应交由项目负责人裁决,而不是让智能体替团队猜测偏好。

推荐的六步迁移法

  1. 收集每条规则,并标记它覆盖的任务类型与目录范围。
  2. 找出冲突、重复或过时条目;对冲突规则建立待确认清单。
  3. 抽取真正的根级最小集:项目目标、工具链关键事实、全局校验。
  4. 把其余规则按语言、测试、API、Git 工作流等主题迁至独立文档。
  5. 在根文件和局部文件中留下简洁链接,并检查链接是否可达。
  6. 用真实任务试跑:让智能体改 TS、改样式、改 API,确认它只读取相关说明。

可交给编码智能体的重构提示词

请将本仓库的 AGENTS.md 重构为“渐进式披露”结构。

1. 列出互相矛盾、重复、含糊或疑似过期的规则;冲突项先向我提问,不要自行选择。
2. 只保留所有任务都需要的根级信息:项目一句话说明、非默认包管理器、非标准构建/类型检查命令,以及真正全局的约束。
3. 将其余内容按主题拆到 docs/ 下,并为每个文件给出清晰标题与适用场景。
4. 生成最小的根 AGENTS.md、各专题文件和建议目录树;根文件仅保留到专题文件的链接。
5. 标记建议删除的内容,并说明原因:模型已知、不可执行、重复或时效性风险过高。
6. 最后校验所有 Markdown 链接和文档内命令是否存在。
07

发布前:用这张清单防止再次失控

  • 根 AGENTS.md 能在不到一分钟内读完,且每一条都对大多数任务有用。
  • 没有把文件路径当作永恒事实;使用了领域词、搜索提示或相邻代码模式。
  • 所有“必须 / 永远不要”都具备明确对象、适用范围和可验证结果。
  • 语言、测试、接口和发布规则各有可发现的专题入口。
  • 子目录只添加局部增量,不复制上级说明。
  • 重要说明链接到真正的事实来源:配置、测试、脚本或权威文档。
  • 团队知道规则的负责人,并在工具链或架构迁移时同步审查。
最终判断:一份优秀的 AGENTS.md 让智能体“知道从哪里开始、何时深入、以什么方式验证”。它是索引与边界,不是把整个团队知识库塞进上下文。
← 返回内容索引